244 597 läst · 1 010 svar
245k läst
1,0k svar
Bygga egna sensorer - Hemautomation
Har nu provat flera olika USB laddare, bytt radiokort och Arduino utan resultat.
Har exkluderat enheten och försöker inkludera den från garaget men går inte.
Det rör sig om 10-12 meter med två innerväggar och en yttervägg med tegel.
När jag tidigare kört närmare gatewayen 1-4 meter med fri sikt så har det funkat.
Kan tycka att det borde funka med detta avstånd med hinder men ser två möjliga vägar (1) skaffa en NRF24L01+PA+LNA eller (2) sätta en relay-node i vardagsrummet innanför tegelväggen (vill ev mäta temperaturen där ändå).
Har grejer för att protypa en relay-node men skjuter nog iväg en order på en NRF24L01+PA+LNA (nu när man är i träsket så kan det vara bra att ha i verktygslådan )
Har exkluderat enheten och försöker inkludera den från garaget men går inte.
Det rör sig om 10-12 meter med två innerväggar och en yttervägg med tegel.
När jag tidigare kört närmare gatewayen 1-4 meter med fri sikt så har det funkat.
Kan tycka att det borde funka med detta avstånd med hinder men ser två möjliga vägar (1) skaffa en NRF24L01+PA+LNA eller (2) sätta en relay-node i vardagsrummet innanför tegelväggen (vill ev mäta temperaturen där ändå).
Har grejer för att protypa en relay-node men skjuter nog iväg en order på en NRF24L01+PA+LNA (nu när man är i träsket så kan det vara bra att ha i verktygslådan )
Har läst tråden och det mesta i Wikin.
Har inte köpt några prylar ännu, och har ingen Vera. Men jag planerar att koppla denna GW till en Pi eller BBB.
Jag hittade skapligt billiga elmätare på energibutiken.se, dessa har ju även en z0 utgång som går att använda istället för att läsa av blinkningen.
Gissar att det inte kan vara allt för svårt att få till så man räknar pulser på z0 utgången istället?
Har inte köpt några prylar ännu, och har ingen Vera. Men jag planerar att koppla denna GW till en Pi eller BBB.
Jag hittade skapligt billiga elmätare på energibutiken.se, dessa har ju även en z0 utgång som går att använda istället för att läsa av blinkningen.
Gissar att det inte kan vara allt för svårt att få till så man räknar pulser på z0 utgången istället?
@jocke
Superbra om du testar relaying av meddelanden med en extra nod. Den koden är fortfarande relativt otestad (under lång tid). Jag har iallafall inte fått in några felrapporter ännu.
@pethson
Vet inte riktigt hur z0 utgången fungerar på dessa elmätare men du får försöka ha gemensam jord (och ha koll på hur många volt ut den ger) för att inte bränna ingången på din arduino. Annars skall det nog inte vara några problem.
Superbra om du testar relaying av meddelanden med en extra nod. Den koden är fortfarande relativt otestad (under lång tid). Jag har iallafall inte fått in några felrapporter ännu.
@pethson
Vet inte riktigt hur z0 utgången fungerar på dessa elmätare men du får försöka ha gemensam jord (och ha koll på hur många volt ut den ger) för att inte bränna ingången på din arduino. Annars skall det nog inte vara några problem.
Att använda S0-utgången är ett bra sätt att plocka in pulserna till såna I/O ni har på era kort. Det är helt enkelt en öppen kollektor utgång på mätarna så de är helt passiva och ger ingen spänning i sig själva. Bara att koppla ett pullupmotstånd från 5V till plinten för kollektorn och inpinnen och 0V till andra plinten.
Aha! Ja, om det är helt potentialfritt så är det ju enkelt att använda med Arduinon.GK100 skrev:Att använda S0-utgången är ett bra sätt att plocka in pulserna till såna I/O ni har på era kort. Det är helt enkelt en öppen kollektor utgång på mätarna så de är helt passiva och ger ingen spänning i sig själva. Bara att koppla ett pullupmotstånd från 5V till plinten för kollektorn och inpinnen och 0V till andra plinten.
GK100 skrev:Att använda S0-utgången är ett bra sätt att plocka in pulserna till såna I/O ni har på era kort. Det är helt enkelt en öppen kollektor utgång på mätarna så de är helt passiva och ger ingen spänning i sig själva. Bara att koppla ett pullupmotstånd från 5V till plinten för kollektorn och inpinnen och 0V till andra plinten.
@GK100
Känner du för det så rita gärna ett schema å släng upp här.
Två alternativ av allra enklaste slag som kan passa era kort, 1:an ger låg nivå vid puls och 2:an hög.
Motståndet på 1k bör ligga 0.47 - 1.2k så klarar man den gamla standarden för S0-snitt vid 5V.
De viktigaste parametrarna för den är inskriven vid utgångssymbolen.
På mätarna finns oftast någon polaritetsindikering tex S0+/S0- osv annars bara skifta trådarna.
Med motstånd i detta häradet får man inga problem om man behöver ha lite längre kablar, klarar rejäla längder.
Och samtidigt lastar man S0 tillräckligt, säkert där de som har problem med experiment I/O, onewire osv felar.
Motståndet på 1k bör ligga 0.47 - 1.2k så klarar man den gamla standarden för S0-snitt vid 5V.
De viktigaste parametrarna för den är inskriven vid utgångssymbolen.
På mätarna finns oftast någon polaritetsindikering tex S0+/S0- osv annars bara skifta trådarna.
Med motstånd i detta häradet får man inga problem om man behöver ha lite längre kablar, klarar rejäla längder.
Och samtidigt lastar man S0 tillräckligt, säkert där de som har problem med experiment I/O, onewire osv felar.
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
God fortsättning....
Har labbat en del med relay-noden och min elmätare men det vill sig inte. Fick plocka in den och ställa den vid gatewayen och först efter en hard-reboot av gateway'en så ville den inkludera sig.
Sen när den placerades i garaget så "nöp" den på:
Kommenterade ut denna rad och den började räkna och rapportera successfully men inget kom till vera pluginen.
Så har en laptop i garaget med Arduino serial monitor och extra loggning så jag ser (såg) både egen räkning och att den rapporterade.
Nu har den slutat logga ...och misstänker att det kan ha med Arduino IDE att göra...
Satte sen en relay-node inomhus med en annan laptop (tur man sparar på gammal skit )och kan se viss trafik men inte något som ger "true" i if-statement i loop(). Har kollat snabbt i Relay.cpp och verkar relay'a.
Är det någon annan konfiguration som behövs på noden i garaget? (t.ex. att den skall relay'as via en nod)?
Ganska mycket strul så kan inte idag rekommendera detta för andra än teknik-geeks även om det är mycket plug-n-play med Arduino.
Är det någon extra konfiguration som måste finnas för att Relay-node skall funka? (ser att noden i garaget har en konfiguration "RelayNode" som nu är 0, skall/måste denna hårdkopplas till en specifik relayNode?).
Nya tag imorgon tror jag (eller skall mediasystemet får en drabbning)...
Har labbat en del med relay-noden och min elmätare men det vill sig inte. Fick plocka in den och ställa den vid gatewayen och först efter en hard-reboot av gateway'en så ville den inkludera sig.
Sen när den placerades i garaget så "nöp" den på:
och blockerade exekvering.
Kommenterade ut denna rad och den började räkna och rapportera successfully men inget kom till vera pluginen.
Så har en laptop i garaget med Arduino serial monitor och extra loggning så jag ser (såg) både egen räkning och att den rapporterade.
Nu har den slutat logga ...och misstänker att det kan ha med Arduino IDE att göra...
Satte sen en relay-node inomhus med en annan laptop (tur man sparar på gammal skit )och kan se viss trafik men inte något som ger "true" i if-statement i loop(). Har kollat snabbt i Relay.cpp och verkar relay'a.
Är det någon annan konfiguration som behövs på noden i garaget? (t.ex. att den skall relay'as via en nod)?
Ganska mycket strul så kan inte idag rekommendera detta för andra än teknik-geeks även om det är mycket plug-n-play med Arduino.
Är det någon extra konfiguration som måste finnas för att Relay-node skall funka? (ser att noden i garaget har en konfiguration "RelayNode" som nu är 0, skall/måste denna hårdkopplas till en specifik relayNode?).
Nya tag imorgon tror jag (eller skall mediasystemet får en drabbning)...
Vet inte om jag missförstått någon i din setup men det kanske är bäst att vara lite övertydlig. Din sensor i garaget behöver inte vara en relänod. Den kan fortfarande vara av typen sensor. Dock skall du sätta upp en relänod någonstans på vägen mellan garaget och gatewayen.
Det fungerar så här:
När en sensornod startas (första gången) kommer den skicka ut en förfrågan till alla (relänoder+gw) som lyssnar i närheten. Dom som hör denna förfrågan kommer svara och skicka med sitt respektive avstånd till gatewayen (= nod 0).
Sensornoden kommer nu välja att skicka meddelanden via den nod som har kortast avstånd till gatewayen (eller direkt om gatewayen har svarat på anropet).
Om en sensornod misslyckas att skicka meddelanden (typ 20 gånger) kommer den göra om ovanstående procedur (för att systemet skall självläka om en relänod plockas bort).
Noden sparar sin "förälder"/relänod i EEPROM:et så man kan inte bara starta om den för att nollställa. Den måste alltså misslyckas att skicka meddelanden ett antal gånger.
Din nod verkar ju ha 0 (=gatewayen) som förälder/relänod. Det du kan göra är att tillfälligt stänga av din gw för att noden skall hitta/använda din nyuppsatta relänod istället.
Det fungerar så här:
När en sensornod startas (första gången) kommer den skicka ut en förfrågan till alla (relänoder+gw) som lyssnar i närheten. Dom som hör denna förfrågan kommer svara och skicka med sitt respektive avstånd till gatewayen (= nod 0).
Sensornoden kommer nu välja att skicka meddelanden via den nod som har kortast avstånd till gatewayen (eller direkt om gatewayen har svarat på anropet).
Om en sensornod misslyckas att skicka meddelanden (typ 20 gånger) kommer den göra om ovanstående procedur (för att systemet skall självläka om en relänod plockas bort).
Noden sparar sin "förälder"/relänod i EEPROM:et så man kan inte bara starta om den för att nollställa. Den måste alltså misslyckas att skicka meddelanden ett antal gånger.
Din nod verkar ju ha 0 (=gatewayen) som förälder/relänod. Det du kan göra är att tillfälligt stänga av din gw för att noden skall hitta/använda din nyuppsatta relänod istället.
min pulsräknare har fungerat fint i flera dagar nu.Tills jag bråkade lite med veran ändrade några inställningar och laddade om några gånger. Då slutade det fungera. När jag trykte på GW arduinons reset knapp började allts fungera igen.
@hek
Bra beskrivet så jag fattar lite mer logik bakom. Har gluttat lite i källkoden mellan julskinka o glögg
Sensorn har inte relay-funktion utan det är en separat nod "på andra sidan tegelväggen" (id=2), den i garaget har id=1.
Låter bra att det skall kunna självläka men har ändå tyckt att det har varit lite halvbökigt...v1.2.1 kändes mer rakt på.
Då jag nu har laptop vid noderna så har jag omprogrammerat så då nollställs de ju (väl?)
Relay-noden exemplet har ju "smarsmakad" kod vilket är bra men är syftet av if-statement att ha en retry-kod eller något annat? Sen kan jag bara tycka att metod-signaturen är "sådär"
Skall testa din information imorgon, tack Henrik!
Bra beskrivet så jag fattar lite mer logik bakom. Har gluttat lite i källkoden mellan julskinka o glögg
Sensorn har inte relay-funktion utan det är en separat nod "på andra sidan tegelväggen" (id=2), den i garaget har id=1.
Låter bra att det skall kunna självläka men har ändå tyckt att det har varit lite halvbökigt...v1.2.1 kändes mer rakt på.
Då jag nu har laptop vid noderna så har jag omprogrammerat så då nollställs de ju (väl?)
Relay-noden exemplet har ju "smarsmakad" kod vilket är bra men är syftet av if-statement att ha en retry-kod eller något annat? Sen kan jag bara tycka att metod-signaturen är "sådär"
Dvs jag läser det som TRUE eller FALSE och gör någonting med det men som jag tolkar koden i messageAvailable() så är det snarare resultatet av relay'ing
Skall testa din information imorgon, tack Henrik!
EEPROMet nollställs inte bara för att du laddar ner en ny mjukvara. Jag har gjort en speciell exempel sketch (ClearEEpromConfig) som du kan använda om du vill nollställa routingatabeller/radioid och relänod i EEPROM. Men observera att noden tappar radioId:t som den blivit tilldelad av veran. Eventuella enheter som skapats i veran kommer skapas om med nya id:n (och dom gamla får du ta bort). Du kan ju dock alltid välja att sätta ett statiskt radioid (istället för AUTO) om du leker med clear-sketchen.
Arduinon som agerar relänod måste ju hela tiden hantera vidaresändning av meddelanden från "barnnoder" eller från verasidan för att inget skall försvinna. Men samtidigt kan ju relänoden vara en vanlig "sensor". Man måste därför frekvent kolla om det finns meddelanden som skall vidarebefodras någonstans. Därför valde jag att placera all magi messageAvailable() som man troligtvis ändå anropar om man skapar aktorer.
messageAvailable blockerar inte utan man kan göra annat i sin kod. Dock måste den anropas frekvent och man bör inte ha delays/blockeringar i sin övriga kod.
messageAvailable returnerar också true om meddelandet är addresserat till själva relänoden. Vilket man kan använda om man reländoen även agerar aktor som skall reagera på styrning från verasidan.
Om du inte vill agera på meddelanden till relädnoden kan du nöja dig med att ha
gw.messageAvailable();
i din loop utan if-satsen.
Så ja.. visst kunde metoden haft en annan signatur.. men vad?
Arduinon som agerar relänod måste ju hela tiden hantera vidaresändning av meddelanden från "barnnoder" eller från verasidan för att inget skall försvinna. Men samtidigt kan ju relänoden vara en vanlig "sensor". Man måste därför frekvent kolla om det finns meddelanden som skall vidarebefodras någonstans. Därför valde jag att placera all magi messageAvailable() som man troligtvis ändå anropar om man skapar aktorer.
messageAvailable blockerar inte utan man kan göra annat i sin kod. Dock måste den anropas frekvent och man bör inte ha delays/blockeringar i sin övriga kod.
messageAvailable returnerar också true om meddelandet är addresserat till själva relänoden. Vilket man kan använda om man reländoen även agerar aktor som skall reagera på styrning från verasidan.
Om du inte vill agera på meddelanden till relädnoden kan du nöja dig med att ha
gw.messageAvailable();
i din loop utan if-satsen.
Så ja.. visst kunde metoden haft en annan signatur.. men vad?
Nu har jag fått igång det men var lite meckigt
Installerade om allt (raderade samtliga EEPROM inkl GW) och först med GW avstängd och rensat EEPROM på sensorn så valde den RelayNoden.
"Distance" skrivs ut i konsollen, antar att lågt är kort/bra, eller?
Sensorn får distance 1 till gateway och 2 till RelayNoden. Nu har jag ju en extern antenn på gatewayen så även om det är längre bort kanske det blir starkare signal till sensorn.
Sen noterade jag en skum grej, det kommer konstigt data till gatewayen och undrar om det finns något som stör.
När detta inträffar så verkar gatewayen sluta processa sensordata, omstart av gateway löser problemet. Har inträffat två gånger hittills.
Någon idé?
Installerade om allt (raderade samtliga EEPROM inkl GW) och först med GW avstängd och rensat EEPROM på sensorn så valde den RelayNoden.
"Distance" skrivs ut i konsollen, antar att lågt är kort/bra, eller?
Sensorn får distance 1 till gateway och 2 till RelayNoden. Nu har jag ju en extern antenn på gatewayen så även om det är längre bort kanske det blir starkare signal till sensorn.
Sen noterade jag en skum grej, det kommer konstigt data till gatewayen och undrar om det finns något som stör.
När detta inträffar så verkar gatewayen sluta processa sensordata, omstart av gateway löser problemet. Har inträffat två gånger hittills.
Någon idé?
01 12/27/13 12:39:12.032 luup_log:84: Arduino: Setting variable 'Watts' to value '1652' <0x2f31f680>01 12/27/13 12:39:12.033 luup_log:84: Arduino: urn:micasaverde-com:serviceId:EnergyMetering1,Watts, 1652, 88 <0x2f31f680>
01 12/27/13 12:39:12.057 luup_log:84: Arduino: urn:micasaverde-com:serviceId:HaDevice1,LastUpdate, 1388144352, 88 <0x2f31f680>
01 12/27/13 12:39:12.059 luup_log:84: Arduino: 0;0;4;11;Received: from=3, to=0, childId=5, mtype=1, type=24, crc=224, '1755' <0x2f31f680>
01 12/27/13 12:39:12.060 luup_log:84: Arduino: Log: Received: from=3, to=0, childId=5, mtype=1, type=24, crc=224, '1755' <0x2f31f680>
01 12/27/13 12:39:12.061 luup_log:84: Arduino: 0;0;4;11;Message crc ok. <0x2f31f680>
01 12/27/13 12:39:12.062 luup_log:84: Arduino: Log: Message crc ok. <0x2f31f680>
01 12/27/13 12:39:12.063 luup_log:84: Arduino: 0;0;4;11;Message addressed for this node. <0x2f31f680>
01 12/27/13 12:39:12.063 luup_log:84: Arduino: Log: Message addressed for this node. <0x2f31f680>
01 12/27/13 12:39:12.064 luup_log:84: Arduino: 3;5;1;24;1755 <0x2f31f680>
01 12/27/13 12:39:12.065 luup_log:84: Arduino: Setting variable 'Variable1' to value '1755' <0x2f31f680>
01 12/27/13 12:39:12.065 luup_log:84: Arduino: urn:upnp-org:serviceId:VContainer1,Variable1, 1755, 88 <0x2f31f680>
01 12/27/13 12:39:12.067 luup_log:84: Arduino: urn:micasaverde-com:serviceId:HaDevice1,LastUpdate, 1388144352, 88 <0x2f31f680>
01 12/27/13 12:39:32.198 luup_log:84: Arduino: 0;0;4;11;Received: from=192, to=36, childId=0, mtype=13, type=107, crc=21, '▒&▒▒▒▒ <0x2f31f680>
01 12/27/13 12:39:32.198 luup_log:84: Arduino: Log: Received: from=192, to=36, childId=0, mtype=13, type=107, crc=21, '▒&▒▒▒▒ <0x2f31f680>
01 12/27/13 12:39:32.206 luup_log:84: Arduino: &F▒▒- ▒K3▒N▒' <0x2f31f680>
01 12/27/13 12:39:32.207 luup_log:84: Arduino: Receive error: Unknown data: &F▒▒- ▒K3▒N▒' <0x2f31f680>
01 12/27/13 12:39:32.208 luup_log:84: Arduino: 0;0;4;11;Message crc error. <0x2f31f680>
01 12/27/13 12:39:32.209 luup_log:84: Arduino: Log: Message crc error. <0x2f31f680>
01 12/27/13 12:39:32.217 luup_log:84: Arduino: 0;0;4;11;Received: from=192, to=36, childId=0, mtype=13, type=107, crc=21, '▒&▒▒▒▒ <0x2f31f680>
01 12/27/13 12:39:32.217 luup_log:84: Arduino: Log: Received: from=192, to=36, childId=0, mtype=13, type=107, crc=21, '▒&▒▒▒▒ <0x2f31f680>
01 12/27/13 12:39:32.218 luup_log:84: Arduino: &F▒▒- ▒K3▒N▒' <0x2f31f680>
01 12/27/13 12:39:32.219 luup_log:84: Arduino: Receive error: Unknown data: &F▒▒- ▒K3▒N▒' <0x2f31f680>
01 12/27/13 12:39:32.220 luup_log:84: Arduino: 0;0;4;11;Message crc error. <0x2f31f680>
01 12/27/13 12:39:32.220 luup_log:84: Arduino: Log: Message crc error. <0x2f31f680>
01 12/27/13 12:39:32.227 luup_log:84: Arduino: 0;0;4;11;Received: from=192, to=36, childId=0, mtype=13, type=107, crc=21, '▒&▒▒▒▒ <0x2f31f680>
01 12/27/13 12:39:32.228 luup_log:84: Arduino: Log: Received: from=192, to=36, childId=0, mtype=13, type=107, crc=21, '▒&▒▒▒▒ <0x2f31f680>
01 12/27/13 12:39:32.228 luup_log:84: Arduino: &F▒▒- ▒K3▒N▒' <0x2f31f680>
01 12/27/13 12:39:32.229 luup_log:84: Arduino: Receive error: Unknown data: &F▒▒- ▒K3▒N▒' <0x2f31f680>