Plugin

Uit Nodo Wiki
Ga naar: navigatie, zoeken

Wat is een plugin

Een plugin is een extra stuk code dat kan worden toegevoegd aan de Nodo software om deze extra funktionaliteit te geven.

Het begrip "plugin" is ingevoerd met Nodo release 3.6, en kwam voort uit de behoefte om meer apparaten en protocollen te ondersteunen binnen de Nodo. Vroeger deden we dit door alle code gewoon in te bouwen, maar dit resulteerde al snel in een zeer snel groeiende programma grootte. In de Small was dit al heel snel een probleem, en ook in de Mega liepen we met gemak naar de grenzen van het systeem.

De oplossing werd gevonden in het isoleren van de programmacode voor ondersteuning van apparaten (sensoren, weerstations, enz.) en protocollen (KAKU, HomeEasy, ...). De gebruiker geeft zelf bij het compileren van de Nodo code aan welke plugins hij wil gaan gebruiken. Zo wordt de programmacode niet nodeloos groot.

Waarom we uiteindelijk hebben gekozen voor deze oplossing? Als belangrijkste reden om de mogelijkheden te vergroten en keuzevrijheid voor de gebruiker, zowel voor de beginnende Nodo-ist die 1 of misschien 2 Nodo's bezit, maar ook voor de meer geavanceerde gebruiker met 10 of 15 Nodo's, verspreid over productie inzet en test doeleinden. Daarnaast denken we met deze opzet toekomstvaster te zijn: nieuwe plugins kunnen moeiteloos worden ingepast zonder dat wijzigingen in de basis Nodo code nodig is.

Welke plugins zijn er

We zijn veel soorten plugins die kunnen worden gebruikt om sensoren uit te lezen of apparaten aan te sturen. Onderstaand een overzicht:

# functie
1 Klik-Aan-Klik-Uit
2 Klik-Aan-Klik-Uit (nieuwe versie met automatische codering)
3 <vervallen>
4 <vervallen>
5 Dallas DS18B20 sensor
6 DHT-11 / DHT-22 temperatuur en luchtvochtigheids sensor
7 Ontvangst van UserEvents van oude 32-bit Nodo's
8 Ontvangst Alecto weerstation buitensensoren met protocol V1
9 Ontvangst Alecto weerstation buitensensoren met protocol V2
10 Ontvangst Alecto weerstation buitensensoren met protocol V3
11 Gereserveerd (OpenTherm)
12 Ontvangst van Oregon buitensensoren
13 Ontvangst van Flamingo FA20RF rookmelder
14 Aansturen van Flamingo FA20RF rookmelder
15 Ontvangst HomeEasy EU zenders (HE300EU serie)
16 Aansturing van Home Easy EU ontvangers (HE300EU serie)
17 Testen Nodo hardware (Alleen voor ontwikkelaars)
18 Ontvangen en analyseren van RF of IR signaal
19 Verwerking van ID-12 RFID Tag Readers
20 Uitlezen van BMP085 of BMP180 Luchtdruk sensor
21 Aansturen van een LCD I2C/TWI 1602 of 2004 display
22 Uitlezen van ultrasone afstandsmeter HC-SR04
23 LED dimmer
24 DSMR / P1 slimme meter
25 Extra outputs via IO-Expander PCF8574
26 Extra inputs via IO-Expander PCF8574
27 Servo aansturen
28 Meerdere Pulsen tellen
29 Uitlezen van extra Analoge ingangen via ADC Expander PCF8591
30 Verwerking van Wiegand-26 RFID Tag Readers
31 Syslog client
32 RFScanner
33 NRF24L01 Transceiver t.b.v. Nodo Sensor netwerk (beta)
34 Ontvangst van Cresta weerstation buitensensoren
35 Netwerk Ping check (ICMP ping))
36 PID-Regelaar
250 Bestemd voor gebruik door eindgebruiker
251 Bestemd voor gebruik door eindgebruiker
252 Bestemd voor gebruik door eindgebruiker
253 Bestemd voor gebruik door eindgebruiker
254 Bestemd voor gebruik door eindgebruiker
255 Bestemd voor gebruik door eindgebruiker, voorzien van voorbeeldcode!

Zelf een plugin ontwikkelen

Ook is het mogelijk om zelf een plugin te maken. Mocht je een nieuwe toepassing zien voor de Nodo of je hebt behoefte aan een mogelijkheid om je Nodo te verbinden aan een ander apparaat, schroom dan niet om contact op te nemen een Nodo teamlid. Wij streven er naar om het met de Nodo mogelijk te maken zo veel mogelijk apparaten en sensoren te koppelen. Ook is het mogelijk om zelf een plugin te ontwikkelen. We hebben een voorbeeld plugin met extra uitleg toegevoegd Plugin 255

Hoe laad ik een plugin in de Nodo

