neuer FHEM-Befehl IF

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

Vorheriges Thema - Nächstes Thema

Bartimaus

Guten Morgen,
ich versuche gerade die Zirkulationspumpemit FHEM / IF zu automatisieren.
Wenn ich folgenden Code speichere (Pumpe soll um 11:00Uhr alle 15 min jeweils für 3min laufen) :
define PumpeTest1 at *11:36:00 IF ([Abwesend:state] eq "off") (define a_test at at +*{4}00:15:00 set ZirkulationsPumpe on-for-timer 180)

erhalte ich im Logfile folgenden Eintrag:

define a_test at at +*400:15:00 set ZirkulationsPumpe on-for-timer 180 : Wrong timespec at: either HH:MM:SS or {perlcode}

Wie es aussieht, kommt IF mit +*{n} nicht zurecht, kann das sein ?
LG
B.


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

Damian

Zitat von: Bartimaus am 16 April 2014, 11:50:18
Guten Morgen,
ich versuche gerade die Zirkulationspumpemit FHEM / IF zu automatisieren.
Wenn ich folgenden Code speichere (Pumpe soll um 11:00Uhr alle 15 min jeweils für 3min laufen) :
define PumpeTest1 at *11:36:00 IF ([Abwesend:state] eq "off") (define a_test at at +*{4}00:15:00 set ZirkulationsPumpe on-for-timer 180)

erhalte ich im Logfile folgenden Eintrag:

define a_test at at +*400:15:00 set ZirkulationsPumpe on-for-timer 180 : Wrong timespec at: either HH:MM:SS or {perlcode}

Wie es aussieht, kommt IF mit +*{n} nicht zurecht, kann das sein ?
ja, z. Zt. kollidiert es mit der Möglichkeit bei IF in Kombination mit FHEM-Befehlen beliebige Perl-Ausdrücke in geschweiften Klammern ausführen zu lassen. Ich werde mir was einfallen lassen, dass beides geht.

Gruß

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

Michi240281

#242
Hallo,

ich möchte mir gerne, wenn es an der Haustür klingelt und ich nicht daheim bin, eine Pushnachricht schicken lassen.

So sieht das notify aus:

define Klingelbenachrichtigung_Abwesend notify Klingeltaster:closed IF ([Abwesenheit_Michael] eq "ja") (set Push msg 'Fhem-Benachrichtigung' 'Türklingel betätigt' '' 0 '')

Dabei tritt folgender Fehler auf:


IF: use " instead of ': set Push msg 'Fhem-Benachrichtigung' 'Türklingel betätigt' '' 0 ''


Der kommt auch, wenn man nur den IF-Ausdruck ausführt.

Ein

set Push msg 'Fhem-Benachrichtigung' 'Türklingel betätigt' '' 0 ''

funktioniert einwandfrei. Beim Pushover Modul muss es wohl so sein, dass die Syntax 2 Hochkommata beinhaltet, statt Apostrophs.

Ne Idee wo die Ursache liegen könnte und wie man das beheben kann?
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 25 April 2014, 19:47:22
Hallo,

ich möchte mir gerne, wenn es an der Haustür klingelt und ich nicht daheim bin, eine Pushnachricht schicken lassen.

So sieht das notify aus:

define Klingelbenachrichtigung_Abwesend notify Klingeltaster:closed IF ([Abwesenheit_Michael] eq "ja") (set Push msg 'Fhem-Benachrichtigung' 'Türklingel betätigt' '' 0 '')

Dabei tritt folgender Fehler auf:


IF: use " instead of ': set Push msg 'Fhem-Benachrichtigung' 'Türklingel betätigt' '' 0 ''


Der kommt auch, wenn man nur den IF-Ausdruck ausführt.

Ein

set Push msg 'Fhem-Benachrichtigung' 'Türklingel betätigt' '' 0 ''

funktioniert einwandfrei. Beim Pushover Modul muss es wohl so sein, dass die Syntax 2 Hochkommata beinhaltet, statt Apostrophs.

Ne Idee wo die Ursache liegen könnte und wie man das beheben kann?

Beim IF werden einfache Anführungszeichen intern benutzt, um die Kommandos an das perl-if zu übergeben, deswegen funktionieren z. Zt. nur doppelte.

Was passiert, wenn du angibst:

set Push msg "Fhem-Benachrichtigung" "Türklingel betätigt" "" 0 ""


Gruß

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

Michi240281

Funktioniert!!!!!!! :)

Verstehe nicht, warum dann im PushOver Modul steht, dass es keine Anführungszeichen sein dürfen sondern Hochkommata sein müssen.........
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 25 April 2014, 21:49:14
Funktioniert!!!!!!! :)

Verstehe nicht, warum dann im PushOver Modul steht, dass es keine Anführungszeichen sein dürfen sondern Hochkommata sein müssen.........

Wenn du z. B. perl-if benutzen würdest, müsstest du den set Push-Befehl mit fhem("set Push...") aufrufen und dann würden doppelte Anführungszeichen beim Push nicht funktionieren, weil sie schon für fhem("..") genutzt würden.

Gruß

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

Damian

#246
Zitat von: Damian am 16 April 2014, 14:58:13
ja, z. Zt. kollidiert es mit der Möglichkeit bei IF in Kombination mit FHEM-Befehlen beliebige Perl-Ausdrücke in geschweiften Klammern ausführen zu lassen. Ich werde mir was einfallen lassen, dass beides geht.

Gruß

Damian

Ich habe nun IF so angepasst, dass geschweifte Klammern in FHEM-Befehlen nicht ausgewertet werden, um kompatibel zu FHEM-Befehlen, wie z. B. at, die selbst geschweifte Klammern nutzen, zu sein. Gleichzeitig bedeutet diese Änderung, dass ich die Auswertung von Perlausdrücken innerhalb von FHEM-Befehlen spezieller fassen musste. Dies führt zur Inkompatibilität zu der bisherigen Version. Will man mit der neuen IF-Version einen Perlausdruck auswerten, muss er zusätzlich in runde Klammern gefasst werden. Ich denke diese Inkompatibilität ist zu verschmerzen, da wahrscheinlich noch nicht viele dieses Feature nutzen. Die Doku wurde entsprechend angepasst.

Beispiel aus der Doku:

aus bisher:

define temp at 18:00 IF ([outdoor:temperature] > 10) (set thermostat desired-temp {[thermostat:desired-temp:d]+1})

wird dann:

define temp at 18:00 IF ([outdoor:temperature] > 10) (set thermostat desired-temp {([thermostat:desired-temp:d]+1)})


Wer also dieses Feature bereits nutzt, muss es dann wie oben anpassen. Update des Befehls kommt in den nächsten Tagen.

Gruß

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

Bartimaus

Moin,
danke für die Rückmeldung. Wann wird das Update verfügbar sein ?
LG
B.


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

Damian

Zitat von: Bartimaus am 29 April 2014, 10:34:44
Moin,
danke für die Rückmeldung. Wann wird das Update verfügbar sein ?

Ich werde es heute hochladen. Es wird also morgen per Update verfügbar sein.

Gruß

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

yogiflop

Zitat von: Damian am 25 April 2014, 21:29:50
Beim IF werden einfache Anführungszeichen intern benutzt, um die Kommandos an das perl-if zu übergeben, deswegen funktionieren z. Zt. nur doppelte.

Was passiert, wenn du angibst:

set Push msg "Fhem-Benachrichtigung" "Türklingel betätigt" "" 0 ""


Gruß

Damian


Das funktioniert aber leider nur so lange, wie ich keine Variable mit übergebe. Wenn ich mich richtig erinnere wird bei '$temp' der Inhalt der variablen $temp übergeben und bei "$temp" der string $temp geschrieben. Für mich währe es sehr interessant, das ich wieder eine Variable mit übergeben kann, da ich gerne in der Push-Meldung auch den Fehlertyp haben möchte, den ich mit IF abfange.

gruß
Marc
CubieTruck mit FHEM 5.7
433MHz, 868MHz HMLan
div. Baumarktsteckdosen, 3x HM
div. MiLight's

Damian

Zitat von: yogiflop am 29 April 2014, 17:21:15

Das funktioniert aber leider nur so lange, wie ich keine Variable mit übergebe. Wenn ich mich richtig erinnere wird bei '$temp' der Inhalt der variablen $temp übergeben und bei "$temp" der string $temp geschrieben. Für mich währe es sehr interessant, das ich wieder eine Variable mit übergeben kann, da ich gerne in der Push-Meldung auch den Fehlertyp haben möchte, den ich mit IF abfange.

