FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Torxgewinde am 16 Dezember 2018, 19:09:54

Titel: Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: Torxgewinde am 16 Dezember 2018, 19:09:54
Hallo,
Um zu melden das die Waschmaschine, der Trockner, oder die Spülmaschine fertig sind, dient diese Lösung. Die "Fertig"-Meldung kann zum Beispiel mit einer Push-Nachricht auf das Handy erfolgen. Was die Maschine gerade macht, kann man anhand der aktuellen Leistung bestimmen.

Das Beispiel ist eine Spülmaschine deren Leistungswerte folgende Phasen durchläuft:


Zur Veranschaulichung ist diesem Post ein Graph der Leistungsaufnahme angefügt.

Zur Leistungsmessung wird zum Beispiel ein Zwischenstecker (FRITZ!DECT 200, SONOFF, Blitzwolf BWSHP2, oder ähnliches) verwendet. Was genau zur Messung verwendet wird, ist eigentlich nicht so relevant, Hauptsache die aktuelle Leistungaufnahme ist mit einem Reading auswertbar. Hier lautet das Reading für die Leistungsaufnahme Spuelmaschine:power.


defmod Spuelmaschine_di DOIF ## Status 1\
([Spuelmaschine:power:d] > 10 and [?$SELF:Zyklus] =~ "Fertig|Init|Läuft" )\
(setreading $SELF Zyklus Läuft )\
\
## Status 2\
DOELSEIF ([Spuelmaschine:power:d] < 10 and [?$SELF:Zyklus] =~ "Läuft|Warten")\
(IF ([Spuelmaschine:power:d] < 10)\
(setreading $SELF Zyklus Warten) )\
\
## Status 3\
DOELSEIF ([Spuelmaschine:power:d] > 10 and [?$SELF:Zyklus] =~ "Warten|Beenden")\
(setreading $SELF Zyklus Beenden)\
\
## Status 4\
DOELSEIF ([Spuelmaschine:power:d] < 10 and [?$SELF:Zyklus] =~ "Beenden")\
(setreading $SELF Zyklus Fertig)\
({system("curl -s -F 'token=<GEHEIM>' -F 'user=<GEHEIM>' -F 'message=Die Spuelmaschine ist fertig' -F 'sound=gamelan' https://api.pushover.net/1/messages.json")})\
\
## Status 5\
DOELSEIF ([Spuelmaschine:power:d] < 10 and [?$SELF:Zyklus] =~ "Fertig")\
(setreading $SELF Zyklus Fertig)\
\
## Status 6\
DOELSE\
(setreading $SELF Zyklus Init)

attr Spuelmaschine_di do always
attr Spuelmaschine_di startup setreading $SELF Zyklus Init
attr Spuelmaschine_di wait 0:300:0:0:0:0


Es wird DOIF genutzt um einen Zustandsautomaten aufzubauen. Das Reading Zyklus bildet den Zustand der Spülmaschine ab. Für den Zustandswechsel von Läuft auf Warten wird 5 Minuten abgewartet, ob nicht doch noch Strom verbraucht wird. Das war erforderlich, da diese spezielle Spülmaschine manchmal in der Zeit noch aktiv wurde, oder auch nicht. Die Wartezeit wird mit dem Attribut wait für jeden Zustand des DOIF angegeben, in dem Beispiel war die Verzögerung nur für den zweiten Zustand erforderlich.

Als Schwellwert für Aktiv oder nicht, ist ein Wert von 10 Watt verwendet worden. Die Angabe ":d" hinter dem Reading Spuelmaschine:power für Leistung filtert Zeichen, die keine Zahlen sind einfach weg. Dies macht das DOIF ein wenig toleranter für die Leistungsangaben. Durch Verwendung der Variable $SELF muss man nicht den Namen des DOIF an die eigenen Bedürfnisse anpassen, das erledigt DOIF für einen. Um eine PushOver Nachricht abzusenden kann man entweder einen Konsolenbefehl absetzten, oder aber das passende Modul nutzen; hier ist es eben ein Aufruf des Programms curl.

Viel Erfolg beim Tüfteln!
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: Damian am 16 Dezember 2018, 20:26:26
Das ist ja nicht die erste Lösung zu diesem Thema. :)

Wichtig ist es, so wie du es zuvor gemacht hast, den Stromverbrauch zunächst aufzuzeichnen, um sich einen Überblick über den Stromverbrauch seiner Maschine zu verschaffen.

Den aktuellen Zustand kannst du einfacher im Status des Moduls unterbringen, dann brauchst du kein setreading zu verwenden. Stattdessen das Attribut cmdState nutzen.

Den aktuellen Zustand kann man dann direkt in der Device-Übersicht sehen.
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: Torxgewinde am 16 Dezember 2018, 20:50:43
Hallo Damian,
Das stimmt, es gibt zig Posts zu dem Thema :) Danke übrigens an dieser Stelle für DOIF, es ist ein sehr nützliches Modul!

Den Status mit DOIF direkt abzubilden hatte ich als erstes versucht, aber der "Flatterstatus" von Läuft auf Warten führte dann immer wieder zu Problemen wenn ich es "nur" mit DOIFs eigenem Status lösen wollte. Wichtig bei der Lösung hier war, dass es wirklich zurückspringt auf den Zustand "Läuft" falls die Maschine doch nochmal loslegt und es noch nicht die "lange" Pause war.

Den Hinweis mit cmdstate kann man also so aufgreifen: attr Spuelmaschine_di cmdState Läuft|Warten|Beenden|Fertig|Fertig|Init Das sieht dann wirklich noch hübscher in den Übersichten aus.
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: saschae am 13 Januar 2019, 01:12:58
Da die Maschinen oftmals auch unter 10 W fallen brauch man eine
https://forum.fhem.de/index.php?topic=73336.0
da ist eigentlich alles schon vorhanden .....
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: Damian am 13 Januar 2019, 09:29:40
Ggf. kann ein neues Feature die Sache etwas einfacher machen: https://forum.fhem.de/index.php/topic,95759.msg886621.html#msg886621
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: Torxgewinde am 17 Januar 2019, 20:34:38
Das Glätten von Werten ist eine gute neue Möglichkeit um den Codeschnipsel kürzer zu gestalten, danke!
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: gent am 26 August 2019, 21:05:05
Ich möchte nur zum Verständnis kurz nachfragen:

Wenn ich cmdState verwende, dann brauche ich kein Reading Zyklus und kann bei den Bedingungen ?$SELF:State verwenden?

Viele Grüße vom Gent
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: Damian am 26 August 2019, 22:14:49
Zitat von: gent am 26 August 2019, 21:05:05
Ich möchte nur zum Verständnis kurz nachfragen:

Wenn ich cmdState verwende, dann brauche ich kein Reading Zyklus und kann bei den Bedingungen ?$SELF:State verwenden?

Viele Grüße vom Gent

ja!
Titel: Antw:Waschmaschine, Trockner und Spülmaschine Fertigmeldung
Beitrag von: gent am 27 August 2019, 22:27:22
Vielen Dank.