Homeseer Integratie Voor de integratie van het JeeLabs platform in Homeseer maken we gebruik van een Open Source pakket genaamd JeeLink for HomeSeer (http://sourceforge.net/projects/jeeseer/) van Tijl van der Velden. Een aantal kleine aanpassingen zijn gedaan om het werken met JeeLink for Homeseer wat verder te veraangenamen en er zijn een aantal kleine verbeteringen doorgevoerd. In de software verzameling vind je zowel de originele JeeLink for HomeSeer v1.0.1 zoals deze bij SourceForge te vinden is, als ook de speciaal voor deze Workshop aangepaste versie. Voor dit gedeelte zijn 2 JeeNodes nodig, dus zoek nu eerst iemand anders met een werkende JeeNode die ook staat te popelen om met HomeSeer aan de slag te gaan!
HomeSeer Uitgangspunt is dat Homeseer reeds is geïnstalleerd op je laptop. Heb je dit nog niet gedaan? Geen nood, er is een HomeSeer installer opgenomen in de software verzameling om dat alsnog te doen. (Domotica Workshop\Software\HomeSeer\setuphs2_4_0_1.exe).
JeeNode for HomeSeer In de map \Domotica Workshop\Software\HomeSeer\Workshop\HomeSeer\ tref je een aantal directories aan met daarin de bestanden die je nodig hebt om de workshop‐versie van JeeNode for HomeSeer te installeren:
1. Kopieer de bestanden die in de html‐directory staan, naar de html directory van HomeSeer. 2. Kopieer het bestand dat in de Config‐directory staat, naar de Config directory van HomeSeer. 3. Kopieer het bestand jeeNode.txt dat in de Scripts directory staat, naar de Scripts directory van HomeSeer. 4. Neem in het bestand <jouw HomeSeer root>\Scripts\startup.txt de volgende regel op: hs.runEx "JeeNode.txt", "initJeeLink", "" Deze kun je gemakshalve ook uit het bestand \Domotica Workshop\Software\HomeSeer\Workshop\HomeSeer\Scripts\startup.txt kopiëren en plakken. 5. Neem in het bestand \Scripts\shutdown.txt de volgende regel op: hs.runEx "JeeNode.txt", "stopJeeLink", ""
Ook deze kun je gemakshalve ook uit \Domotica Workshop\Software\HomeSeer\Workshop\HomeSeer\Scripts\shutdown.txt kopiëren en plakken. 6. Laad het bestand \Config\ JeeNode_for_HomeSeer.ini in een editor (bv. notepad). Pas nu dit bestand aan; de default waarden voor de COM poort waarmee de JeeLink is verbonden aan je laptop, staat op 17. Pas deze waarde aan naar de juiste waarde voor jouw systeem. 7. De Housecode welke zal worden gebruikt voor de Devices in HomeSeer, staat default op "^". Indien je gebruik maakt van een HomeSeer installatie waar deze code reeds in gebruik is, pas deze dan aan naar een vrije Housecode. Sla het bestand daarna op.
JeeLink sketch compileren en uploaden In de map \Domotica Workshop\Software\HomeSeer\Workshop\JeeLink\ vind je een bestand JeeLink_for_HomeSeer.pde; dit is de sketch die we gaan compileren en uploaden naar de JeeNode die dienst gaat doen als ontvanger, welke permanent aan je PC/laptop verbonden zal zijn. Voor het gemak noemen we deze JeeNode even de 'JeeLink', om duidelijk onderscheid te maken tussen beide JeeNodes. 1. Open de Arduino IDE en open het bestand dat hierboven wordt genoemd. 2. Controleer in de IDE of de juiste COM‐poort (via Tools ‐> Serial Port) en het juiste type Arduino (via Tools ‐>Board) is geselecteerd: Arduino Duemilanove or Nano w/ ATmega328) 3. Gebruik de "Verify" button (of Ctrl‐R) om te controleren of het compileren van de sketch lukt. 4. Upload nu de sketch naar de JeeNode middels Ctrl‐U of de Upload‐button. 5. Nadat het uploaden is voltooid, kun je met Ctrl‐Shift‐M een Serial Monitor window openen en zul je in deze window het volgende moeten zien verschijnen (zet indien nodig de baudrate op 57600 en let ook even niet op de waarden op de eerste regel): A i1 g1 @ 868 MHz key:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
JeeNode sketch compileren en uploaden In de map \Domotica Workshop\Software\HomeSeer\Workshop\JeeNode\ vind je een bestand JeeNode_for_HomeSeer.pde; dit is de sketch die we gaan compileren en uploaden naar de JeeNode die dienst gaat doen als remote sensor. Voor het gemak noemen we deze de 'JeeNode', om duidelijk onderscheid te maken tussen beide JeeNodes. 1. Open de Arduino IDE en open het bestand dat hierboven wordt genoemd.
2. Controleer in de Arduino IDE of de juiste COM‐poort (via Tools ‐> Serial Port) en het juiste type Arduino (via Tools ‐>Board) is geselecteerd: Arduino Duemilanove or Nano w/ ATmega328). 3. Gebruik de "Verify" button (of Ctrl‐R) om te controleren of het compileren van de sketch lukt. 4. Upload nu de sketch naar de JeeNode middels Ctrl‐U of de Upload‐button. 5. Nadat het uploaden is voltooid, kun je met Ctrl‐Shift‐M een Serial Monitor window openen en zul je in deze window het volgende moeten zien verschijnen (let even niet op de waarden op de eerste regel): [rooms] A i1 g1 @ 868 MHz Init zenden Init zenden Init zenden Init zenden Prima, de JeeNode is bijna klaar.
Configuratie vanuit HomeSeer Beide JeeNodes zijn nu voorzien van de juiste software. Tijd om het een en ander in te stellen, zodat beide JeeNodes met elkaar kunnen communiceren en de door de JeeNode verzonden sensordata netjes in HomeSeer terecht komt. 1. Start HomeSeer. Vergeet hiervoor niet de Arduino IDE af te sluiten, anders zal deze een COM poort in gebruik houden waar HomeSeer nu ook gebruik van wil gaan maken! Als het goed is, zie je nu in de HomeSeer log het volgende voorbij komen : En iets soortgelijks als dit: 2. Herstart HomeSeer. Hierna krijg je nl. een extra button "JeeConfig" op de Status page:
3. Deze Button leidt je naar een nieuwe pagina, waar je een link vindt , genaamd JeeSecurity. Volg deze link naar de pagina die er als volgt uitziet:
4. Om ervoor te zorgen dat wij elkaar niet in de weg gaan zitten, vraag je nu aan Lennart of Robert een "vrije group‐ID". Vul dus niet zelf zomaar wat in, want dat kan voor vreemde verrassingen zorgen bij de overige deelnemers... 5. Nu kunnen we zowel de als JeeLink dienstdoende JeeNode en de sensor JeeNode configureren. Vul een encryption key in, de toegekende group ID, zet de frequentie op 868 MHz, vul een NodeID in voor de JeeNode en laat deze ingevulde waarden naar de JeeLink en JeeNode sturen door op de desbetreffende buttons te clicken. Klaar! Nou ja, bijna...
6. Herstart Homeseer nogmaals; het HomeSeer log window zou nu het volgende moeten weergeven: JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData JeeData
-
A i1 g1 @ 868 MHz JeeLink startup message key:101,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,4,Move,0,Ligh,2,Humi,2,Temp,0, processInitMessage init message 1,1,0,0,0,2,noMv,0,Move,1, processDevValues noMv 0Move 1 1,1,1,2,37,0, processDevValues 1,1,2,2,42,0, processDevValues 1,1,3,0,243,0, processDevValues 1,2,0,37,42,243, processStatusUpdate 1,2,0,37,42,243, processStatusUpdate
En op de status page van HomeSeer moet je een aantal nieuwe devices zien staan:
Gefeliciteerd, je hebt het in Homeseer integreren van een JeeNode met Room Board succesvol afgerond!
Globale beschrijving JeeNode for Homeseer Het heeft weinig zin om alle onderdelen stuk voor stuk, regel per regel alhier toe te lichten, maar een paar kenmerken en eigenschappen eruit lichten kan wel helpen om wat sneller e.e.a. te doorgronden. Messaging Tussen HomeSeer enerzijds en de JeeNodes anderzijds wordt gebruik gemaakt van eenvoudige en efficiënte messaging. Elke message welke door HomeSeer wordt verstuurd cq. ontvangen, bevat als 1e byte een message‐ID, oftewel een byte waarmee het soort message kan worden geïdentificeerd. Zo staat aan JeeNode‐zijde in de sketch: static static static static
const const const const
byte byte byte byte
initMessage = 0; devValues = 1; statusUpdate = 2; decisionRule = 3;
En in het JeeNode‐script voor HomeSeer staat: Const initMessage = 0 Const devValues = 1 Const statusUpdate = 2 Const decisionRule = 3 Door in de software aan beide kanten deze Message‐IDs te definieren, is het heel eenvoudig om meerdere typen messages te programmeren en/of uit te breiden. Device Class De sketches bevatten 2 Classes waarmee onder meer het in Arduino code definiëren van de Devices (sensoren) die aan een JeeNode zijn gekoppeld, eenvoudig en gestructureerd kan worden beschreven. De Device Class wordt onder meer gebruikt om de informatie die naar Homeseer wordt verzonden (en op basis waarvan automatisch de Devices in Homeseer worden gegenereerd en geconfigureerd) in de sketch op te nemen. Neem als voorbeeld de PIR: //device 1: Movement Sensor arrayCopy(devices[0].name, "Move"); devices[0].devType = Device::DigIn; devices[0].notificationType = Device::push; devices[0].overRuled = false; devices[0].currentStatus = 0; devices[0].amountStatus = 2; arrayCopy(devices[0].statusArray[0].statusName, "noMv"); devices[0].statusArray[0].value = 0; arrayCopy(devices[0].statusArray[1].statusName, "Move"); devices[0].statusArray[1].value = 1; Naam, Input type, het aantal verschillende statussen etc. dat deze sensor kan hebben, kunnen hiermee heel overzichtelijk worden beschreven. In de JeeNode_for_HomeSeer_LowPower is er een kleine uitbreiding gedaan op deze Device Class waarmee de aansturing van een LED door een PIR kinderlijk eenvoudig (1 regel code) is te realiseren zonder enige aanpassing in de overige code.
Decisionrule Class De toegepaste Decisionrules in de JeeNode sketches maken het mogelijk om eenvoudige, niet door externe factoren beïnvloedde "events" te maken. Hiermee krijgt de JeeNode in zekere zin meer autonomie, immers, de JeeNode mag nu ook zelf beslissingen nemen i.p.v. deze alleen maar door het grote Homeseer te laten nemen. Als voorbeeld: het door de JeeNode zelf laten aansturen van een LED, gedeinieerd in de JeeNode sketch: // Example: the LED will show the 'motion detected' status. rules[0].numConditions = 1; rules[0].numTrues = 1; rules[0].numFalses = 1; rules[0].conditions[0].device = 0; // the PIRs device ID rules[0].conditions[0].sign = EQ; rules[0].conditions[0].value = 1; rules[0].resultsTrue[0].device = 4; // the LEDs device ID rules[0].resultsTrue[0].value = 1; rules[0].resultsFalse[0].device = 4; // the LEDs device ID rules[0].resultsFalse[0].value = 0; Flexibiliteit Na het uploaden van de juiste sketch naar een JeeNode, is deze JeeNode verder helemaal vanuit HomeSeer configureerbaar. RF parameters, Node ID, en de Decisionrules kunnen eenvoudig worden aangepast. Uiteraard is dit nog veel verder uit te breiden, zoals bijvoorbeeld het aanpassen van de transmit interval van de JeeNode en andere "gedrags" parameters. HomeSeer Script Het in HomeSeer werkende script maakt duidelijk dat er met een script meer kan dan in eerste instantie kan worden gedacht. Het 'bedienen' van een COM poort, afhandeling van binnenkomende data en het op basis daarvan bijwerken van Devices, al dit is mogelijk zonder meteen naar een zwaardere cq. ingewikkelder middel te grijpen als een PlugIn. Een groot voordeel van het werken met scripts is ook dat aanpassingen veel sneller zijn te testen. Geen build, geen kopieerslag van de resulterende dll en geen herstart van HomeSeer nodig. Uitbreidingen De verzameling sketches en scripts is op vele punten vast nog wel te verbeteren, uit te breiden en te verfraaien. Alle code is voorhanden, dus aanpassingen kunnen eenvoudig worden gerealiseerd; het is niet meer dan het op de juiste plaatsen aanbrengen van de gewenste veranderingen. Zo kan iedereen de software tot in de puntjes customizen en het geheel laten functioneren zoals men dat zelf wil!