Hallo zusammen,
ich verzweifle ein wenig mit meinem DOIF. Es soll geprüft werden, ob die aktuelle URL auf dem Tablet die index.html ist. Falls nein, soll sie geladen werden.
Aber egal mit welchen (zusätzlichen) Anführungszeichen oder Backslashes ich es probiere - es kommt immer wieder folgender Fehler
condition c03: syntax error at (eval 150415) line 3, near "192.168.1.2:"
Unknown regexp modifier "/e" at (eval 150415) line 3, at end of line
syntax error at (eval 150415) line 7, near ";
}"
Das ist der Codeblock des DOIF:
lichtschranke {
if( ([S7_DRead_aussenbereich_lichtschranke_hof:state] eq "on" && (ReadingsVal("dummy_tablet_in_wandhalterung","state",0) =~ /^on/) && (ReadingsVal("Bewohner","state",0) =~ /^home/)) || [dummy_test1:state] eq "on" ){
if( !(ReadingsVal("fully_galaxy_tab","current_page",0) =~ /^http://192.168.1.2:8083/fhem/ftui/index.html/) ){
fhem("set fully_galaxy_tab url http://192.168.1.2:8083/fhem/ftui/index.html");
}
fhem("set dummy_kamerabild_in_tablet_ui_aktivieren on-for-timer 60");
}
}
Was genau mache ich hier falsch?
Hi,
auf alle Fälle stören die /
http://192.168.1.2:8083/fhem/ftui/index.html -> http:\/\/192.168.1.2:8083\/fhem\/ftui\/index.html
Ich bin nicht sicher ob das alles ist ;)
Du könntest auch einfach einen Teil testen:
=~ /index.html/
Gruß Otto
Zitat von: Otto123 am 14 August 2020, 15:23:46
http://192.168.1.2:8083/fhem/ftui/index.html -> http:\/\/192.168.1.2:8083\/fhem\/ftui\/index.html
Hi Otto, den Versuch hatte ich auch schon gewagt - gleiche Fehlermeldung :-(
ReadingsVal("fully_galaxy_tab","current_page",0) -> ReadingsVal('fully_galaxy_tab', 'current_page', '') , (das mit der 0 statt String bei Val machst du gern , bei ReadingsNum wäre es ok)
if( !(ReadingsVal("fully_galaxy_tab","current_page",0) =~ /^http://192.168.1.2:8083/fhem/ftui/index.html/) ){
wird dann ganz simpel zu
if (ReadingsVal('fully_galaxy_tab', 'current_page', '') ne 'http://192.168.1.2:8083/fhem/ftui/index.htm') {
Axo , den Umweg Perl -> FHEM -> Perl kannst du auch gleich einsparen :
fhem("set fully_galaxy_tab url http://192.168.1.2:8083/fhem/ftui/index.html");
fhem("set dummy_kamerabild_in_tablet_ui_aktivieren on-for-timer 60");
CommandSet(undef, 'fully_galaxy_tab url http://192.168.1.2:8083/fhem/ftui/index.html');
CommandSet(undef, 'dummy_kamerabild_in_tablet_ui_aktivieren on-for-timer 60');
Vielen Dank für die zusätzlichen Tipps. Ich bin tatsächlich was Perl-Skripte betrifft noch ganz am Anfang.
if (ReadingsVal('fully_galaxy_tab', 'current_page', '') ne 'http://192.168.1.2:8083/fhem/ftui/index.htm') {
Funktioniert super, vielen Dank! Werde es mir auch versuchen zu merken, mit einfachen Anführungsstrichen zu arbeiten und nicht auf "0" zu setzen :-)
Was allerdings nicht funktioniert sind die beiden "CommandSet". Füge ich das ein, kommt folgender Fehler:
condition c03: Undefined subroutine &DOIF::CommandSet called, line 4.
Ist da eventuell noch ein Fehler drin? Was genau hat es eigentlich mit CommandSet auf sich, wirklich viel habe ich dazu nicht gefunden...
Vorerst habe ich es so geändert:
fhem('set fully_galaxy_tab url http://192.168.1.2:8083/fhem/ftui/index.html');
Damit geht es jetzt wenigstens :-) Über eine Aufklärung zu CommandSet würde ich mich aber trotzdem freuen. Was hat dieser Weg für Vorteile und wie/wann ist er anzuwenden?
Zitat von: Thomas41587 am 14 August 2020, 19:30:08
Ist da eventuell noch ein Fehler drin? Was genau hat es eigentlich mit CommandSet auf sich, wirklich viel habe ich dazu nicht gefunden...
Vermutlich wird es einfach von DOIF nicht direkt unterstützt, in einem notify oder at oder eigener sub kann man das ohne Probleme einsetzen, sorry.
CommandSet ist die sub die innerhalb von fhem.pl in Wahrheit die Arbeit macht, wenn man ein set Kommando an FHEM übergibt. CommandXXX hat noch jede Menge Brüder, einfach mal etwas in fhem.pl stöbern. Man könnte auch ein Reading noch direkter setzen aber so bleibt die Syntaxprüfung erhalten und was IMHO fast noch wichtiger ist (und viel zu selten geschrieben wird) die Übergabe als Gruppe. Man sieht oft solche Teile :
set lampe on; set licht on; set tv on; usw. statt das einfach mit set lamp,licht,tv on zu erschlagen.
commandSet ist im DOIF Perl-Modus:
fhem_set https://fhem.de/commandref_DE.html#DOIF_fhem_set
Danke für die Aufklärung! Dann werde ich zukünftig den "direkten" Weg mit commandSet bzw. fhem_set nehmen :-)
Zitat von: Thomas41587 am 17 August 2020, 11:57:22
Danke für die Aufklärung! Dann werde ich zukünftig den "direkten" Weg mit commandSet bzw. fhem_set nehmen :-)
ja, fhem_set ruft commandSet selbst auf befindet sich aber im passenden Package "DOIF"