Zwembadtemperatuur via mqtt

Door K-Jay op vrijdag 23 juni 2017 11:09 - Reacties (7)
CategorieŽn: Geknutsel, Home automation, Raspberry pi, Views: 965

Inleiding
Als je mijn voorgaande blogposts gelezen hebt, weet je dat ik regelmatig met pimatic in de weer ben. Zo kan ik verlichting schakelen, temperatuur loggen, een foto maken als iemand aanbelt en nog veel meer.

433MHz vs wifi
Het is mooi weer en daarom heb ik een zwembadje in de achtertuin opgezet. Je kunt natuurlijk met je grote teen voelen hoe koud het water is, maar de tweaker in mij wil de watertemperatuur uiteraard objectief vastgelegd hebben. Probleem: de afstand van mijn meterkast naar het zwembad is ongeveer 25 meter. Te lang voor een kabeltje en eigenlijk ook te lang om 433MHz-communicatie te gebruiken. Maar dankzij mijn nieuwe Unifi accesspoint heb ik wel beschikking over betrouwbare wifi!

Mqtt
Het wordt dus wifi. Een geschikt protocol om dan te gebruiken is mqtt, een protocol waarmee IoT-apparaten op een simpele manier informatie met elkaar uitwisselen. Bij een mqtt-uitwisseling zijn drie partijen betrokken:
- een publicerende partij, in mijn geval een ESP8266 met een temperatuursensor
- een ontvangende partij, die de gepubliceerde gegevens weergeeft, in mijn geval pimatic
- een broker die de communicatie tussen beide bovenstaande partijen verzorgt. Ik gebruik Mosquitto, geinstalleerd op de Raspberry pi waar pimatic ook op staat

Wat heb je nodig
- een werkende pimatic installatie op een Raspberry pi
- een ESP8266 nodemcu (ebay link)
- een DS18b20 temperatuursensor (ebay link)
- een weerstand 4.7K
- voeding voor je ESP (standaard telefoonoplader, micro-usb)
- behuizing, ik gebruik deze

Aan de slag

Stap 1: ESPEasy installeren op de ESP8266
De open-sourcesoftware ESPEasy zorgt dat de ESP8266 diverse sensoren kan uitlezen en de waarden via mqtt kan versturen. ESPEasy kan nog veel meer overigens.
Download ESPEasy en verbind je ESP met een USB-kabel aan je PC. Volg nu het stappenplan op de wiki van ESPEasy:
Upload succesvol? Herstart je ESP en maak verbinding met het wifi-netwerk dat je ESP nu heeft opgezet. Vul in de getoonde pagina de gegevens van jouw wifi-netwerk in. De ESP is nu in je netwerk opgenomen en kan via de browser beheerd worden.
Tip vanuit de reacties: kies bij de Controllers voor OpenHAB MQTT.

Stap 2: Temperatuursensor verbinden en uitlezen
Verbind de DS18B20 als volgt aan je ESP:
- zwart aan GND
- rood aan 3V3
- geel aan GPIO 13 (D7)
en plaats een weerstand van 4.7K tussen geel en rood.
Navigeer nu met een browser naar het ip van je ESP. Voeg een nieuw device toe:

https://tweakers.net/ext/f/Tm3FMEeJcEGlIxnvoqZtPp2J/full.png

Stap 3: Mosquitto installeren
Ga met Putty of een andere SSL-tool naar je Raspberry pi. Voer de volgende commando’s uit:
Key importeren:
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key

mosquitto ophalen:
cd /etc/apt/sources.list.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list

terug naar root:
cd

updaten:
sudo apt-get update

mosquitto installeren:
sudo apt-get install mosquitto

mosquitto starten:
mosquitto -v

