Waterzijdig inregelen van je vloerverwarming met een Raspberry Pi

Note to English readers: This post is in Dutch as it discusses how to finetune a typical domestic central heating installation commonly found in The Netherlands. If Google Translate can’t help you out feel free to ask your question in English in the comments section.

Vorig jaar ben ik begonnen met het waterzijdig inregelen van mijn vloerverwarming. Ondanks de vele nuttige posts rondom het onderwerp miste ik een goede aanpak die rekening hield met de traagheid van vloerverwarming en de constante beïnvloeding van het hele systeem als je aan 1 knop draait. Ik heb daarom een dashboard ontwikkeld waarop realtime te zien is wat de retourtemperatuur van iedere groep is, hoe deze zich verhoudt tot het gemiddelde van alle groepen en wat het gevolg is van een bijstelling over de tijd van 1 uur. Dat ziet er als volgt uit:

returntempdashboard

Om dit dashboard zelf te bouwen heb je het volgende nodig:

  • Digitale temperatuursensoren die je kunt bevestigen op een retourleiding. Ik heb zelf de DS18B20 gebruikt, deze zijn eenvoudig en goedkoop te verkrijgen op AliExpress bij vele leveranciers zoals deze voor rond de $ 0,60. Je hebt er 1 nodig per retourleiding.
  • Een weerstand van 4,7KΩ. Per 10 te bestellen bij Kiwi Electronics voor € 1.
  • Een IoT development board met een ESP8266 chip en een draadloze antenne dat de ESP Easy software kant draaien. Ook hier veel leveranciers, zoek naar een NodeMCU board zoals deze voor rond de $ 3. Je hebt er 1 nodig per vloerverwarmingsverdeler.
  • Een Raspberry Pi 3 waarop je de software draait. Ik heb de RPi 3 basisbundel besteld bij Kiwi Electronics, daar zit een goede voeding, SD kaart en behuizing bij. De kit is standaard geprijsd op € 69,95. Je kunt uiteraard ook een andere Linux PC gebruiken maar dan werken de commando’s mogelijk anders.

Voor ieder IoT board heb je daarnaast een USB voeding en een micro-USB kabel nodig. Ook heb je een paar meter CAT5 kabel nodig om de sensoren met elkaar te verbinden, een paar jumper kabeltjes om je sensoren makkelijk op je IoT board te prikken en wat krimpkous om de sensors en de bekabeling netjes te isoleren. Dit had ik al liggen, in totaal heb ik 15*0,60 + 1 + 3*2,60 + 1*69,95 = € 87,75 uitgegeven. Dat hoop ik deze winter terug te gaan verdienen 🙂

Stap 1: Flashen en configuren IoT board met ESP Easy

Je gaat je IoT board voorzien van ESP Easy, hoe je dat moet doen vind je hier. Ik heb release R120 gebruikt (2.0.0 is nog in beta). Nadat je ESP Easy hebt ingeladen staat hier hoe je ermee kan inloggen op je draadloze netwerk.

Eenmaal juist geconfigureerd kun je in je webbrowser naar het IP adres van ESP Easy surfen. Je ziet dan een eenvoudige website met een aantal menu-opties. Hier kun je nu nog niet zoveel, eerst moet je je sensoren gaan aansluiten.

Stap 2: Solderen en aansluiten sensoren op je IoT board

Tijd om de soldeerbout op te warmen en aan de slag te gaan. De DS18B20 sensoren zijn digitale sensoren die parallel aan elkaar kunnen worden aangesloten. Dat ziet er schematisch zo uit (pin headers zijn van een Pi):

Voor het aansluiten gebruik je bij voorkeur CAT5 (of betere) bekabeling, let daarbij op dat je één twisted pair gebruikt voor de Data en de Gnd zoals hieronder weergegeven. De V+ (in ons geval 3,3 Volt vanaf het IoT board) krijgt een eigen ader. Soldeer geen aderparen aan elkaar, dit heeft een negatief effect op de weerstand (lees: betrouwbaarheid) van je bekabeling.

Aan het einde van je lus met DS18B20 sensoren soldeer je de 4,7 KΩ weerstand tussen de Data en de V+ en voorzie je de draden van een stekkertje door wat jumperkabeltjes aan stukken te knippen. De sensoren sluit je als volgt aan op het IoT board:

  • V+ op een 3V3 pin naar keuze (er zijn er meerdere)
  • Gnd op een GND pin naar keuze (er zijn er meerdere)
  • Data op D5 (dat is eigenlijk GPIO14, voor details zie hier)

De sensoren kun je met een paar tie-wraps met de vlakke kant tegen de retourleiding aan bevestigen. Dit werkt nauwkeurig genoeg, we willen immers het verschil weten in temperatuur tussen de leidingen. Als je alles aan elkaar hebt gesoldeerd, bevestigd en aangesloten dan ziet het er ongeveer zo uit:

Stap 3: Configureren Raspberry Pi met Mosquitto, Influx en Node-Red

Tijd om je Raspberry Pi in te richten. Ik gebruik de standaard Raspbian Jessie installatie met de 4.9 kernel. Je zult de Pi headless gebruiken dus download de Lite versie zonder grafische toeters of bellen. De tutorial om dit op je SD kaart te zetten vind je hier, vergeet niet om een leeg bestand aan te maken op de SD kaart (sudo touch ssh) met de naam ssh zodat je Pi bij de eerste keer opstarten meteen via SSH benaderbaar is.

Als je voor het eerst je Pi benadert via SSH (ssh pi@, password is raspberry) dan kun je het beste de tool raspi-config draaien. Daarmee stel je snel je hostname (pi3server in mijn geval), tijdzone en locales in en dat scheelt je weer foutmeldingen tijdens het installeren van de volgende applicaties. Daarna draai je sudo apt-get update en daarna sudo apt-get upgrade zodat je helemaal up to date bent. Ik heb de Pi met een netwerkkabel aangesloten op mijn router, mocht je de Pi via wireless aan willen sluiten dan staat hier hoe je dat kunt doen.

Installatie van Influx

Influx is een database die alle data wegschrijft met een timestamp en is daarom goed geschikt voor het opslaan van onze retourtemperaturen. Een andere functie van Influx is het zelf continu uitvoeren van berekeningen en deze opslaan naast de bestaande data, deze functie gebruiken we om de gemiddelde retourtemperatuur uit te rekenen. De installatie van influx is eenvoudig, de instructie om de Influx repository toe te voegen aan je Pi staat hier, voer de commando’s in voor Debian users. Na installatie kun je de Influx console openen (typ influx). Je ziet dan een > en typt de volgende commando’s in:

CREATE DATABASE testdb
CREATE RETENTION POLICY “a_year” ON testdb DURATION 52w REPLICATION 1 default
CREATE CONTINUOUS QUERY “cq_averageALL” ON “testdb” BEGIN SELECT mean(“temp”) INTO “averagereturntempALL” FROM “returntemp” GROUP BY time(1m) END
CREATE CONTINUOUS QUERY “cq_averageGND” ON “testdb” BEGIN SELECT mean(“temp”) INTO “averagereturntempGND” FROM “returntemp” WHERE “floor” = ‘GND’ GROUP BY time(1m) END
CREATE CONTINUOUS QUERY “cq_average1ST” ON “testdb” BEGIN SELECT mean(“temp”) INTO “averagereturntemp1ST” FROM “returntemp” WHERE “floor” = ‘1ST’ GROUP BY time(1m) END
CREATE CONTINUOUS QUERY “cq_average2nd” ON “testdb” BEGIN SELECT mean(“temp”) INTO “averagereturntemp2ND” FROM “returntemp” WHERE “floor” = ‘2ND’ GROUP BY time(1m) END

De eerste 2 commando’s maken een database genaamd testdb aan met een retention policy van 1 jaar, dit kun je zelf inkorten naar een half jaar (26w in plaats van 52w) of minder. De CONTINUOUS QUERY commando’s zijn de berekeningen die de database uitvoert op je retourtemperaturen. Je bent nu klaar met de installatie van influx!

Installatie van Mosquitto

Mosquitto is een MQTT server waar ESP Easy de retourtemperaturen naartoe publiceert. Deze kunnen we dan in Node-Red uitlezen en wegschrijven naar Influx. Ook Mosquitto voeg je gemakkelijk toe aan je reposity, zie deze uitleg. Om Mosquitto automatisch te laten opstarten typ je:

sudo systemctl enable mosquitto.service

Er is verder geen configuratie benodigd.

Installatie van Node.js en Node-RED

Eerst installeren we Node.js, we gebruikt de 6.x LTS (Long Time Support) versie. Met deze commando’s voeg je Node.js toe aan je repository en installeer je deze:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash –
sudo apt-get install -y nodejs

Daarna kun je Node-RED zelf installeren, de instructies daarvoor staan hier. Als Node-RED geïnstalleerd is moet je nog een script downloaden om deze automatisch te laten starten, daarvoor voer je deze commando’s uit:

sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop
sudo chmod +x /usr/bin/node-red-st*

Standaard wijst dit script 256 MB RAM toe aan Node-RED. Met de Pi 3 is er gelukkig meer geheugen beschikbaar dan op de Pi 1 en kun je dit getal beter verhogen. Open daarvoor met je favoriete teksteditor het configuratiebestand en verander de volgende regel:

pico /lib/systemd/system/nodered.service

Zoek en pas aan –> Environment=”NODE_OPTIONS=–max-old-space-size=512

Ctrl-O, dan Ctrl-X

sudo systemctl daemon-reload
sudo systemctl enable nodered.service

Als je nu je Pi herstart (sudo reboot) dan zul je na enkele minuten (1 tot 2) kunnen inloggen op http://pi3server:1880 Het kan zijn dat je router dit niet ondersteunt of dat je je Pi een andere hostname hebt gegeven, vervang dan “pi3server” in de URL door het IP adres van je Pi of door een FQDN (bij xs4all routers is dit bijvoorbeeld pi3server.fritz.box).

Als je Node-RED hebt opgestart moet je nog een aantal extra modules installeren voordat je echt aan de slag kunt. Klik daarvoor op het menu-icoon rechtboven en navigeer naar “Manage palette”. Kies in dat venster de tab “Install” en installeer de volgende modules:

node-red-contrib-influxdb
node-red-dashboard

Het scherm ziet er als volgt uit. Typ (een deel van) de naam in, druk op Enter en dan op installeer.

Screen Shot 2017-08-19 at 22.59.10

Stap 4: Configureren ESP Easy

Nu je Influx, Mosquitto en Node-RED hebt draaien kunnen we ESP Easy verder instellen. Log in op het IP adres van je ESP Easy IoT board zoals je dat in stap 1 al eerder hebt gedaan. We geen nu een aantal instellingen aanpassen om ervoor te zorgen dat ESP Easy de temperatuursensoren uitleest en naar je MQTT server (Mosquitto) verstuurt:

Kies “Tools” uit het menu en dan naast de tekst “System” druk je op de knop “Advanced”. Daar vul je op de tweede regel bij Publish Template in: /%sysname%/%valname%

Screen Shot 2017-08-19 at 23.06.27

Kies ‘Config” uit het menu en verander Name: in een eenvoudig te herkennen hostname. Ik heb hier gekozen voor groundlevel. Verder vul je bij Protocol: OpenHAB MQTT in en bij Controller Hostname: De FQDN of het IP adres van je Pi.

Screen Shot 2017-08-19 at 23.06.36

Kies “Devices” en dan op Edit van de eerst regel. Je ziet nu onderstaand scherm. Kies de DS18B20 als temperatuursensor uit de lijst en kies daarna GPIO-14 bij 1st GPIO. Als de ESP Easy je sensoren kan uitlezen verschijnt er een menu bij Device Nr: waar je een sensor kan kiezen. Kies er 1 en vul de overige velden in zoals hieronder aangegeven.

Screen Shot 2017-08-19 at 23.06.52

Als je het goed hebt gedaan zul je nu op de eerste regel na enkele minuten (Let op: Dit kan even duren!) een temperatuur verschijnen zoals hieronder. Nu kun je gaan uitzoeken welke sensor dat is 🙂 het makkelijkste is om eerst alle sensoren toe te voegen en er dan één stevig vast te houden. Je zult na 1 minuut (de sensoren worden eens per minuut uitgelezen) een duidelijke stijging van de temperatuur zien. Zo kun je uitpuzzelen welke sensor op welke groep geplakt zit. Na wat geduld kom je dan tot onderstaand lijstje. Let op het opnummeren van de IDX/Variable, deze heeft een interne functie voor ESP Easy en moet uniek zijn.

Screen Shot 2017-08-16 at 20.36.50

Nu je dit hebt ingesteld zal je IoT board met een interval van 1 minuut de temperatuur per sensor publiceren naar de MQTT server. Deze berichten zien er als volgt uit:

1492182469: Received PUBLISH from ESPClient1 (d0, q0, r0, m0, ‘/groundlevel/BG-Woonkamer-1’, … (5 bytes))

1492182469: Sending PUBLISH to ESPClient1 (d0, q0, r0, m0, ‘/groundlevel/BG-Woonkamer-1’, … (5 bytes))

1492182470: Received PUBLISH from ESPClient1 (d0, q0, r0, m0, ‘/groundlevel/BG-Woonkamer-2’, … (5 bytes))

Je kunt dit ook zelf controleren door de Mosquitto server te stoppen (sudo service mosquitto stop) en op de command line te starten (mosquitto -v) in verbose mode.

Stap 5: Inregelen communicatie en dashboard in Node-Red

Nu komt het leukste deel: Het samenbrengen van alle informatie in Node-RED. Eerst gaan we de retourtemperaturen die je binnenkrijgt van de MQTT server opvangen, formatteren en naar Influx sturen. Dit heet een Flow en ziet er als volgt uit:

Screen Shot 2017-08-19 at 23.30.50

Je kunt flows eenvoudig importeren, ga naar het hamburgermenu rechtboven, kies Import en dan Clipboard. Daarin plak je onderstaande tekst:

[{“id”:”f6489a06.95b788″,”type”:”mqtt in”,”z”:”a5027913.f5fd98″,”name”:””,”topic”:”/groundlevel/#”,”qos”:”0″,”broker”:”d8398787.86b648″,”x”:132,”y”:317,”wires”:[[“b6b87a3.a88b388”]]},{“id”:”3274a96.5d4c756″,”type”:”mqtt in”,”z”:”a5027913.f5fd98″,”name”:””,”topic”:”/1stfloor/#”,”qos”:”0″,”broker”:”d8398787.86b648″,”x”:123.5,”y”:184,”wires”:[[“3b1b3ba4.4d0844”]]},{“id”:”3b1b3ba4.4d0844″,”type”:”function”,”z”:”a5027913.f5fd98″,”name”:”format1ST”,”func”:”var temp = parseFloat(msg.payload);\nvar sensorname = msg.topic.substring(10);\nmsg.payload = [{\n temp: temp\n},\n{\n floor: \”1ST\”,\n group: sensorname\n}];\nreturn msg; \n”,”outputs”:1,”noerr”:0,”x”:438.5,”y”:184,”wires”:[[“5e5fd0e2.14689”]]},{“id”:”b6b87a3.a88b388″,”type”:”function”,”z”:”a5027913.f5fd98″,”name”:”formatGND”,”func”:”var temp = parseFloat(msg.payload);\nvar sensorname = msg.topic.substring(13);\nmsg.payload = [{\n temp: temp\n},\n{\n floor: \”GND\”,\n group: sensorname\n}];\nreturn msg; \n”,”outputs”:1,”noerr”:0,”x”:433,”y”:317,”wires”:[[“5e5fd0e2.14689”]]},{“id”:”5e5fd0e2.14689″,”type”:”influxdb out”,”z”:”a5027913.f5fd98″,”influxdb”:”cd8575.dbb66a88″,”name”:”InfluxDB”,”measurement”:”returntemp”,”precision”:””,”retentionPolicy”:””,”x”:800.5,”y”:276,”wires”:[]},{“id”:”d8398787.86b648″,”type”:”mqtt-broker”,”z”:””,”broker”:”localhost”,”port”:”1883″,”clientid”:””,”usetls”:false,”compatmode”:true,”keepalive”:”60″,”cleansession”:true,”willTopic”:””,”willQos”:”0″,”willPayload”:””,”birthTopic”:””,”birthQos”:”0″,”birthPayload”:””},{“id”:”cd8575.dbb66a88″,”type”:”influxdb”,”z”:””,”hostname”:”pi3server.fritz.box”,”port”:”8086″,”protocol”:”http”,”database”:”testdb”,”name”:”InfluxDB”,”usetls”:false,”tls”:””}]

Nu heb je als het goed is dezelfde Flow op je scherm en kun je gaan aanpassen. Ik heb 2 verdiepingen weergegeven, je kunt overbodige nodes verwijderen zodat je alleen de begane grond (=groundlevel) overhoudt. Dubbelklik op de paarse node die /groundlevel/# heet, je ziet dan onderstaand scherm:

Screen Shot 2017-08-19 at 23.36.36

Klik op het potlood om je MQTT server (= broker) toe te voegen, je ziet dan een scherm zoals onderstaand. Neem de instellingen over (de andere tabs zijn niet nodig), druk op Add en in het volgende venster op Done. Je hebt nu een abonnement op alle retourtemperaturen van de begane grond.

Screen Shot 2017-08-19 at 23.25.06

Dubbelklik nu op de node die formatGND heet, je ziet dan een veld met Javascript code. Node-RED is geheel gebouwd in Javascript en dat betekent dat je makkelijk je eigen functies kunt schrijven.

Screen Shot 2017-08-19 at 23.52.35

Deze functie leest de sensorwaardes uit die naar de MQTT server gestuurd worden, dit zijn echter strings en daar kan Influx niet mee werken. In de eerste regel code zetten we de temperatuur dus om naar een getal. In de tweede regel knippen we de eerste 13 letters af van de naam van het MQTT bericht zodat we alleen de naam van de sensor overhouden in Influx. In regel 7 staat de afkorting van de verdieping, in dit geval GND. Pas de code aan indien nodig.

Dan volgt het koppelen met de Influx database. Dubbelklik op de Influx node en klik op het potlood naast de tekst Add new Influxdb… Je ziet dan dit scherm, neem de instellingen over.

Screen Shot 2017-08-19 at 23.27.09

Druk daarna op Add. je komt dan terug in het eerdere venster (zie onder). Vul bij Measurement de tekst returntemp in. Onder deze “tabel” worden alle retourtemperaturen opgeslagen.

Screen Shot 2017-08-19 at 23.27.02

Druk nu op de grote rode knop Deploy rechtsboven. Als je alles goed hebt ingesteld gaat Node-RED vanaf nu je temperatuurdata opslaan in de Influx database. Dat kun je zelf controleren door op de command line het volgende in te typen:

influx
Connected to http://localhost:8086 version 1.3.1
InfluxDB shell version: 1.3.3
> use testdb
Using database testdb
> select * from returntemp

Je krijgt als het goed is dan onderstaand resultaat te zien:

1503173196277338006 GND   Hal-4        21

1503173197226135884 GND   Woonkamer-1  21.31

1503173199052534609 GND   Woonkamer-2  21.25

1503173200056344977 GND   Keuken-5     21

1503173201062343300 GND   Berging-6    21

1503173202894103400 GND   Woonkamer-3  20.88

Nu je data beschikbaar is rest er nog een laatste stap en dat is het weergeven in een dashboard. Daarvoor maken we een nieuwe flow. Ga naar het hamburgermenu rechtsboven, kies Import en Clipboard en plak daarin onderstaande tekst:

[{“id”:”a4085cc4.caca4″,”type”:”tab”,”label”:”dashboard”,”disabled”:false,”info”:””},{“id”:”fea655f5.89af18″,”type”:”inject”,”z”:”a4085cc4.caca4″,”name”:””,”topic”:””,”payload”:””,”payloadType”:”date”,”repeat”:”60″,”crontab”:””,”once”:true,”x”:136,”y”:878,”wires”:[[“4da54f93.3c8e1″,”61b47228.d9416c”,”ead3c5e3.6571d8″,”f3bb0033.8320a”,”41925978.3b0358″,”b58cbee1.cd4df”,”751b64d8.71b92c”,”c87e0f14.78579″,”3aae1b1b.73a614″,”f28f4671.665f18″,”25f3a3f6.f02c2c”,”7882743.66ddd8c”,”35b6a7e9.297a98″,”960110f5.be4d8″,”cee976df.676db8″,”2b963f72.f3542″,”1ff9f8fb.2eed77″]]},{“id”:”4da54f93.3c8e1″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Woonkamer-1″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Woonkamer-1′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:420,”y”:208,”wires”:[[“d379a865.470b98”]]},{“id”:”a8ee8f8d.bd099″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”81a27fd9.1f5fe”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Woonkamer-1″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:805,”y”:229,”wires”:[]},{“id”:”d379a865.470b98″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Woonkamer-1″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:589,”y”:208,”wires”:[[“a8ee8f8d.bd099″,”93bd9e5a.44134”]]},{“id”:”93bd9e5a.44134″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”780aed60.895484″,”order”:2,”width”:0,”height”:0,”label”:”Woonkamer-1″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:805.5,”y”:190,”wires”:[[],[]]},{“id”:”61b47228.d9416c”,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”averagereturntempALL”,”query”:”select LAST(\”mean\”) FROM \”averagereturntempall\””,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:402,”y”:163,”wires”:[[“daa2220f.93fae”,”40397165.f29ed”,”c140acdc.98e2a”,”a715febb.548f3″]]},{“id”:”daa2220f.93fae”,”type”:”ui_text”,”z”:”a4085cc4.caca4″,”group”:”81a27fd9.1f5fe”,”order”:3,”width”:0,”height”:0,”name”:””,”label”:”CV Retourtemp”,”format”:”{{msg.payload[0].last | number:2}}”,”layout”:”row-center”,”x”:804.5,”y”:151,”wires”:[]},{“id”:”ead3c5e3.6571d8″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Woonkamer-2″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Woonkamer-2′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:417,”y”:290,”wires”:[[“336e8f9d.92de1”]]},{“id”:”4c1332f7.29d7ac”,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”81a27fd9.1f5fe”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Woonkamer-2″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:807,”y”:312,”wires”:[]},{“id”:”336e8f9d.92de1″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Woonkamer-2″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:593,”y”:290,”wires”:[[“4c1332f7.29d7ac”,”54dad0a.9637b3″]]},{“id”:”f3bb0033.8320a”,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Woonkamer-3″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Woonkamer-3′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:412,”y”:378,”wires”:[[“ed319690.971378”]]},{“id”:”1b1a9eca.62d121″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”81a27fd9.1f5fe”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Woonkamer-3″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:808,”y”:393,”wires”:[]},{“id”:”ed319690.971378″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Woonkamer-3″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:595,”y”:375,”wires”:[[“1b1a9eca.62d121″,”c7f94b32.ee3258”]]},{“id”:”41925978.3b0358″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Hal-4″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Hal-4′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:419,”y”:453,”wires”:[[“2d2617f6.30a0c8”]]},{“id”:”6dc7e1c9.cbe65″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”81a27fd9.1f5fe”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Hal-4″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:775,”y”:474,”wires”:[]},{“id”:”2d2617f6.30a0c8″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Hal-4″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:595,”y”:453,”wires”:[[“6dc7e1c9.cbe65″,”6455f3a8.eaffec”]]},{“id”:”b58cbee1.cd4df”,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Keuken-5″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Keuken-5′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:415,”y”:530,”wires”:[[“1b413a8e.5302f5”]]},{“id”:”13dd8d30.5f3ca3″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”81a27fd9.1f5fe”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Keuken-5″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:784,”y”:548,”wires”:[]},{“id”:”1b413a8e.5302f5″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Keuken-5″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:599,”y”:529,”wires”:[[“13dd8d30.5f3ca3″,”ef739c5d.f76ba”]]},{“id”:”751b64d8.71b92c”,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Berging-6″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Berging-6′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:410,”y”:603,”wires”:[[“561aaa98.5bfbf4”]]},{“id”:”bd3fd343.cb22c”,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”81a27fd9.1f5fe”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Berging-6″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:784,”y”:624,”wires”:[]},{“id”:”561aaa98.5bfbf4″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Berging-6″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:600,”y”:603,”wires”:[[“bd3fd343.cb22c”,”3c7e0369.43ccfc”]]},{“id”:”54dad0a.9637b3″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”780aed60.895484″,”order”:3,”width”:0,”height”:0,”label”:”Woonkamer-2″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:806,”y”:270,”wires”:[[],[]]},{“id”:”c7f94b32.ee3258″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”780aed60.895484″,”order”:4,”width”:0,”height”:0,”label”:”Woonkamer-3″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:809,”y”:353,”wires”:[[],[]]},{“id”:”6455f3a8.eaffec”,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”780aed60.895484″,”order”:5,”width”:0,”height”:0,”label”:”Hal-4″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:776,”y”:434,”wires”:[[],[]]},{“id”:”ef739c5d.f76ba”,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”780aed60.895484″,”order”:6,”width”:0,”height”:0,”label”:”Keuken-5″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:787,”y”:511,”wires”:[[],[]]},{“id”:”3c7e0369.43ccfc”,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”780aed60.895484″,”order”:7,”width”:0,”height”:0,”label”:”Berging-6″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:786,”y”:586,”wires”:[[],[]]},{“id”:”ea45370e.cc44f8″,”type”:”ui_text”,”z”:”a4085cc4.caca4″,”group”:”780aed60.895484″,”order”:1,”width”:0,”height”:0,”name”:””,”label”:”Retourtemp BG”,”format”:”{{msg.payload[0].last | number:2}}”,”layout”:”row-center”,”x”:800.5,”y”:92,”wires”:[]},{“id”:”c87e0f14.78579″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”averagereturntempGND”,”query”:”select LAST(\”mean\”) FROM \”averagereturntempGND\””,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:408,”y”:101,”wires”:[[“ea45370e.cc44f8”]]},{“id”:”f28f4671.665f18″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Slaapkamer-1″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Slaapkamer-1′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:415,”y”:823,”wires”:[[“cb035165.a64e1”]]},{“id”:”8d2dc3f7.94e5b”,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”843e7357.0b845″,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Slaapkamer-1″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:811,”y”:838,”wires”:[]},{“id”:”cb035165.a64e1″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Slaapkamer-1″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:598,”y”:820,”wires”:[[“8d2dc3f7.94e5b”,”831ddb81.475ba8″]]},{“id”:”25f3a3f6.f02c2c”,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Slaapkamer-2″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Slaapkamer-2′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:405,”y”:898,”wires”:[[“c87db96.50c4248”]]},{“id”:”2a026926.6ccce6″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”843e7357.0b845″,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Slaapkamer-2″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:808,”y”:919,”wires”:[]},{“id”:”c87db96.50c4248″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Slaapkamer-2″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:598,”y”:898,”wires”:[[“2a026926.6ccce6″,”5e07de28.8e958”]]},{“id”:”7882743.66ddd8c”,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Slaapkamer-3″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Slaapkamer-3′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:411,”y”:975,”wires”:[[“cb172f69.49dda”]]},{“id”:”8719a8ea.a42768″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”843e7357.0b845″,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Slaapkamer-3″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:764,”y”:993,”wires”:[]},{“id”:”cb172f69.49dda”,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Slaapkamer-3″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:602,”y”:974,”wires”:[[“8719a8ea.a42768″,”ff79d64c.ddc058”]]},{“id”:”35b6a7e9.297a98″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Badkamer-4″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Badkamer-4′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:423,”y”:1048,”wires”:[[“10245d19.617e93”]]},{“id”:”ca5f9a4f.971698″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”843e7357.0b845″,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Badkamer-4″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:754,”y”:1069,”wires”:[]},{“id”:”10245d19.617e93″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Badkamer-4″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:603,”y”:1048,”wires”:[[“ca5f9a4f.971698″,”f21cf75e.4c94b8”]]},{“id”:”831ddb81.475ba8″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”3515892a.30f126″,”order”:4,”width”:0,”height”:0,”label”:”Slaapkamer-1″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:812,”y”:798,”wires”:[[],[]]},{“id”:”5e07de28.8e958″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”3515892a.30f126″,”order”:5,”width”:0,”height”:0,”label”:”Slaapkamer-2″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:809,”y”:879,”wires”:[[],[]]},{“id”:”ff79d64c.ddc058″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”3515892a.30f126″,”order”:6,”width”:0,”height”:0,”label”:”Slaapkamer-3″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:810,”y”:956,”wires”:[[],[]]},{“id”:”f21cf75e.4c94b8″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”3515892a.30f126″,”order”:7,”width”:0,”height”:0,”label”:”Badkamer-4″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:756,”y”:1031,”wires”:[[],[]]},{“id”:”3aae1b1b.73a614″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”averagereturntemp1ST”,”query”:”select LAST(\”mean\”) FROM \”averagereturntemp1ST\””,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:418,”y”:769,”wires”:[[“d0ef2c5a.91874”]]},{“id”:”d0ef2c5a.91874″,”type”:”ui_text”,”z”:”a4085cc4.caca4″,”group”:”3515892a.30f126″,”order”:1,”width”:0,”height”:0,”name”:””,”label”:”Retourtemp 1e”,”format”:”{{msg.payload[0].last | number:2}}”,”layout”:”row-center”,”x”:810.5,”y”:760,”wires”:[]},{“id”:”40397165.f29ed”,”type”:”ui_text”,”z”:”a4085cc4.caca4″,”group”:”843e7357.0b845″,”order”:3,”width”:0,”height”:0,”name”:””,”label”:”CV Retourtemp”,”format”:”{{msg.payload[0].last | number:2}}”,”layout”:”row-center”,”x”:809,”y”:722,”wires”:[]},{“id”:”cee976df.676db8″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Kamer-1″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Kamer-1′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:394,”y”:1275,”wires”:[[“82df671.b6c1498”]]},{“id”:”fdfe59c.5febea8″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”3d224515.ebe47a”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Kamer-1″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:747,”y”:1290,”wires”:[]},{“id”:”82df671.b6c1498″,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Kamer-1″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:597,”y”:1272,”wires”:[[“fdfe59c.5febea8″,”494d10f2.599c9”]]},{“id”:”2b963f72.f3542″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Kamer-2″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Kamer-2′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:384,”y”:1350,”wires”:[[“d3d04323.742db”]]},{“id”:”308763ff.713b5c”,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”3d224515.ebe47a”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Kamer-2″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:744,”y”:1371,”wires”:[]},{“id”:”d3d04323.742db”,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Kamer-2″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:597,”y”:1350,”wires”:[[“308763ff.713b5c”,”6d810fa5.de24a”]]},{“id”:”1ff9f8fb.2eed77″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”Kamer-3″,”query”:”select LAST(\”temp\”) FROM \”returntemp\” WHERE \”group\” = ‘Kamer-3′”,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:390,”y”:1427,”wires”:[[“87c32122.279d”]]},{“id”:”d3e9f8f5.6911c8″,”type”:”ui_gauge”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”3d224515.ebe47a”,”order”:0,”width”:0,”height”:0,”gtype”:”gage”,”title”:”Kamer-3″,”label”:”Graden”,”format”:”{{value | number:2}}”,”min”:”15″,”max”:”45″,”colors”:[“#00b500″,”#e6e600″,”#ca3838″],”seg1″:””,”seg2″:””,”x”:743,”y”:1445,”wires”:[]},{“id”:”87c32122.279d”,”type”:”change”,”z”:”a4085cc4.caca4″,”name”:”MV”,”rules”:[{“t”:”move”,”p”:”payload[0].last”,”pt”:”msg”,”to”:”payload”,”tot”:”msg”},{“t”:”set”,”p”:”topic”,”pt”:”msg”,”to”:”Kamer-3″,”tot”:”str”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:601,”y”:1426,”wires”:[[“d3e9f8f5.6911c8″,”7faea596.719d1c”]]},{“id”:”494d10f2.599c9″,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”db5bf62e.561068″,”order”:4,”width”:0,”height”:0,”label”:”Kamer-1″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:748,”y”:1250,”wires”:[[],[]]},{“id”:”6d810fa5.de24a”,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”db5bf62e.561068″,”order”:5,”width”:0,”height”:0,”label”:”Kamer-2″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:745,”y”:1331,”wires”:[[],[]]},{“id”:”7faea596.719d1c”,”type”:”ui_chart”,”z”:”a4085cc4.caca4″,”name”:””,”group”:”db5bf62e.561068″,”order”:6,”width”:0,”height”:0,”label”:”Kamer-3″,”chartType”:”line”,”legend”:”false”,”xformat”:”HH:mm:ss”,”interpolate”:”linear”,”nodata”:””,”dot”:false,”ymin”:”15″,”ymax”:”45″,”removeOlder”:1,”removeOlderPoints”:””,”removeOlderUnit”:”3600″,”cutout”:0,”useOneColor”:false,”colors”:[“#1f77b4″,”#aec7e8″,”#ff7f0e”,”#2ca02c”,”#98df8a”,”#d62728″,”#ff9896″,”#9467bd”,”#c5b0d5″],”x”:746,”y”:1408,”wires”:[[],[]]},{“id”:”960110f5.be4d8″,”type”:”influxdb in”,”z”:”a4085cc4.caca4″,”influxdb”:”cd8575.dbb66a88″,”name”:”averagereturntemp2ND”,”query”:”select LAST(\”mean\”) FROM \”averagereturntemp2ND\””,”rawOutput”:false,”precision”:””,”retentionPolicy”:””,”x”:417,”y”:1221,”wires”:[[“e9263bad.ef66e8”]]},{“id”:”e9263bad.ef66e8″,”type”:”ui_text”,”z”:”a4085cc4.caca4″,”group”:”db5bf62e.561068″,”order”:1,”width”:0,”height”:0,”name”:””,”label”:”Retourtemp 2e”,”format”:”{{msg.payload[0].last | number:2}}”,”layout”:”row-center”,”x”:766.5,”y”:1212,”wires”:[]},{“id”:”c140acdc.98e2a”,”type”:”ui_text”,”z”:”a4085cc4.caca4″,”group”:”3d224515.ebe47a”,”order”:3,”width”:0,”height”:0,”name”:””,”label”:”CV Retourtemp”,”format”:”{{msg.payload[0].last | number:2}}”,”layout”:”row-center”,”x”:765,”y”:1174,”wires”:[]},{“id”:”442392f0.800d5c”,”type”:”comment”,”z”:”a4085cc4.caca4″,”name”:”2e Verdieping”,”info”:””,”x”:753,”y”:1135,”wires”:[]},{“id”:”d33359b3.a8f778″,”type”:”comment”,”z”:”a4085cc4.caca4″,”name”:”Begane Grond”,”info”:””,”x”:795,”y”:51,”wires”:[]},{“id”:”f51a2458.015af8″,”type”:”comment”,”z”:”a4085cc4.caca4″,”name”:”1e Verdieping”,”info”:””,”x”:798,”y”:683,”wires”:[]},{“id”:”a715febb.548f3″,”type”:”function”,”z”:”a4085cc4.caca4″,”name”:”MV+rnd”,”func”:”var temp = msg.payload[0].last.toFixed(2);\nmsg.payload = temp;\nmsg.topic = \”Retourtemp\”;\nreturn msg;”,”outputs”:1,”noerr”:0,”x”:603,”y”:127,”wires”:[[“93bd9e5a.44134″,”54dad0a.9637b3″,”c7f94b32.ee3258″,”6455f3a8.eaffec”,”ef739c5d.f76ba”,”3c7e0369.43ccfc”,”831ddb81.475ba8″,”5e07de28.8e958″,”ff79d64c.ddc058″,”f21cf75e.4c94b8″,”494d10f2.599c9″,”6d810fa5.de24a”,”7faea596.719d1c”]]},{“id”:”cd8575.dbb66a88″,”type”:”influxdb”,”z”:””,”hostname”:”pi3server.fritz.box”,”port”:”8086″,”protocol”:”http”,”database”:”testdb”,”name”:”InfluxDB”,”usetls”:false,”tls”:””},{“id”:”81a27fd9.1f5fe”,”type”:”ui_group”,”z”:””,”name”:”BG-Meters”,”tab”:”b8af07b9.78cd58″,”order”:1,”disp”:false,”width”:”6″},{“id”:”780aed60.895484″,”type”:”ui_group”,”z”:””,”name”:”BG-Grafieken”,”tab”:”b8af07b9.78cd58″,”order”:2,”disp”:false,”width”:”6″},{“id”:”843e7357.0b845″,”type”:”ui_group”,”z”:””,”name”:”1e-Meters”,”tab”:”2e3e88f7.c1dca8″,”order”:1,”disp”:false,”width”:”6″},{“id”:”3515892a.30f126″,”type”:”ui_group”,”z”:””,”name”:”1e-Grafieken”,”tab”:”2e3e88f7.c1dca8″,”order”:2,”disp”:false,”width”:”6″},{“id”:”3d224515.ebe47a”,”type”:”ui_group”,”z”:””,”name”:”2e-Meters”,”tab”:”53519d45.e5e8b4″,”order”:2,”disp”:false,”width”:”6″},{“id”:”db5bf62e.561068″,”type”:”ui_group”,”z”:””,”name”:”2e-Grafieken”,”tab”:”53519d45.e5e8b4″,”order”:2,”disp”:false,”width”:”6″},{“id”:”b8af07b9.78cd58″,”type”:”ui_tab”,”z”:””,”name”:” Begane grond”,”icon”:”dashboard”,”order”:1},{“id”:”2e3e88f7.c1dca8″,”type”:”ui_tab”,”z”:””,”name”:”1e verdieping”,”icon”:”dashboard”,”order”:2},{“id”:”53519d45.e5e8b4″,”type”:”ui_tab”,”z”:””,”name”:”2e verdieping”,”icon”:”dashboard”,”order”:3}]

Voordat je op OK klikt kies je bij Import to: voor de optie New flow. Je krijgt dan een flow te zien als onderstaand:

Screen Shot 2017-08-20 at 00.09.21

Dit is mijn complete flow voor alle verdiepingen. Je hoeft hier niets meer in te stellen en je kunt alles wat je niet nodig hebt weggooien. Druk daarna opnieuw op Deploy en surf dan naar http://:1880/ui/ en je ziet je dashboard in actie!

Opties

Om zuinig om te gaan met het aantal beschikbare writes op mijn SD kaart heb ik de Influx database inmiddels op een USB stick draaien. Ook heb ik een flow waarin ik via websockets de actuele status van de CV uitlees via otmonitor om zo geen data weg te hoeven schrijven als de CV niet actief is. Deze implementatie heb ik nog niet gedocumenteerd omdat de websocket implementatie waar Node-RED op leunt niet werkt met otmonitor zonder aanpassingen in Node-RED zelf. Verder sla ik ook andere informatie vanuit otmonitor op in Influx zodat ik de data ook in Grafana kan weergeven. Winter is coming…

Advertisements

Comments are closed.

%d bloggers like this: