Inhalt:
Da unsere Waschmaschine im Keller steht,
hatte wir oft die Verlegenheit sie zu vergessen bzw. zu früh entleeren zu wollen…
Und das auch noch als FHEM Nutzer!
Das kann man natürlich nicht so belassen, und so war schnell eine Vorstellung der Umsetzung geboren.
Es sollten die drei folgende Features umgesetzt werden:
- Benachrichtigung beim Anlauf des Waschvorgang
- Als Benachrichtigung per Telegram Meldung
- Man(n) vergisst doch mal das Einschalten nach dem Befüllen 😉
- Als Benachrichtigung per Telegram Meldung
- Fertig Meldung nach dem Waschvorgang
- Als Benachrichtigung per Telegram Meldung
- Als akustische Meldung über mein Sonos System
- Der Stromverbrauch wäre auch noch nett
- Als Benachrichtigung per Telegram Meldung
Die passende Hardware war recht schnell gefunden, so das ich einen Sonoff Pow* bestellt und mit Tasmato geflasht habe.
Auch die FHEM Integration war dank den Tasmota FHEM Module von Matthias Kleine (haus-automatisierung.com) kein Problem.
(Noch zu erwähnen ist, das immer noch ein MQTT-Broker benötigt wird.)
Aber nun erst einmal zur Hardware:
Benötigte Teile:
Das Pinout des Sonoff Pow*:
Nun laden wir erst einmal die Firmware sonoff-DE.bin und den ESPEasy Flasher herunter.
Verwenden werden wir hier den ESPEasy Flasher aus dem ESPEasy Projekt, da dieser sehr einfach zu handhaben ist und so Fehlern vorbeugt.
Die sonoff-DE.bin muss nun in den Order des ESPEasy Flasher kopiert werden, nach dem starten des ESPEasy Flasher taucht nun die sonoff-DE.bin in den Dropdown Menü (wie auf den Bild zu erkennen) auf.
Jetzt muss nur nur noch lange Taster beim anstecken des FTDI´s kutz gehalten werden. und dann kann auf den Button Flash geklickt werden..
Das war es dann auch schon:)
Wenn der Flashvorgang beendet ist sollte man den Sonoff Pow einmal von den FTDI trennen und wieder verbinden.
Jetzt sollte ein Wlan-Netzwerk von den Sonoff Pow bereitgestellt werde (wenn nicht einfach 4x schnell den Taster drücken bis die Blaue LED Blinkt), worüber man dann die Wlan Konfiguration des Pow´s vornehmen kann.
Nachdem die Wlan-Einstellungen vorgenommen wurde, ist die eigentliche Konfigurationsseite über die von Router zugewiesene IP erreichen.
Als erstes muss nun eingestellt werden um was für ein Gerätetyp es hierbei handelt:
Einstellungen –> Gerät konfigurieren –> 06 Sonoff Pow
Nun die MQTT-Einstellungen:…
Einstellungen –> Sonstige Konfiguration –> Harken setzen / Namen anpassen
Einstellungen –> MQTT konfigurieren –> Server Daten
Und jetzt nur noch die Telemetrieperiode (dies ist die Häufigkeit der Abfrage der Sensoren)
Einstellungen –> Logging konfigurieren –> Telemetrieperiode –> 10
Jetzt sind wir auf der FHEM Seite angekommen …..
Zuerst müssen wir das Repo von den Tasmota FHEM Module zu unserer FHEM Instanz hinzufügen:
update add https://raw.githubusercontent.com/klein0r/fhem-tasmota/master/controls_tasmota.txt update check tasmota update all tasmota
Nun können wir unser TASMOTA_DEVICE (den Sonoff Pow) anlegen:
defmod WK.Geraet.Waschmaschine TASMOTA_DEVICE WK.Geraet.Waschmaschine Haus/%topic%/%prefix% attr WK.Geraet.Waschmaschine IODev MQTTBroker attr WK.Geraet.Waschmaschine room 1.9_Waschküche attr WK.Geraet.Waschmaschine stateFormat {\ sprintf(\ "%s [Aktuell: %.1f W (%.3f A) Tag: %.2f kWh]", \ ReadingsVal("WK.DOIF.Waschmaschine","washState","n/a"),\ ReadingsVal($name,"sensor-energy-power",-1), \ ReadingsVal($name,"sensor-energy-current",-1), \ ReadingsVal($name,"sensor-energy-today",-1)\ \ )\ }
Wenn das dann geklappt hat sollte sich das Device fix mit Readings füllen…
Um jetzt auch etwas Nutzen von den neugewonnenen Daten zu ziehen habe ich dieses DOIF erstellt.
defmod WK.DOIF.Waschmaschine DOIF ([WK.Geraet.Waschmaschine:sensor-energy-power] > 8)\ (\ set $SELF washState running,\ set $SELF start_kWh {(ReadingsVal("$DEVICE","sensor-energy-total",0))},\ (msgtelegram @00000000 @00000000 ?Die Waschmaschine wurde gestartet.),\ )\ DOELSEIF ([WK.Geraet.Waschmaschine:sensor-energy-power] < 8)\ (\ set $SELF washState finish,\ set $SELF end_kWh {(ReadingsVal("$DEVICE","sensor-energy-total",0))},\ set $SELF lastRun_kWh {(sprintf ('%.3f',(ReadingsVal("$SELF","end_kWh",0) - ReadingsVal("$SELF","start_kWh",0))))},\ (msgtelegram @00000000 @00000000 ✅Die Waschmaschine ist fertig! Und hat [$SELF:lastRun_kWh] kWh verbraucht.?),\ (SpeakWohnzimmer 20 |gong| Die Waschmaschine ist fertig!)\ ) attr WK.DOIF.Waschmaschine readingList washState start_kWh end_kWh lastRun_kWh attr WK.DOIF.Waschmaschine room 9.2_DOIF attr WK.DOIF.Waschmaschine wait 45:120
Hier ist noch zu erläutern das der CMDAlias msgtelegram bei mir Telegram Messages versendet,
und der CMDAlias SpeakWohnzimmer eine Audioausgabe von den übergeben Text auf mein Sonos System im Wohnzimmer ausgibt.
Des weiteren ist das Attribut wait hier noch sehr wichtig, dieses sorgt in meinen Fall dafür das die erste Bedingung erst nach 45 Sekunden und die Zweite nach 120 Sekunden der kontinuierlichen Einhaltung erfüllt wird.
Das CMDAlias msgtelegram baut sich folgt auf:
defmod c_msgTelegram cmdalias msgTelegram .* AS set TelegramBot message $EVENT;;
Und das CMDAlias SpeakWohnzimmer so:
defmod c_SpeakWohnzimmer cmdalias SpeakWohnzimmer .* AS \ {\ my $m = $EVENT;;\ my $p = $EVTPART0;;\ $m =~ s/$p//;;\ fhem("set Sonos_Wohnzimmer Speak $p de $m");;\ }
Die Einrichtung vom TelegramBot gibt es hier im FHEM Wiki beschrieben,
und eine sehr verständliche erklärt wie man SonosSpeak einrichtet findet man beim meintechblog.de.
So das sollte jetzt alles gewesen sein, viel Spaß beim nachbauen!
Mit * markierte Links sind Amazon ParnerNet Affiliate Links
15 Kommentare
smartmatic · 27. November 2020 um 22:16
Hallo,
danke für den tollen Beitrag. Läuft seit einem Jahr einwandfrei!
Nur würde ich gerne nach einem Jahr den Wert ENERGY_Total zurück setzen, wie mache ich das am Besten, sodass es auch jährlich automatisch passiert?
Ben · 1. Oktober 2018 um 15:14
Ich versuche das gerade mit der Spülmaschine (Waschmaschine ist als nächstes dran), aber habe einen sehr nervigen Fehler: zwischendurch zeigt die Gosund SP1 regelmäßig 0W Leistung (nur für einige Sekunden) an. Die aktuelle Tasmota Firmware ist geflasht.
Meine Logik (nutze node-red) war folgendermaßen geplant
WENN Leistung >= 1200W status = aus
(umgekehrt entsprechend an)
WENN status = an UND DANN status WIRD ZU aus, sende Telegram Benachrichtigung ‚Spülmaschine fertig‘
(das ist jetzt keine gültige node-red syntax ^^ nur halt ne ungefähre Erklärung, wie ich das handhaben wollte)
So bekomme ich aber aktuell leider während die Spüle läuft zig Benachrichtigungenen, weil immer mal wieder 0W ausgegeben werden.
Zudem macht die Spülmaschine (wird bei der Waschmaschine nicht anders werden) ja zwischendurch mal Pausen, wo kein Wasser geheizt und/oder geschleudert wird, sodass ich den Wert (aktuell 1200W) verringern muss. Da das Gerät im Standby halt aber auch Leistung verbraucht (Display), kann ich nicht mit 0W arbeiten…….
Gibt es eine Möglichkeit, direkt am Pow/Gosund/Gerät halt zuverlässig festzustellen, ob das angeschlossene Gerät aktuell läuft oder nicht? Und das dann per mqtt oä auszugeben?
Diese immer wiederkehrende 0W Ausgabe im Betrieb habe ich mit TelePeriod 30 (statt vorher 10) zu verhindern versucht. So tritt diese falsche Ausgabe deutlich seltener auf, aber sie tritt eben noch auf. So kann ich mich nicht drauf verlassen, dass der Spülmaschinenvorgang bei einer Benachrichtigung tatsächlich abgeschlossen ist.
**Hat hier jemand eine Idee, wie man das lösen könnte? **
Mein neuer Ansatz wäre, den Wert erst nach X Minuten abzufragen (bei meiner Spülmaschine weiß ich ja bsp, dass sie mindestens 60 Minuten für einen Spülgang braucht, je nach Programm) und so zumindest die extremen Fehlalarme (beim 1. Test 8 Fehlalarme in wenigen Minuten) zu vermindern. Optimal wäre das trotzdem nicht, zudem müsste man die Logik dann an die anderen Geräte (Waschmaschine, Trockner) jeweils anpassen…
Geht das über den Leistungsfaktor? Was dieser Wert bedeutet, habe ich noch nicht rausfinden können…
Lg
Ben
Shojo · 1. Oktober 2018 um 15:43
Moin Ben,
du brauchst eine „Trägheit“ / Delay , so das der Schwellwert erst einer gewisse Zeit die über oder unterwschritten werden muss bevor er als gültig angesehen wird.
Ich habe das allerdings sowas noch nicht im Node-RED umgesetzt.
Gruß
Dennis
Ben · 13. Oktober 2018 um 16:30
Vielen Dank! Das teste ich gerade immer noch aus, da bei verschiedenen Programmen auch verschiedene Schwellen anfallen. So ließen sich aber schon einmal die unzähligen Benachrichtigungen etwas einschränken 🙂
Georg · 26. Februar 2021 um 22:53
Ist das noch relevant für dich? hab grad so was gebastelt.
lg
Georg
Eule81 · 10. September 2018 um 11:33
Hi, ich komme irgendwie nicht weiter. Und zwar bei:
“
attr WK.Geraet.Waschmaschine stateFormat {\
sprintf(\
„%s [Aktuell: %.1f W (%.3f A) Tag: %.2f Kw/h]“, \
ReadingsVal(„WK.DOIF.Waschmaschine“,“washState“,“n/a“),\
ReadingsVal($name,“sensor-energy-power“,-1), \
ReadingsVal($name,“sensor-energy-current“,-1), \
ReadingsVal($name,“sensor-energy-today“,-1)\
\
)\
}
“
Wie und wo muss ich das eintragen?
Ich kann den Sonoff auch nicht per FHEM an und ausschalten. (habe schon mehrere normale sonoffs laufen die gehen mit meinem mqtt).
Danke Klaus
Eule81 · 10. September 2018 um 12:55
bin schon einen Schritt weiter. jetzt zeigt mir das DeviceOverview:
finish [Aktuell: -1.0 W (-1.000 A) Tag: -1.00 Kw/h]
Shojo · 11. September 2018 um 06:26
Moin,
Du hast auch die Dose wie oben beschrieben über das Tasmota FHEM Module eingebunden?
Winkler Klaus · 11. September 2018 um 06:30
Morgen ja.
Ich habe es jetzt am laufen. Habe alles nochmal gelöscht und komplett neu angelegt. Hatte auch die reihenfolge von topic und prefix vertauscht, ob es aber dann daran gelegen hat weis ich nicht.
Danke für deine Antwort
Gruß
Shojo · 11. September 2018 um 06:32
Schön das es noch geklappt hat 😉
Winkler Klaus · 11. September 2018 um 09:27
Danke, auch für die gute Anleitung und idee
Tom · 2. September 2018 um 21:08
Hallo Shojo,
herzlichen Dank für die tolle Anleitung ,
auch ein großes Dankeschön fürs teilhaben lassen an deinen Projekten.
Most · 23. Juli 2018 um 09:05
Wenn du das jetzt noch für OpenHab umsetzen würdest wäre das ein Traum !
Shojo · 23. Juli 2018 um 13:52
Das werde ich nicht machen können.
Da ich kein OpenHab nutze, habe ich keine Ahnung welche Möglichkeiten der Umsetzung dort vorhanden sind.
Lukas · 30. Juli 2019 um 21:56
In OpenHab gibt es tatsächlich sehr ähnliche Möglichkeiten. Beispielsweise kannst du dafür den Stromverbrauch der Waschmaschine nutzen, um so zumindest informiert zu werden, wann sie fertig ist. Diese Integration habe ich auch vorgenommen.
Im Grunde brauchst du dafür nur die entsprechenden Items und dann kannst du eine Regel dazu schreiben, die den Stromverbrauch im Auge behält, sobald dieser sich ändert.
Wenn du dir sicher sein willst, dass es auch nicht nur eine kurze Abweichung ist stellst du dir einen Timer, der nach Ablauf erneut überprüft.