Waterflowmeter in Domoticz
In een eerder artikel hebben hebben we uitgelegd hoe je een watermeter kunt uitlezen en het verbruik in Domoticz weer kunt geven. Het verbruik kun je per uur, dag, week, maand of jaar inzien. Maar wat nu als je het verbruik real-time wilt zien? Bijvoorbeeld als je de tuin aan het beregenen bent? Uiteraard heeft Ehoco hier een oplossing voor: de waterflowmeter!
Allereerst moet je jouw watermeter kunnen uitlezen in Domoticz. Daarna gaan we twee user variables aanmaken. Ga naar Settings > More Options > User variables. Maak user variable begin en begintijd aan, beiden van het type “Integer” en met een variable Value van 0 (onderstaand zie je mijn current values, deze moet je dus niet invullen!!).
De volgende stap is om een virtuele sensor aan te maken. Ga naar Setup -> Hardware en kies bij Type voor Dummy. Je mag zeg een herkenbare naam kiezen:
Zodra de Dummy Hardware toegevoegd is kunnen de virtuele sensoren gaan aanmaken. Klik hiervoor op Create Virtual Sensors (in het donkerblauw).
Maak nu de virtuele sensor aan van het type “Waterflow” en geef “Waterflow” als naam van de sensor:
Waterflowmeter script
De laatste stap is het script. Ga naar Setup > More Options > Events en kies voor een LUA event (van het type Device). Kopieer onderstaand script naar Domoticz. Op regel vier pas je het IDX aan naar het nummer dat jouw waterflow sensor gekregen heeft. Activeer het event en sla het op.
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 42 43 44 45 46 47 48 49 50 51 52 |
commandArray = {} -- IDX Waterflow jIDX = 235 -- Begintijd in uservariables zetten if (uservariables['begin'] == 0) then -- print ("begin instellen") commandArray['Variable:begin'] = tostring(1) commandArray['Variable:begintijd']= tostring(os.time()) end -- Decimalen function round(num, numDecimalPlaces) local mult = 10^(numDecimalPlaces or 0) return math.floor(num * mult + 0.5) / mult end -- timedifference function timedifference(s) year = string.sub(s, 1, 4) month = string.sub(s, 6, 7) day = string.sub(s, 9, 10) hour = string.sub(s, 12, 13) minutes = string.sub(s, 15, 16) seconds = string.sub(s, 18, 19) t1 = os.time() t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds} difference = os.difftime (t1, t2) return difference end -- Script if (devicechanged['GPIO Watermeter'] == 'Off') then btijd = uservariables['begintijd'] duur = os.time() - btijd lpm = 60 /duur lpm = round(lpm, 2) commandArray['Variable:begintijd']= tostring(os.time()) commandArray['UpdateDevice'] = ''..jIDX..'|0|'..lpm..'' else -- Keep a live device and set flow to zero if otherdevices_lastupdate["GPIO Watermeter"] == nil then commandArray['UpdateDevice'] = ''..jIDX..'|0|'..flow..'' elseif (timedifference(otherdevices_lastupdate["Waterverbruik"]) > 300) then print("Laatste waterverbruik is meer dan 5 minuten geleden, waterflow is 0") flow = 0 commandArray['UpdateDevice'] = ''..jIDX..'|0|'..flow..'' end end return commandArray |
Vanaf nu zal de waterflowmeter in Domoticz weergegeven worden, in onderstaand voorbeeld is het verbruik 12 liter per minuut.
Bron: Melissen
Ik heb kan eindelijk mijn watermeter uitlezen met jouw pythonscript. Super bedankt. Ik probeer ook direct je waterflowmeter maar krijg de volgende foutmelding terug in mijn log:
‘ Error: EventSystem: in Waterflow: [string “commandArray = {}…”]:22: bad argument #1 to ‘sub’ (string expected, got nil)’
Weet jij wat dit kan zijn?
Remko,
Ik had dit ook maar ik heb toen even het waterflow script verwijderd en alles opnieuw ingevoerd en nu werkt het.
Zou deze error veroorzaakt kunnen worden omdat ik mijn waterverbruik in domoticz inzichtelijk maak volgens het (ehoco) python script en dit waterflowscript gebaseerd is op het (waterverbruik) script?
dit script veroorzaakt onevenredig veel logging. elke milliseconde wordt dit script blijkbaar getriggered terwijl naar mijn mening het script pas af moet gaan als er waterverbruik is. het device is ook netjes geupdate alleen maar als er verbruik is.
kan er op de eoa manier misschien meer afhankelijkheden worden gecreeerd zodat ie niet zo vaak (nodeloos) afgaat?
Waarschijnlijk heb je iets verkeerd gedaan. Hier wordt het alleen getriggert bij waterverbruik en na 5 minuten 1 keer.
je hebt gelijk. mijn script zag er stuk langer uit dan die van jou. raar. heb je het script misschien geupdate?
heb nu iig de versie van je site geplukt en erin gegooid en nu is de log vrij van al die waterflow executions.
thanks!
Nee, er is niets gewijzigd.
Perfect! Meter en Flow beide in 1 x goed.
Grootse probleem was de NPN sensor, niet aan de praat te krijgen op 5 volt.
12 volt voeding eraan gezet (+12 bruin – GND zwart)
Om de Pi te beschermen toch maar even meten met 12 volt voeding, multimeter tussen blauw (+) en zwart (-) en voila: 3.1 volt ON – 0 volt OFF, ZONDER een 6.8K weerstand tussen BL/ZW
BLAUW naar Pi pin 40, ZWART naar Pi PIN 39 op de Raspi en werkend!
DANK!
Hallo Joost,
De waterflow meter werkt, alleen blijft deze op de laatst bekende waarde staan bijv: 7,5l/pm.
Dit beïnvloed de grafieken, doe ik iets verkeerd ?
mvg,
Mark
Verander op regel 47 ‘Waterverbruik’ in het engelse ‘Waterflow’ (zoals ook de virtuele sensor heet) en hij gaat keurig na 5 minuten naar nul.
Dan gaat Waterflow inderdaad ook op nul, maar dat is niet zoals het script bedoeld is. Als device “Waterverbruik” (de device waarop je afleest hoeveel water je vandaag hebt verbruikt) 5 minuten geen update heeft gehad, dan moet Waterflow op nul springen. Hier werkt het prima, zoals het in bovenstaand script staat.
Hoi Joost,
Mijn watermeter werkt prima in Domoticz. Ik heb jouw script gebruikt, echter krijg ik de waterflow meter niet werkend. De user variabelen worden wel aangepast door gebruik van het script, echter blijft de virtuele sensor “Waterflow” op 0 staan. De IDX van de waterflow meter heb ik aangepast in het script. Wat zou de oorzaak kunnen zijn?
Tweede vraag: in het script zie ik de naam van een sensor “GPIO Watermeter” staan. Moet dit worden aangepast naar de naam van de virtuele waterflow sensor of naar de naam van de watermeter sensor in Domoticz?
Alvast bedankt voor je reactie
Prima script, werkt ook gecombineerd met waterverbruikscript (beetje goochelen en klaar), dan heb je nog maar 1 script voor zowel Waterverbruik als Waterflow.
Als je de SENSOR niet aan de praat krijgt: ik heb er zelf een dc booster voor gezet en daarna de uitgangsspanning weer gedeeld. Dan kun je de spanning van de door de RPI geleverde 5 volt opkrikken tot een volt of 7 a 8 (dan werkt die sensor perfect) en vervolgens de uitgangsspanning (op de zwarte draad) terug brengen naar 3,3 volt door een weerstandsdeler.
Zie voor de booster van 2 euro bv https://www.tinytronics.nl/shop/nl/spanning-converters/step-up/dc-dc-verstelbare-step-up-boost-converter-mt3608-2a . Voor het schemaatje voor de deling (om de input van de raspberry te beschermen en te begrenzen op 3.3 volt) : zie https://reprapworld.com/documentation/proxsensor.pdf . Lees voor 12 V : 5 volt en voor 5 volt 3.3 volt.
Daarna, als de sensor ACTIEF is, even met de 10slags regelaar op de booster de Vout zou afregelen dat er op de zwarte draad 3,3 Volt staat.
Ik heb dit script goed werken maar na 1 dag krijg ik de volgende error
2021-03-15 15:49:02.225 Error: EventSystem: in Waterflow: [string “commandArray = {}…”]:21: bad argument #1 to ‘sub’ (string expected, got nil)
Ik zie dat andere dit ook krijgen, als ik het script erop nieuw inzet gaat het 1 dag goed maar daarna verschijnt deze error weer. Ook gaat hij niet meer automatisch terug naar 0 na 5 min.
Zou iemand de 2 scripts in 1 kunnen plaatsen?