Guiden visar hur enkelt det är att bygga egna multisensorer till Vera / Micasaverde med Arduino.
Har under några veckors tid kört en Arduino för att logga temperatur, luftfuktighet och ljus i ett rum hemma, informationen skickats till Veran via Ethernet. Detta möjliggör triggning av scenes, samt se aktuellt värde i Verans gränssnitt.
Arduinon har fungerat riktigt bra utan hängningar eller kommunikationsproblem.
Data rapporteras direkt till virtuella enheter i Vera via Ethernet (Enheterna skapas i Vera med följande guide). Data skickas med en fast intervall på var 5:e minut till Veran i min sketch.
Kommunikationen sker med Ethernet istället för Z-Wave.
Enheternas utseende i Vera
Jag kommer att byta DHT11 mot DS18B20 som temperaturgivare, eftersom dessa är mer exakta och går att ha flera på samma digitala port.
Komponenter:
- DHT11 (temperaturgivare med luftfuktighetsmätare) + 4,7K ohm resistor
- Arduino UNO
- Arduino EthernetCard
- LDR (ljus mätare) + 10K Ohm resistor
Nyttjade portar på Arduino:
- D10,D11,D12,D13 – Ethernet
- D2 – Digital temperaturgivare
- A0 – Ljussensor
Kopplingsschema:
DHT11
Pin 1 = 5 Volt Arduino
Pin 2 = Kopplas till Port 2 Arduinon. resistorn på 4,7K ohm kopplas mellan 5V och Port 2
Pin 3 = – Används ej
Pin 4 = Jord.
LDR
Vänster sida av LDR kopplas till 5V på Arduino
Höger sida av LDR kopplas till A0 på Arduino,
på samma ben kopplas motståndet på 10K Ohm, resistorns högra ben kopplas mot jord.
Exempel på mitt färdigkopplade projekt. Snyggare paketering kommer att göras inom kort.
Arduino koden
Eftersom jag håller på att lära mig programmering med Arduino så får man ha överseende med koden! Det är en hel del klipp och klistra ännu tyvärr 🙂
För att kunna köra DHT11 så behövs ett extra library, mer info på Arduinos hemsida samt library finns att hämta på Github. biblioteket läggs sedan under ”Arduino-1.0.6\libraries\DHT11″ så vida du kör version 1.0.6, annars är det versionsnummet för din Arduino installation som gäller.
Jag har nyttjat Ehternet skissen som följer installationen av Arduino programvara, dock så har jag skrivit om denna för att passa min inrapportering till Vera. Jag har även utgått från DHT11_test för att fåtill temperatur och luftfuktighet med DHT11.
I början av koden så definieras alla variabler som behöver ändras. Eftersom jag definierar allt i början av koden så behöver man inte ner i koden och ändra för att göra flera givare. Utan det räcker att ändra några få rader. (IPAddress ip, mac[], veraLjusID, veraHumidityID, veraTempid)
int sensorPin = A0; // Analog port som ska nyttjas för att läsa analoga värden, dvs ljus
int sensorValue = 0; // Värdet för den analoga enheten ska sparas här.
float loopDelay = 300000; // Hur många ms loopen ska vänta. Har som default kör 300000ms, dvs 5 Minuter mellan rapporterna.
float tempgivaren; // variabel för temperaturer.
float humiditygivaren; // variabel för luftfuktighet.
Vera rapportering:
int veraLjusID = 81; // ID på ljussensor i Vera
int veraHumidityID = 82; // ID på luftfuktighetssensor i Vera
int veraTempid = 83; // ID på Temperaturgivare i Vera
Nätverkskortet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xAF, 0xFE, 0xED }; // Ange en unik mac adress
char server[] = ”VeraIP”; // Här ska namnet eller IP till din Vera registreras.
int Serverport = 3480; // porten dit data ska rapporteras på vera. Detta är default så det ska inte behövas ändras.
IPAddress ip(10,10,10,123); // Ange IP adressen din Arduino ska nyttja, bör vara på samma subnät som din Vera controller!
Förklaring av ”void loopen()”
Följande rad kommer att läsa värdet från pin2 på DHT11
int chk = DHT11.read(DHT11PIN);
Variabeln chk kontrolleras mot en switch funktion som kontrollerar hur läsningen gick, sedan skrivs detta ut på serieporten om denna är öppen.
switch (chk)
{
case 0: Serial.println(”OK”); break;
case -1: Serial.println(”Checksum error”); break;
case -2: Serial.println(”Time out error”); break;
default: Serial.println(”Unknown error”); break;
}
Genom att anropa DHT11.humidity så returernas nuvarande värdet som ett flyttal till variabeln ”humiditygivaren” Temperatur givaren anropas genom att nyttja DHT11.temperature. Dessa värden skickas direkt till funktionen som rapporterar in till Vera.
humiditygivaren = (float)DHT11.humidity, 2;
tempgivaren = (float)DHT11.temperature, 2;
Genom att läsa det analoga värdet på ljussensorn och spara i sensorValue så får jag ett värde mellan 0 – 1024. Verans ljussensor visar data som procent, så värdet måste räknas om innan det skickas till Veran.
sensorValue = analogRead(sensorPin);
För att räkna om värdet 0 – 1024 till procent så har jag nyttjat en formel jag hittade på på följande sida.
float percent = sensorValue / 1024.0 * 100; // Värdet som avlästes delas med 1024 och multipliceras med 100 för att få procent.
sensorValue = floor(percent*100) / 100;
Rapportera till Vera
För att slippa ha så mycket kod i loopen så har jag gjort tre funktioner som rapporterar in data till Vera, Jag kommer att göra om detta till en enda funktion istället för tre senare. Jag skriven enbart om en nedan, eftersom de två andra ser i stort sett identiska ut.
”VeraTempid” motsvarar det id enheten i Vera har. ”tempgivaren” innehåller nuvarande temperatur.
httpTempRegister(veraTempid, tempgivaren);
httpLjusRegister(veraLjusID, sensorValue);
httpFuktRegister(veraHumidityID, humiditygivaren);
Funktionen httpTempRegister
Följande funktion gör ett webbsvar till Veran
void httpTempRegister(int GivarID, int MittValue) {
Om Arduinon lyckas koppla upp mot Veran på angiven port så skickas data
if (client.connect(server, Serverport)) {
client.print(”GET /data_request?id=variableset&DeviceNum=”); // bygger början av http strängen
client.print(GivarID); // adderar ID som den ska rapportera till Vera
client.print(”&serviceId=urn:upnp-org:serviceId:TemperatureSensor1&Variable=CurrentTemperature&Value=”); lägger till strängen för temperaturschemat i Vera.
client.print(MittValue); // Lägger till temperaturen i slutet av strängen
client.println(” HTTP/1.1″); // avslutar raden med http version och postar
client.print(”Host: ”);
client.print(server);
client.println(”Connection: close”);
client.println();
Serial.println(”skickade temperatur till Vera, kopplar ner”);
client.stop();
}
else {
// skulle inte data ha skickats så görs det inte nått mer försöka att skicka igen förens om 5 minuter.
client.stop();
}
}
Skapade nyss en Arduino med hjälp av koden i guiden utan problem. Detta ger mig två Arduino som totalt rapporterar 6 sensorer direkt till Vera.
Koden: Komplett Arduino sketch
Jag kommer att fortsätta utveckla detta framöver.
Kommande funktioner i Arduino Projektet:
Rapportera ljus– checkRapportera temperatur– checkRapportera luftfuktighet– check- Byte av temperatursensor till DS18B20
- PIR Sensor
- Trigga på temperaturförändringar över X%
- Trigga på förändringar i ljus
- Trigga på förändringar i luftfuktighet
- Varna om enheten ej kan kommunicera med Vera.
- Konvertera till Wifi, förhoppningsvis ESP8266
Har jag tur med mitt googlade efter micasaverde så kanske jag hittar nått sätt att porta min strömmätande Arduino till Vera med!
// Markus