Stap 4: pimatic aanpassen
Installeer in pimatic de plugin pimatic-mqtt. Dat kan via de interface, of door de config aan te passen.
Voeg vervolgens de volgende regels toe aan je config, bij de devices:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   {
      "class": "MqttSensor",
      "id": "espeasy_1",
      "name": "espeasy_1",
      "attributes": [
        {
          "name": "temperature",
          "topic": "/espeasy_1/temp_zwembad/Temperature",
          "type": "number",
          "unit": "įC",
          "acronym": "Temperatuur zwembad",
          "messageMap": {}
        }
      ],
      "xAttributeOptions": []
    }


Herstart pimatic. Je nieuwe device zal nu de temperatuur laten zien.

https://tweakers.net/ext/f/XpLIOtp72JIgMsDNxu7EPSuV/full.png

Nog een extra tip: na een eventuele herstart van je pi moet je Mosquitto ook weer starten. Dit kun je automatiseren door het starten van Mosquitto als een regel aan pimatic toe te voegen waarin je gebruik maakt van de shell-execute plugin:

code:
1
2
3
4
5
6
7
    {
      "id": "start-mosquitto",
      "name": "Start mosquitto",
      "rule": "when pimatic is starting then execute \"sudo mosquitto -d\"",
      "active": true,
      "logging": true
    }


En nu verder!
Met ESPEasy kun je nog veel meer. Ik heb inmiddels ook al twee deursensoren op dezelfde ESP aangesloten. Indien gewenst kan ik dat in een volgend blogbericht uitleggen. Verder wil ik de mqtt-communicatie nog beveiligen met een wachtwoord. Genoeg te doen dus!

https://tweakers.net/ext/f/C7aFklF19mquZ2S4nT3kpwIe/full.jpg
En je ziet er bijna niets van

Op verzoek twee foto's van mijn ESP in de schuur, kastje open en kastje dicht.
https://tweakers.net/ext/f/YiYTP7b3vqurungVou81S6wj/medium.jpg
https://tweakers.net/ext/f/FbYRkU3fLVcuXHCY24q725IY/medium.jpg

Heteluchtverwarming loggen (pimatic deel 5)

Door K-Jay op maandag 5 december 2016 11:55 - Reacties (4)
CategorieŽn: Geknutsel, Home automation, Raspberry pi, Views: 3.770

Inleiding
Mijn woning wordt verwarmd met een heteluchtverwarmingssysteem van Brink. Omdat ik wel benieuwd ben wat dat apparaat allemaal uitspookt, wil ik dat inzichtelijk hebben in pimatic. Ik wil wel eens zien wanneer en hoe vaak hij aanslaat en hoe lang hij dan aanstaat.

Achtergrond
De installatie werkt als volgt.
Op zolder heb ik een normale CV-ketel (Brink Kombi Kompakt) die warm water maakt voor de verwarming en de douche. Het warme water voor de verwarming stroomt echter niet door radiatoren, maar naar een luchtverwarmer (Brink Elan). Deze zet de warmte van het water om naar warme lucht en stuurt deze naar alle uitstroomroosters in huis.
De warmtevraag wordt geregeld door een Honeywell Chronotherm Touch-thermostaat in de woonkamer.

Meten is weten
De luchtverwarmer slaat aan als de temperatuur van het aangevoerde water boven een bepaalde drempel komt. Die ligt volgens mij rond de 30 graden. Dus als ik die temperatuur kan meten, weet ik wanneer de luchtverwarmer aan is.
Ik heb een DS18B20-sensor gekoppeld aan een ESP8266 met ESPimatic. De sensor zit op de aanvoerleiding ge-tiewrapt en ESPimatic geeft elke minuut de meetwaarde door aan pimatic.

De sensor

Verwerking in pimatic
Ik kan de meetwaarden nu dus zien in pimatic. I love grafiekjes. Het temperatuurverloop is duidelijk zichtbaar.

Grafiek met meetwaarden

Nu wil ik nog in een oogopslag zien of de heteluchtverwarmer aan staat of niet. Dat kan met een variabele, twee regels en een device.

