[gelöst] Fehler in regex Perl Bedingung

Begonnen von franky08, 01 März 2014, 21:28:51

Vorheriges Thema - Nächstes Thema

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

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')} } ") }
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Probiere ich morgen aus, jetzt meckert die Frau das die Küche kalt wird.

Vielen Dank
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

Das at konnte ich wie angegeben jedenfalls problemlos anlegen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

#7
hast Du meine Definition mit copy&paste in die fhem-Befehlszeile übernommen?

(http://up.picr.de/17518418dj.jpg)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

Hab ich mit C&P übernommen. Das at prüft alle 2 Minuten ob das Fenster auf oder zu ist (soll es jedenfalls).
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

betateilchen

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


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

franky08

#11
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1