FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: FHEMAN am 04 Oktober 2021, 22:19:27

Titel: [gelöst] Perlcode in set_Exec
Beitrag von: FHEMAN am 04 Oktober 2021, 22:19:27
Hallo,
laut Dokumentation kann ich Perlcode in set_Exec im Doif Perlmodus aufrufen. Außerdem möchte ich Perl-Variablen verwenden. Beides bekomme ich nicht richtig hin. Was mache ich falsch?
Fehlermeldung: condition c01: Bad name after Autobeschattung', line 44

if (!get_Exec("sleep.Wait.Autobeschattung.$compass")) {
set_Exec("sleep.Wait.Autobeschattung.$compass",$waitDown,'if ([struc.Rollos.$compass:state] ne "$dir" && [Autobeschattung:state] eq "on") { fhem("setex Rollos.$compass $dir-force Autobeschattung:$compass:$dir:$waitDown")}');
}

Mein Ziel ist es, sleep zu vermeiden.
Danke für jede Hilfe.

Ronny
Titel: Antw:Perlcode in set_Exec
Beitrag von: Damian am 04 Oktober 2021, 22:27:05
Zitat von: FHEMAN am 04 Oktober 2021, 22:19:27
Hallo,
laut Dokumentation kann ich Perlcode in set_Exec im Doif Perlmodus aufrufen. Außerdem möchte ich Perl-Variablen verwenden. Beides bekomme ich nicht richtig hin. Was mache ich falsch?
Fehlermeldung: condition c01: Bad name after Autobeschattung', line 44

if (!get_Exec("sleep.Wait.Autobeschattung.$compass")) {
set_Exec("sleep.Wait.Autobeschattung.$compass",$waitDown,'if ([struc.Rollos.$compass:state] ne "$dir" && [Autobeschattung:state] eq "on") { fhem("setex Rollos.$compass $dir-force Autobeschattung:$compass:$dir:$waitDown")}');
}

Mein Ziel ist es, sleep zu vermeiden.
Danke für jede Hilfe.

Ronny

Du musst beim if-Befehl $compass auflösen, daher muss if in doppelten Anführungszeichen stehen, der Rest dann logischerweise in einfachen. Variablen funktionieren aber grundsätzlich nicht in DOIF-spezifischer Syntax in eckigen Klammern [...], hier musst du ReadingsVal nutzen.
Titel: Antw:Perlcode in set_Exec
Beitrag von: FHEMAN am 04 Oktober 2021, 22:59:33
Zitat von: Damian am 04 Oktober 2021, 22:27:05
Du musst beim if-Befehl $compass auflösen, daher muss if in doppelten Anführungszeichen stehen, der Rest dann logischerweise in einfachen. Variablen funktionieren aber grundsätzlich nicht in DOIF-spezifischer Syntax in eckigen Klammern [...], hier musst du ReadingsVal nutzen.
- außer bei $SELF und den internen Variablen, oder?

Korrekt wäre dann also

set_Exec("sleep.Wait.Autobeschattung.$compass",$waitDown,"if (Value('struc.Rollos.$compass' ne '$dir' && [Autobeschattung:state] eq 'on') { fhem('setex Rollos.$compass $dir-force Autobeschattung:$compass:$dir:$waitDown')}");

Das bring zumindest keine Fehlermeldung. Ich werde es morgen erst tagsüber final testen können.
Danke Dir soweit, Damian!
Titel: Antw:Perlcode in set_Exec
Beitrag von: Damian am 04 Oktober 2021, 23:03:25
ja, $SELF und $DEVICE sind keine echten Perlvariablen, sondern nur Platzhalter