neuer FHEM-Befehl IF

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

Vorheriges Thema - Nächstes Thema

Bartimaus

Zitat von: Damian am 24 Februar 2014, 15:41:17
wenn du deine Holiday-Datei mit Attribut holiday2we definiert hast (siehe commandref), dann kannst du $we für Feiertage abfragen.

Ja, habe ich. Danke für den Hinweis. Wieder was gelernt !!!
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

der-Lolo

Zitat von: der-Lolo am 02 März 2014, 10:38:33
Hallo zusammen,
ich spiele nun schon eine ganze weile mit der app herum - gestern Abend habe ich folgendes in betrieb genommen:

IF ([s4:powerPlugged:] eq "true") (set s4 ttsSay Danke,sleep 2,set s4 ttsSay ich melde mich wenn meine Batterie vollständig geladen ist)


Ergebnis: es hagelt Danke rufe aus dem s4, bis ich es wieder vom Strom trenne, dann gibt es zweimal den zweiten ttsSay Befehl als Ausgabe.
Geht das irgendwie zu "entprellen" was kann ich tun? Vielleicht hat ja jemand eine Idee..

Hallo Damian,
im thread zur fullscreen Browser app komm ich hiermit nicht weiter, hast du vielleicht eine Idee was ich ändern kann?

Damian

Zitat von: der-Lolo am 02 März 2014, 16:31:55
Hallo Damian,
im thread zur fullscreen Browser app komm ich hiermit nicht weiter, hast du vielleicht eine Idee was ich ändern kann?

Ich nehme an, dass du dein Konstrukt in einem notify-Befehl aufrufst - wie hast du dort gefiltert?

Wenn dein Device s4 immer wieder den Notify triggert, dann wird natürlich jedes mal bei true dein Befehl ausgelöst.

Du kannst bei dem Device s4 das Attribut event-on-Change-reading setzen, dann wird dein Notify nur ausgelöst, wenn sich der Zustand auch wirklich ändert.

attr s4 event-on-change-reading powerPlugged

Gruß

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

der-Lolo

Sorry Damian, was Du gerade vorgeschlagen hast waren sachen die auch im fullscreen thread schon abgefragt wurden - das habe ich dir unterschlagen...


Zitat von: der-Lolo am 02 März 2014, 11:45:57
Danke für Deine Antwort Rince,
das Komma zum trennen der befehle ist innerhalb des neuen IF Befehls richtig.



define sp_pow_s4_con notify s4 IF ([s4:powerPlugged] eq "true") (set s4 ttsSay Danke,sleep 2,set s4 ttsSay ich melde mich wenn meine Batterie vollständig geladen ist)


Ein  attr s4 event-on-change-reading state wird leider mit einem s4: unknown attribute event-on-change-reading. Type 'attr s4 ?' for a detailed list.

quitiiert.

Ich stecke ja immernoch in den Kinderschuhen - PERL - ist für mich ein buch mit sieben Siegeln. Das IF Modul erleichtert mir wirklich das arbeiten mit FHEM.

Damian

Zitatwird leider mit einem s4: unknown attribute event-on-change-reading. Type 'attr s4 ?' for a detailed list.

Dann wird das Attribut bei diesem Device-Typ wohl nicht unterstützt. Du kannst den Event Monitor eine Zeit lang laufen lassen und schauen, welche Events von deinem s4 kommen. Wenn du einen passenden für deine Aktion gefunden hast, dann kannst du beim notify-Befehl danach filtern: wenn z. B. das Wort "powerPlugged" im Event vorkommt.