gruß
Marc

Warum soll das mit Variablen nicht gehen? Von wo kommt $temp? Wo soll es übergeben werden? Wie sieht dein bisheriger Konstrukt aus?

Gruß

Damian

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

yogiflop

#251
Zitat von: Damian am 29 April 2014, 17:46:11
Warum soll das mit Variablen nicht gehen? Von wo kommt $temp? Wo soll es übergeben werden? Wie sieht dein bisheriger Konstrukt aus?

Gruß

Damian

danke für die schnelle Antwort:

Momentan sieht es so aus:
+*00:05:00 IF ([ohz.owo.weather:_httpResponse_c]  ne "200 OK") ({my $temp=ReadingsVal("ohz.owo.weather","_httpResponse_c","")},{Log 2, "ohz.owo.waether Fehler Vorher: " .ReadingsVal("ohz.owo.weather","_httpResponse_c","") }, set ohz.owo.weather stationById 2856500 , set notify.push msg "FHEM" "Fehler OpenWeatherMap - Siehe Logfile - $temp" "" 0 "", {Log 2, "ohz.owo.waether Fehler Nachher: " .ReadingsVal("ohz.owo.weather","_httpResponse_c","") } )


und in der Meldung steht dann leider auch
ZitatFehler OpenWeatherMap - Siehe Logfile - $temp


Edit:
Habe zum testen das "ne" auch durch "eq" ersetzt, weil momentan arbeitet der Befehl ja wunderbar, bis auf die Pushover-Meldung
CubieTruck mit FHEM 5.7
433MHz, 868MHz HMLan
div. Baumarktsteckdosen, 3x HM
div. MiLight's

yogiflop

Nachtrag:

Ein


{my $temp=ReadingsVal("ohz.owo.weather","_httpResponse_c","") ;; fhem("set notify.push msg 'FHEM' 'Fehler OpenWeatherMap - Siehe Logfile - $temp' '' 0 '' ") }


in der Kommandozeile erzeugt die gewünschte Nachricht mit dem $temp Wert
CubieTruck mit FHEM 5.7
433MHz, 868MHz HMLan
div. Baumarktsteckdosen, 3x HM
div. MiLight's

Damian

Zitat von: yogiflop am 29 April 2014, 18:00:56
danke für die schnelle Antwort:

Momentan sieht es so aus:
+*00:05:00 IF ([ohz.owo.weather:_httpResponse_c]  ne "200 OK") ({my $temp=ReadingsVal("ohz.owo.weather","_httpResponse_c","")},{Log 2, "ohz.owo.waether Fehler Vorher: " .ReadingsVal("ohz.owo.weather","_httpResponse_c","") }, set ohz.owo.weather stationById 2856500 , set notify.push msg "FHEM" "Fehler OpenWeatherMap - Siehe Logfile - $temp" "" 0 "", {Log 2, "ohz.owo.waether Fehler Nachher: " .ReadingsVal("ohz.owo.weather","_httpResponse_c","") } )



Wenn du bei FHEM-Befehlen einen Reading übergeben willst, dann brauchst du das bei IF nicht umständlich über Variablen zu machen wie bei if, das geht auch einfacher z. B. mit:

+*00:05:00 IF ([ohz.owo.weather:_httpResponse_c]  ne "200 OK") (set notify.push msg "FHEM" "Fehler OpenWeatherMap - Siehe Logfile - [ohz.owo.weather:_httpResponse_c]" "" 0 "" )


Gruß

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

yogiflop

Zitat von: Damian am 29 April 2014, 18:43:06
Wenn du bei FHEM-Befehlen einen Reading übergeben willst, dann brauchst du das bei IF nicht umständlich über Variablen zu machen wie bei if, das geht auch einfacher z. B. mit:

+*00:05:00 IF ([ohz.owo.weather:_httpResponse_c]  ne "200 OK") (set notify.push msg "FHEM" "Fehler OpenWeatherMap - Siehe Logfile - [ohz.owo.weather:_httpResponse_c]" "" 0 "" )


Gruß

Damian


bedankt..... klappt .....


gruß Marc
CubieTruck mit FHEM 5.7
433MHz, 868MHz HMLan
div. Baumarktsteckdosen, 3x HM
div. MiLight's