Hallo zusammen,
ich versuche jetzt schon seit zwei Stunden, mein "asleep" Macro zu erweitert. Aber FHEM meckert mir immer wieder beim Versuch die geänderte Definition abzuspeichern ein Anführungszeichen an, das ich partout nicht finden kann (Can't find string terminator '"' anywhere before EOF at (eval 1411281) line 63.).
Gibt es eine Möglichkeit, die Fehlermeldung einzugrenzen? Egal wie oft ich drüber schaue, die Anführungszeichen passen. Auch wenn ich mit STRG+F nach den Anführungszeichen suche, finde ich 70 Stück. Gerade Zahl - Passt ebenfalls.
Oder gibt es evtl einen "guten" Editor, in den man seinen Code einfügen kann und direkt gesagt wo bekommt, wo genau das Problem liegt?
Macro_Bewohner_asleep {
##=============================================================================
## This is an example macro when all residents are in their beds.
##
## Actual FHEM commands are commented out by default as they would need
## to be adapted to your configuration.
##=============================================================================
##-----------------------------------------------------------------------------
## HOUSE MODE
## Enforce night mode if we are still in evening mode
##
Log3 $NAME, 3, "Macro_Bewohner_asleep wurde getriggert";
#fhem "set HouseMode:FILTER=state=evening night";
##-----------------------------------------------------------------------------
## LIGHT SCENE
# Esszimmer-Lampe auf Nightmode setzen
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^daylight/){
fhem("set S7_DWrite_esszimmer_simulation_licht_abend on");
fhem("sleep 20; set YeeLight_esszimmer active_mode nightlight; sleep 10; set YeeLight_esszimmer:FILTER=active_mode=daylight active_mode nightlight; sleep 5");
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^nightlight/){
fhem ("set TelegramBot message Nightlite-mode fuer EZ-Lampe wurde aktiviert");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde beim ersten Versuch aktiviert";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
else {
fhem("set TelegramBot message Nightlite-mode fuer EZ-Lampe konnte nicht aktiviert werden, wird nochmal probiert");
Log3 Macro_Bewohner_asleep, 3, "Nightlite-mode fuer EZ-Lampe wurde nicht aktiviert, starte retry 1";
fhem("set YeeLight_esszimmer active_mode nightlight; sleep 5; set YeeLight_esszimmer active_mode nightlight");
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^nightlight/){
fhem ("set TelegramBot message Nightlite-mode fuer EZ-Lampe wurde aktiviert");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde beim zweiten Versuch aktiviert";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
else {
fhem("set TelegramBot message Nightlite-mode fuer EZ-Lampe konnte nicht aktiviert werden, last try");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde nicht aktiviert, starte retry 2";
fhem("set YeeLight_esszimmer active_mode nightlight; sleep 5; set YeeLight_esszimmer:FILTER=active_mode=daylight active_mode nightlight");
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^nightlight/){
fhem ("set TelegramBot message Nightlite-mode fuer EZ-Lampe wurde aktiviert");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde beim dritten Versuch aktiviert";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
else {
fhem("set TelegramBot message Nightlite-mode fuer EZ-Lampe konnte nicht aktiviert werden, giving up...");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde nicht aktiviert, giving up...";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
}
}
}
}
else{
fhem("set TelegramBot message Nightlite-mode EZ-Lampe ist schon aktiviert");
}
## In 20 seconds, turn off all lights in the house using structures
fhem "sleep 60; set structure_haus_lichter [FILTER=state!=off] off";
fhem "sleep 60; set structure_haus_simulation_lichter [FILTER=state!=off] off";
##-----------------------------------------------------------------------------
## ENVIRONMENT SCENE
##
## Stop playback at SONOS devices in shared rooms, e.g. Bathroom
fhem "sleep 60; set Sonos_Bad:FILTER=transportState=PLAYING Stop";
fhem "sleep 60; set Sonos_Wohnzimmer:FILTER=transportState=PLAYING Stop";
fhem "sleep 60; set Sonos_Play3kueche:FILTER=transportState=PLAYING Stop";
return;
}
Log3 Macro_Bewohner_asleep, 3, "Nightlite-mode fuer EZ-...
Log3 'Macro_Bewohner_asleep', 3, "Nightlite-mode fuer EZ-...
Das hat leider nicht funktioniert.
Die Zeile hatte ich wohl übersehen, habe es in
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde beim ersten Versuch aktiviert";
geändert, aber der Fehler bleibt gleich :-(
Tipp : installiere mc und benutze mal den mcedit als Editor, der zeigt Perl farbig an und so findet man leicht so verstümmelte Strings.
Bei dir ist aber das Problem geschweifte Klammern ( kann man mit mcedit auch testen )
}
}
else{
fhem("set TelegramBot message Nightlite-mode EZ-Lampe ist schon aktiviert");
}
die obere zu Klammer ist zuviel :)
Wo und wie wird dieses "Macro" gespeichert?
Nehme ich den kompletten Code und füge ihn in die DEF eines notify ein (und bestätige mit modify), dann kommt:
ZitatCan't find string terminator '"' anywhere before EOF at (eval 401) line 63.
Nehme ich das "Macro_Bewohner_asleep" am Anfang weg, dann geht es ohne Fehlermeldung durch.
Gruß
Dan
Ist aber auch eine doofe Formatierung
So sollte es hoffentlich gehen
Macro_Bewohner_asleep {
##=============================================================================
## This is an example macro when all residents are in their beds.
##
## Actual FHEM commands are commented out by default as they would need
## to be adapted to your configuration.
##=============================================================================
##-----------------------------------------------------------------------------
## HOUSE MODE
## Enforce night mode if we are still in evening mode
##
Log3 $NAME, 3, "Macro_Bewohner_asleep wurde getriggert";
#fhem "set HouseMode:FILTER=state=evening night";
##-----------------------------------------------------------------------------
## LIGHT SCENE
# Esszimmer-Lampe auf Nightmode setzen
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^daylight/) {
fhem("set S7_DWrite_esszimmer_simulation_licht_abend on");
fhem("sleep 20; set YeeLight_esszimmer active_mode nightlight; sleep 10; set YeeLight_esszimmer:FILTER=active_mode=daylight active_mode nightlight; sleep 5");
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^nightlight/) {
fhem ("set TelegramBot message Nightlite-mode fuer EZ-Lampe wurde aktiviert");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde beim ersten Versuch aktiviert";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
else {
fhem("set TelegramBot message Nightlite-mode fuer EZ-Lampe konnte nicht aktiviert werden, wird nochmal probiert");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde nicht aktiviert, starte retry 1";
fhem("set YeeLight_esszimmer active_mode nightlight; sleep 5; set YeeLight_esszimmer active_mode nightlight");
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^nightlight/) {
fhem ("set TelegramBot message Nightlite-mode fuer EZ-Lampe wurde aktiviert");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde beim zweiten Versuch aktiviert";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
else {
fhem("set TelegramBot message Nightlite-mode fuer EZ-Lampe konnte nicht aktiviert werden, last try");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde nicht aktiviert, starte retry 2";
fhem("set YeeLight_esszimmer active_mode nightlight; sleep 5; set YeeLight_esszimmer:FILTER=active_mode=daylight active_mode nightlight");
if (ReadingsVal("YeeLight_esszimmer","active_mode",0) =~ /^nightlight/) {
fhem ("set TelegramBot message Nightlite-mode fuer EZ-Lampe wurde aktiviert");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde beim dritten Versuch aktiviert";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
else {
fhem("set TelegramBot message Nightlite-mode fuer EZ-Lampe konnte nicht aktiviert werden, giving up...");
Log3 $NAME, 3, "Nightlite-mode fuer EZ-Lampe wurde nicht aktiviert, giving up...";
fhem("set S7_DWrite_esszimmer_simulation_licht_abend off; sleep 3; set readingsProxy_esszimmer_licht_decke_bedien:FILTER=state=on off");
}
}
}
}
else {
fhem("set TelegramBot message Nightlite-mode EZ-Lampe ist schon aktiviert");
}
## In 20 seconds, turn off all lights in the house using structures
fhem "sleep 60; set structure_haus_lichter [FILTER=state!=off] off";
fhem "sleep 60; set structure_haus_simulation_lichter [FILTER=state!=off] off";
##-----------------------------------------------------------------------------
## ENVIRONMENT SCENE
##
## Stop playback at SONOS devices in shared rooms, e.g. Bathroom
fhem "sleep 60; set Sonos_Bad:FILTER=transportState=PLAYING Stop";
fhem "sleep 60; set Sonos_Wohnzimmer:FILTER=transportState=PLAYING Stop";
fhem "sleep 60; set Sonos_Play3kueche:FILTER=transportState=PLAYING Stop";
return;
}
Danke für die Hilfe! Jetzt hat es endlich geklappt. War tatsächlich ein Klammerfehler. Aber anhand von "Can't find string terminator" auf einen Klammerfehler zu kommen ist wirklich schwer 8)
kurz zu "mc" und "mcedit": Ich finde da irgendwie nur einen Minecraft Editor, der ist aber vermutlich nicht gemeint, oder? ;D
unter Linux nennt sich das Midnight Commander Paket mc ( apt-get install mc )
Gibt es aber auch für Windoof -> https://sourceforge.net/projects/mcwin32/
Zitat von: Wzut am 22 November 2019, 13:57:50
unter Linux nennt sich das Midnight Commander Paket mc ( apt-get install mc )
Gibt es aber auch für Windoof -> https://sourceforge.net/projects/mcwin32/
Danke, jetzt ist alles geklärt :)