interner Editor (DEF), Fehlermeldung wird als HTML-Code im PopUp angezeigt

Begonnen von Dirk070, 27 Mai 2021, 12:51:54

Vorheriges Thema - Nächstes Thema

Dirk070

Hallo zusammen,

ich habe einen NOTIFY nach vielen Monaten mal wieder ändern wollen.
Aktuell habe ich folgendes Problem: Coding im Notfy funktioniert. Klicke ich auf DEF, öffnet sich der Editor.

Wenn ich ohne Änderungen auf den "Modify"-Button klicke, öfnnet sich ein Fenster mit HTML-Code, beginnend mit:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head root="/fhem">
<title>Home, Sweet Home</title>


Die Meldung endet mit:
<div id='content' >
<pre>syntax error at (eval 33130) line 57, at EOF
Missing right curly or square bracket at (eval 33130) line 57, at end of line
syntax error at (eval 33130) line 57, at EOF


Ich hatte das Problem gestern bei einem NOTIFY, den ich dann fast komplett geleert habe und das Coding in die MYUtils als SUB gepackt habe.
Das funktionierte dann, ohne irgendwelche Änderungen am Coding. Gestern war die Meldung "Missing bracket" irreführend.

Nun habe ich die Situation ohne eine Änderung gemacht zu haben. Getestet mit Firefox 88.0.1 (Win10) und Edge.

Hat jemand eine Idee, wie ich den Fehler analysieren kann?

Vielen Dank vorab und schöne Grüße
Dirk


rudolfkoenig

Wie ist die Definition der notify?
Ist CodeMirror aktiviert?
Gibt es Probleme in der Browser-Inkognito-Modus?
Gibt es auch mit Chrome Probleme?

Dirk070

Danke für die schnelle Antwort!

In Chrome: selbe Meldung.

Neues privates Fenster im Firefox: selbe Meldung.

Ist CodeMirror aktiviert? Ich hoffe, dies ist die gewünschte Info:
attr WEB JavaScripts codemirror/fhem_codemirror.js

Wie ist die Definition der notify? Jetzt wird es lang:

CCU_EG_FLEG_SWDO_HST:control:.open {

## Der Dummy hat das Attribut event-on-change-reading state.
## Daher löst der Dummy nur bei Statuswechsel (open/closed) aus

my $Haustuer=ReadingsVal("CCU_EG_FLEG_SWDO_HST", "control", "");
my $Alarm=ReadingsVal("Alarm_Modus", "state", "");
my $LastAlarm=ReadingsVal("Alarm_Modus", "state_last", "");
## Alter des Readings ermitteln, liefert den letzten Zeitpunkt des Klingelns bis jetzt in Sekunden
## Auf Dummy von DoorBird-Modul gewechselt, da Modul teils Fehler erzeugt (wird disabled)
##my $RingAge=ReadingsAge("DB_Haustuer", "doorbell_button_001", "");
my $RingAge=ReadingsAge("DoorbirdBell", "state", "");
## Alter des Readings ermitteln, liefert den letzten Zeitpunkt des Oeffnens bis jetzt in Sekunden
my $LastOpenAge=ReadingsAge("CCU_EG_FLEG_SWDO_HST", "lastopen", "");
my $AgeAlarm=ReadingsAge("Alarm_Modus", "state", "");

my @Kontakte = devspec2array("i:ccutype=HmIP-SWDO.*");
push @Kontakte, devspec2array("i:ccutype=HMIP-SWDO.*");
my $Response = "";
my $Count = 0;
my $CountHome=0;
my $CountAway=0;
my $RoomCount = 0;
my $DachCount = 0;
my $SZCount = 0;
my $NZCount = 0;
my $BadCount = 0;
my $WZCount = 0;
my $GWCCount = 0;
my $KuecheCount = 0;
my $KellerCount = 0;
my $GymCount = 0;
my $Sprachausgabe = "";
my (undef,$min,$hour) = localtime(time());

## Fenster prüfen, Haustuer wird ausgeklammert
($Count, $RoomCount, $CountHome, $CountAway, $DachCount, $SZCount, $NZCount, $BadCount, $WZCount, $GWCCount, $KuecheCount, $KellerCount, $GymCount) = checkWindows();

##$Sprachausgabe = "!Guten Morgen." if($hour < 11);
##$Sprachausgabe = "!Hallo." if($hour >= 11 && $hour <= 17);
##$Sprachausgabe = "!Guten Abend." if($hour > 17);

## Alarm auslösen
if ($Alarm eq 'away' && $RingAge > 10) {$Sprachausgabe .= "!Achtung Alarm in 10 Sekunden. "};
if ($Alarm eq 'away' && $RingAge <= 10) {
Log 1, "---> ALARM Off";
fhem ("setreading Alarm_Modus state_last $Alarm; set Alarm_Modus off");
$Sprachausgabe .= "!Disarmed";
fhem ("set sip_fhem call **620 20 $Sprachausgabe") if ($Sprachausgabe ne "");
Pushover("ALL", "Alarm-Status: Disarmed") };
if ($Alarm eq 'home') {$Sprachausgabe .= "!Achtung Alarm in 5 Sekunden. "};

## Alarm OFF, offene Fenster prüfen
if ($Count == 0 && $Alarm eq 'off') {$Sprachausgabe .= "!Alarmanlage bereit. "};
if ($Count == 1) {$Sprachausgabe .= "!Es ist ein Fenster "} elsif ($Count > 1) {$Sprachausgabe .= "!Es sind $Count Fenster "};
if ($RoomCount > 1) {$Sprachausgabe .= " offen. "};
if ($RoomCount == 1 && $DachCount > 0) {$Sprachausgabe .= "im Dach offen. "} elsif ($RoomCount > 1 && $DachCount > 0) {$Sprachausgabe .= "$DachCount im Dach. "};
if ($RoomCount == 1 && $SZCount > 0) {$Sprachausgabe .= "im Schlafzimmer offen. "} elsif ($RoomCount > 1 && $SZCount > 0) {$Sprachausgabe .= "$SZCount im Schlafzimmer. "};
if ($RoomCount == 1 && $NZCount > 0) {$Sprachausgabe .= "im Nähzimmer offen. "} elsif ($RoomCount > 1 && $NZCount > 0) {$Sprachausgabe .= "$NZCount im Nähzimmer. "};
if ($RoomCount == 1 && $BadCount > 0) {$Sprachausgabe .= "im Bad offen. "} elsif ($RoomCount > 1 && $BadCount > 0) {$Sprachausgabe .= "$BadCount im Bad. "};
if ($RoomCount == 1 && $WZCount > 0) {$Sprachausgabe .= "im Wohnzimmer offen. "} elsif ($RoomCount > 1 && $WZCount > 0) {$Sprachausgabe .= "$WZCount im Wohnzimmer. "};
if ($RoomCount == 1 && $GWCCount > 0) {$Sprachausgabe .= "im Gäste WC offen. "} elsif ($RoomCount > 1 && $GWCCount > 0) {$Sprachausgabe .= "$GWCCount im Gäste WC. "};
if ($RoomCount == 1 && $KuecheCount > 0) {$Sprachausgabe .= "in der Küche offen. "} elsif ($RoomCount > 1 && $KuecheCount > 0) {$Sprachausgabe .= "$KuecheCount in der Küche. "};
if ($RoomCount == 1 && $KellerCount > 0) {$Sprachausgabe .= "im Keller offen. "} elsif ($RoomCount > 1 && $KellerCount > 0) {$Sprachausgabe .= "$KellerCount im Keller. "};
if ($RoomCount == 1 && $GymCount > 0) {$Sprachausgabe .= "im Hobbyraum offen. "} elsif ($RoomCount > 1 && $GymCount > 0) {$Sprachausgabe .= "$GymCount im Hobbyraum. "};
## Keine Sprachausgabe, wenn vor 5 Minuten geklingelt wurde oder das letzte Oeffnen der Tuer noch keine 5 Minuten her ist
## Ausgabe wenn Alarm aktiv ist, Funktion nur aufrufen wenn Text gefüllt
if (($RingAge > 300 and $LastOpenAge > 300) or $Alarm ne 'off') {
fhem ("set sip_fhem call **620 20 $Sprachausgabe") if ($Sprachausgabe ne "");
}
Pushover("AB", "Haustür: $Haustuer");
## UserReading lastopen setzen
fhem ("setreading CCU_EG_FLEG_SWDO_HST lastopen open");

return
}

rudolfkoenig

Ich habe die o.g. notify Definition bei mir mit und ohne CodeMirror getestet, und sehe keine Fehler.
Habe mit dem klassischen longpoll und auch mit websocket probiert.
Die Meldung scheint auf dem seit 5.7 aktiven perlSyntaxCheck Feature hinzuweisen, ich habs geprueft, die ist bei mir auch aktiv: wenn ich vorne "bla bla bla" reinschreibe, dann kriege ich beim Speichern ein Dialog mit 'syntax error at (eval 62) line 7, near "bla'

Bin ratlos.
Apropos Rat: ich wuerde solche Monster als Funktion in 99_myUtils.pm definieren, und in der Notify nur die Funktion aufrufen.

Dirk070

Erstmal Danke für Deine Unterstützung.

Wenn ich den Notify auf dem iPhone (Safari) öffne, bekomme ich keine Fehlermeldung beim Sichern.
Im Browser unter Windows bekomme ich das beschriebene PopUp mit dem HTML-Code.

Schreibe ich in ein Test-Notify "blablabla", wird dieses ohne Fehlermeldung gesichert.
Das wäre dann anders als bei Dir....

([TestDummy] eq "on" or [TestDummy] eq "off" )
( {
Log 1, "--> Test-Start <--";

blablabla

my $CountHome = 0;
my $CountAway = 0;
($CountHome, $CountAway) = checkWindows();
Log 1, "$CountHome $CountAway";

Log 1, "--> Test-Ende <--";
} )


Dieses Coding wird ohne Meldung gesichert.

Zu Deinem Rat:
Ja, die Codingstrecken sind über die Zeit gewachsen. Ich lagere schon aus, das war sogar der Sinn bei der Aktion.
Die Funktion "checkWindows();" hat schon ausgelagertes Coding im Bauch, das Notify war zuvor noch länger  :o


rudolfkoenig

ZitatWenn ich den Notify auf dem iPhone (Safari) öffne, bekomme ich keine Fehlermeldung beim Sichern.
Im Browser unter Windows bekomme ich das beschriebene PopUp mit dem HTML-Code.
Mein Bauchgefuehl nach mehreren aehnlichen Faellen hier im Forum: ein oberschlauer Virenscanner hat sich dazwischengehaengt, und meint den Datenstrom aendern zu muessen.

rudolfkoenig

ZitatSchreibe ich in ein Test-Notify "blablabla", wird dieses ohne Fehlermeldung gesichert.
Das wäre dann anders als bei Dir....
Dein Code-Ausschnitt schaut nicht nach notify aus, eher nach DOIF. Ob da syntax-Pruefung gemacht wird, weiss ich nicht.
Die Pruefung kann man mit "attr global perlSyntaxCheck 0" deaktivieren, womoeglich ist das der Fall.

Dirk070

Mist, Du hast natürlich recht, das ist ein DOIF.
Ich teste nochmal....

UPDTAE:
Hab's im Notify getestet, da klappt es.
Im PopUp kommt der Text "syntax error at (eval 71976) line 6, near "blabla
return"

Im Notify stand:
TestDummy
{
Log 1, "Test_NOTIFY >>>>>>>>>>>>>>>>>";

blabla

return
}


Zitat von: rudolfkoenig am 28 Mai 2021, 13:52:59
Mein Bauchgefuehl nach mehreren aehnlichen Faellen hier im Forum: ein oberschlauer Virenscanner hat sich dazwischengehaengt, und meint den Datenstrom aendern zu muessen.

Ich teste das auch mal auf dem Mac.....

UPDATE: ich fasse es nicht, auf dem Mac mit Firefox keine Probleme, ich kann den selben Notify ohne Fehlermeldung speichern!!