FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: franky08 am 01 März 2014, 21:28:51

Titel: [gelöst] Fehler in regex Perl Bedingung
Beitrag von: franky08 am 01 März 2014, 21:28:51
Hallo, da ich dem Fehler seit 2 Tagen nicht auf die Schliche komme, frage ich jetzt mal die fhem Gemeinde. Problem ist folgendes: ab einer Startzeit wird ein zweiminütiger Abfragetimer gestartet der, bei Bedingung erfüllt eine Sprachausgabe über das Text2Speech Modul realisieren soll. Die Startzeit ist jetzt zum testen auf 21:00:00 Uhr gelegt. Was kann hier falsch sein, habe es mit Maskiert und ohne Maskierungen probiert, leider ohne Erfolg. Ein ähnlicher Code für den Deckenventilator funktioniert ohne Probleme.

Hier das Teil, was nicht will:

*21:00:00 {
{fhem ("define Kueche_on at +*00:02:00
{if (ReadingsVal(\"Kueche_Fenster\",\"state\",99) eq 'open'))
{fhem(\"set MyTTS tts Das Küchenfenster ist noch offen\")}
}
")
}}


Und hier die Deckenventilatorsteuerung, welche OK ist:

#Ventilator schalten
#
define VentTmrOn at *23:00:00 {\
{fhem ("define Ventilator at +*00:02:00 \
{if (ReadingsVal(\"THSensor\",\"temperature\",99)>26) \
{fhem(\"set Deckenventilator on\")} \
else {fhem(\"set Deckenventilator off\")}\
}\
")\
}}
attr VentTmrOn room System
define VentTmrOff at *02:00:00 {fhem ("delete Ventilator")}
attr VentTmrOff room System
define VentAUS at *02:00:30 set Deckenventilator off


Der einzige Unterschied ist das Reading und ich denke das dort der Fehler liegt. Aber ich komm nicht drauf.

Die Fehlermeldung ist:
2014.03.01 21:28:00 3: Kueche_on: Not enough arguments for open at (eval 61714) line 2, near "open)
"


VG
Frank
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: betateilchen am 01 März 2014, 21:39:43
Die vielen Anführungszeichen und backslashes würden mich wahnsinnig machen... 8)

Mach mal Anführungszeichen um die 99, Du versuchst nämlich im Zweifelsfall, einen numerischen Wert alphanumerisch gegen 'open' zu vergleichen.
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: franky08 am 01 März 2014, 21:46:48
Hallo betateilchen, die Anführunszeichen hatte ich auch schon in "Verdacht". Aber leider will es damit auch nicht, bekomme dann immer noch:
2014.03.01 21:42:00 3: Kueche_on: Not enough arguments for open at (eval 62705) line 2, near "open)
"


Hast du, als Perl Guru, noch einen Tip? Langsam weis ich nicht mehr wie ich das ganze noch Ausdrücken könnte.

VG
Frank
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: betateilchen am 01 März 2014, 21:54:14
Der Klammerwahnsinn...

*21:00:00 { fhem ("define Kueche_on at +*00:02:00 { if (ReadingsVal('Kueche_Fenster','state','99') eq 'open'))  {fhem('set MyTTS tts Das Küchenfenster ist noch offen')} } ") }
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: franky08 am 01 März 2014, 22:04:41
Probiere ich morgen aus, jetzt meckert die Frau das die Küche kalt wird.

Vielen Dank
Frank
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: betateilchen am 01 März 2014, 22:07:21
Das at konnte ich wie angegeben jedenfalls problemlos anlegen.
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: franky08 am 01 März 2014, 22:52:12
Hallo betateilchen, Frau weg aus der Küche, Fenster auf aber leider immer noch:
Kueche_on: syntax error at (eval 66223) line 1, near "))  "
syntax error at (eval 66223) line 1, near "} }"


Bis morgen
VG
Frank
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: betateilchen am 01 März 2014, 22:54:07
hast Du meine Definition mit copy&paste in die fhem-Befehlszeile übernommen?

(http://up.picr.de/17518418dj.jpg)
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: betateilchen am 01 März 2014, 23:03:36
Der Sinn Deines Konstrukts erschließt sich mir übrigens in keinster Weise.

Du willst doch eigentlich einfach nur alle zwei Minuten eine Benachrichtigung, wenn nach 21 Uhr das Fenster noch offen ist? Wozu brauchst Du dazu noch ein extra at?
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: franky08 am 01 März 2014, 23:18:25
Hab ich mit C&P übernommen. Das at prüft alle 2 Minuten ob das Fenster auf oder zu ist (soll es jedenfalls).
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: betateilchen am 01 März 2014, 23:29:52
abgesehen davon, dass ich so ein Konstrukt nie in ein notify oder at packen würde (einfach weil es zu unübersichtlich ist) sondern immer in eine Funktion in die 99_myUtils auslagern...

Mach einfach zwei Teile draus:


1. Das at zum Prüfen des Fensters im Zweiminutentakt:

define Kueche_on at +*00:02:00 { if (ReadingsVal('Kueche_Fenster','state','99') eq 'open'))  { fhem('set MyTTS tts Das Küchenfenster ist noch offen') } else { fhem('attr Kueche_on disable 1'} }

2. Das at zum Aktivieren der Prüfung:

define makeActive at *21:00:00 attr Kueche_on disable 0


Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: franky08 am 02 März 2014, 19:43:52
Hallo betateilchen, bin erst heute Abend zum testen gekommen. Habe deinen "Zweiteiler" kopiert. Da war ein Klammerfehler, den ich korrigiert habe. Leider funktioniert das ganze immer noch nicht. Das Log zeigt einen Syntaxfehler, da muss noch irgendwas anderes nicht stimmen.
Die Fehlermeldung:
2014.03.02 23:16:02 3: Kueche_on: syntax error at (eval 105828) line 1, at EOF

Für weitere Tips dankbar,

VG
Frank
Titel: Antw:Fehler in regex Perl Bedingung
Beitrag von: franky08 am 03 März 2014, 12:19:10
So, nach einigen Error & Try Versuchen, funktioniert es jetzt. Es waren Leerzeichen an der falschen Stelle und Klammern haben gefehlt.
So geht es jetzt:

define Kueche_on at +*00:02:00 {if(ReadingsVal("Fenster_Kueche","state","99") eq "open") {fhem ("set MyTTS tts Das Kuechenfenster ist noch offen")}else {fhem ("attr Kueche_on disable 1")}}
attr Kueche_on disable 0


VG
Frank