DOIF Benachrichtigung läuft noch nicht so wie es soll ! Waschmaschine

Begonnen von sash.sc, 17 Oktober 2016, 11:49:07

Vorheriges Thema - Nächstes Thema

sash.sc

Hallo zusammen.

Ich hoffe auf eure Hilfe.

Ich möchte per pushmsg benachrichtigt werden, wenn die Waschmaschine fertig ist.

Hier erstmal das DOIF


Internals:
   DEF        ([WaMa:power] < 15) (set pushmsg msg 'WaMa ist fertig')
   NAME       WaMa_fertig
   NR         430
   NTFY_ORDER 50-WaMa_fertig
   STATE      initialize
   TYPE       DOIF
   Readings:
     2016-10-17 11:36:00   cmd             0
     2016-10-17 11:36:07   mode            enable
     2016-10-17 11:36:04   state           initialize
     2016-10-17 11:36:58   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'WaMa','power','','',AttrVal($hash->{NAME},'notexist',undef)) < 15
   Devices:
     0           WaMa
     all         WaMa
   Do:
     0:
       0          set pushmsg msg 'WaMa ist fertig'
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     0           WaMa:power
     all         WaMa:power
   Regexp:
     All:
   State:
Attributes:
   repeatcmd  3600
   repeatsame 1
   room       00_WaKue
   wait       120


Ich habe das Problem, das zwischen durch Impulse bei der Messung vo etwas kleiner als 15 Watt auftreten. Ich möchte natürlich nicht, dass nach jedem Impuls eine Nachricht kommt, das die WaMa fertig ist. Es sollte auch nur 1x die Nachricht kommen, wenn die WaMa fertig ist.

Hat da jemand eine Idee ? ich denke das es wahrscheinlich nur mit den Attributen zusammen hängt, oder ?

Für eure Hilfe bin ich dankbar.

gruß
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

CBSnake

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

sash.sc

Danke für den Hinweis, den Bericht hatte ich schonmal gelesen, habe ihn auch nicht mehr auf dem Schirm gehabt.

Sind aber ne menge dummy dadrin.Müsste doch auch einfacher gehen ! oder ?

gruß
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Ellert

Du köntest die Meldung verzögern (wait) und den Timer zurücksetzen (resetwait) wenn ein Messwert > 15 erzeugt wird.

Damian

Zitat von: sash.sc am 17 Oktober 2016, 11:49:07
Hallo zusammen.

Ich hoffe auf eure Hilfe.

Ich möchte per pushmsg benachrichtigt werden, wenn die Waschmaschine fertig ist.

Hier erstmal das DOIF


Internals:
   DEF        ([WaMa:power] < 15) (set pushmsg msg 'WaMa ist fertig')
   NAME       WaMa_fertig
   NR         430
   NTFY_ORDER 50-WaMa_fertig
   STATE      initialize
   TYPE       DOIF
   Readings:
     2016-10-17 11:36:00   cmd             0
     2016-10-17 11:36:07   mode            enable
     2016-10-17 11:36:04   state           initialize
     2016-10-17 11:36:58   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'WaMa','power','','',AttrVal($hash->{NAME},'notexist',undef)) < 15
   Devices:
     0           WaMa
     all         WaMa
   Do:
     0:
       0          set pushmsg msg 'WaMa ist fertig'
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     0           WaMa:power
     all         WaMa:power
   Regexp:
     All:
   State:
Attributes:
   repeatcmd  3600
   repeatsame 1
   room       00_WaKue
   wait       120


Ich habe das Problem, das zwischen durch Impulse bei der Messung vo etwas kleiner als 15 Watt auftreten. Ich möchte natürlich nicht, dass nach jedem Impuls eine Nachricht kommt, das die WaMa fertig ist. Es sollte auch nur 1x die Nachricht kommen, wenn die WaMa fertig ist.

Hat da jemand eine Idee ? ich denke das es wahrscheinlich nur mit den Attributen zusammen hängt, oder ?

Für eure Hilfe bin ich dankbar.

gruß
Sascha

Die Impulse unter 15 Watt hast du doch mit einer zwei Minuten Pause ausgebügelt. Wenn es nicht reicht, musst du die Pause verlängern, ansonsten werden auch Dummys nicht viel helfen.


Gruß

Damian

Edit: repeatsame ist hier nicht sinnvoll
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

sash.sc

Zitat von: Damian am 17 Oktober 2016, 15:12:59
Die Impulse unter 15 Watt hast du doch mit einer zwei Minuten Pause ausgebügelt. Wenn es nicht reicht, musst du die Pause verlängern, ansonsten werden auch Dummys nicht viel helfen.


Gruß

Damian

Edit: repeatsame ist hier nicht sinnvoll
Danke für die Info.

Hat du denn noch eine andere Idee dies umzusetzen?
Also nach Beendigung des Waschganges soll einmal die pushmeldung ausgelöst werden. Auch wenn danach die kurzen impulse kommen. Bis der nächste Waschgang beendet wird.

Gruß und danke
Sascha

Von mobil gesendet daher kurze Antwort

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

Zitat von: sash.sc am 17 Oktober 2016, 15:28:56
Danke für die Info.

Hat du denn noch eine andere Idee dies umzusetzen?
Also nach Beendigung des Waschganges soll einmal die pushmeldung ausgelöst werden. Auch wenn danach die kurzen impulse kommen. Bis der nächste Waschgang beendet wird.

Gruß und danke
Sascha

Von mobil gesendet daher kurze Antwort

Zitat aus der Commandref:

ZitatAnwendungsbeispiel: Benachrichtung "Waschmaschine fertig", wenn Verbrauch mindestens 5 Minuten unter 2 Watt (Perl-Code wird in geschweifte Klammern gesetzt):

define di_washer DOIF ([power:watt]<2) ({system("wmail washer finished")})
attr di_washer wait 300

Eine erneute Benachrichtigung wird erst wieder ausgelöst, wenn zwischendurch der Verbrauch über 2 Watt angestiegen war.

Hier ist alles, was du brauchst. Eine Wiederholung findet nicht statt, da kein do always-Attribut gesetzt wurde.

Gruß

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

sash.sc

Hatte ich auch gedacht, dass man das mit dem Attribut WAIT "entprellen" kann. Die erste DEF die ich hatte, hatte auch nur das WAIT drin.
Aber trotzdem kam nach jeden Impuls eine Nachricht.

Nun ja, werde mal abwarten !!

Gruß und Danke
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

Zitat von: sash.sc am 17 Oktober 2016, 15:49:55
Hatte ich auch gedacht, dass man das mit dem Attribut WAIT "entprellen" kann. Die erste DEF die ich hatte, hatte auch nur das WAIT drin.
Aber trotzdem kam nach jeden Impuls eine Nachricht.

Nun ja, werde mal abwarten !!

Gruß und Danke
Sascha

Eine Wiederholung kann nur stattfinden, wenn sich der Zustand ändert. Das erste Wait muss also größer sein als die längste Zeitspanne unter 15 Watt während die Maschine läuft. Dann kannst du noch ein Wait setzen für den Wechsel in den cmd_2 Zustand. Damit würde man erreichen, dass die Maschine erst eine gewisse Zeit über 15 Watt sein muss, damit der Mechanismus scharf gestellt wird z. B. 15 Minuten, dann sieht dein Wait Attribut so aus:

wait 300:900

Benachrichtigung nach 5 Minuten (längste Zeitspanne unter 15 Watt ist kleiner als 5 Minuten) und 15 Minuten muss die Maschine über 15 Watt sein, damit überhaupt eine Meldung kommen kann, wenn sie schon mal gelaufen ist.

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

sash.sc

Habe das DOIF auf ein WAIT 180 runterreduziert. Es kam nach dem Impuls eine Meldung das die WaMa fertig ist. :(

Habe ein LOG für das DOIF angelegt.

Hier die Meldungen



2016-10-17_15:56:23.655 WaMa_fertig cmd_1
2016-10-17_15:56:23.655 WaMa_fertig cmd_event: WaMa
2016-10-17_15:56:23.655 WaMa_fertig cmd: 1
2016-10-17_15:56:23.655 WaMa_fertig cmd_nr: 1
2016-10-17_15:56:23.584 WaMa_fertig wait_timer: no timer
2016-10-17_15:53:23.583 WaMa_fertig wait_timer: 17.10.2016 15:56:23 cmd_1 WaMa
2016-10-17_15:51:24.848 WaMa_fertig initialize


Gruß
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

Zitat von: sash.sc am 17 Oktober 2016, 16:15:29
Habe das DOIF auf ein WAIT 180 runterreduziert. Es kam nach dem Impuls eine Meldung das die WaMa fertig ist. :(

Habe ein LOG für das DOIF angelegt.

Hier die Meldungen




2016-10-17_15:56:23.655 WaMa_fertig cmd_1
2016-10-17_15:56:23.655 WaMa_fertig cmd_event: WaMa
2016-10-17_15:56:23.655 WaMa_fertig cmd: 1
2016-10-17_15:56:23.655 WaMa_fertig cmd_nr: 1
2016-10-17_15:56:23.584 WaMa_fertig wait_timer: no timer
2016-10-17_15:53:23.583 WaMa_fertig wait_timer: 17.10.2016 15:56:23 cmd_1 WaMa
2016-10-17_15:51:24.848 WaMa_fertig initialize


Gruß
Sascha

Ja, das liegt daran, dass du das Modul gerade initialisiert hast, indem du es geändert hast. Wenn du es jetzt nicht mehr anpackst, dann sollte die nächste Meldung zum richtigen Zeitpunkt kommen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hinrich2001

Hallo zusammen,

auch wenn das Thema schon etwas älter ist, versuche ich es hier einmal.
Wenn es niemand mehr lesen sollte, mache ich ein neues Thema auf.

Vermutlich ist die Frage trivial aber mit dem DOIF habe ich es noch nicht so. D.h. ich habe es bislang noch nicht benutzt und entdecke gerade, was für ein "mächtiges" Modul es ist.

Zum Thema:
Auch ich habe die Anleitung aus
http://www.meintechblog.de
umgesetzt.

Jetzt möchte ich über eine Ansage benachrichtigt werden, sobalb die Maschine fertig ist (power<2W).
Die Ansage soll zyklisch kommen (aber nur x Mal), aber nur so lange bis jemand die Waschmaschine ausgeschaltet hat (an de Maschine selbst, nicht am HM Zwischenstecker; power dann ca. 0,05W).

Der Dummy WaschmaschineBetrieb geht auf "standby" sobald die Maschine fertig ist. Das funktioniert soweit alles.

Zum Testen der Ansagen habe ich nun folgenden Code eingefügt.

define di_WaschmaschineWaschvorgangAbgeschlossenAnsage DOIF ([WaschmaschineBetrieb] eq "standby") (\
  set HM_334228_Mp3 playTone 026\
)
attr di_WaschmaschineWaschvorgangAbgeschlossenAnsage do always
attr di_WaschmaschineWaschvorgangAbgeschlossenAnsage repeatcmd 180
attr di_WaschmaschineWaschvorgangAbgeschlossenAnsage repeatsame 10
attr di_WaschmaschineWaschvorgangAbgeschlossenAnsage room Waschkueche


Nachdem WaschmaschineBetrieb von "on" nach "standby" gegangen ist (Waschvorgang fertig), wird die Ansage gespielt.
Nach 3 Minuten wieder, nach 6 Minuten wieder etc. Also alles super.
Nun habe ich im fhem GUI (FHEMWEB) oben in der Befehlszeile "set WaschmaschineBetrieb off" ausgeführt und habe erwartet, dass die Wiederholung der Ansage aufhört, da
die Bedingung
[WaschmaschineBetrieb] eq "standby"
nun ja nicht mehr wahr ist.
Aber die Ansage wurde weiter abgespielt (insg. aber nur 8x).
Hier die Auszüge aus den Logs.

pi@raspberrypi2 /opt/fhem/log $ cat WaschmaschineBetrieb-2017-11.log | grep 2017-11-15
2017-11-15_08:20:15 WaschmaschineBetrieb on
2017-11-15_11:33:34 WaschmaschineBetrieb standby
2017-11-15_11:43:32 WaschmaschineBetrieb off

pi@raspberrypi2 /opt/fhem/log $ cat fhem-2017-11.log | grep 2017.11.15 | grep -i play
2017.11.15 11:33:34 3: CUL_HM set HM_334228_Mp3 playTone 026
2017.11.15 11:36:34 3: CUL_HM set HM_334228_Mp3 playTone 026
2017.11.15 11:39:35 3: CUL_HM set HM_334228_Mp3 playTone 026
2017.11.15 11:42:35 3: CUL_HM set HM_334228_Mp3 playTone 026
2017.11.15 11:45:35 3: CUL_HM set HM_334228_Mp3 playTone 026
2017.11.15 11:48:35 3: CUL_HM set HM_334228_Mp3 playTone 026
2017.11.15 11:51:35 3: CUL_HM set HM_334228_Mp3 playTone 026
2017.11.15 11:54:39 3: CUL_HM set HM_334228_Mp3 playTone 026




Vielleicht hat jemand eine Idee.

Vielen Dank vorab und Gruß,

Hinrich

Damian

Du brauchst einen Sonst-Fall.

In Kombination mit do always gibt es nicht automatisch einen Sonst-Fall, den muss man selbst angeben.

define di_WaschmaschineWaschvorgangAbgeschlossenAnsage DOIF ([WaschmaschineBetrieb] eq "standby") ( set HM_334228_Mp3 playTone 026) DOELSE
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Spielen wir es mal durch.
Wenn set WaschmaschineBetrieb off ausgeführt wird, was macht dein DOIF? Es testet WaschmaschineBetrieb auf "standby". Das ist nicht der Fall, also macht dein DOIF was? Nix. Es hat ja keine Anweisungen, irgendwas im Alternativfall zu tun. Gib ihm doch mal ein DOELSE.

Auch würde ich den Fall, dass jemand die WM nicht erst aus-, sondern gleich wieder einschaltet (oder die Steckdose länger braucht als der Benutzer), mit vorsehen. Also nicht nur bei "Standby", sondern auch bei "Waschen" reagieren.

hinrich2001

Wahnsinn, das geht ja flott hier mit den Antworten.
Danke dafür!

Ich hatte mich an der Commandref von DOIF (Abschnitt: Wiederholung von Befehlsausführung) orientiert. Insbesondere an dem folgenden Anwendungsbeispiel

Nach dem Eintreffen des Ereignisses wird die push-Meldung stündlich wiederholt, bis Frost ungleich "on" ist.

define di_push DOIF ([frost] eq "on")(set pushmsg "danger of frost")
attr di_push repeatcmd 3600

Eine Begrenzung der Wiederholungen kann mit dem Attribut repeatsame vorgenommen werden
attr di_push repeatsame 3

Das ist doch genau "mein" Fall (und ebenfalls ohne DOELSE).
Die Wiederholung des Kommandos soll so lange stattfinden bis WaschmaschineBetrieb ungleich standby ist.
Ob WaschmaschineBetrieb = on (Maschine direkt wieder neu gestartet) oder off ist eigentlich egal, die Wiederholung der Ansage soll aufhören.

Nun sehe ich jedoch in der Doku zu repeatcmd (kurz über dem Beispiel mit dem Frost) diesen Satz:
Die Wiederholung findet so lange statt, bis der Zustand des Moduls in einen anderen DO-Fall wechselt.

Für meinen Fall macht ein DOELSE zwar nicht wirklich Sinn, denn die Ansage soll ja nur bei standby abgespielt werden, aber ich probiere es trotzdem mal aus und lasse mir ein DOELSE einfallen.