ESP8266 12E – Mode och Pirsensor

Dammar nu av ett gammalt projekt som visade Verans mode på en central plats i huset. Bluetooth byts nu till WIFI, temperatur och rörelsesensor läggs till!

POC-Sensor ModeNight

Detta var sensorns design under projektstadiet, bilden till vänster innan rörelsesensorn adderades.

Projektet senast uppdaterat: 2016-02-27

  • 2016-02-27 – Skapar projektsidan.
    • Dokumentera funktioner.
    • Lista med komponenter som behövs för att bygga det själv.
    • Lägga upp filmer och byggbeskrivning.
    • Demo av olika statusar sensorn har stöd för (V2.0).
    • Länkar till all information som behövs.
    • Optimering av koden 2.0 och uppladdning till Github.

Nedan visas två av de 4 modes Veran kan skicka till sensorn. Utöver modes har sensorn stöd för flera andra funktioner. Bilderna gör att det ser relativt platt ut, men fortsätt gärna en bit ner och kolla på filmerna. Dessa visar animeringar och olika funktioner som idag finns ( V2.0 – 2016-02-26 )

ModeHomeGreen ModeHomeRed

Status: Home = Grön                                        Status: Away  = Röd

 

Bakgrunden till projektet

Efter att ha jagat uA förbrukning på projektet wifi temperatursensor bestämde jag mig för att göra något med konstant strömmatning. Efter lite funderande kom jag på att mitt gamla projekt baserat på bluetooth hade stora begränsningar i räckvidd och kommunikation. Funderade på vad en ESP8266 skulle kunna göra mer än att bara visa Verans Mode. Kort där efter hade jag en relativt god idé på ett nytt projekt baserat på ESP8266 som grund. Resultatet blev en Rörelsesensor med dubbelriktad kommunikation! Till en början bygger jag med en NodeMCU av bekvämlighetsskäl. När sensorn är färdig kommer den att köras på bara ESP8266 12E chippet.

Genom att placera projektet i en vit låda döljs allt visuellt och designen blir riktigt ok. När NeoPixel placeras i lådan lyser dioderna igenom plasten utan att synas alls när dom är släckta, vilket ger en cool effekt. Allt som behövs är nu en usb laddare och kabel för att driva bygget.

Vad kan sensorn göra?

Utöver att att sensorn tar emot verans mode har den fått en Pir Sensor och dubbelriktad kommunikation över WIFI. Den rapportera temperatur till Vera, thingspeak och min loggserver. Enheten är inte alls begränsad eftersom den kommunicerar med http kommandon. All kod och instruktioner om hur du bygger den finner du på den här projektsidan. Hela bygget är placerat i en diskret vit plastlåda, detta för att få en snygg effekt och snygg paketering. Mitt mål är nu att få sensorn att vara hel fristående (typ en IOT pryl) utan krav på externa system.

Sensorn detekterar rörelse och skickar detta till en rörelsesensor i Vera. Vera svarar med vilket mode den är i efter ca 10 sekunder.

 

Vid uppkoppling till WIFI visas följande tills en lyckad koppling är gjord.

 

Sensorn detekterar en rörelse och skickar informationen till Vera, Vera svarar tillbaka att den är i mode ”natt”.

 

Alla rörelser som registreras i Vera skickas  min rörelsesensor, ett snabbt grönt blink visar att något har rört sig i mitt system. Vid mottag av ”status” blinkar alla dioder till i grönt en gång i ca 0.5 sekunder.

 

Mode ”HOME” ljuset rinner till grönt

Mode ”AWAY” ljuset rinner till rött

Mode ”Vacation” ljuset rinner till gult

Mode ”Night” ljuset rinner till blått.

Alla effekter dimmars ner tills dioderna släcks under en förutbestämd tid.

 

Vad behövs för att bygga detta?

Projektet baserar sig på en ESP8266 Node MCU (esp8266 12E i grund och botten) dvs ett mycket billigt WIFI chip som går att programmera med Arduino ISE.

 

Tidigare i år såg jag en riktigt häftig produkt kallad NeoPixle Ring. Detta är en ring med 12st RGB lysdioder individuellt adresserbara, för att styra detta behövs enbart en digital pinne! Detta gjorde det möjligt att visuellt visa status från Veran på många olika sätt, utan att använda alla digitala utgångar på sensorn.

NeoPixelRing

Bilden ovan visar hur min prototyp såg ut innan montering och färdigställning.

 

Förklaring av koden

All kod finns att hämta på Automatiseras Github, där försöker vi dela kod till så mycket projekt som möjligt. Om det är nått som är oklart i koden eller helt och hållet fel skriv gärna en kommentar så rättar jag! Det kan spara huvudbry för andra.

Direkt länk till koden: Pir sensor till Vera på Github

Eftersom testen på NODEMCU inte stämmer med de faktiska pinnarna på sensorn är denna bilden guld när det är dags att koppla upp… Spenderade tyvärr en hel del tid innan jag insåg att pinnarna som stod skrivet inte stämde alls.

Node MCU

Bilden ovan översätter pinnarna till ”rätt”. Utöver problemet med fel pin layout har jag även upptäckt att 5V pinnen inte alltid ger ut 5V.. Den kan gå ner så lågt som 4.6V vilket fick min pir sensor att alltid ”trigga”.

 

Genom att ange följande information i koden är all konfigurering klar för att prata med vera och en rörelse sensor. Observera att temperatur sensor och rörelsesensor måste skapas i vera först!

// Vera UI7 - Loggning till tempsensor (https://www.automatiserar.se/guide-skapa-temperatur-luftfuktighet-och-ljusenhet-i-vera-ui7/)

  int VeraDeviceID = 123;  // Ange id på den virtuella sensorn du skapat i vera enligt guiden 
  String VeraIP    = "10.20.30.40"; // Ange ip eller namn till din vera kontroller. 
  bool LoggaTillVera = false;   // Ange om du vill logga till Veran (sätts till True då!)

  // 1.9 - lägger till en rörelse sensor
  int VeraPirDeviceID = 124; // id på sensorn i vera som ska ta emot rörelser från ESP8266

// V1.8 - Pir sensor
    //* lägger nu till stöd för pir sensor
    int pirPin = 15;  // sätter pin 15 (d5 på node MCU) som pir pinnen 
    int lastPirReport = 30000; // sätter detta till 30 sekunder eftersom sensorn behöver 30 sekunder att kallibrera sig. 
    int pirDelay = 30000; // anger hur länge det ska väntas mellan rapporteringar om pir sensorn triggar. Standard sätter jag 30 sekunder.
    int lastPirMotionSent = false; // anger om den senaste skickningen är rapporterad till Vera

Genom att ange pinne 15 i koden och koppla in Pir sensorns trigger pin är allt klart. Triggas en rörelse kommer ett grönt kryss att tändas på sensorn. Information skickas till Veras rörelsesensor med id ”124”, efter 30 sekunder kontrollerar koden igen om sensorn fortfarande är triggad, i så fall skickas ännu en trigged till Veran annars skickas en återställning till sensorn.

Det är nu möjligt i Veran lägga till återrapportering via http. Sensor med id 123 är tyvärr felaktigt namnsatt och kommer att byta namn i nästa version av koden. VeraDeviceID (123) rapporterar till min temperatur sensor i Vera. Jag började med att kontrollera i varje loopom temperaturen skiljer sig mer än 0.10 grader. Tyvärr fick jag gå från detta eftersom detta tar för lång tid.

 

ESP8266-VeraESP8266-TempSensor

Sensorn registrerar nu till en rörelsesensor och en temperatur sensor i Vera.

 

Kommandon som sensorn stödjer (V2.0)

  • http://10.20.30.31/Home       (Grönt rinnande ljus)
  • http://10.20.30.31/Away        (Rött rinnande ljus)
  • http://10.20.30.31/Vacation   (Gult rinnande ljus)
  • http://10.20.30.31/Night         (Blått rinnande ljus)
  • http://10.20.30.31/Light         (Vitt rinnande ljus)
  • http://10.20.30.31/Status      (grönt blink)
  • http://10.20.30.31/newinfo    (Rött kryss)

För att skicka kommandon till sensorn från vera skriv följande:

  • luup.inet.wget(”http://10.20.30.31/newinfo”) # Genom att ange följande i en scene som triggas av rörelsesensorn 124 i Vera kommer ett rött kryss att tändas på rörelsesensorn med 50% ljusstyrka.

 

Genom att skapa en scene i Veran som triggas när sensorn detekterar rörelse visas Verans mode efter ca 10 sekunder på sensorn (delayen pga segheter i Vera och inte i sensorn…..)

local mode = luup.attr_get "Mode"

if (mode=="1") then
luup.inet.wget("http://10.20.30.31/Home")

elseif (mode=="2")  then
luup.inet.wget("http://10.20.30.31/Away")

elseif (mode=="3")  then
luup.inet.wget("http://10.20.30.31/night")

elseif (mode=="4")  then
luup.inet.wget("http://10.20.30.31/vacation")

end

Kvar att göra:

  • Kommer att utforska möjligt att på något sätt att kommunicera med Telldus Znet.
  • Fler idéer eller önskemål?
  • Lägg upp koden på Github. (CHECK – 2016-02-27)

 

Kom ihåg att gilla / dela för att vi ska göra fler projekt! 🙂

Samma gäller för alla som kör med Google+

 

// Ispep