Releaseletter Nodo 3.5

Uit Nodo Wiki
Ga naar: navigatie, zoeken

Nodo releaseletter 3.5

Auteurs: Paul Tonkes en Hans Man

Datum: Mei 2013

Over deze release letter

Deze releaseletter beschrijft in grote lijnen de wijzigingen die zijn opgenomen in de nieuwe Nodo release. Het is niet de bedoeling om dit zeer gedetaiilleerd te doen, maar wel om een overzicht te bieden.

De nieuwe release

De Nodo software hebben we stevig onderhanden genomen. Veel code en functionaliteit vond nog zijn oorsprong in de allereerste versies. Dit vormde een belangrijke drempel voor verdere ontwikkeling. Onder de motorkap zijn vrijwel alle delen uit de code aangepast. Daarnaast zijn er functionele aanpassingen en uitbreidingen. Deze releaseletter geeft op hoofdlijnen een overzicht van alle aanpassingen.

Onder de motorkap

De oude Nodo versies verwerkten events in een 32-bit formaat. Ook uitwisselen van events via RF en IR vond plaats middels 32-bit signalen. Zowel de verwerking als communicatie zijn nu uitgebreid naar 96-bit. Dit biedt veel nieuwe mogelijkheden en heeft er tevens voor gezorgd dat oude code kon worden opgeruimd. Belangrijk is dat we nu niet meer vast zitten aan 96-bit. Mochten we in de toekomst uitbreiding nodig hebben, dan kan dit zonder dat alle code volledig herschreven hoeft te worden, zoals dit vroeger het geval was. Tevens zijn protocollen, zoals verzenden van KAKU signalen,niet meer verweven in de Nodo code, maar zo verbijzonderd dat op relatief eenvoudige wijze protocollen kunnen worden toegevoegd.

Functionele aanpassingen

Protocollen en devices

Devices: Alle apparaten waar de Nodo mee communiceert worden nu een ‘Device’ genoemd. Op eenvoudige wijze is het mogelijk om nieuwe devices aan de Nodo code toe te voegen. Er is theoretisch ruimte voor 32 gelijktijdig werkende devices die de gebruiker naar wens kan meecompileren in de code.

Nieuwe protocollen: Er worden nieuwe protocollen en devices ondersteund. De lijst neemt steeds toe. Voor veel voorkomende apparaten en schakelmateriaal kunnen nu eenvoudig worden bestuurd vanuit de Nodo.

Voorbeelden van default meegeleverde devices:

  • Alecto Weerstation;
  • Oregon weerstation;
  • Klik-Aan-Klik-Uit schakelmateriaal;
  • Dallas DS18B20 digitale temperatuur sensoren
  • DTH11 vochtigheidssensor;
  • Rookmelder Flamingo FA20RF;
  • HomeEasy schakelmateriaal;
  • RawSignalAnalyzer voor weergave ontvangen signalen;
  • Luchtdruksensor BMP085;
  • RFID Tag reader;
  • meer schakelmateriaal en apparaten volgen…!

Binnenkort zullen we op de Wiki speciale pagina's gaan inrichten over devices, zowel over het gebruik van bestaande devices, als het bouwen van nieuwe.

Kijk voor compatibiliteit in de Nodo-code in het tabblad “Device”. Wil je zelf een device ontwikkelen, vraag dan via de mail support aan.

Configuratie

  • Unit: Het commando [Unit] is hernoemd naar [UnitSet]. Tevens is het aantal beschikbare unitnummers uitgebreid naar 32. Veranderen van unitnummer leidt niet meer tot wissen van de eventlist.
  • Home: De Nodo’s hebben nu een home adres. Deze kan worden ingesteld met [HomeSet]. Alleen Nodo’s met hetzelde home adres kunnen events met elkaar uitwisselen. Dit is handig in geval de buren ook een Nodo hebben, maar ook als er onderscheid gemaakt moet worden tussen een test en een productie-omgeving.
  • MAC adres: Dit werd opgebouwd met onder meer het Unit nummer. Om onderscheid te maken tussen gelijke unitnummers binnen verschillende Home adressen, wordt nu ook het Home adres verwerkt in het MAC adres. Voor de router zal dit dan ook een geheel ander device zijn dan vroeger!

