242 352 läst · 1 010 svar
242k läst
1,0k svar
Bygga egna sensorer - Hemautomation
Då jag jobbar med integrationsfrågor och väldigt mycket kring MQ så kan jag ju inte annat än fundera på att använda det och det fina är det finns något som heter MQTT ("MQ Telemetry Transport, MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol." http://mqtt.org/ ) Det vore kanske perfekt protokoll ...hek skrev:
MQTT är ursprungligen startat av IBM med numera fristående även om IBM är starkt inblandade.
Verkar också finnas en del för Arduino.
Lite länkar som jag dök på:
MQTT Client for Arduino: http://knolleary.net/arduino-client-for-mqtt/
MQTT Server på OpenWRT: http://webworxshop.com/2012/11/03/tiny-mqtt-broker-with-openwrt
IBM RedBook, Arduino+MQTT: http://www.redbooks.ibm.com/redpapers/pdfs/redp4929.pdf
IBM RedBook, generellt MQTT: http://www.redbooks.ibm.com/redbooks/pdfs/sg248054.pdf
Exempel: http://www.willowdesign.info/blog/mqtt-on-arduino/
Får nog skaffa lite grejer och testa med...
@jocke4u
MQTT funkar säkert finfint över tcp (Wifi-shield alt Ethernet-shield). Men det funkar inte över dom enklare radiokorten jag tänkte använda. En wifi-shield kostar ju ca $50 vilket gör sensorerna lite för dyra.
Någon verkar dock ha skapat en MQTT klient i Lua dock.
https://github.com/geekscape/mqtt_lua
Tycker dock att du skall fortsätta labba lite. Speciellt om du tänker köra Wifi.
@sebsv211
Det är väl någon typ av seriellport (via USB). Veran verkar dock bäst supporta chipset från FDTI så pluggar man in något annat får man trixa med ser2net. Kunde faktiskt kommunicera med min Uno (dyker upp som /dev/ttyACM0) om jag körde följande i shellen Men det blir mycket krångligare för "normala" användare:
MQTT funkar säkert finfint över tcp (Wifi-shield alt Ethernet-shield). Men det funkar inte över dom enklare radiokorten jag tänkte använda. En wifi-shield kostar ju ca $50 vilket gör sensorerna lite för dyra.
Någon verkar dock ha skapat en MQTT klient i Lua dock.
https://github.com/geekscape/mqtt_lua
Tycker dock att du skall fortsätta labba lite. Speciellt om du tänker köra Wifi.
@sebsv211
Det är väl någon typ av seriellport (via USB). Veran verkar dock bäst supporta chipset från FDTI så pluggar man in något annat får man trixa med ser2net. Kunde faktiskt kommunicera med min Uno (dyker upp som /dev/ttyACM0) om jag körde följande i shellen Men det blir mycket krångligare för "normala" användare:
En liten update:
Har fått projektplats på mios (inget publicerat ännu) och skrivit en plugin som (i teorin) skall kunna skapa upp enheter.
Men jag har kört fast lite med RF24 biblioteket för Arduino. Man verkar bara kunna skicka max 32 bytes i ett meddelande.
Min tanke var att dundra över lite mer data från sensorn när den presenterar sig och skickar sensordata för att minimera arbetet med vera pluginen (sensorn skickar själv vad den är för något och vilken Vera variabel den vill sätta).
Hmm orkar man skiva kod för att splitta upp och sammanfoga större meddelanden(hittar inget färdigt!)?
Annars måste jag nog tänka om lite och skicka tillbaka den på ritbordet.
Har fått projektplats på mios (inget publicerat ännu) och skrivit en plugin som (i teorin) skall kunna skapa upp enheter.
Men jag har kört fast lite med RF24 biblioteket för Arduino. Man verkar bara kunna skicka max 32 bytes i ett meddelande.
Min tanke var att dundra över lite mer data från sensorn när den presenterar sig och skickar sensordata för att minimera arbetet med vera pluginen (sensorn skickar själv vad den är för något och vilken Vera variabel den vill sätta).
Hmm orkar man skiva kod för att splitta upp och sammanfoga större meddelanden(hittar inget färdigt!)?
Annars måste jag nog tänka om lite och skicka tillbaka den på ritbordet.
Vad är det för mer data du vill att den skall skicka över då???hek skrev:En liten update:
Har fått projektplats på mios (inget publicerat ännu) och skrivit en plugin som (i teorin) skall kunna skapa upp enheter.
Men jag har kört fast lite med RF24 biblioteket för Arduino. Man verkar bara kunna skicka max 32 bytes i ett meddelande.
Min tanke var att dundra över lite mer data från sensorn när den presenterar sig och skickar sensordata för att minimera arbetet med vera pluginen (sensorn skickar själv vad den är för något och vilken Vera variabel den vill sätta).
Hmm orkar man skiva kod för att splitta upp och sammanfoga större meddelanden(hittar inget färdigt!)?
Annars måste jag nog tänka om lite och skicka tillbaka den på ritbordet.
För en temperatursensor skulle jag behöva skicka följande när den presenterar sig:
<id>;<childId>;device_file=D_TemperatureSensor1.xml\n
Och när den skicka sensordata gör den det på följande sätt:
<id>;<childId>;CurrentTemperature=33.2\n
Detta underlättar på vera -sidan eftersom den då bara kan sätta variabeln eller skapa enheten utan att känna till vad den kommunicerar med.
Alternativet är att sätta upp en mappning på vera -sidan (vilken gör att man kan korta ner snacket) och då måste man dessutom uppdatera pluginen varje gång en ny sensor skall stödjas.
<id>;<childId>;device_file=D_TemperatureSensor1.xml\n
Och när den skicka sensordata gör den det på följande sätt:
<id>;<childId>;CurrentTemperature=33.2\n
Detta underlättar på vera -sidan eftersom den då bara kan sätta variabeln eller skapa enheten utan att känna till vad den kommunicerar med.
Alternativet är att sätta upp en mappning på vera -sidan (vilken gör att man kan korta ner snacket) och då måste man dessutom uppdatera pluginen varje gång en ny sensor skall stödjas.
Du skrev att du ska skicka följande
En enda byte/tecken kan ju representera +127 och om du vill ha decimalen med kan du ju sända två byte (en för heltalet och en för decimalen). Kan inte gå åt många rader kod för att "packa upp" detta på mottagande sida.
Kan du inte skicka förkortade benämningar och mätvärden binärt?
En enda byte/tecken kan ju representera +127 och om du vill ha decimalen med kan du ju sända två byte (en för heltalet och en för decimalen). Kan inte gå åt många rader kod för att "packa upp" detta på mottagande sida.
Nu ni!
Första sensor-barnet har skapats upp automatiskt av min plugin genom att sensorn presenterar sig over-the-air. Vera delen har ingen kunskap om vad den kommunicerar med vilken gör den delen mycket lättunderhållen.
Gällande data protokoll blev det ett mellanting.
En Arduino med radio skickar över en presentation av vilka sensorer den har och vilka variabler den kommer uppdatera (med serviceid). Där anger även ett "kortnamn" för variablerna.
Det innebär att senare när sensorn skickar över själva sensordatan kan den oftast få plats i ett 32 bytes meddelande.
Det var länge sedan man använde c++. Men det kommer tillbaka så sakteliga....Ett fragment av ett medddelande definieras så här:
[SUB]typedef struct {
uint64_t radioId; // 8 bytes
uint8_t childId; // 1 byte. Up to 256 child sensors supported
uint8_t fragmentNumber : 4; // 4 bits. Fragment number. (We'll only use fragment 0-7)
uint8_t fragmentCount : 4; // 4 bits. Total number of fragments in this message. 1-16. Where 0 mean 1 fragment.
uint8_t messageType : 2; // 2 bits. 0=Sensor Presentation, 1=Variable presentation, 2=Set Variable, 3=Call action
uint8_t messageNumber : 6; // Increment for each message to avoid wrongful reassemble of different messages (0-64)
char data[maxFragmentDataLength]; // Each fragment can transfer 21 characters.
} fragment_s;[/SUB]
Var en hel del meck men att få till "hacka-upp-långa-meddelande-i små-bitar-och-skicka" och på andra sidan "ta-emot-små-bitar-och-sammanfoga" delen. Allt detta har jag wrappat upp i ett Arduino-bibliotek så man slipper se det när man skriver kod för en arduinosensorer framöver.
Nu återstår bara att rensa upp lite ytterligare i koden och dokumenteras innan första versionen släpps på mios versionhanterare och plugin-wiki.
Redigerat:
Kul att det går åt rätt håll
Hur tänkte du driva sensorerna. Via ext power eller batteri, om det e batteri, har du någon uppfattning
hur länge dom håller i så fall. För jämför man me Fibaros universalsensor så håller ju inte ett 9volts batteri direkt
länge.
Så nu e det nog dags å börja beställa hem lite grejer å hänga på detta projekt ju
Hur tänkte du driva sensorerna. Via ext power eller batteri, om det e batteri, har du någon uppfattning
hur länge dom håller i så fall. För jämför man me Fibaros universalsensor så håller ju inte ett 9volts batteri direkt
länge.
Så nu e det nog dags å börja beställa hem lite grejer å hänga på detta projekt ju
Batteritid beror lite på vad det är för senor man vill bygga.Normalt stänger man ju av radio-chippet när man inte använder den. Tror också att visa sensorer kan trigga ett interrupt så man även kan låta andruinon gå ner i sovläge. Då räcker batterierna i åravis enligt "internet".
Jag kommer dock låta rörelsesensorerna i takfoten vara fast inkopplade eftersom jag har 24V där redan. Har investerat i dessa:
http://www.aliexpress.com/item/10pc...tep-down-module-LM2596-voltage/912126670.html
Man skall nog också låta dom gå på 3V (2*1,5V batterier) p.g.a radiochippets behov och att man då slipper en del förluster vid omvandlingen. Men här är jag ingen expert utan får nog förkovra mig ytterligare innan jag kan säga något med säkerhet.
Jag kommer dock låta rörelsesensorerna i takfoten vara fast inkopplade eftersom jag har 24V där redan. Har investerat i dessa:
http://www.aliexpress.com/item/10pc...tep-down-module-LM2596-voltage/912126670.html
Man skall nog också låta dom gå på 3V (2*1,5V batterier) p.g.a radiochippets behov och att man då slipper en del förluster vid omvandlingen. Men här är jag ingen expert utan får nog förkovra mig ytterligare innan jag kan säga något med säkerhet.
Jo. skall labba lite med fler sensorer när grunden känns stabil.
Har släppt kod och dokumentation nu:
http://code.mios.com/trac/mios_arduino-sensor/
Men allt är väldigt beta ännu!
Har släppt kod och dokumentation nu:
http://code.mios.com/trac/mios_arduino-sensor/
Men allt är väldigt beta ännu!