Variabele
In de variabele "vorigecvtemp" leg ik de voorlaatste meetwaarde vast. Let op, je moet deze bij het definieren even een startwaarde van nul geven.

Regels
Met deze regels stel ik vast of de of de aanvoertemperatuur aan het stijgen of aan het dalen is. Stijgend en warmer dan 30 betekent Aan, dalend betekent uit. $temp2 is overigens de doorgegeven meetwaarde.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
      "id": "heteluchtverwarming-aan-of-uit",
      "name": "Heteluchtverwarming aan of uit 1",
      "rule": "when $temp2 > 30 and $vorigecvtemp < $temp2 then $vorigecvtemp = $temp2 and $cvketel = \"Aan\"",
      "active": true,
      "logging": false
},
{
      "id": "heteluchtverwarming-aan-of-uit-2",
      "name": "Heteluchtverwarming  aan of uit2",
      "rule": "when $vorigecvtemp > $temp2 then $vorigecvtemp = $temp2 and $cvketel = \"Uit\"",
      "active": true,
      "logging": false
}



Device
Als laatste een VariablesDevice om de status weer te kunnen geven in de gui van pimatic:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
{
      "id": "heteluchtverwarming",
      "name": "Heteluchtverwarming",
      "class": "VariablesDevice"
      "variables": [
        {
          "name": "cvketel",
          "expression": "$cvketel",
          "type": "string"
        }
      ],
      "xAttributeOptions": []
}



En dan is dit het resultaat:

Status in de GUI

En verder...
Ik heb dus geen fancy slimme thermostaat, maar in mijn Honeywell thermostaat zit wel een zogenaamd "TELE"-contact. Volgens de handleiding "biedt de TELE-functie de mogelijkheid om de temperatuurinstelling op afstand, bijvoorbeeld via de telefoon, te wijzigen.". Ik zie een volgend project aankomen...

Snapshot op je mobiel als de bel gaat (pimatic deel 4)

Door K-Jay op donderdag 1 december 2016 15:24 - Reacties (16)
CategorieŽn: Geknutsel, Home automation, Raspberry pi, Views: 6.779

Belofte maakt schuld
In mijn laatste blogpost over domotica kondigde ik aan om wat te schrijven over het meesturen van een snapshot als er wordt aangebeld. Inmiddels zijn we bijna een jaar verder. Tijd om de belofte in te lossen.

Camera
Om een plaatje te maken heb je een camera nodig. En een beetje tweaker laat die uit China komen. Ik hoorde goede verhalen over de TOP-201 camera, dus die werd het. Het kostte een middag prutsen om hem aan de praat te krijgen, maar uiteindelijk had ik beeld via de meegeleverde web-interface. Tijd voor de volgende stap: zorgen dat het ding een snapshot maakt.

Snapshot maken en versturen
Kort samengevat moet het volgende gebeuren als er wordt aangebeld:
  • De camera maakt een foto en slaat die lokaal op
  • De gemaakte foto wordt ge-upload naar een plaats waar mijn telefoon ook toegang heeft
  • Er wordt een notificatie naar mijn telefoon gestuurd met daarin de locatie van de foto
Mijn camera levert een rtsp-stream aan. Daar kun je een snapshot van maken met het commando "avconv". Om daarvan gebruik te kunnen maken moet je eerst het commando

sudo apt-get install libav-tools 

uitvoeren op je raspberry pi.

Nu moet je een .sh-bestandje maken waarin we alle stappen gaan uitvoeren. Met de volgende regel maak je de snapshot en sla je het op in de map "snapshot/images":

code:
1
/usr/bin/avconv -rtsp_transport tcp -i 'rtsp://'ip-van-je-camera'/user=user-van-je-camera&password=paswword-van-je-camera&channel=1&stream=1.sdp' -f image2 -vframes 1 -aspect 16:9 /home/pi/snapshot/images/filename-van-je-plaatje.jpeg