Dit betekent dat een static ingesteld IP adres opnieuw moet worden ingesteld in de router.

  • Booten met reset mogelijkheid: Direct na ontvangst van het [Boot] event kan binnen drie seconden tijd een reset worden ontvangen. Dit geeft de mogelijkheid om een Nodo die niet meer in staat is om los te komen van verwerking te herstellen.
  • Eventlist default leeg: Na een reset zal de eventlist géén inhoud meer bevatten. Het is aan de gebruiker zelf om zijn eigen regels te programmeren. De WebApp zorgt wel voor automatisch vullen van de eventlist met regels die voor regulier gebruik voor de meeste gebruikers volstaan.
  • Lijst online Nodo’s: Met het commando [Status Unitset] wordt een overzicht gegeven van alle Nodo’s die de nodo kent. Tevens wordt aangegeven via welke poort gecommuniceerd wordt (RF, IR, I2C);

I2C

  • I2C bus: Dit is een nieuwe voorziening waarmee Nodo’s met elkaar verbonden kunnen worden. Op deze wijze is het mogelijk om meerdere (uitgeklede) Nodo’s samenwerken om zo verwerkingscapaciteit of aansluitmogelijkheden te vergroten. I2C is bedoeld voor betrouwbare en snelle communicatie over kleine afstanden via drie draden (SDA, SLC en de massa). Er zijn goedkope chips te krijen die het mogelijk maken om I2C communicatie plaats te laten vinden over een draad tot wel 100 meter. Er kunnen tot 32 Nodo’s met elkaar worden verbonden. De i2C bus gedraagt zich als een RF of IR verbinding maar heeft geen hardware nodig. Nodo’s kunnen direct met elkaar worden verbonden zonder extra hardware.
  • SendTo over I2C: Ook het [SendTo] commando werkt via de I2C bus.

Processing en Evenlist

  • Busy on/of vervallen: Het Busy mechanisme is komen te vervallen. Dit mechanisme had als doel om nodo’s te kunnen laten samenwerken zonder dat transmissies door elkaar heen liepen. Dit mechanisme was te lastig uit te leggen voor de gebruiken en is onder de motorkap vervangen door een adresseringsmechanisme. Het is niet te voorkomen dat events gelijktijdig worden verzonden. Er staan de gebruiker diverse andere voorzieningen ter beschikking om communicatie netjes te laten verlopen.
  • Aantal vrije regels: Het aantal beschikbare regels is gewijzigd, dit als gevolg van de nieuwe 96-bit event structuur. Met het [Status EventlistCount] commando kan het aantal bezette en vrije posities worden opgevraagd.
  • Extra parameter in WildCard: Het Wildcard event heeft een derde (optionele) parameter gekregen waarmee eveneens op het unitnummer kan worden getest bij binnenkomst van een event.
  • Stoppen eventlist verwerking: Met het nieuwe commando [Stop] kan in de verwerking van de eventlist tijdens uitvoer worden gestopt. Bij verwerking in meerdere niveau’s diep worden, als dit commando wordt uitgevoerd, alle verwerking afgebroken tot op nul-niveau.

RawSignal

  • Opslaan van signalen: Het commando [RawsignalSave] is nu geen commando meer maar een setting. Default worden alle onbekende signalen opgeslagen op SDCard om later weer door de Nodo verzonden te kunnen worden.
  • Weergeven opgeslagen signalen en wissen: [RawsignalList] en [RawsignalErase] zijn twee nieuwe commando’s om de lijst met opgeslagen signalen weer te geven en te wissen.

Tijd en timers

  • [Time] events: In de oude Nodo kon in de eventlist events worden opgenomen als [ClockSun <uren>,<minuten>]. Deze zijn komen te vervallen. Hiervoor zijn de [Time] events. Met dit type event kunnen uren, minuten en da dag van de week worden opgegeven in een leesbaarder formaat. Tevens kunnen wildcards gebruikt worden middels een ‘*’ teken. Hiermee zijn zeer veel combinaties mogelijk.
  • [AlarmSet]: Dit is een nieuw commando waar alarmen instelbaar zijn. Ook deze hebben dezelfde mogelijkheden va wildcards. Instellen van alarmen is vooral handig voor gebruik als wekker die je via de WebApp kunt instellen. Een alarm die al loopt genereert een [Alarm] event die weer op de gebruikelijke wijze kan worden gebruikt in de eventlist.
  • [TimerSet] commando: De commando’s [TimerSetSec] en [TimerSetMin] zijn beide komen te vervallen. Hiervoor is [TimerSet] in de plaats gekomen waarbij de tijd wordt opgegeven in seconden. Er is geen grens meer van 255, geef je de waarde 86400 op dan loopt de timer af na één etmaal.
  • Synchroniseren klokken: Met het commando [ClockSync] is het mogelijk om de tijd van de realtime klok door te geven aan een andere Nodo. Met [ClockSync HTTP] kan de klok worden gelijk gesteld aan de internettijd.
  • Instellen van datum en tijd is veel eenvoudiger geworden, en wordt nu uitsluitend gedaan door ClockSetTime en ClockSetDate. ClockSetYear en ClockSetDOW zijn vervallen.

