Hoe vaak ik me dat al afgevraagd heb: is de wasmachine of droger al klaar met zijn programma? De machines van de laatste jaren wegen het gewicht en passen daarop de duur van het programma aan. Zo weet je dus nooit zeker wanneer de was klaar is. Echt nieuwe wasmachines hebben WiFi en een bijbehorende app. Maar een vaatwasser, droger of wasmachine vervang je niet zomaar en koop je vaak voor langer dan 5 jaar, dus de kans dat je nog een ‘oud’ model zonder apps hebt is groot. Toch wilde ik mijn droger en wasmachine ‘slim’ maken. Dat is gelukt.
Mijn droger en wasmachine zijn zo’n 6 jaar oud en werken prima. Geen reden om ze in te ruilen voor een smart wasmachine of smart droger. Toch wil ik via een notificatie van domoticz te weten krijgen of de was klaar of droog is. Ik heb een aantal pogingen gedaan en verschillende manieren geprobeerd. In deze blogpost lees je hoe je het beste de status van de wasmachine en droger kunt zien in domoticz.
Vibration sensor
Het leek mij heel eenvoudig: als de machines draaien bewegen ze. Aan de hand van die beweging kan ik zien of de machine aanstaat dacht ik. Ik kocht via AliExpress twee Xiaomi Vibration sensoren. Ik plakte ze op de achterkant van de wasmachine en droger. De Xiaomi Vibration sensors werken via Zigbee. Het was eenvoudig de sensoren toe te voegen aan mijn Zigate. In de plugininstellingen van Zigate kun je de gevoeligheid van de Xiaomi Vibration sensor wat aanpassen. Om zo nauwkeurig mogelijk te zijn heb ik de waarde op High gezet. Wanneer de wasmachine ging centrifugeren zag ik inderdaad dat de sensor “vibration” terugmeldde aan domoticz. Maar toch werkte het niet helemaal betrouwbaar. Zeker bij grote wassen die gecentifugeerd werden, meldde de droger ook “vibration” terug. Dat komt omdat de droger op de wasmachine staat en zodoende ook genoeg beweegt om de sensor te triggeren. Al met al niet echt betrouwbaar. De resultaten vielen dus helaas wat tegen.

Ondanks de High instelling kwam er te vaak of juist helemaal geen melding dat de was klaar was. Ook was er tijdens het wasprogramma en het droogprogramma te weinig beweging aan de buitenkant van de machine om de sensor te triggeren. Op zoek naar een betere oplossing.

Accelerometer
Een tweede optie die ik geprobeerd heb is gebruik te maken van Accelerometers. Deze sensoren meten beweging in X, Y en Z richting van de sensor. Omdat het een complete zelfbouw oplossing was had ik genoeg ruimte om te tweaken. Het werkte op basis van een Wemos D1 mini met twee ADXL345 printjes met een zelfgeschreven Arduino sketch. Maar uiteindelijk hadden ze hetzelfde probleem als de vibration sensors: te vaak onbetrouwbaar. De ruwe XYZ data werd naar domoticz verzonden in een uservariable, waarna een script bepaalde of er beweging is.
Stroomverbruik
De status van de wasmachine, droger of vaatwasser is eenvoudig uit te lezen. Over het algemeen is het standbyverbruik van een vaatwasser, droger of wasmachine namelijk zeer laag, maximaal een paar watt of zelfs helemaal 0. Als het apparaat aanstaat verbruikt het veel meer dan het standby verbruik. De droger trekt dan makkelijk 2000 Watt. Een wasmachine doet tijdens het centrifugeren circa 1500 Watt en een vaatwasser doet ook zo’n 1200 Watt. Op basis van die informatie kunnen we wel verder komen. Alleen moet je dan het verbruik van de apparaten in domoticz zien te krijgen.

Toevoegen wasmachine,droger, vaatwasser in domoticz
Het verbruik van je vaatwasser, droger of wasmachine is eenvoudig met domoticz uit te lezen. Ga voor de zekerheid eerst na wat het maximale verbruik is van je machines. We gaan namelijk een tussenstekker gebruiken tussen het stopcontact en de stekker van het apparaat. Ik maak gebruik van de Shelly Plug S, een tussenstekker met een maximale doorvoer van 2500 Watt. Precies genoeg voor mijn droger en wasmachine.