En met dit commando upload je de afbeelding naar een plekje in de cloud:

code:
1
curl -T /home/pi/snapshot/images/filename-van-je-plaatje.jpeg ftp://$USERNAME:$PASSWORD@$SERVER/$DIR


Je zou hier ook Dropbox of iets anders voor kunnen gebruken, zie de reactie van i-chat onder deze blogpost.

Nu heb je alle informatie die in het pushbericht moet. Versturen doe ik met Pushalot:

code:
1
curl -F "AuthorizationToken=XXX" -F "Body=Er staat iemand voor de deur..." -F "Title=De bel gaat!" -F "LinkTitle=Afbeelding" -F  "Link=http://url-van-je-plaatje/"$today.jpeg -F "Image=http://url-van-je-plaatje/"$today.jpeg -F "Source=Voordeur" https://pushalot.com/api/sendmessage



Zorg dat je .sh-bestand in ieder geval bovenstaande commando's bevat. Desgewenst kun je het uitbreiden door alle variabelen netjes te definieren, de datumtijd in de bestandsnaam te verwerken, eerst te controleren of de camera wel online is, enzovoort. Ik heb het bestand opgeslagen als debelgaat.sh op mijn raspberry pi.

De laatste stap
Nu nog even aan pimatic vertellen dat debelgaat.sh uitgevoerd moet worden als er op de bel gedrukt wordt. Ik heb een device "deurbelsnapshot" gedefinieerd:

code:
1
2
3
4
5
6
7
8
9
10
{
      "id": "deurbelsnapshot",
      "name": "Snapshot deurbel",
      "class": "ShellSwitch",
      "onCommand": "sudo /home/pi/snapshot/snapshot.sh >/dev/null 2>&1 || true",
      "offCommand": "echo off",
      "getStateCommand": "echo false",
      "interval": 0,
      "forceExecution": true
    },


Deze maakt gebruik van de shell-execute-plugin.

Als er wordt aangebeld, treedt de volgende regel in werking:

code:
1
if deurbel is opened then switch on deurbelsnapshot after 1 second


en binnen een paar tellen wordt de foto gemaakt, opgeslagen, ge-upload, wordt de pushmessage verzonden en ontvangen op mijn telefoon.

Pushberichten

Niet alleen als de bel gaat...
Ik laat mijn camera niet alleen een foto maken als de bel gaat, maar ook als de voordeur open gaat of als er beweging gedetecteerd wordt. In deze gevallen gaat er echter geen pushbericht naar mijn telefoon. Om alle foto's wel inzichtelijk te hebben, heb ik een iframe in pimatic draaien waar een php-script achter zit dat de meest recente foto's toont. Met de knoppen kun je navigeren en door te swipen krijg je de vorige/volgende foto.

pakketje uit China?

Notificatie deurbel op je smartphone (pimatic deel 3)

Door K-Jay op donderdag 21 januari 2016 20:38 - Reacties (28)
CategorieŽn: Home automation, Raspberry pi, Views: 8.651

Wil jij ook je collega's verbazen (of irriteren) met een dingdonggeluid op je telefoon als bij je thuis wordt aangebeld? Zoals beloofd in de laatste alinea van mijn vorige post, nu een verhaaltje over het ontvangen van een notificatie op je telefoon als bij jou de bel gaat.

Lees verder »

Domotica met pimatic, deel 2: temperatuur meten met een DS18B20

Door K-Jay op woensdag 6 januari 2016 14:41 - Reacties (14)
CategorieŽn: Home automation, Raspberry pi, Views: 6.349

In mijn vorige blogpost over pimatic heb ik uitgelegd hoe je pimatic installeert op de Raspberry pi en hoe je vervolgens KlikAanKlikUit kunt schakelen. Ook heb ik verteld dat er nog veel meer mogelijk is met pimatic, waaronder het meten en loggen van temperatuur. Hoe je dat doet, leg ik uit in deze blogpost.

Lees verder »