Skribent:
Markus Jakobsson har mer än 10 års erfarenhet inom smarta hem, så han har hunnit testa och lära sig det mesta! Men fullärd blir man aldrig dock aldrig 🙂
TIPS:
Vill gärna tipsa om ett inlägg där du hittar grupperad information om smarta hem: Automatiserar.se/smarta-hem/
Skulle du mot förmodan inte hittat det du sökte kommer du troligen hitta det här: Automatiserar.se/sok-om-hemautomation/
Vill du diskutera smarta hem så har vi en kanal på Facebook med +7000 medlemmar: Smartare hem & Hemautomation | Facebook
Sedan början av 2023 har vi skapat mer material på Youtube kanalen: Stötta oss gärna genom att kolla in filmerna där och följa kanalen
Övrigt
Du kanske uppskattade och fick nytta av det här inlägget och vill hjälpa sidan Automatiserar.se?
Swisha gärna en slant till kaffe på 0705470065 om du vill stötta bloggen. Då visar du din uppskattning av den tid vi lägger på Bloggen och vi kan fortsätta driva sidan helt utan reklam. Du kan även stötta bloggen genom att köpa någon av våra smarta hållare.
Alla bidrag vi får går till att täcka driftkostnaderna för bloggen, samt att köpa den teknik vi kan skriver om på bloggen.
Om bloggen:
Vi kör sidan helt på fritiden, därigenom helt oberoende och gör detta för att det är roligt och lärorikt.
Vi hoppas att du som läsare hittat ett inlägg som hjälper dig att automatisera mera.
Gillade du bloggen så dela den gärna med vänner, och var det något du inte tyckte var allt för bra så hör av dig så vi får veta!
Stort tack för att du tog dig tid att läsa vårt inlägg.
Med vänliga hälsningar Markus Jakobsson
Allt går att automatisera!
Pingback: Projekt – Arduino – Hämta Verans Mode V1.0 |
Pingback: Z-Wave kontroller som larm? |
Pingback: Tips Inför Val Av Teknik För Hemautomation! |
Pingback: Z-UNO är ett kort med Z-wave stöd! |
Pingback: Min resa till hemautomation |
Pingback: Allt om Vera och VeraSecure |