De in- en uitschakel functie van de plug ga ik niet gebruiken, alleen de verbruiksmeting functie ervan.
Installeren van Shelly Plugin voor domoticz
Om Shelly apparaten te gebruiken binnen domoticz heb je een plugin en een MQTT server nodig. Op je NAS of Pi moet minimaal Python 3.5 draaien en eventueel GIT. De plugin die we gaan installeren is de Shelly MQTT plugin. We downloaden de plugin via git. Open hiervoor een Putty sessie naar je Raspberry Pi of je Synology NAS en navigeer naar je plugins map van domoticz. Voor Raspberry Pi is dat “domoticz/plugins”, voor Synology NAS is dat “volume1/@appstore/domoticz/var/plugins”.
Download de Shelly MQTT repository naar je apparaat door middel van:
sudo git clone https://github.com/enesbcs/Shelly_MQTT.git
Als het downloaden gelukt is, restart dan domoticz. Op je Synology NAS kan dat via je Package center in DSM of via Monit met de knop Restart service.
Wanneer domoticz gerestart is, ga je naar het Hardware menu. Kies uit het dropdown menu nu de plugin ShellyMQTT. Geef het IP-adres en poort op van je MQTT server. Als je nog geen MQTT server hebt draaien, is dat heel eenvoudig op te zetten. Lees dan mijn artikel eens: MQTT server maken met Mosquitto.

Zet de optie Power reading op de keuze “Power and Energy” en klik op Toevoegen. De plugin gaat nu luisteren naar de Shelly MQTT berichten. De Shelly’s zelf moeten natuurlijk wel MQTT berichten versturen.
Shelly instellen voor MQTT naar Domoticz
Navigeer naar de webpagina van je Shelly apparaat. In mijn geval dus de Shelly Plug S. Klik op de knop “Internet en Security”.

Scroll naar beneden naar “Advanced – Developer Settings”. Vink hier “Enable action execution via MQTT” aan. Vul bij server het ip-adres en de poort in van je MQTT server en klik daarna op save.

Geef de Shelly en de plugin wat tijd om elkaar te vinden. Mochten ze elkaar niet willen vinden, herstart de plugin dan even door in het hardware menu de plugin aan te klikken en zonder iets te wijzigen op Aanpassen te klikken.
Als alles juist gaat, verschijnt er in je apparatenoverzicht een Shelly Plug S. Een keer als Button, Temperatuur en Energy device. Voeg het Energy device toe door op het groene pijltje te klikken. Geef het apparaat een naam bijvoorbeeld Droger verbruik.

Wasmachine/droger script
Maak een dummy schakelaar aan in het Hardware menu als je deze nog niet hebt. Klik op “Maak virtuele sensoren” en kies in het menu voor het type schakelaar.

Geef de virtuele sensor een naam, bijvoorbeeld Droger.

Maak nu nog twee gebruikersvariabelen aan in het menu gebruikersvariabelen, beide van het type integer. Eén met bijvoorbeeld de naam “droger_status” en één met de naam “droger_counter”. In “droger_status” houden we de vermoedelijke status bij van de droger, soms zitten er pauzes in het programma waardoor je anders te vroeg een melding krijgt dat de was klaar is. In droger_counter tellen we een aantal minuten af voordat de melding echt verzonden wordt. Wanneer dus droger status van 1 (= aan) naar 0 gaat, (= uit) gaat de counter af tellen. Wanneer de waarde tijdens het aftellen toch weer naar 1 gaat, omdat het zo’n pauze was in het programma, wordt de counter gereset totdat het verbruik weer onder de drempel daalt.

