neuer FHEM-Befehl IF

Begonnen von Damian, 25 Dezember 2013, 23:50:06

Vorheriges Thema - Nächstes Thema

der-Lolo

Hallo Damian,
darf ich Dich nochmal fragen was hier schief läuft..?

Ich bekomme folgende Meldung:
Zitatm_Herd_on return value: Unknown command {if((ReadingValIf('mpl_Herd_m','power','(-?\d+(\.\d+)?)'), try help.

und habe dieses im DEF stehen...
mpl_Herd_m IF (([mpl_Herd_m:power:d] > 2) and ([mpl_Herd_m:power:d] < 25)) (set mpl_Herd_switch off,attr mpl_Herd_switch devStateIcon off:power-orange:on,define at +00:33:00 set mpl_Herd_switch on ;; attr m_Herd_on disable 1)

ziel ist wenn mpl_Herd_m (Leistungsmessung) größer 2 Watt ist und kleiner 25 Watt soll die Steckdose für 33 Minuten abschalten - während dieser Zeit soll das Icon orange gezeigt werden, nach 33 Minuten soll die Steckdose wieder anschalten und sich das notify selbst disablen...

Es gibt dann ein zweites Notify dessen DEF schaut so aus:
mpl_Herd_m:power IF ([mpl_Herd_m:power:d] < 2) (attr mpl_Herd_switch devStateIcon on:power-black:on off:power-black:on,attr m_Herd_on disable 0)

Wenn also die Leistungsaufnahme < 2 Watt ist soll das Icon einfach schwarz sein und das andere notify wieder aktivieren.

Unser Herd steht frei - wenn er länger als 10 Minuten an war, auch bei nur 120° springt für mehr als eine halbe stunde ein Lüfter an der wahnsinnigen Krawall macht. Wenn der Lüfter läuft verbraucht der Herd 23 Watt.
Der Herd hat eine Uhr - diese verbraucht 1,6Watt das wäre also der normalzustand.

orange als Icon setze ich hier öfter ein wenn etwas "remote" geschaltet oder abgeschaltet wurde. z.b. auch beim Subwoofer nach 22h das hat sich also etabliert, meine Frau weiss dann auch was Sache ist ;-)

Ich hoffe du kannst helfen - vielleicht wäre threshold auch eine Lösung, da wollte ich mich eh mal mit beschäftigen...
Gruß aus Berlin,
Michael

Damian

Zitat von: der-Lolo am 19 März 2014, 18:12:11

und habe dieses im DEF stehen...
mpl_Herd_m IF (([mpl_Herd_m:power:d] > 2) and ([mpl_Herd_m:power:d] < 25)) (set mpl_Herd_switch off,attr mpl_Herd_switch devStateIcon off:power-orange:on,define at +00:33:00 set mpl_Herd_switch on ;; attr m_Herd_on disable 1)

Beim IF selbst sehe ich keinen Fehler. Ich sehe aber einen bei deinem at Befehl, da fehlt der Name des at-Moduls

define ?? at +00:33:00

Auf die Fehlermeldung selbst, habe ich keinen Einfluss, da mein Parser keine Fehler im IF gefunden hat - die kommt vom FHEM-Parser.

Bei komplexeren Befehlen, kannst du immer den Fehler relativ schnell finden, wenn du den Befehl vereinfacht in der Kommandozeile aufrufst.

wenn z. B.:

IF (([mpl_Herd_m:power:d] > 2) and ([mpl_Herd_m:power:d] < 25)) (set mpl_Herd_switch off)


funktioniert (ich habe es gerade bei mir nachgestellt, und es funktioniert), dann kannst du als nächstes in der Kommandozeile testen:

IF (([mpl_Herd_m:power:d] > 2) and ([mpl_Herd_m:power:d] < 25)) (set mpl_Herd_switch off,attr mpl_Herd_switch devStateIcon off:power-orange:on)

danach mit define ... at und wenn dann alles syntaktisch korrekt ist, kannst du den ganzen Befehl in deinen Notify packen.

Gruß

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

Michi240281

Hi Damian,

ne Idee, warum folgender WDT nicht geht?

define Abschreckung_Flurlicht WeekdayTimer Flurlicht 1234567|20:26|an IF ([Abwesend:state] eq "ja")

"Abwesend:state" ist natürlich auf ja.
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 19 März 2014, 20:28:55
Hi Damian,

ne Idee, warum folgender WDT nicht geht?

define Abschreckung_Flurlicht WeekdayTimer Flurlicht 1234567|20:26|an IF ([Abwesend:state] eq "ja")

"Abwesend:state" ist natürlich auf ja.

Wie denn auch - du hast ja gar keinen Befehl im dann-Fall angegeben, dann schon eher

define Abschreckung_Flurlicht WeekdayTimer Flurlicht 1234567|20:26|an IF ([Abwesend:state] eq "ja") (set Flurlicht an)

Gruß

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

Michi240281

Ahso, dachte das würde auch so gehen da ja der Befehl (der WDT) davor schon steht!

Wieder was gelernt!
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

der-Lolo

Wow - das war ein harter Kampf...
Ich habe das Gefühl das bei langen zeichenketten eine Beschränkung vorhanden ist. Wahrscheinlich aber eher von Perl oder FHEM aus als vom Modul. Ich habe Namen angepasst um die Zeile kürzer zu machen, ansonsten kaum nennenswerte Änderungen - jetzt funktioniert es jedenfalls.
Danke auch wegen dem define at - das hab ich wirklich total übersehen...
Als Schönheitsfehler bleibt nun das das at schon definiert ist Fehler im log, ein delete xxx bekomm ich aber nicht mehr unter.

Eine Kleinigkeit würde ich nun gerne noch hinzufügen - immer mittags um zwölf würde ich gerne kurz vom Strom trennen wenn der Herd keine Leistung >2 Watt zieht...
Hintergrund - Uhr stellen - aber einen evtl. Kochvorgang dafür nicht unterbrechen.

Damian

Zitat von: der-Lolo am 20 März 2014, 09:34:49
Ich habe das Gefühl das bei langen zeichenketten eine Beschränkung vorhanden ist. Wahrscheinlich aber eher von Perl oder FHEM aus als vom Modul. Ich habe Namen angepasst um die Zeile kürzer zu machen, ansonsten kaum nennenswerte Änderungen - jetzt funktioniert es jedenfalls.
So lange Befehlsketten habe ich bisher noch nicht gehabt. Das muss ich mir mal anschauen - woher die Einschränkung kommt.

Zitat
Eine Kleinigkeit würde ich nun gerne noch hinzufügen - immer mittags um zwölf würde ich gerne kurz vom Strom trennen wenn der Herd keine Leistung >2 Watt zieht...
Hintergrund - Uhr stellen - aber einen evtl. Kochvorgang dafür nicht unterbrechen.

Kannst ja mit at-Befehl probieren, wenn es nicht funktioniert hier posten.

Gruß

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

Jens_B

Hallo zusammen,

also ich habe das Modul gerade entdeckt, noch nicht probiert. Aber die Idee finde ich gerade für einen Anfänger total gut.
Ich werde das Modul mal testen und ich meinem kleinen "Testraum" ausprobieren.

Gruß
Jens
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

Damian

Zitat von: der-Lolo am 20 März 2014, 09:34:49
Ich habe das Gefühl das bei langen zeichenketten eine Beschränkung vorhanden ist. Wahrscheinlich aber eher von Perl oder FHEM aus als vom Modul.

Ich kann keine Beschränkungen bei mir erkennen. Ich habe diese lange Zeile in der Kommandozeile eingegeben:

IF (([Aussensensor:humidity:d] > 10) and ([Aussensensor:humidity:d] < 90)) (set Drucker off,set Drucker off, set Drucker off, set Drucker off, set Drucker off, set Drucker off, attr Drucker devStateIcon off:power-orange:on,define at_test at +00:02 set Drucker  on;;set Drucker on ;;set Drucker on ;; attr Drucker disable 1)


Alles wurde bei mir korrekt ausgeführt. FHEM läuft bei mir auf einem Windows-Rechner.

Gruß

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

der-Lolo

versuch es mal bitte in einer notify definition...

Damian

Zitat von: der-Lolo am 20 März 2014, 18:14:52
versuch es mal bitte in einer notify definition...

Es funktioniert bei mir alles, wie programmiert.

Ich glaube, ich weiß was dein Problem ist.

Wenn du in der Kommandozeile define n_mpl_Herd_m notify mpl_Herd_m IF .... definierst, dann müsstest du schon vier! Semiklons hinter define .. at angeben statt zwei, damit in der DEF-Zeile des notifys zwei! übrig bleiben - das erforderliche Doppeln von Semikolons führt immer wieder zu Problemen.

Du kannst dir auch behelfen, indem du in der Kommandozeile tippst:

define n_mpl_Herd_m notify mpl_Herd_m bla (bla statt IF ....)

Dann gehst du in dein notify hier also n_mpl_Herd_m über DEF und ersetzt dort "bla" durch deinen IF-Befehl mit den zwei! Semikolons hinter define  .. at.

Sorry, das Doppeln von Semikolons ist nicht auf meinem Mist gewachsen.

Man kann auch die ganze Problematik mit den Semikolons mit einem Trick umgehen. In deinem Fall könntest du tippen:

define n_mpl_Herd_m notify mpl_Herd_m
IF (([mpl_Herd_m:power:d] > 2) and ([mpl_Herd_m:power:d] < 25))
  (set mpl_Herd_switch off,attr mpl_Herd_switch devStateIcon off:power-orange:on,define a_mpl_Herd_m at +00:33:00 IF (1) (set mpl_Herd_switch on, attr m_Herd_on disable 1))


Auf diese Weise brauchst du gar keine Semikolons zu tippen, denn der zweite (missbrauchte) IF kümmert sich um die korrekte Syntax. ;)

Dann ist auch egal, ob du alles in der Kommandozeile tippst oder beim DEF des notifys selbst.

Gruß

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

der-Lolo

Ok, danke für die Tipps! Unten das mit dem zweitem IF gefällt mir gut...
Ich gebe eigentlich immer nur
define bla notify blub IF()
ein und drücke dann enter - den rest erledige ich über die DEF - fläche...
Keine Ahnung woran es scheiterte - jetzt jedenfalls geht es erstmal.
Das ich dein IF Modul klasse finde brauche ich ja nicht mehr zu erwähnen, ich benutze es fast ausschliesslich...
Tolle Arbeit also.
Danke! Und mach weiter so ;-)

Damian

#207
Zitat von: der-Lolo am 20 März 2014, 19:07:05
Ok, danke für die Tipps! Unten das mit dem zweitem IF gefällt mir gut...
Ich gebe eigentlich immer nur
define bla notify blub IF()
ein und drücke dann enter - den rest erledige ich über die DEF - fläche...
Keine Ahnung woran es scheiterte - jetzt jedenfalls geht es erstmal.
Das ich dein IF Modul klasse finde brauche ich ja nicht mehr zu erwähnen, ich benutze es fast ausschliesslich...
Tolle Arbeit also.
Danke! Und mach weiter so ;-)

Ich teste bereits eine weitere Version des IF-Befehls, die kann auch mit Internals umgehen nach der Syntax IF ([Device:&STATE] ...

Nach fast drei monatiger Test-Phase - es wurde bisher keine Inkonsistenz oder Fehlverhalten des IF-Befehls festgestellt - könnte man über das Einchecken des Befehls nachdenken, damit es der Allgemeinheit zugute kommt.

Gruß

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

der-Lolo

ich heb gerne den Finger als Tester..
Mein nächstes grösseres Projekt soll werden 2 Systeme vernünftig zu koppeln schön das die Jungs gerade parallel die 98_Dummy bearbeiten, die koppeln wenn ich alles richtig verstanden habe Readings in ein Dummy - so hätte man ja auf beiden Maschinen jeweils fast das Device...

Einbinden von php steht auch noch auf der ToDo liste, genau wie IR Senden & Empfangen...

Joachim

Zitatschön das die Jungs gerade parallel die 98_Dummy bearbeiten, die koppeln wenn ich alles richtig verstanden habe Readings in ein Dummy - so hätte man ja auf beiden Maschinen jeweils fast das Device...

Tester wilkommen
http://forum.fhem.de/index.php/topic,21533.0.html

gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232