Kijk voor specifieke gegevens voor het installeren en gebruiken van de plugin altijd bij de documentatie van de plugin zelf. De instructie hieronder is bedoeld als algemene informatie. Een plugin moet eenmalig worden geladen in de Nodo. De extra code wordt mee gecompileerd met de Nodo code. We moeten hiervoor een aantal stappen doorlopen. We gaan er van uit dat je al bekend bent met het compileren en uploaden van de Nodo code in je Arduino of Nodo. Kijk eventueel eerst bij Nodo software installeren

  1. In het tabblad 'Nodo.ino' staat aangegeven welk Nodo ID je de code voor wilt compileren. Open in je map met de Nodo code het bijbehorende configuratiebestand 'Config_nn.c' met een teksteditor;
  2. De plugin moet voor een Nodo op twee manieren bekend worden gemaakt. Met de regel '#define PLUGIN_xxx" geef je aan dat de Nodo zich ergens in jou Nodo landschap bevindt, zodat als er events voorbij komen, je Nodo begrijpt dat het hier om plugin 'xxx' gaat. Op de Nodo waar de plugin daadwerkelijk zijn werk moet doen, neem je een regel op met '#define PLUGIN_xxx_CORE'.
  3. Sla het configuratiebestand op, compileer de code en upload deze naar de Nodo. Je Nodo en de plugin zijn nu gereed voor gebruik.

Heb je een centrale Nodo-Mega met meerdere Nodo-Small satelliten die verschillende sensoren hebben, dan moet je dus voor iedere Nodo-Small de '#define PLUGIN_xxx_CORE' meecompileren die hoort bij de sensor die je aan deze Nodo-Small hebt verbonden. Om alle Nodo-Small's te kunnen aansturen en uitlezen, dien je de Modo-Mega te voorzien van alle '#define PLUGIN_xxx' regels die horen bij de plugins die je gebruikt in je landschap.

Voorbeeld

We hebben de volgende configuratie:

  • Unit-1: Nodo-Mega verbonden met Ethernet aan de WebApp en waarmee we KAKU en NewKAKU ontvangers aansturen.
  • Unit-2: Nodo-Small met een Temperatuursensor;
  • Unit-3: Nodo-Small met een RGB-Led

Dan zien de config bestanden er als volgt uit:

Config_01.c

#define UNIT_NODO        1 // Na een reset wordt dit het unitnummer van de Nodo
#define CLOCK         true // true=code voor Real Time Clock mee compileren.
#define NODO_MEGA     true // true = Nodo Mega, false=Nodo-Small
#define PLUGIN_001         // Kaku: Klik-Aan-Klik-Uit
#define PLUGIN_001_CORE    // Deze Nodo stuurt de KAKU's zelf aan.  
#define PLUGIN_002         // NewKAKU: Klik-Aan-Klik-Uit ontvangst van signalen met automatische codering. Tevens bekend als Intertechno.
#define PLUGIN_002_CORE    // Deze Nodo stuurt de KAKU's zelf aan.
#define PLUGIN_005         // Temperatuursensor Dallas DS18B20. Bekend dat deze deel uit maakt van het Nodo landschap.
                           // (Geen CORE want de sensor zit niet aan DEZE nodo) 
#define PLUGIN_023         // RGBLed, RGBLedSend. Bekend dat deze deel uit maakt van het Nodo landschap.
#define PLUGIN_023_CORE    // Wel een CORE want deze Nodo moet het RGBLedSend commando gebruiken.

Config_02.c

#define UNIT_NODO        2 // Na een reset wordt dit het unitnummer van de Nodo
#define CLOCK        false // true=code voor Real Time Clock mee compileren.
#define NODO_MEGA    false // true = Nodo Mega, false=Nodo-Small
#define PLUGIN_005         // Bekend dat deze deel uit maakt van het Nodo landschap.
#define PLUGIN_005_CORE    // Temperatuursensor Dallas DS18B20. (Geen CORE want de sensor zit niet aan DEZE nodo) 


Config_03.c

#define UNIT_NODO        3 // Na een reset wordt dit het unitnummer van de Nodo
#define CLOCK        false // true=code voor Real Time Clock mee compileren.
#define NODO_MEGA    false // true = Nodo Mega, false=Nodo-Small
#define PLUGIN_023         // Bekend dat deze deel uit maakt van het Nodo landschap.
#define PLUGIN_023_CORE    // Wel een CORE want deze Nodo moet het RGBLed stuurt de RGB-Led aan.

Opmerkingen

  • Zorg er voor dat altijd de Nodo versie wordt gebruikt die staat aangegeven in de plugin code.
  • In de plugin code zelf staat ook veel documentatie over het gebruik van de plugin.
  • Sommige plugins hebben nog andere opties die met een #define opgegeven moeten/kunnen worden. Zie plugin documenetatie.
  • Met name bij een Nodo-Small op een Arduino Duemillanove kan het voorkomen dat de Plugins niet in het beschikbare geheugenruimte passen. Laadt dan geen ongebruikte plugins. Ook kan de real-time-clock worden weggelaten uit de code.