Voeg nu onder Gebeurtenissen een nieuw script toe van het type lua time. Plak onderstaande code in het venster en pas de namen van de devices aan naar jouw eigen namen. Dus,
- local dryer_status_uservar = ‘droger_status’
- local energy_consumption = ‘Droger verbruik’ (Dit is je Shelly Energy device)
- local dryer_counter_uservar = ‘droger_counter’
- local dryer_switch = ‘Droger’ (Dit is je dummy schakelaar)
Script = 'script_time_droger' Debug = 'Y' -- Functions function Debug_msg (msg) if (Debug == 'Y') then print('>> ' .. Script .. ': '.. msg) end end -- Variable local dryer_status_uservar = 'droger_status' local energy_consumption = 'Droger verbruik' --Name of Z-Wave plug that contains actual consumption of dryer (in Watts) local dryer_counter_uservar = 'droger_counter' --Name of the uservariable that will contain the counter that is needed local idle_minutes = 2 --The amount of minutes the consumption has to stay below the 'consumption_lower' value local consumption_upper = 20 --If usage is higher than this value (Watts), the dryer has started local consumption_lower = 5 --If usage is lower than this value (Watts), the dryer is idle for a moment/done washing local dryer_switch = 'Droger' sWatt, sTotalkWh = otherdevices_svalues[energy_consumption]:match("([^;]+);([^;]+)") dryer_usage = tonumber(sWatt) -- dryer_usage = tonumber(otherdevices_svalues[energy_consumption]) commandArray = {} --Virtual switch is off, but consumption is higher than configured level, so washing has started if (dryer_usage > consumption_upper) and uservariables[dryer_status_uservar] == 0 then commandArray['Variable:' .. dryer_status_uservar]='1' Debug_msg('Current power usage (' ..dryer_usage.. 'W) is above upper boundary (' ..consumption_upper.. 'W), so drying has started!') commandArray['Variable:' .. dryer_counter_uservar]=tostring(idle_minutes) commandArray['Droger'] = 'On' else --Debug_msg('Current power usage (' ..dryer_usage.. 'W). upper boundary (' ..consumption_upper.. 'W)') end --Washing machine is not using a lot of energy, check the counter if (dryer_usage < consumption_lower) and uservariables[dryer_status_uservar] == 1 then commandArray['Variable:' .. dryer_counter_uservar]=tostring(math.max(tonumber(uservariables[dryer_counter_uservar]) - 1, 0)) Debug_msg('Current power usage (' ..dryer_usage.. 'W) is below lower boundary (' ..consumption_lower.. 'W), dryer is idle or almost ready') Debug_msg('Subtracting counter, old value: ' ..uservariables[dryer_counter_uservar].. ' minutes') commandArray['Droger'] = 'On' elseif ((uservariables[dryer_counter_uservar] ~= idle_minutes) and uservariables[dryer_status_uservar] == 1) then commandArray['Variable:' .. dryer_counter_uservar]=tostring(idle_minutes) commandArray['Droger'] = 'On' print('Resetting Dryer Timer') end --dryer is done if ((uservariables[dryer_status_uservar] == 1) and uservariables[dryer_counter_uservar] == 0) then Debug_msg('dryer is DONE') Debug_msg('Current power usage dryer ' ..dryer_usage.. 'W') Debug_msg('dryer is done, please go empty it!') --commandArray['SendNotification']='Droger#De droger is klaar!#0' commandArray['Variable:' .. dryer_status_uservar]='0' commandArray['Droger'] = 'Off' end return commandArray
Test het script eens door de droger of wasmachine te laten draaien. Kijk naar de log of er geen fouten binnenkomen.
Als alles goed werkt kun je de volgende waarden laten voor wat het is. Mocht je toch te vroeg een melding krijgen, tweak de volgende waarden uit het script dan eens:
- local idle_minutes = 2
- Deze waarde geeft het script 2 minuten de tijd om af te tellen. Een pauze in het programma kan dus maximaal 2 minuten duren.
- local consumption_upper = 20
- Deze variabele betekend dat wanneer het apparaat meer dan 20 Watt verbruikt, dat het apparaat aan staat.
- local consumption_lower = 5
- Deze waarde betekend dat wanneer het apparaat minder dan 5 Watt verbruikt, dat het apparaat uit staat.
Instellen notificatie
Het script schakelt de dummy schakelaar aan en uit. Op basis van het uitschakelmoment van de switch gaan we een melding verzenden. We maken gebruik van de standaard notificatie functie van domoticz.
Klik in het menutje van je device op Notifications.

In het volgende scherm kies je de gewenste notificatie services. Ik kies voor GCM, het Google Cloud Messaging protocol. Dit zorgt ervoor dat als je de officiële Domoticz App hebt geïnstalleerd, je daar een melding op je telefoon van krijgt. Zet het type op Uitschakelen en voer een melding in. Klik op toevoegen. Je kunt ook extra plugins installeren die hier meer opties toevoegen, bijvoorbeeld Telegram, Google Home etc.

