[gelöst] Can't find string terminator '"' anywhere before EOF

Begonnen von Thomas41587, 21 November 2019, 22:45:03

Vorheriges Thema - Nächstes Thema

Thomas41587

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;
}

CoolTux


Log3 Macro_Bewohner_asleep, 3, "Nightlite-mode fuer EZ-...

Log3 'Macro_Bewohner_asleep', 3, "Nightlite-mode fuer EZ-...
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thomas41587

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 :-(

Wzut

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 :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

CoolTux

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;
}
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thomas41587

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

Wzut

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/
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Thomas41587

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 :)