define sp_pow_s4_con notify s4:powerPlugged.* IF (....

Gruß

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

der-Lolo

#140
Tausend Dank Damian, es funktioniert erstmal - leider wiederholt sich die Dame nach etwa einer Minute..
Vielleicht liegt das auch daran das der letzte ttsSay nach der Mitteilung im state des devices festgehalten wird - ich bekomme also in jedem fall ein event durch change reading.

define sp_pow_s4_con notify s4:powerPlugged.* IF (....

Ich hoffe das ich diesen REGEX kram irgendwann einmal richtig verstehe. Vom Prinzip her stolper ich ja immer wieder über die gleichen Phänomene... Ich frage nochmal im Webview thread ob das attr event-on-change-reading noch eingebaut wird... Oder hast Du noch eine andere Idee?

Ich habe noch ein ähnliches problem mit meiner Heizung - dort habe ich ein notify mit
XXXXX|timer_hzg IF (([XXXXX:residentsHome:d] > 0 ) and ([timer_hzg:state:[(on|off)]] eq "on")) (set hzg_bad desiredTemperature comfort,set hzg_balkon desiredTemperature comfort) ELSE (set hzg_bad desiredTemperature eco,set hzg_balkon desiredTemperature eco)

soweit ist auf den ersten blick alles gut - problem entsteht wenn residentsHome 1 war und die Heizung händisch verstellt wurde. Kommt nun der zweite Bewohner heim wird der händisch gesetzte Wert überschrieben.
Vielleicht hast Du ja eine Idee was ich da machen könnte..


Ich konnte das reading wechseln, es gibt ein eindeutiges presence reading im Modul...

Damian

Wenn du den Notify für "powerPlugged true" nicht eindeutig anhand der Events identifizieren kannst, dann gibt´s, wie immer Workarounds  :)

Du kannst dir z. B. den jeweiligen Zustand über einen Dummy merken und damit die mehrfachen Ausgaben verhindern.

define d_power_s4 dummy

und dann in deinem Notify definieren:

IF ([s4:powerPlugged] eq "true")
(
   IF ([d_power_s4:state] ne "on")
      (set s4 ttsSay Danke,sleep 2,set s4 ttsSay ich melde mich wenn meine Batterie vollständig geladen ist,
       set d_power_s4 on)
)
ELSE
   (set d_power_s4:FILTER=STATE!=off off)


Gruß

Damian


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

satprofi

Hallo.
Leide habe ich Probleme mit ELSE IF. Diese config schaltet leider nicht.


define Brauchwasser_on_present notify Bewohner IF ([Bewohner:state] eq "present" and (!$we) and ($hms ge "06:30" and $hms le "21:00:54")) (set Steckdose3:FILTER=STATE!=on on) ELSE IF ([Bewohner:state] eq "present" and ($we) and ($hms ge "07:30" and $hms le "21:00:54")) ELSE (set Steckdose3:FILTER=STATE!=off off)


so funktionierts aber

Bewohner IF ([Bewohner:state] eq "present" and ($hms ge "06:30" and $hms le "21:00:54")) (set Steckdose3:FILTER=STATE!=on on) ELSE (set Steckdose3:FILTER=STATE!=off off)


ich kenne else if bei linux mit elif, klappt das hier nicht?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

der-Lolo

Du kannst mehrere if s ineinander verschachteln - else if geht keines wissens nach aber nicht...

Damian

Hinter jedem IF oder ELSE muss immer eine Klammer auf, also (bei dir fehlte eine hinter ELSE und natürlich die dazugehörige am Ende):

define Brauchwasser_on_present notify Bewohner IF ([Bewohner:state] eq "present" and (!$we) and ($hms ge "06:30" and $hms le "21:00:54")) (set Steckdose3:FILTER=STATE!=on on) ELSE (IF ([Bewohner:state] eq "present" and ($we) and ($hms ge "07:30" and $hms le "21:00:54")) ELSE (set Steckdose3:FILTER=STATE!=off off))


elseif gibt es nicht. Stattdessen musst du immer ELSE (IF (... angeben. Damit kannst du allerdings alles machen, was man mit elseif machen könnte.

Bei mehreren Verschachtelungen würde ich dir empfehlen in der DEF-Eingabe Einrückungen vorzunehmen (bitte nicht in der cfg-Datei basteln), damit du später noch die Übersicht behältst bzw. schneller Klammer-Fehler findest. Siehe mein Beispiel im ersten Post zu Einrückungen.

Gruß

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

Damian

hier noch mal das Gleiche mit Einrückungen

define Brauchwasser_on_present notify Bewohner
IF ([Bewohner:state] eq "present" and (!$we) and ($hms ge "06:30" and $hms le "21:00:54"))
   (set Steckdose3:FILTER=STATE!=on on)
ELSE
(  IF ([Bewohner:state] eq "present" and ($we) and ($hms ge "07:30" and $hms le "21:00:54"))
     (.......)                            <----------------------------------------------------------------------------------------
   ELSE
     (set Steckdose3:FILTER=STATE!=off off)
)


und schon fällt auf, dass dir der dann-Fall fehlt.

Gruß

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

satprofi

#146
@Damian
Danke. Ich habe es mit DEF germacht, aber eben über die Klammer gestolpert bzw. die Aktion vergessen.
Leider bleibt die Einrückung nach dem Speichern nicht bestehen.

was ich ebenfalls nicht kapier ist, das du mir eine zweite klammer am ende vorschlöägst, dies aber in meinem funktionierendem beispiel aber fehlt.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Damian

Zitat von: satprofi am 04 März 2014, 19:38:57
@Damian
Danke. Ich habe es mit DEF germacht, aber eben über die Klammer gestolpert bzw. die Aktion vergessen.
Leider bleibt die Einrückung nach dem Speichern nicht bestehen.

komisch bei mir schon ??? vielleicht liegst an Windows.

Gruß

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

Damian

Ich habe es bei mir noch mal getestet:

Die Einrückungen siehe Screenshot werden in der cfg-Datei wie folgt abgelegt und überdauern nach config save auch einen Reboot.

define a_test at *20:00 \
IF (1)\
(set Drucker on)\
ELSE\
( IF (1)\
   (set Drucker off)\
  ELSE\
   (set Drucker on)\
)

Ich kann mir nicht vorstellen, dass es woanders nicht funktioniert.

Gruß

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

Bartimaus

Zitat von: Damian am 02 März 2014, 18:31:16
Wenn du den Notify für "powerPlugged true" nicht eindeutig anhand der Events identifizieren kannst, dann gibt´s, wie immer Workarounds  :)

Du kannst dir z. B. den jeweiligen Zustand über einen Dummy merken und damit die mehrfachen Ausgaben verhindern.

define d_power_s4 dummy

und dann in deinem Notify definieren:

IF ([s4:powerPlugged] eq "true")
(
   IF ([d_power_s4:state] ne "on")
      (set s4 ttsSay Danke,sleep 2,set s4 ttsSay ich melde mich wenn meine Batterie vollständig geladen ist,
       set d_power_s4 on)
)
ELSE
   (set d_power_s4:FILTER=STATE!=off off)


Gruß

Damian

Hallo,

dh, ich kann mir zB einen Temperaturwert eines angeschlossenen Sensors in einem Dummy merken, und diesen Wert dann dividieren&multiplizieren und das Ergebnis als "set-on-for-timer" verwenden ?
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly