Stroomkosten, gaskosten en waterkosten zichtbaar maken in Domoticz
In Domoticz is het erg eenvoudig om het stroomverbruik te tonen als je een thermostaat hebt als bijvoorbeeld een Eneco’s Toon. Je ziet dat het verbruik in kW (en bij gas in M3). Nog handiger zou het zijn als je het verbruik in EUR zou kunnen zien. In dit artikel gaan we uitleggen hoe je eenvoudig het verbruik in geld kunt tonen d.m.v. een Python-script.
Allereerst moet je de Toon thermostaat koppelen aan Domoticz. Onderstaande zeven sensoren krijg je dan te zien. In dit voorbeeld gaat het om IDX 6 (Stroom).
Maak nu een Dummy hardware aan:
Klik vervolgens op Create Virtual Sensors en maak een Virtual Sensor aan van het type Custom Sensor. Na het toevoegen kijk je bij SETUP > DEVICES welk IDX de virtuele sensor gekregen heeft. Dit IDX hebben we dadelijk voor het script nodig.
Python-script
Alle sensoren zijn nu in Domoticz zichtbaar, het is tijd voor het Python-script. Er zijn zes regels die je naar jouw situatie moet aanpassen:
regel 17: Vaste kosten per dag in eurocenten (zoals vastrecht)
regel 18: kosten per kW in eurocenten
regel 20: IDX van de energiemeter
regel 21: IDX van de virtuele custom sensor
regel 22: wijzig hier het IP en de poort van jouw Domoticz-installatie
regel 23: wijzig hier het IP en de poort van jouw Domoticz-installatie
Nadat je de wijziging aangebracht hebt plaats je het python-script in de folder /home/pi/domoticz/scripts/python/
met de naam stroomkosten.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ stroomkosten.py Leest 'CounterToday' van de energiemeter uit en schrijft de berekende kosten naar een custom sensor. Het script wordt gedraaid via de crontab. """ import requests import json # Domoticz variabelen - wijzig naar je eigen wens vast = 0 # vaste kosten in eurocenten eenheid = 18.86 # kosten per kW in eurocenten EnergiemeterIDX = '6' CustomSensorIDX = '111' DomoBaseURL = 'http://192.168.2.152:8080/json.htm?type=devices&rid=' DomoWriteURL = 'http://192.168.2.152:8080/json.htm?type=command¶m=udevice&nvalue=0&idx=' # Einde van Domoticz variabelen def domoticzread(idx, var): url = DomoBaseURL + idx response = requests.get(url) jsonData = json.loads(response.text) result = jsonData['result'][0][var] return result; kW = domoticzread(EnergiemeterIDX, 'CounterToday') kWh = kW.split()[0] kosten = round((float(kWh) * eenheid + vast) / 100 ,2) kosten = str(kosten) + " Euro" #print kW, kosten url = DomoWriteURL + CustomSensorIDX + '&svalue=' + kosten r = requests.get(url) |
Crontab
Om ervoor te zorgen dat het script iedere 10 minuten uitgevoerd wordt gaan we een cron job instellen. Open de tabel van de cron jobs met commando:
1 |
sudo crontab -e |
En voeg onderstaande regel toe:
*/10 * * * * python /home/pi/domoticz/scripts/python/stroomkosten.py
Vanaf nu zijn de stroomkosten in Domoticz zichtbaar en worden de kosten iedere 10 minuten bijgewerkt.
1 |
Uiteraard kun je bovenstaand python-script ook gebruiken om de gaskosten en waterkosten in Domoticz te tonen.
Bron: MikeF, domoticz forum
Ik ben hier inmiddels een paar uur mee bezig geweest maar ik krijg mijn idx stroomkosten niet geactiveerd. Het script lijkt ergens niet te kloppen. Ik heb het werkend gehad echter na aanpassing van python na versie 3.5.3 lijkt het script niet meer te werken. Heb je nog een suggestie om dit op te lossen?
Geen idee wat er bij je fout gaat… hier werkt het gewoon met de laatste update (Python 3.5.3).
He hallo.
Bizar wat een mooi script…
Alleen vraagje, Kan hij misschien ook “gewoon ” in de Domoticz interne Python editor gezet worden?
Juist door crontabs, en de externe script plaat, wordt hij minder makkelijk.
En voor een backup in Domoticz heb je alles incl de interne editor..
Telt dit script evt ook op?
Om te kijken wat een teruglever idx opbrengt?
Probeer het eens en laat het hier weten of het werkt 😉
Voor een dagelijkse back-up: https://ehoco.nl/dagelijkse-backup-van-domoticz/
hahaha Ik wou dat ik het kon….
Ik zoek me suf voor mooie scripts..
Maar schrijven of aanpassen.. pffff lukte me dat maar.
Ik ben een bricklayer met een digitale hobby.
maar mijn kennis te klein voor dit.
En in deze tijden moet ik meters maken, om mijn pensioen veilig te stellen..
dus als je ooit tijd hebt,….
GRAAG
Hallo,
Bij het uitvoeren van het script krijg ik de volgende foutmelding:
File “stroomkosten.py”, line 20
url = DomoBaseURL + idx
IndentationError: expected an indented block
Wat kan hier de oorzaak van zijn?
gr.
cor
Welke Python-versie heb je geïnstalleerd?
Aanpassing :
DomoBaseURL = ‘http://192.168.2.152:8080/json.htm?type=devices&rid=’
DomoWriteURL = ‘http://192.168.2.152:8080/json.htm?type=command¶m=udevice&nvalue=0&idx=’
hallo,
ik krijg het scriptje niet werkend.
als laatste zou de custom sensor moeten worden geüpdate met volgende regel:
http://192.168.250.3:8080/json.htm?type=command&Param=udevice&nvalue=0&idx=237&svalue=1.32 Euro
maar gebeurt niet
als de url manueel uitvier krijg ik
{
“status” : “ERR”
}
wat kan de oorzaak zijn? moet ik in domoticz nog iet vrij zetten om dit toe te laten?
In Domoticz: Setup > Settings
Heb je de juiste ip-adres(sen) bij Local Networks staan?
jij bedoeld onder “Lokale netwerken (geen gebruikersnaam/wachtwoord)”
daar is 192.168.250.3 ingevuld
Hi,
Ik heb hetzelfde probleem.
Ik krijg een http 200 (Ok), en een error.
Als ik met Wireshark kijk, dan lijkt alles ok te gaan, er kan met Domoticz gecommuniceerd te worden.
In het script heb ik wat debug statements geplaatst om te kijken wat er fout gaat. Zo laat ik de foutcode ook naar de Domoticz log schrijven:
DomoMessageURL = ‘http://192.168.178.11:8080/json.htm?type=command¶m=addlogmessage&message=’urlmessage= DomoMessageURL + r.text
print (r.status_code, r.reason)
print (r.text)
s = requests.get (urlmessage)
In de Domoticz log zie je de message ook daadwerkelijk weggeschreven.
Ik ben er nog niet uit waarom de custom sensor niet wordt geüpdatet……. Wellicht jij wel……
Wat anders:
In de cron job staat volgens mij een fout, klopt dit?
*/10 * * * * python /home/pi/domoticz/scripts/python/stroomkosten.py
Forward slash en sterretje voor de forward slash weghalen:
10 * * * * python /home/pi/domoticz/scripts/python/stroomkosten.py
Nee, de cron job is juist: iedere 10 minuten zal het script draaien (13.10, 13.20, 13.30, 13.40, etc).
Als je de regel gebruikt die jij geschreven hebt dan zal het script “10 over x uur” (13.10, 14.10, 15.10, etc.) draaien.
ok, weer wat geleerd.
Het zit hem in de argumenten van de json aanroep.
Dit script gebruikt:
Aanroep op deze website: DomoWriteURL = ‘http://192.168.2.152:8080/json.htm?type=command&Param=udevice&nvalue=0&idx=’
De Domoticz documentatie zegt:
Aangepaste aanroep: http://192.168.178.11:8080/json.htm?type=command¶m=udevice&idx=81&nvalue=0&svalue=1.03 Euro
de idx ziet bij de eerste aanroep helemaal achteraan, tezamen met de waarde.
Bij de 2e aanroep zit de idx waarde niet achteraan. Ik krijg hier direct de juiste reactie uit.
Ik heb de url direct in een webbrowser geplakt en uitgevoerd. Met de Ontwikkel tools van Chrome zie je wat de response is. Je kunt ook het programma Postman gebruiken als je dat handiger vindt.
Voor mij is het probleem opgelost. Het ligt hem niet aan welke python versie je gebruikt.
Ook niet in het opnieuw aanmaken van de custom sensor etc.
Genuanceerder, het zit hem in de volgorde van de argumenten/keys achter de json.htm?
Het werkt nog steeds!
Dit hele script werkt trouwens ook prima als je direct je stroommeter uit leest met een P1 kabel, daar is niet specifiek een Toon voor nodig 😉 Mogelijk ook even lief om te vermelden omdat je nu specifiek spreekt over dat je Toon moet koppelen.
Een recente update heeft er voor gezorgd dat scripts niet altijd juist getoond werden. Dit is nu hersteld.