Hallo zusammen,
ich habe folgende DOIFs die jeweils den dummy Waschmaschinenstatus bedienen bzw die Benachrichtigung durchfuehren.
define doif_an DOIF (([Strom_Waschmaschine_Pwr:power]>30) and ([Waschmaschinenstatus:state] ne "on")) (set Waschmaschinenstatus on)
attr doif_an do always
define doif_fertig DOIF (([Strom_Waschmaschine_Pwr:power]<5 ) and ([Waschmaschinenstatus:state] eq "on")) (set Waschmaschinenstatus off,set telegrambot message Waschmaschine ist fertig!)
attr doif_fertig wait 300
attr doif_fertig do always
Mein Problem ist jetzt, dass trotz des wait timers die Benachrichtigung kommt, 5 Minuten nachdem die 5Watt Schwelle unterschritten und wieder überschritten wurde...
Beispiellog:
2017-01-11_13:54:05 Strom_Waschmaschine_Pwr power: 552.08
2017-01-11_13:54:14 Strom_Waschmaschine_Pwr power: 512.04
2017-01-11_13:55:12 Strom_Waschmaschine_Pwr power: 161.28
2017-01-11_13:55:20 Strom_Waschmaschine_Pwr power: 20.16
2017-01-11_13:55:43 Strom_Waschmaschine_Pwr power: 37.8
2017-01-11_13:55:51 Strom_Waschmaschine_Pwr power: 3.68
2017-01-11_13:55:59 Strom_Waschmaschine_Pwr power: 3.66
2017-01-11_13:56:07 Strom_Waschmaschine_Pwr power: 3.68
2017-01-11_13:56:15 Strom_Waschmaschine_Pwr power: 32.92
2017-01-11_13:56:23 Strom_Waschmaschine_Pwr power: 27.76
2017-01-11_13:56:31 Strom_Waschmaschine_Pwr power: 34.37
2017-01-11_13:56:39 Strom_Waschmaschine_Pwr power: 30.99
2017-01-11_13:56:47 Strom_Waschmaschine_Pwr power: 35.34
2017-01-11_13:56:51 Strom_Waschmaschine_Pwr power: 39.14
2017-01-11_13:56:55 Strom_Waschmaschine_Pwr power: 33.66
2017-01-11_13:57:03 Strom_Waschmaschine_Pwr power: 38.45
2017-01-11_13:57:14 Strom_Waschmaschine_Pwr power: 35.78
2017-01-11_13:57:19 Strom_Waschmaschine_Pwr power: 42.02
2017-01-11_13:57:27 Strom_Waschmaschine_Pwr power: 34.91
2017-01-11_13:57:35 Strom_Waschmaschine_Pwr power: 42.05
2017-01-11_13:57:43 Strom_Waschmaschine_Pwr power: 266.45
2017-01-11_13:57:51 Strom_Waschmaschine_Pwr power: 1224.62
2017-01-11_13:58:00 Strom_Waschmaschine_Pwr power: 1204.85
2017-01-11_13:58:08 Strom_Waschmaschine_Pwr power: 1219
2017-01-11_13:58:16 Strom_Waschmaschine_Pwr power: 1172.27
2017-01-11_13:58:24 Strom_Waschmaschine_Pwr power: 1186.75
2017-01-11_13:58:38 Strom_Waschmaschine_Pwr power: 1166.85
2017-01-11_13:58:46 Strom_Waschmaschine_Pwr power: 1178.88
2017-01-11_13:58:54 Strom_Waschmaschine_Pwr power: 1140.67
2017-01-11_13:59:02 Strom_Waschmaschine_Pwr power: 1190.35
2017-01-11_13:59:20 Strom_Waschmaschine_Pwr power: 1176.99
2017-01-11_13:59:24 Strom_Waschmaschine_Pwr power: 1201.4
2017-01-11_13:59:31 Strom_Waschmaschine_Pwr power: 1156.58
2017-01-11_13:59:32 Strom_Waschmaschine_Pwr power: 1156.59
2017-01-11_13:59:40 Strom_Waschmaschine_Pwr power: 1171.9
2017-01-11_13:59:54 Strom_Waschmaschine_Pwr power: 1157.04
2017-01-11_14:00:02 Strom_Waschmaschine_Pwr power: 1179.8
2017-01-11_14:00:10 Strom_Waschmaschine_Pwr power: 1146.27
2017-01-11_14:00:21 Strom_Waschmaschine_Pwr power: 1191.31
2017-01-11_14:00:32 Strom_Waschmaschine_Pwr power: 1164.77
2017-01-11_14:00:40 Strom_Waschmaschine_Pwr power: 1198.47
2017-01-11_14:00:49 Strom_Waschmaschine_Pwr power: 1157.66
2017-01-11_14:00:56 Strom_Waschmaschine_Pwr power: 1163.65
2017-01-11_14:01:10 Strom_Waschmaschine_Pwr power: 1144.87
2017-01-11_14:01:18 Strom_Waschmaschine_Pwr power: 1173.44
2017-01-11_14:01:26 Strom_Waschmaschine_Pwr power: 1145.42
2017-01-11_14:01:34 Strom_Waschmaschine_Pwr power: 1193.53
2017-01-11_14:01:48 Strom_Waschmaschine_Pwr power: 1159.18
2017-01-11_14:01:56 Strom_Waschmaschine_Pwr power: 1199.11
Um 13:51:51 war die Aufnahme unter 5Watt um 14:01:55 habe ich die Benachrichtigung erhalten obwohl die Leistung danach wieder hoeher war?
Habe ich hier einen Gedankenfehler?
DOIF arbeitet Zustandbedingt. Das gilt aber nur pro DOIF Instanz. Du hast aber für beide Zustände jeweils ein DOIF.
Packe beides in eine DOIF Instanz und es wird funktionieren.
Schaue Dir die diversen Beispiele dazu an. Gerade Waschmaschine und DOIF findest Du hier zu Hauf.
Ich tat wie mir aufgetragen... Leider mit dem gleichen Resultat.
define doif_WaMa DOIF ([Strom_Waschmaschine_Pwr:power] == 0 and [?Waschmaschinenstatus] ne "off") (set Waschmaschinenstatus off)
DOELSEIF ([Strom_Waschmaschine_Pwr:power] > 25 and [?Waschmaschinenstatus] ne "on") (set Waschmaschinenstatus on)
DOELSEIF ([Strom_Waschmaschine_Pwr:power] < 5 and [?Waschmaschinenstatus] eq "on") (set Waschmaschinenstatus state off,set telegrambot message Waschmaschine fertig!)
attr doif_WaMa do always
attr doif_waMa wait 60:0:300
2017-01-11_14:37:49 Strom_Waschmaschine_Pwr power: 1.46
2017-01-11_14:39:19 Strom_Waschmaschine_Pwr power: 1.06
2017-01-11_14:42:10 Strom_Waschmaschine_Pwr power: 14.52
Um 14:42:49 bekam ich die Nachricht "Fertig" obwohl Leistung mit 14.52 > 5 ist.
:o
Er habe sich nicht genug belesen. So lösche er so always und staune.
er lösche und freue sich :)
danke fuers denkfehler aufloesen
Zitat von: micomat am 11 Januar 2017, 14:52:08Um 14:42:49 bekam ich die Nachricht "Fertig" obwohl Leistung mit 14.52 > 5 ist.
Aber kleiner als 25 W. Und nur das setzt den Timer zurück.
Ich nehme mal an, dass du einen HM-ES-PMSw1-Pl nutzt. Die Events kommen im 8 Sekunden Takt, ich hab bei mir mal die Einstellungen angepasst, so dass statt ~2000 €vents/h nur noch gute 150 kommen. Zum einen muss das Device nicht alle 8 Sekunden Funken und somit den Funk überstrapazieren - zum anderen hat das System dann auch nicht mehr so viel zu tun. Wir haben 2 Waschmaschinen und nen Trockner... ~6000 Events/h...
Alle 2 oder 3 Minuten senden das Device ja so oder so.
R-txMinDly 16 s
R-txThrCur 3000 mA
R-txThrFrq 1 Hz
R-txThrPwr 400 W
R-txThrVlt 10 V
Und dann halt noch event-on-change-reading etsprechend dem was man so braucht...
p.s. bin dem mit Ellerts neuem Modul DOIFtools auf die Schliche gekommen.
Zitat von: Per am 11 Januar 2017, 15:11:03
Aber kleiner als 25 W. Und nur das setzt den Timer zurück.
Aber ich frage doch nach groesser 25W im ersten DOELSEIF
Zitat von: automatisierer am 11 Januar 2017, 15:30:02
Ich nehme mal an, dass du einen HM-ES-PMSw1-Pl nutzt. Die Events kommen im 8 Sekunden Takt, ich hab bei mir mal die Einstellungen angepasst, so dass statt ~2000 €vents/h nur noch gute 150 kommen. Zum einen muss das Device nicht alle 8 Sekunden Funken und somit den Funk überstrapazieren - zum anderen hat das System dann auch nicht mehr so viel zu tun. Wir haben 2 Waschmaschinen und nen Trockner... ~6000 Events/h...
Alle 2 oder 3 Minuten senden das Device ja so oder so.
R-txMinDly 16 s
R-txThrCur 3000 mA
R-txThrFrq 1 Hz
R-txThrPwr 400 W
R-txThrVlt 10 V
Und dann halt noch event-on-change-reading etsprechend dem was man so braucht...
p.s. bin dem mit Ellerts neuem Modul DOIFtools auf die Schliche gekommen.
Danke fuer den Tip, das TXmindelay war mir noch unbekannt :)
Zitat von: CoolTux am 11 Januar 2017, 15:08:05
Er habe sich nicht genug belesen. So lösche er so always und staune.
Sorry.. staune das es immer noch so ist wie vorher =(
2017-01-11_15:45:33 Strom_Waschmaschine_Pwr power: 16.21
2017-01-11_15:48:33 Strom_Waschmaschine_Pwr power: 1.95
2017-01-11_15:51:18 Strom_Waschmaschine_Pwr power: 16.09
Um 15:53:33 kommt die Meldung. "do always" wars also wohl nicht
Gib mal bitte ein list vom DOIF Device
Zitat von: micomat am 11 Januar 2017, 14:08:56
define doif_fertig DOIF (([Strom_Waschmaschine_Pwr:power]<5 ) and ([Waschmaschinenstatus:state] eq "on")) (set Waschmaschinenstatus off,set telegrambot message Waschmaschine ist fertig!)
attr doif_fertig wait 300
attr doif_fertig do always
Wenn du mit wait arbeitest, musst du doch die eine Befehlssequenz aufsplitten...
Also aus
(set Waschmaschinenstatus off,set telegrambot message Waschmaschine ist fertig!)
mache
(set Waschmaschinenstatus off) (set telegrambot message Waschmaschine ist fertig!)
Wenn Du mit dem off noch 5min warten willst. dann sollte das Attribut so aussehen.
attr doif_fertig wait 300,0
300sec mit dem off warten und sofort nach dem off gleich die Message rausschicken.
Ich hab jetzt die Schwelle mal auf 12W einstellt damit ich mit einer LED-Lampe testen kann.
Hier das list:
Internals:
CFGFN
DEF ([Strom_Waschmaschine_Pwr:power] == 0 and [?Waschmaschinenstatus] ne "off") (set Waschmaschinenstatus off) DOELSEIF ([Strom_Waschmaschine_Pwr:power] > 12 and [?Waschmaschinenstatus] ne "on") (set Waschmaschinenstatus on) DOELSEIF ([Strom_Waschmaschine_Pwr:power] < 5 and [?Waschmaschinenstatus] eq "on") (set Waschmaschinenstatus off,set telegrambot message Waschmaschine fertig!)
NAME doif_Waschmaschine
NR 4489
NTFY_ORDER 50-doif_Waschmaschine
STATE cmd_2
TYPE DOIF
Readings:
2017-01-11 16:03:36 Device Strom_Waschmaschine_Pwr
2017-01-11 15:53:49 cmd 2
2017-01-11 15:53:49 cmd_event Strom_Waschmaschine_Pwr
2017-01-11 15:53:49 cmd_nr 2
2017-01-11 16:03:36 e_Strom_Waschmaschine_Pwr_power 15.91
2017-01-11 15:53:49 state cmd_2
2017-01-11 15:53:33 wait_timer no timer
Condition:
0 ReadingValDoIf($hash,'Strom_Waschmaschine_Pwr','power','','',AttrVal($hash->{NAME},'notexist',undef)) == 0 and InternalDoIf($hash,'Waschmaschinenstatus','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) ne "off"
1 ReadingValDoIf($hash,'Strom_Waschmaschine_Pwr','power','','',AttrVal($hash->{NAME},'notexist',undef)) > 12 and InternalDoIf($hash,'Waschmaschinenstatus','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) ne "on"
2 ReadingValDoIf($hash,'Strom_Waschmaschine_Pwr','power','','',AttrVal($hash->{NAME},'notexist',undef)) < 5 and InternalDoIf($hash,'Waschmaschinenstatus','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on"
Devices:
0 Strom_Waschmaschine_Pwr
1 Strom_Waschmaschine_Pwr
2 Strom_Waschmaschine_Pwr
all Strom_Waschmaschine_Pwr
Do:
0:
0 set Waschmaschinenstatus off
1:
0 set Waschmaschinenstatus on
2:
0 set Waschmaschinenstatus off,set telegrambot message Waschmaschine fertig!
3:
Helper:
event boot: off,current: 130,eState: E: 1929 P: 15.91 I: 130 U: 227.4 f: 50.02,energy: 1929,energyCalc: 1989,frequency: 50.02,power: 15.91,1929,voltage: 227.4
globalinit 1
last_timer 0
sleepdevice Strom_Waschmaschine_Pwr
sleepsubtimer -1
sleeptimer -1
timerdev Strom_Waschmaschine_Pwr
timerevent boot: off,current: 131,eState: E: 1926.4 P: 16 I: 131 U: 227 f: 50.01,energy: 1926.4,energyCalc: 1986.4,frequency: 50.01,power: 16,1926.4,voltage: 227
triggerDev Strom_Waschmaschine_Pwr
timerevents:
boot: off
current: 131
eState: E: 1926.4 P: 16 I: 131 U: 227 f: 50.01
energy: 1926.4
energyCalc: 1986.4
frequency: 50.01
power: 16
1926.4
voltage: 227
timereventsState:
boot: off
current: 131
eState: E: 1926.4 P: 16 I: 131 U: 227 f: 50.01
energy: 1926.4
energyCalc: 1986.4
frequency: 50.01
power: 16
state: 1926.4
voltage: 227
triggerEvents:
boot: off
current: 130
eState: E: 1929 P: 15.91 I: 130 U: 227.4 f: 50.02
energy: 1929
energyCalc: 1989
frequency: 50.02
power: 15.91
1929
voltage: 227.4
triggerEventsState:
boot: off
current: 130
eState: E: 1929 P: 15.91 I: 130 U: 227.4 f: 50.02
energy: 1929
energyCalc: 1989
frequency: 50.02
power: 15.91
state: 1929
voltage: 227.4
Internals:
0 Waschmaschinenstatus:STATE
1 Waschmaschinenstatus:STATE
2 Waschmaschinenstatus:STATE
all Waschmaschinenstatus:STATE
Itimer:
Readings:
0 Strom_Waschmaschine_Pwr:power
1 Strom_Waschmaschine_Pwr:power
2 Strom_Waschmaschine_Pwr:power
all Strom_Waschmaschine_Pwr:power
Regexp:
0:
1:
2:
All:
State:
Trigger:
Attributes:
wait 60:0:300
alternative - den dummy Waschmaschinestatus weg lassen und das DOIF selber zum anzeigen des Status nutzen.
define Waschmaschine DOIF
([Strom_Waschmaschine_Pwr:power] == 0 )
DOELSEIF
([Strom_Waschmaschine_Pwr:power] > 12)
DOELSEIF
([Strom_Waschmaschine_Pwr:power] < 5) (set telegrambot message Waschmaschine fertig!)
attr Waschmaschine cmdState aus|laeuft|fertig
attr Waschmaschine wait 60:0:300
bei 'wait 300,0' wird der zweite Teil des aufgespitteten Ausführungsteils sofort nach dem ersten ausgeführt - bringt also eigentlich nix...
Zitat von: micomat am 11 Januar 2017, 16:07:14
Ich hab jetzt die Schwelle mal auf 12W einstellt damit ich mit einer LED-Lampe testen kann.
Hier das list:
Internals:
CFGFN
DEF ([Strom_Waschmaschine_Pwr:power] == 0 and [?Waschmaschinenstatus] ne "off") (set Waschmaschinenstatus off) DOELSEIF ([Strom_Waschmaschine_Pwr:power] > 12 and [?Waschmaschinenstatus] ne "on") (set Waschmaschinenstatus on) DOELSEIF ([Strom_Waschmaschine_Pwr:power] < 5 and [?Waschmaschinenstatus] eq "on") (set Waschmaschinenstatus off,set telegrambot message Waschmaschine fertig!)
Funktionieren müsste deins allerdings auch - sehe keinen Fehler, bis auf die zwei Leerzeichen im 3. Ausführungsteil hinter Waschmaschinenstatus, sollte aber kein Problem darstellen.
([Strom_Waschmaschine_Pwr:power] == 0 and [?Waschmaschinenstatus] ne "off")
(set Waschmaschinenstatus off)
DOELSEIF ([Strom_Waschmaschine_Pwr:power] > 12 and [?Waschmaschinenstatus] ne "on")
(set Waschmaschinenstatus on)
DOELSEIF ([Strom_Waschmaschine_Pwr:power] < 5 and [?Waschmaschinenstatus] eq "on")
(set Waschmaschinenstatus off) (set telegrambot message Waschmaschine fertig!)
attr doif_fertig wait 60:0:300,0
das mit dem aufsplitten erschließt sich mir noch nicht ganz... Er kann es ja auch in einer Befehlssequenz machen und hat somit auch noch 5 min Zeit bis off geschaltet wird, wenn die Maschine mal kurz das Programm wechselt oder aus irgendeinem anderen Grund kurz unter 5w geht. Und ich denke dieser Fall soll mit den 5 Min Wartezeit abgefangen werden...
ZitatSorry.. staune das es immer noch so ist wie vorher =(
2017-01-11_15:45:33 Strom_Waschmaschine_Pwr power: 16.21
2017-01-11_15:48:33 Strom_Waschmaschine_Pwr power: 1.95
2017-01-11_15:51:18 Strom_Waschmaschine_Pwr power: 16.09
Um 15:53:33 kommt die Meldung. "do always" wars also wohl nicht
ist meiner Meinung nach vollkommen logisch:
um 15:48 wird bedingung 3 wahr (<5 W), der Timer für den Versand startet (Müsste auch im DOIF ersichtlich sein).
Um 15:51 ist der Strom wieder >5W, was aber durch keine Bedingung von dir abgefangen wird. Es müsste >25W sein, damit Bedinung 2 wieder greift. Erst wenn eine andere Bediungung als 3 Wahr wird, dann wird der Timer gelöscht, und NICHT, wenn Bedingung 3 nicht mehr wahr ist.
Gruß Michael
Ich danke euch allen :)
Man sollte dem Motto "keep it simple" einfach treu bleiben.
Dummy weg, Status im DOIF anzeigen und schon laeufts.
([Strom_Waschmaschine_Pwr:power] == 0)
DOELSEIF
([Strom_Waschmaschine_Pwr:power]>12)
DOELSEIF ([Strom_Waschmaschine_Pwr:power]<5)
(set telegrambot message Waschmaschine fertig!)
zu simpel aber auch nicht - beim cmd_2 fehlt noch der Vergleichswert.
natürlich, der ist beim kopieren abhanden gekommen. bei mir ist er da :) habs korrigiert
Zitat von: micomat am 11 Januar 2017, 15:37:09
Aber ich frage doch nach groesser 25W im ersten DOELSEIF
Eben, solange kein anderer Vergleich erfüllt ist, ändert DOIF seine Lage nicht und der Wait-Timer zählt weiter und weiter und weiter...
Also einfach wieder größer 5 W reicht nicht.
öh... doch. funktioniert jetzt einwandfrei :)
ja richtig. pers Das Zitat bezog sich ja auch auf eine Beitrag von ziemlich am Anfang und wollte glaube ich nur nochmal verdeutlichen dass du zwischen 5 und 25W einen Bereich hast, für den keine Bedingung im DOIF greift.
Jetzt hast du den Bereich zwischen 5 und 12.
Gruß Michael
das macht dann sinn 8)
Ich hätte nun aber noch eine Frage zum Verständnis. Im finalen Code wird der interne Status des Moduls zur Anzeige genutzt. Die Meldung das die Maschine fertig ist aber erst zeitlich verzögert, das würde aber für mein Verständnis bedeuten, das in fhem während des Timerablauf möglicher Weise ein falscher Zustand angezeigt wird. Habe ich das soweit richtig verstanden?
Zum Grund der Frage: Bei unserer neuen Maschine, legt die Maschine immer wieder Pausen ein, in denen die Leistungsaufnahme unter den Grenzwert sinkt.
Gruß
Thorsten
Zitat von: tlasrich am 24 Januar 2017, 20:32:19
Ich hätte nun aber noch eine Frage zum Verständnis. Im finalen Code wird der interne Status des Moduls zur Anzeige genutzt. Die Meldung das die Maschine fertig ist aber erst zeitlich verzögert, das würde aber für mein Verständnis bedeuten, das in fhem während des Timerablauf möglicher Weise ein falscher Zustand angezeigt wird. Habe ich das soweit richtig verstanden?
Zum Grund der Frage: Bei unserer neuen Maschine, legt die Maschine immer wieder Pausen ein, in denen die Leistungsaufnahme unter den Grenzwert sinkt.
Gruß
Thorsten
Mit einer Verzögerung durch das Attribut wait wird ja gerade versucht die Anzeige eines falschen Zustands zu vermeiden.
Ohne Wait würde bei jeder Pause der Zustand "Waschmaschine fertig" kommen, obwohl sie sich gerade eine "Strompause" gönnt. Durch das Attribut wait schafft man es diesen kurzen "falschen" Zustand zu vermeiden und den Zustand "Waschmaschine fertig" erst dann zu liefern, wenn die Pause längere Zeit anhält und man so tatsächlich sicher sein kann, dass sie wirklich fertig ist.
Würde man eine Lampe an der Waschmaschine abgreifen, die den tatsächlichen Zustand (fertig) anzeigt, dann bräuchte man die Verzögerung nicht und wüsste ein paar Minuten früher, ob sie wirklich fertig ist.
Zitat von: kumue am 11 Januar 2017, 16:37:55
([Strom_Waschmaschine_Pwr:power] == 0 and [?Waschmaschinenstatus] ne "off")
(set Waschmaschinenstatus off)
DOELSEIF ([Strom_Waschmaschine_Pwr:power] > 12 and [?Waschmaschinenstatus] ne "on")
(set Waschmaschinenstatus on)
DOELSEIF ([Strom_Waschmaschine_Pwr:power] < 5 and [?Waschmaschinenstatus] eq "on")
(set Waschmaschinenstatus off) (set telegrambot message Waschmaschine fertig!)
attr doif_fertig wait 60:0:300,0
Also nur damit ich das richtig verstanden habe, wenn das zweite DOELSEIF erfüllt ist beginnt der Timer zu laufen und es wird noch nicht der Status / state Fertig ausgegeben? Der Status wird erst ausgegeben wenn alle Befehle nach Ablauf der Timer ausgegeben?
Sorry wenn ich deshalb noch einmal Nachfrage, mir war / ist einfach noch nicht klar, wann der Status des Moduls aktualisiert wird.
Gruß
Thorsten
Zitat von: tlasrich am 24 Januar 2017, 21:27:30
Also nur damit ich das richtig verstanden habe, wenn das zweite DOELSEIF erfüllt ist beginnt der Timer zu laufen und es wird noch nicht der Status / state Fertig ausgegeben? Der Status wird erst ausgegeben wenn alle Befehle nach Ablauf der Timer ausgegeben?
Sorry wenn ich deshalb noch einmal Nachfrage, mir war / ist einfach noch nicht klar, wann der Status des Moduls aktualisiert wird.
Gruß
Thorsten
Mit
wait 60:0:300,0
gibt es beim zweiten Zustand "on" keine Verzögerung. D. h. sobald Strom über 12 Watt und noch nicht im Zustand "on" wird sofort auf Zustand "on" geschaltet.
beim dritten Zustand geht es in den Zustand "off" nach 5 Minuten wenn nicht genügen Strom da war.
im ersten Zustand geht es ebenfalls in den Zustand "off" nach einer Minute, wenn Strom auf Null geht und sie noch nicht "off" war.
Diese Definition mag bei manchen Waschmaschinen gut funktionieren bei manchen gar nicht, je nach dem wie deren Stromverbrauch funktioniert.
Ich persönlich würde versuchen nach Möglichkeit nur mit zwei Zuständen eines DOIF-Moduls auszukommen on/off, denn in diesem Beispiel entspricht sowohl cmd_1 wie auch cmd_3 dem Zustand off. Allerdings wird hier eher der Zustand des Dummys Waschmaschine von Bedeutung sein und nicht der des DOIF-Moduls
Danke für die ausführliche Erklärung, ich werde morgen mal versuchen das für meine Maschine umzusetzen.
Noch einen ruhigen Abend,
Thorsten
Zitat von: tlasrich am 24 Januar 2017, 22:05:49
Danke für die ausführliche Erklärung, ich werde morgen mal versuchen das für meine Maschine umzusetzen.
Noch einen ruhigen Abend,
Thorsten
Du kannst es erstmal mit einer einfachen Definition anfangen, wie ich sie in der Commandref formuliert habe:
define di_washer DOIF ([power:watt]<2) ({system("wmail washer finished")})
attr di_washer wait 300
Hier sollte der Zustand des Moduls ohne Dummy ausreichen cmd_1 = steht und cmd_2=läuft
Zitat von: Damian am 24 Januar 2017, 21:21:18Würde man eine Lampe an der Waschmaschine abgreifen, die den tatsächlichen Zustand (fertig) anzeigt
Ich hatte mal überlegt, mit einem optischen HM-Fenstersensor den Schalter abzutasten. Aber noch nicht umgesetzt, meine vorhandenen Sensoren sind alle mit Magnet.
Hallo,
danke für die Hilfe, ich wollte noch kurz melden, dass es nun funktioniert! Eine Kopie des DOOIFs für den Trockner leider noch nicht, aber das wird auch noch.
Gruß
Thorsten
Hallo zusammen,
ich möchte euch einmal darum bitten, einen Blick auf meinen Waschmaschinen-Melder zu werfen, da er leider auch noch mit dem Problem zu kämpfen hat, dass er für mich nicht nachvollziehbar auslöst.
Besonderheit ist, dass mir der Stecker (EDIPLUG) keinen numerischen Wert, sondern einen String für die Leistung liefert (bspw. "185.46 W"). Die Auswertung mache ich dann nicht mit bspw. < 2 sondern mit lt "2". (dies hatte ich hier irgendwo mal gelesen..., vermutlich ist das aber genau das Problem).
define DOIF_Switch_KellerWaschmachine DOIF ([Switch_KellerWaschmachine:power_now] lt "2") (set PushbulletKai message Waschmaschine fertig|Waschmaschine, set PushbulletLucy message Waschmaschine fertig|Waschmaschine)
atrr DOIF_Switch_KellerWaschmachine wait 180
Das Log von Switch_KellerWaschmachine:power_now sieht wie folgt aus
2017-04-04_12:29:55 Switch_KellerWaschmachine power_now: 0.07 W
2017-04-04_12:30:55 Switch_KellerWaschmachine power_now: 0.07 W
2017-04-04_12:31:55 Switch_KellerWaschmachine power_now: 1.57 W
2017-04-04_12:32:55 Switch_KellerWaschmachine power_now: 10.22 W
2017-04-04_12:33:55 Switch_KellerWaschmachine power_now: 3.93 W
2017-04-04_12:34:55 Switch_KellerWaschmachine power_now: 168.22 W
2017-04-04_12:35:55 Switch_KellerWaschmachine power_now: 1841.14 W
2017-04-04_12:36:56 Switch_KellerWaschmachine power_now: 1841.42 W
2017-04-04_12:37:56 Switch_KellerWaschmachine power_now: 1841.35 W
2017-04-04_12:38:56 Switch_KellerWaschmachine power_now: 1846.07 W
2017-04-04_12:39:56 Switch_KellerWaschmachine power_now: 1846.00 W
2017-04-04_12:40:56 Switch_KellerWaschmachine power_now: 1846.00 W
2017-04-04_12:41:56 Switch_KellerWaschmachine power_now: 1846.86 W
2017-04-04_12:42:56 Switch_KellerWaschmachine power_now: 1840.13 W
2017-04-04_12:43:56 Switch_KellerWaschmachine power_now: 2025.17 W
2017-04-04_12:44:56 Switch_KellerWaschmachine power_now: 2029.82 W
2017-04-04_12:45:56 Switch_KellerWaschmachine power_now: 2015.87 W
2017-04-04_12:46:56 Switch_KellerWaschmachine power_now: 2030.61 W
2017-04-04_12:47:56 Switch_KellerWaschmachine power_now: 2018.95 W
2017-04-04_12:48:56 Switch_KellerWaschmachine power_now: 2017.37 W
2017-04-04_12:49:56 Switch_KellerWaschmachine power_now: 2013.87 W
2017-04-04_12:50:56 Switch_KellerWaschmachine power_now: 192.68 W
2017-04-04_12:51:56 Switch_KellerWaschmachine power_now: 163.57 W
2017-04-04_12:52:56 Switch_KellerWaschmachine power_now: 169.44 W
2017-04-04_12:53:56 Switch_KellerWaschmachine power_now: 188.25 W
2017-04-04_12:54:56 Switch_KellerWaschmachine power_now: 199.41 W
2017-04-04_12:55:56 Switch_KellerWaschmachine power_now: 188.25 W
2017-04-04_12:56:56 Switch_KellerWaschmachine power_now: 194.12 W
2017-04-04_12:57:56 Switch_KellerWaschmachine power_now: 170.58 W
2017-04-04_12:58:56 Switch_KellerWaschmachine power_now: 204.56 W
2017-04-04_12:59:56 Switch_KellerWaschmachine power_now: 167.44 W
2017-04-04_13:00:56 Switch_KellerWaschmachine power_now: 165.22 W
2017-04-04_13:01:56 Switch_KellerWaschmachine power_now: 182.39 W
2017-04-04_13:02:56 Switch_KellerWaschmachine power_now: 178.31 W
2017-04-04_13:03:56 Switch_KellerWaschmachine power_now: 184.67 W
2017-04-04_13:04:56 Switch_KellerWaschmachine power_now: 193.83 W
2017-04-04_13:05:56 Switch_KellerWaschmachine power_now: 180.17 W
2017-04-04_13:06:56 Switch_KellerWaschmachine power_now: 172.80 W
2017-04-04_13:07:56 Switch_KellerWaschmachine power_now: 185.46 W
2017-04-04_13:08:56 Switch_KellerWaschmachine power_now: 179.45 W
2017-04-04_13:09:56 Switch_KellerWaschmachine power_now: 175.73 W
2017-04-04_13:10:56 Switch_KellerWaschmachine power_now: 174.95 W
2017-04-04_13:11:56 Switch_KellerWaschmachine power_now: 164.43 W
2017-04-04_13:12:56 Switch_KellerWaschmachine power_now: 169.51 W
2017-04-04_13:13:56 Switch_KellerWaschmachine power_now: 173.44 W
2017-04-04_13:14:56 Switch_KellerWaschmachine power_now: 169.15 W
2017-04-04_13:15:56 Switch_KellerWaschmachine power_now: 178.38 W
Im vorliegenden Fall hat er bspw. auf Basis des Wertes
2017-04-04_12:59:56 Switch_KellerWaschmachine power_now: 167.44 W
ausgelöst.
Hat jemand eine Idee, wie ich das in den Griff bekomme? Etwas Perl-Magie z.B.?
Danke und VG
Kai
define DOIF_Switch_KellerWaschmachine DOIF ([Switch_KellerWaschmachine:power_now:d] < "2") (set PushbulletKai message Waschmaschine fertig|Waschmaschine, set PushbulletLucy message Waschmaschine fertig|Waschmaschine)
probier mal so.
durch das ':d' sollte das 'W' weg gefiltert werden.
Zitat von: KaiK am 04 April 2017, 13:24:37Die Auswertung mache ich dann nicht mit bspw. < 2 sondern mit lt "2". (dies hatte ich hier irgendwo mal gelesen..., vermutlich ist das aber genau das Problem).
Natürlich, weil zwar 2<136 aber "2" gt "136" (und auch "2" gt "136 W" oder kurz -> "2" gt "1"!).
Zitat von: automatisierer am 04 April 2017, 14:23:23
define DOIF_Switch_KellerWaschmachine DOIF ([Switch_KellerWaschmachine:power_now:d] < "2") (set PushbulletKai message Waschmaschine fertig|Waschmaschine, set PushbulletLucy message Waschmaschine fertig|Waschmaschine)
probier mal so.
durch das ':d' sollte das 'W' weg gefiltert werden.
Super, das war genau die Lösung! Danke!
Hänge mich mal dran.
Will auch meine Waschmaschinen Meldung bekommen.
defmod di_Waschmaschine DOIF ([HM_KE_KG_PMS1 2.POWER] == 0 ) DOELSEIF ([HM_KE_KG_PMS1 2.POWER] > 12) DOELSEIF ([HM_KE_KG_PMS1 2.POWER] < 5) (set pushmsg msg 'Waschmaschine fertig!')
attr di_Waschmaschine cmdState aus|laeuft|fertig
attr di_Waschmaschine room Waschmaschine
attr di_Waschmaschine wait 60:0:90
Wieso meckert DOIF bei der Zeit?
timer_01_c01 error: Wrong timespec HM_KE_KG_PMS12.POWER: either HH:MM:SS or {perlcode} 2017-04-08 18:27:00
timer_02_c02 error: Wrong timespec HM_KE_KG_PMS12.POWER: either HH:MM:SS or {perlcode} 2017-04-08 18:27:00
timer_03_c03 error: Wrong timespec HM_KE_KG_PMS12.POWER: either HH:MM:SS or {perlcode} 2017-04-08 18:27:00
wait_timer no timer 2017-04-08 18:27:22
Wer einen Tipp für mich.
Danke LG
Leerzeichen im Device-Namen sind unzulässig: HM_KE_KG_PMS1 2.POWER