Het werkt!
Je hebt nu van je niet slimme wasmachine of droger een ‘slim’ apparaat gemaakt! Je kunt dit principe natuurlijk ook toepassen op je vaatwasser, oven, pomp, opladers…
Mooi, ben ik ook al lang van plan. Heb Tasmota stekker in Domoticz waarvan het Vermogen / Stroom al wordt uitgelezen.Welke waarden zijn nu jouw “variabelen” in het script Wouter zodat ik kan dit kan aanpassen aan mijn situatie en ik wellicht i.p.v met Vermogen ook Ampère kan experimenteren?
Ha Thomas,
Leuk dat je weer reageert. Ieder apparaat is natuurlijk anders, dus wat ik gedaan heb is gewoon een programma starten en afgewacht. In de daggrafiek kun je het hele programma terugzien in verbruik. De pauzes (bijv pompen) kwamen zo rond de 20 watt uit en het minimale verbruik voor het display etc zit op 5 watt. De tijd heb ik op 2 minuten staan. Tot nu toe altijd juiste meldingen gekregen 👍
Laat maar weten als het bij jou ook draait!
Wouter
Hallo Wouter,
Gelukkig is je script uitstekend gedocumenteerd, wat uitnodigt om het te installeren.
Ik draai mijn proef met een NeoCoolcam Zwave wcd die ook Watt uitleest.
Test geeft nog geen resultaat ;-(
Twee vragen:
1.Bij het ingeven van de Gebruikers variabelen wordt ook om een “Waarde Value” gevraagd. Op je print cut out is dit 0, moet ik dus ook 0 instellen?
2.Wáár / Hoé wordt uiteindelijk de melding “Droger is klaar” in het Domoticz scherm weergegeven?
Groet, Thomas
Domoticz log fout message:
2021-02-23 16:26:00.415 Error:
EventSystem: in script_time_droger: [string “Script = ‘script_time_droger’…”]:20: attempt to compare number with nil
Hoi Thomas,
Je kunt inderdaad gewoon een 0 of 1 invoeren bijvoorbeeld.
Vraag 2: ik heb een extra kopje toegevoegd waarin ik dit duidelijk maak. Beetje stom dat ik dat vergeten was.
Succes!
Wouter
Bij mij schakelt, de dummy schakelaar niet Uit of Aan, anders had ik er wel raad mee geweten 😉 en verder gaan experimenteren wat ik in ieder geval allemaal met die melding had kunnen doen zoals b.v. een e-mailtje sturen.
Ik blijf de fout houden zoals hierboven in de Domoticz log?.
Ik heb dankbaar de “kopieer script” knop gebruikt en verder precies dezelfde namen zoals jij hebt gebruikt aangehouden.
Any idea?
(Ik test met centrifugeren, daarom zo snel 😉
Ondertussen even een Blockly in elkaar “geflanst”.
Meer dan 3 watt is Dummy Aan; Minder dan 3 watt is Dummy Uit.
Meten op Stroom raad ik af, omdat de NeoCoolcam plug hier erg onnauwkeurig is in de lage waarden!
Let ook op dat deze wcd’s om de 5 minuten meten!
Je wasmachine is dus al Uit, maar de meet drempel waarde zakt pas 5 minuten later (is ook zo bij Tasmota wcd’s overigens).
Met inschakelen wordt direct gemeten.
Nu kan ik aan de Dummy schakelaar een Notificatie (wordt e-mail) koppelen.
Het werkt dus begrijp ik? Niet helemaal op mijn manier, maar dat maakt niet uit, als het maar werkt 👍
Wat een mooi script! Dank je wel! Draait hier icm met mijn Samsung wasmachine na wat aan te passen aan het minimale verbruik (heb ik uiteindelijk op 1 Watt gezet) werk het perfect.
Ik had een plugS gebruikt om het verbruik van de robotmaaier te monitoren. Nu kwam ik je blog tegen. Het script sloot mooi aan, dus na wat trial en error uiteindelijk werkend.
In het log file van de shelly meter domoticz zie ik geen data. Kennelijk wordt dit niet geregistreerd. Ik heb de optie power en energie wel aangezet. Ik zie dat jij wel een grafiek heb van het verbruik. Dus de data wordt in jouw geval wel opgeslagen.
Enig idee wat is fout doe?
Hallo Wouter. Mijn Blockly oplossing werkte toch niet betrouwbaar. Ik wil toch meer van programmeren leren en daarom jouw script weer in mijn toepassing geprobeerd. Gelukt!
Ik werk met een Alie Wifi WCD met Tasmota.
Tip: de standaard Tele(-metrie) tijd van Tasmota is 300 sec en de meting begint dus pas na 5 min.
Dit kun je evt. aanpassen door b.v. de Tele tijd op 60 sec. in te stellen.