Variabelen

  • Bereik van variabelen: De variabelen hebben nu groter bereik (+/-4.000.000 met twee cijfers achter de komma).
  • Variabelen geen setting meer: Variabelen kunnen niet meer met het commando [SettingsSave] worden opgeslagen in het settings geheugen. Wil je een variabele default na een boot gevuld hebben met een waarde, neem hiervoor dan een regel op in de eventlist.
  • VariableSet kent geen wildcard meer als variabele nummer.

Scriptfiles

  • Verwerking stoppen bij fouten: Bij uitvoer van een scriptfile vanaf SDCard wordt nu default de verwerking afgebroken. Dit om een lange reeks aan foutmeldingen te voorkomen. Optioneel kan worden [FileExecute] een parameter worden meegegeven die er voor zorgt dat bij fouten toch wordt doorgegaan met verwerking.
  • Scriptfiles wissen: Met het commando [FileErase <bestandsnaam>] kan een script worden gewist. Wordt de bestandsnaam weggelaten dan worden alle scripts gewist!!

Pulsen

  • [Status PulseCount] en [Status PulseTime] vervallen: Hiervoor zijn de commando’s [VariablePulseCount] en [VariablePulseTime] in de plaats gekomen.
  • Geen PulseTime limiet: Het limiet van 60.000 milliseconden voor de pulslengte is komen te vervallen. Dit maakt het mogelijk om ook langere pulsen dan 60 seconden nauwkeurig te meten.

Communicatie

  • HTTP-events: Het is nu mogelijk om, als de WebApp niet word gebruikt, events via een brouwser te versturen. In tegenstelling tot de vorige release, worden de resultaten van de verwerking van het event getoond in de browser.
  • Permanent gebruik van de [SendTo]: Als aan het [SendTo] commando als tweede parameter de waarde [All] wordt meegegeven, dan blijft het commando actief totdat er een [SendTo Off] wordt gegeven. Hierdoor hoeft in scripts niet meer de [SendTo] te worden opgenomen voor iedere regel.
  • [SendTo] herkent Nodo’s: Aan de hand van binnenkomende events herkent de Nodo welke Nodo’s communiceren over welk kanaal (RF, IR, I2C). Default pakt het SendTo commando het snelste kanaal dat beschikbaar is.
  • [SendTo] Retry: Als er een communicatie fout is opgetreden tijdens uitvoer van een [SendTo] zal een nieuwe poging worden ondernomen. Ook als een Nodo niet binnen 30 seconden reageert zal de nodo waar het verzoek van afkomstig is nieuwe pogingen ondernemen.

Overige

  • Vrij RAM-geheugen weergeven: met het commando [Status FreeMem] kan het beschikbare vrije geheugen worden weergegeven. Bedoeld voor ontwikkelaars die een eigen add-on willen programmeren.
  • UserPlugins: Deze zijn komen te vervallen. Hiervoor zijn de devices in de plaats gekomen.

Break gedrag

Een wijziging die niet in de tabel hieronder staat, maar wel interessant om te weten: het gedrag van de "break" commando's is veranderd. Om dit te begrijpen, is een korte uitleg van de Eventlist processing nodig.

Aks een event optreedt, dan zal de Nodo zijn eventlist langslopen om te kijken of het event daarin voorkomt. Als dat zo is, dan zal hij de aktie uitvoeren. Maar die aktie kan heel goed een nieuwe scan van de EventList veroorzaken. Bekijk bijvoorbeeld deze eventlist regels:

UserEvent 100,1; Sound 2;
UserEvent 100,1; UserEvent 150,10;
UserEvent 100,1; Sound 3;
..
UserEvent 150,10; BreakOnVarGreater 1,0;

De eerste regel is duidelijk, er zal een geluid worden geproduceerd. Die 2e regel echter veroorzaakt een nieuw event. Nodo zal hiermee aan de slag gaan en de EventList geheel opnieuw scannen op het voorkomen van UserEvent 150,10. In dit geval zijn er dus al twee nivo's van scannen: de 1e (en hoogste), en de 2e. Dit kan heel goed een aantal nivo's dieper worden, naarmate nieuwe events worden veroorzaakt.

Stel nu dat in het 2e of nog diepere nivo een "break" optreedt. In de oude release betekende dat, dat de gehele EventList processing werd afgebroken. Dat is niet terecht, want je wilt eigenlijk alleen de huidige processing afbreken en niet de nivo's daarboven. In de nieuwe release is dat aangepast, en wordt uitsluitend het huidige nivo afgebroken; de processing gaat verder op het nivo daarboven.

In het voorbeeld hierboven is het verschil duidelijk: in de oude release klinkt slechts 1 geluid, in de huidige 2. Uiteraard mits de Break optreedt...

Toch is het soms weer wel wenselijk om de gehele processing met 1 statement te kunnen afbreken. Hiervoor is een nieuw commando gemaakt: Stop.

Wijzigen van bestaande EventList

Met deze nieuwe release zijn nogal wat commando's ene events gewijzigd of vervallen. Dat betekent dat een eventueel al bestaande eventlist programmering zal moeten worden nagelopen, en waar nodig gewijzigd.

Pm dit wat minder lastig te maken, hebben we de vervallen, gewijzigde en nieuwe commando's en events op een alfabetische volgorde in een tabel hieronder geplaats. Deze tabel kan als gids dienen om snel de te wijzigen statements te vinden.


Naam E/C/S vervallen gewijzigd nieuw opmerkingen
Alarm E X Event dat optreed als een alarm afloopt. Zie AlarmSet
AlarmSet C X Hiermee kan een alarmtijd worden ingesteld
BreakOnEarlier C X Break als tijd vroeger is dan par1
BreakOnLater C X Break als tijd later is dan par1
ClockAll E X Is vervangen door het Time event.
ClockSetDate C X Gewijzigd format DD-MM-YYYY
ClockSetDOW C X Vervallen, wordt nu automatisch berekend
ClockSetTime C X Gewijzigd format tijd hh:mm
ClockSetYear C X Vervallen, gebruik nu ClockSetDate
ClockSun (etc) E X Is vervangen door het Time event.
ClockSync C X gewijzigde par1: HTTP stelt gelijk aan internet tijd, weglaten stuurt tijd naar andere Nodo's
FileErase C X Weglaten van filename resulteert in verwijderen van alle bestanden.
HomeSet C X Hiermee wordt het home adres ingesteld.
RawSignalErase C X Voor het verwijderen van opgeslagen RawSignals
RawSignalList C X Geeft een lijst van opgeslagen RawSignals
RawSignalSave C/S X Is geen commando meer, maar een setting
RawSignalReceive C X in- of uitschakelen RawSignal ontvangst
SendTo C X Nieuwe 2e parameter: All en Off.
SimulateDay C X Vervallen
Status FreeMem C X Geeft hoeveelheid vrij RAM geheugen weer
Status PulseCount C X Vervangen door commando VariablePulseCount
Status PulseTime C X Vervangen door commando VariablePulseTime
Status UnitSet C X Geeft een lijst van "bekende" online Nodo's
Stop C X Hiermee kan de verwerking van de EventList processing geheel worden afgebroken
Time E X Event dat op een ingestelde tijd zal optreden
TimerSet C X Vervanging voor TimerSetSec en TimerSetMin. Looptijd in secondes.
TimerSetMin C X Is vervangen door TimerSet
TimerSetSec C X Is vervangen door TimerSet
TimerSetVariable C X Stel een timer in met de waarde vanuit een variable
Unit C X zie: UnitSet
UnitSet C X vervanging voor Unit
VariableDevice C X Vervangen door Device concept
VariableEventValue C X Overnemen waarde uit event naar variable
VariablePulseCount C X Vervangt Status VariablePulseCount
VariablePulseTime C X Vervangt Status VariablePulseTime
VariableSet C X Geen WildCard meer toegestaan als variable nummer
Wildcard E X Derde parameter biedt selectie mogelijkheid voor unitnummer