Autor Thema: [gelöst] Perlcode in set_Exec  (Gelesen 375 mal)

Offline FHEMAN

  • Sr. Member
  • ****
  • Beiträge: 689
[gelöst] Perlcode in set_Exec
« 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
« Letzte Änderung: 08 Oktober 2021, 16:47:51 von FHEMAN »
NUC7i5 | PROXMOX | FHEM 5.9 | 2 HMLAND | HM | UMTS | LMS | HIFIBERRY | DOORBIRD | KM200 | HUE | ECHO | MILIGHT | LUFTDATENINFO | MQTT | INDEGO | ROBOROCK

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:Perlcode in set_Exec
« Antwort #1 am: 04 Oktober 2021, 22:27:05 »
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.
« Letzte Änderung: 04 Oktober 2021, 22:29:50 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline FHEMAN

  • Sr. Member
  • ****
  • Beiträge: 689
Antw:Perlcode in set_Exec
« Antwort #2 am: 04 Oktober 2021, 22:59:33 »
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!
NUC7i5 | PROXMOX | FHEM 5.9 | 2 HMLAND | HM | UMTS | LMS | HIFIBERRY | DOORBIRD | KM200 | HUE | ECHO | MILIGHT | LUFTDATENINFO | MQTT | INDEGO | ROBOROCK

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:Perlcode in set_Exec
« Antwort #3 am: 04 Oktober 2021, 23:03:25 »
ja, $SELF und $DEVICE sind keine echten Perlvariablen, sondern nur Platzhalter
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF