Waschmaschine mit schwankenden Energiewerten und Knitterschutz

Begonnen von romarira, 28 Dezember 2018, 14:59:14

Vorheriges Thema - Nächstes Thema

romarira

Hallo,

ich wende mich an euch, weil ich Unterstützung dabei brauche, den richtigen Zeitpunkt zu erkennen, wann die Waschmaschine fertig ist.
Folgendes Problem: Die Waschmaschine ist über einen Sonoff Pow angeschlossen. Die Einrichtung in FHME erfolgt aufgrund dieser Anleitung https://haus-automatisierung.com/hardware/fhem/2017/03/03/fhem-tutorial-reihe-part-28-energiemessung-notification-spuelmaschine-fertig.html, allerdings nicht als MQTT_DEVICE sondern als TASMOTA_DEVICE. Das hat den Vorteil, dass ich mir für die Readings den JSON-Teil sparen kann. Allerdings heißen die Readings etwas anders.

Hier mein um eine Telegram-Benachrichtigung erweiteteter Notify-Code:


Waschmaschine:sensor-energy-power:.* {
     if (ReadingsNum("Waschmaschine", "sensor-energy-power", 0) ] 10 && ReadingsVal("Waschmaschine", "running", "off") eq "off") {
          fhem("setreading Waschmaschine running on");
  fhem("set teleBot message Die Waschmaschine ist gestartet");
     }

     if (ReadingsNum("Waschmaschine", "sensor-energy-power", 0) [ 3 && ReadingsVal("Waschmaschine", "running", "off") eq "on") {
          fhem("setreading Waschmaschine running off");
          fhem("set teleBot message Die Waschmaschine ist fertig");
     }
}


Grds. funktioniert alles, ABER bei unserer Maschine springt der Verbrauch auch während des Waschens immer mal wieder auf einen Wattwert zwischen 0-5 Watt. Zudem hat die Maschine zum Ende einen sogenannten Knitterschutz, bei dem die Trommel immer einmal kurz anläuft. Ich komme hier auf einen durchschnittlichen Verbrauch von 14-15 Watt zum Ende hin.

Hier mal Werte im Betrieb:

2018-12-27_17:42:34 9
2018-12-27_17:42:41 32
2018-12-27_17:42:42 2130
2018-12-27_17:46:16 2159
2018-12-27_17:51:16 2153
2018-12-27_17:51:41 0
2018-12-27_17:51:42 2134
2018-12-27_17:52:31 125
2018-12-27_17:52:37 18
2018-12-27_17:52:39 153
2018-12-27_17:52:51 20
2018-12-27_17:52:53 36
2018-12-27_17:52:59 48
2018-12-27_17:53:00 107


Und hier, nachdem die Maschine durchgelaufen war (Durchschnitt = 14,8):

2018-12-27_18:45:00 16
2018-12-27_18:45:01 34
2018-12-27_18:45:10 14
2018-12-27_18:45:15 3
2018-12-27_18:45:22 6
2018-12-27_18:45:25 41
2018-12-27_18:45:26 22
2018-12-27_18:45:28 6
2018-12-27_18:45:40 7
2018-12-27_18:45:43 4
2018-12-27_18:45:51 26
2018-12-27_18:45:53 9
2018-12-27_18:45:56 4


Mit dem o.a. Code komme ich somit nicht klar. Ich denke, es wäre gut, wenn ich meine Benachrichtigung von dem Unterschreiten eines maximalen Durchschnittswertes abhängig machen könnte, z.B. unter 15 Watt innerhalb von 3 Minuten.

Ich habe aber keine Ahnung, wie ich das realisiert bekomme.
Kann mir jemand dabei helfen? Oder gibt es vielleicht eine bessere Lösung?

Vielen Dank.
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox


Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF


romarira

Vielen Dank für die Tipps. Ich teste gerade mit einer angepassten Variante aus dem Link von Damian.
Der erste Versuch hat aufgrund der stark schwankenden Werte meiner Maschine nicht funktioniert.
In diesem Beitrag https://www.meintechblog.de/2013/11/fhem-logfiles-und-graphen-datenlast-reduzieren-und-werte-ordentlich-visualisieren/ habe ich eine Möglichkeit gefunden, die Energiewerte nur nach von mir vorgegebenen Zeiträumen abzufragen. Ich bin hier mal auf eine Minute gegangen.
Das bedeutet, dass meine aktuelle Wattzahl jetzt nur einmal die Minute abgefragt wird.

Da ich nicht dauernd wasche, dauert es jetzt etwas, bis ich neue Ergebnisse habe. Ich werde vom Endergebnis berichten.

@pah: das ist glaube ich das, was wohl am besten geeignet wäre, aber dazu reichen meine Fähigkeiten nicht aus, das umzusetzen. Trotzdem danke.
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

Prof. Dr. Peter Henning

Zitataber dazu reichen meine Fähigkeiten nicht aus
So etwas kann ich gar nicht akzeptieren...

Vor allem, weil hier nur zwei Dinge gemacht werden müssen:
1. Code in 99myUtils.pm kopieren
2. Ein Attribut beim Device setzen.


Im Übrigen macht es wenig Sinn, eine stark schwankende Größe (Leistung, nicht "Wattzahl") öfter als 1x pro Minute zu messen - der Messwert sagt schlicht gar nichts aus. Wie man ja auch daran sieht, dass die Erkennung, ob die Maschine fertigt ist, damit nicht gelingt.

LG

pah

romarira

Mittlerweile habe ich mit meiner Lösung mehrere Waschgänge hinter mir und es sieht aus, als ob es zuverlässig läuft.

Ich habe folgende Lösung gefunden, wobei ich tatsächlich noch die vorgeschlagene Durchschnittlösung von Prof. Dr. Peter Henning umgesetzt habe.
Nachfolgend meine Lösung. Möglicherweise gibt es einen einfacheren Weg, aber es funktioniert bei mir und daher bin ich mit der Lösung zufrieden.

1. Abwandlung dieses Beitrags: https://www.meintechblog.de/2013/11/fhem-logfiles-und-graphen-datenlast-reduzieren-und-werte-ordentlich-visualisieren/


define WaschmaschineVerbrauch dummy
attr WaschmaschineVerbrauch event-min-interval .*:60
attr WaschmaschineVerbrauch event-on-change-reading .*
attr WaschmaschineVerbrauch room 03.30_Keller-Waschkueche,20.10_Logiken,20.20_Dummys
attr WaschmaschineVerbrauch userReadings Watt.av {movingAverage("WaschmaschineVerbrauch","state",300)}
# 300 bedeutet, Durchschnitt aus den letzten fünf Minuten bilden
define WattUsageAnDummy at +*00:01:00 {my $d=ReadingsVal("Waschmaschine","sensor-energy-power",0);; fhem ("set WaschmaschineVerbrauch $d")}
# jede Minute wird ein Wert erhoben
attr WattUsageAnDummy room 03.30_Keller-Waschkueche,20.10_Logiken,20.20_Dummys
define FileLog_WaschmaschinenVerbrauch FileLog ./log/WaschmaschineVerbrauch-%Y-%m-%d.log WaschmaschineVerbrauch
attr FileLog_WaschmaschinenVerbrauch logtype text
attr FileLog_WaschmaschinenVerbrauch nrarchive 3
attr FileLog_WaschmaschinenVerbrauch room 03.30_Keller-Waschkueche,20.10_Logiken,80.20_Info-Logfiles
#
define weblink_WaschmaschinenVerbrauch SVG FileLog_WaschmaschinenVerbrauch:SVG_FileLog_WaschmaschinenVerbrauch:CURRENT
attr weblink_WaschmaschinenVerbrauch room 03.30_Keller-Waschkueche,80.30_Info-Plots


2. Gleitenden Mittelwert der Leistung messen.

https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen


Hierzu das erste Beispiel aus dem Wiki-Beitrag in die 99-myUtils kopieren, dann die Attribute in dem Device setzen (s. oben: attr WaschmaschineVerbrauch userReadings Watt.av {movingAverage("WaschmaschineVerbrauch","state",300)})
Achtung: im Wiki steht userReading, bei funktioniert aber nur userReadings

3.Angepasste Lösung aus https://haus-automatisierung.com/hardware/fhem/2017/03/03/fhem-tutorial-reihe-part-28-energiemessung-notification-spuelmaschine-fertig.html

Bei meiner Waschmaschine funktioniert die Abfrage mit 20 Watt am besten. Die Telegramnachrichten für Start und Warten habe ich noch drin um den Verlauf zu sehen. Wenn die Lösung sich als stabil herausstellt, kann man m.E. Start und Warten noch rausnehmen.


define Waschmaschine_di DOIF ## Status 1\
([WaschmaschineVerbrauch:Watt.av:d] > 20 and [?$SELF:Zyklus] =~ "Fertig|Init" )\
(setreading $SELF Zyklus Läuft )\
(set teleBot message Waschmaschine Status Gestartet)\
\
## Status 2\
DOELSEIF ([WaschmaschineVerbrauch:Watt.av:d] < 20 and [?$SELF:Zyklus] =~ "Läuft")\
(setreading $SELF Zyklus Warten) \
(set teleBot message  Waschmaschine Status Warten)\
\
## Status 3\
DOELSEIF ([WaschmaschineVerbrauch:Watt.av:d] > 20 and [?$SELF:Zyklus] =~ "Warten")\
(setreading $SELF Zyklus Läuft)\
(set teleBot message Waschmaschine Status Läuft wieder)\
\
## Status 4\
DOELSEIF ([WaschmaschineVerbrauch:Watt.av:d] < 20 and [?$SELF:Zyklus] =~ "Warten")\
(setreading $SELF Zyklus Fertig)\
(set teleBot message Die Waschmaschine ist fertig!)\
## Status 5\
DOELSEIF ([WaschmaschineVerbrauch:Watt.av:d] > 20 and [?$SELF:Zyklus] =~ "Läuft" )\
(setreading $SELF Zyklus Läuft )\
\
## Status 6\
DOELSE\
(setreading $SELF Zyklus Init)
attr Waschmaschine_di do always
attr Waschmaschine_di room 20.10_Logiken,90.20_Sonstiges-Testphase
attr Waschmaschine_di startup setreading $SELF Zyklus Init
attr Waschmaschine_di wait 0:180:0:0:0:0
Intel NUC, FHEM VMe auf debian Proxmox-Server, Sonoff S20/Basic/POW, Shelly 1 & 2.5
Homematic IP-HK-Thermostate, Wandthermostat, FTK
FHT80b-HK-Thermostate und FTK
Raspberrymatic auf separater VM
Unifi/Ubiquiti-Wlan-Netzwerk, DHCP-Server über Firtzbox

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF