[fixed]#FHEMWEB notification:...SyntaxError: '' string literal contains an unesc

Begonnen von Sany, 24 September 2022, 09:06:29

Vorheriges Thema - Nächstes Thema

Sany

#FHEMWEB notification:...SyntaxError: '' string literal contains an unescaped line break


Hallo Rudi,

aus einem DOIF heraus bekomme ich solch eine Meldung:
Zitat#FHEMWEB notification:
doifUpdateCell('Reset_Volume','informid','Reset_Volume-CommentData','Comment Line1 Comment Line2 Comment Line3')
SyntaxError: '' string literal contains an unescaped line break
In dem DOIF lese ich das Attribut comment aus, welches mehrzeiligen Text enthält. Der Inhalt kommt in eine Variable (zur Weiterverarbeitung), diese wird dann in ein Reading geschrieben welches über ein textFieldNL-long angezeigt wird. Das funktioniert alles wie gewünscht, nur beim ändern des Readings und anzeigen über das Widget erscheint die Notification.
Ich habe herausgefunden, dass dies mit fhemweb.js zusammenhängt. Mit der Version
fhemweb.js                 25523 2022-01-20 19:44:28Z rudolfkoenig
tritt es nicht auf, mit der aktuellen kommt die Meldung. Es muss allerdings an einer Änderung ca Mitte 2022 gelegen haben, da ich die Meldung schon eine Weile bekomme. Mein DOIF dient zur Dokumentation der Batteriewechsel, weshalb ich es eher selten nutze und die Meldung bisher halt weggeklickt habe, da das DOIF ja genau das macht, was es soll.

Zum Test habe ich eine vereinfachte Version des DOIF gebaut, welches nur das comment Attribut ausliest und dann ins Reading schreibt, immer wenn der Button auf on wechselt:

defmod Reset_Volume DOIF init{\
fhem(qq(deletereading $SELF CommentData));;\
}\
\
clickON{\
if([$SELF:"button:.on"]){\
$_commentString = AttrVal(qq{$SELF},"comment","-");;\
set_Reading("CommentData",$_commentString,1);;\
}\
\
}\

attr Reset_Volume comment Comment Line1\
Comment Line2\
Comment Line3
attr Reset_Volume readingList button
attr Reset_Volume room di_UI_DOIF
attr Reset_Volume uiTable {\
package ui_Table;;\
}\
\
\
widget([$SELF:button],q(uzsuToggle,on,off))\
widget([$SELF:CommentData],q(textFieldNL-long))


wenn es irgendwo die fhemweb.js in allen Versionen zum runterladen gibt könnte raussuchen, ab wo genau die Meldung auftritt.
Die Meldung kommt übrigens trotz gesetztem  confirmJSError 0, allerdings ist es ja auch kein "Error", sondern eine "Notification".

Das Ganze ist nicht wirklich ein "Problem", lediglich etwas lästig, da die Meldung auf allen geöffneten fhem-Seiten kommt.

Viele Grüße


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Damian

Die Schnittstelle mit der Funktion doifUpdateCell befindet sich in doif.js, die hat seinerzeit Ellert gebaut.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatMit der Version
fhemweb.js                 25523 2022-01-20 19:44:28Z rudolfkoenig
tritt es nicht auf
Ich kriege damit:
fhem?room=di%5fUI%5fDOIF line 1:
Uncaught SyntaxError: Invalid or unexpected token



Zitatwenn es irgendwo die fhemweb.js in allen Versionen zum runterladen gibt [...]
Im SVN sollte alles drin sein, Details siehe https://svn.fhem.de
Ein Online-Frontend dafuer gibts hier: https://svn.fhem.de/trac/browser/trunk/fhem/www/pgm2/fhemweb.js


Das Problem ist, dass in JavaScript Newlines in Strings als \n zu schreiben sind.
In deinem Fall kommt der String im Funktionsaufruf mit einem echten Newline an, was zum Fehler fuehrt.
Die Loesung ist im JavaScript Code Newlines in Strings als \n zu schreiben, d.h. derjenige, der den Code mit doifUpdateCell generiert, muss die Parameter ensprechend umwandeln.

Sany

Hallo,

erst mal sorry für die späte Reaktion, ging zeitlich gerade nicht anders.
Vielen Dank für die Erklärungen. In der doif.js wird ja schon eine Umwandlung vorgenommen. Ich hab da mal ein wenig "rumprobiert", habe aber den Eindruck, daß der Teil der Funktion nicht durchlaufen wird (habe einfach mal \u2424 oder \n gegen xyz getauscht, davon ist dann im Ergebnis nichts zu sehen, alles wie vorher). Aber: von Javascript habe ich leider noch weniger Ahnung als von Perl, weshalb ich nicht ganz nachvollziehen kann, wie das alles zusammenhängt.
Evtl. hat Ellert da eine Idee. Wie kann/soll ich ihn darauf hinweisen (doif.js würde in "Frontends" betreut.)?

ZitatIch kriege damit:

fhem?room=di%5fUI%5fDOIF line 1:
Uncaught SyntaxError: Invalid or unexpected token
da sind die Unterstriche irgenwie verunstaltet worden. Habe das zwischen verschiedenen fhems und dem Forum hin und her kopiert ohne Probleme. Ist aber auch nur das attr room, kan man auch weglassen.


Gruß

Sany

fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

rudolfkoenig

ZitatEvtl. hat Ellert da eine Idee. Wie kann/soll ich ihn darauf hinweisen (doif.js würde in "Frontends" betreut.)?
Das Problem ist nicht die Funktion doifUpdateCell in doif.js, sondern das Generieren des Aufrufs von doifUpdateCell, was, soweit ich sehe, in 98_DOIF.pm passiert.

Damian

Das Ersetzen von 0x0a gegen \n vor dem Generieren des Aufrufs doifUpdateCell im DOIF löst wohl nicht das Problem. Ich muss mir das noch genauer anschauen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Vermutlich wandelt irgendwer \n vor dem Eval in JavaScript nach Newline um.

Sany

andere Frage: da die Funktion ja gegeben ist, wäre es möglich, die Meldung zu unterdrücken, ähnlich wie confirmJSerror in FHEMWEB? Würde mir vollkommen ausreichen.


Gruß


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

rudolfkoenig


Sany

fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

rudolfkoenig


Sany

Vielen Dank fürs fixe fixen. Eben Update + Browser-refresh gemacht und es läuft jetzt wie gewünscht, die Meldung kommt nicht mehr.


Gruß


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....