jemu75 / fhemApp

Web-App zur Steuerung deiner Smarthome Umgebung in Verbindung mit FHEM.
MIT License
30 stars 7 forks source link

Panel und Vorlagen lassen sich nicht speichern / Config zu groß - abhängig vom Browser #110

Closed marvin78 closed 5 months ago

marvin78 commented 5 months ago

... auch im Desktop-Mode nicht. Der Druck auf das Diskettensymbol nach Änderung bewirkt auf Android nichts.

jemu75 commented 5 months ago

Kannst du den Browser bitte mal im Debugmdus öffnen und prüfen, ob Fehlermeldungen in der angezeigt werden.

marvin78 commented 5 months ago

Es geht ja um den mobilen Browser auf bspw. einem Smartphone oder Tablet. Wie kann ich da den Debug-Modus von Chrome einschalten?

marvin78 commented 5 months ago

Ich denke nicht, dass es hiermit was zu tun hat. Aber auch im Chrome-Browser unter Windows konnte ich heute nicht speichern. Der Fehler auf der Browser-Konsole war folgender:

index-BNwe2vhD.js:14 RangeError: Maximum call stack size exceeded
    at r (SettingsView-CnKO-xI7.js:27:63709)
    at h.onClick.l.<computed>.l.<computed> (SettingsView-CnKO-xI7.js:27:64312)
    at index-BNwe2vhD.js:18:8442
    at ol (index-BNwe2vhD.js:14:1375)
    at _a (index-BNwe2vhD.js:14:1446)
    at _a (index-BNwe2vhD.js:14:1556)
    at HTMLButtonElement.n (index-BNwe2vhD.js:18:8226)
w6 @ index-BNwe2vhD.js:14
of @ index-BNwe2vhD.js:14
(anonymous) @ index-BNwe2vhD.js:14
Promise.catch (async)
_a @ index-BNwe2vhD.js:14
_a @ index-BNwe2vhD.js:14
n @ index-BNwe2vhD.js:18

Das hier ist das JSON zum Template.

{
    "name": "temhum",
    "author": "micha",
    "date": "2024-0518",
    "panel": {
        "devicekeys": [
            "temphum:FHEM temperatur device"
        ],
        "navigation": [
            "temphum-a-room::Räume->%s",
            "temphum-a-group::Gruppen->%s"
        ],
        "sortby": [
            "temphum-a-sortby::%s"
        ]
    },
    "status": {
        "title": [
             "temphum-a-frontendAlias:^.+$:%s",
            "temphum-a-alias:^.+$:%s",
            "temphum-i-NAME::%s"
        ]
    },
    "main": [
        {
            "level": {
                "left1": "info",
                "left2": "info",
                "right1": "info",
                "right2": "info"
            },
            "left1": {
                "icon": [
                    "temphum-temperature:30:mdi-thermometer:temp30",
                    "temphum-temperature:25:mdi-thermometer:temp25",
                    "temphum-temperature:20:mdi-thermometer:temp20",
                    "temphum-temperature:15:mdi-thermometer:temp15",
                    "temphum-temperature:10:mdi-thermometer:temp10",
                    "temphum-temperature:5:mdi-thermometer:temp5",
                    "temphum-temperature::mdi-thermometer:temp0"
                ],
                "size": [
                    "2"
                ]
            },
            "left2": {
                "text": [
                    "temphum-temperature::%n(1) °C:text-h5"
                ]
            },
            "right1": {
                "icon": [
                    "temphum-humidity:90:mdi-water-percent:hum90",
                    "temphum-humidity:80:mdi-water-percent:hum80",
                    "temphum-humidity:60:mdi-water-percent:hum60",
                    "temphum-humidity:40:mdi-water-percent:hum40",
                    "temphum-humidity:20:mdi-water-percent:hum20",
                    "temphum-humidity::mdi-water-percent:hum0"
                ],
                "size": [
                    "2"
                ]
            },
            "right2": {
                "text": [
                    "temphum-humidity::%n(1) %:text-h5"
                ]
            }
        }
    ],
    "info": {
        "left1": [
            "temphum-temperature:0::mdi-thermometer",
            "temphum-temperature:::mdi-snowflake"
        ]
    }
}
marvin78 commented 5 months ago

Ergänzung: Ich befürchte, dass das gar nichts mit der Definition des einzelnen Panels zu tun hat, sondern mit der Größe des Gesamt-Jsons der Config.

Dabei bin ich noch lange nicht am Ende...

jemu75 commented 5 months ago

Die Templatedefinition sieht gut aus. Kannst du mir bitte mal deine komplette Konfigurationsdatei (liegt unter /opt/fhem/conf) schicken.

marvin78 commented 5 months ago

Kann ich dir das irgendwie auf anderem Weg zukommen lassen, als hier?

marvin78 commented 5 months ago

Ich habe es dir in einer FHEM-Foren-PM verlinkt.

Himbi777 commented 5 months ago

Hallo Jens Ich bin jetzt auch an dem Punkt, wo sich in Android keine Änderungen mehr speichern lassen. Sowohl am Handy als auch am Tablet. Auf beiden Geräten im Chrome-Browser. Am Rechner funktioniert das Speichern ohne Probleme (Linux Rechner mit Chrome-Browser).

Ich habe meine Umstellung der Installation auf Version 4 heute komplettiert. Ich bin bei 32 Templates, 127 Panels und meine Config.json hat eine Größe von 107,8kB. Von daher ist der Schmerz bei mir nicht ganz so groß..

Gruß Gerhard

marvin78 commented 5 months ago

Hallo Jens Ich bin jetzt auch an dem Punkt, wo sich in Android keine Änderungen mehr speichern lassen. Sowohl am Handy als auch am Tablet. Auf beiden Geräten im Chrome-Browser. Am Rechner funktioniert das Speichern ohne Probleme (Linux Rechner mit Chrome-Browser).

Ich habe meine Umstellung der Installation auf Version 4 heute komplettiert. Ich bin bei 32 Templates, 127 Panels und meine Config.json hat eine Größe von 107,8kB. Von daher ist der Schmerz bei mir nicht ganz so groß..

Gruß Gerhard

Bei mir war es auch erst nur Android (zu Beginn ging das Speichern dort auch noch). Meine Vermutung ist, dass es verschiedene Grenzen für die Browser gibt. Als Speichern unter Windows auch nicht mehr ging, war das JSON auch noch um einiges größer. Als nächstes werde ich verschiedene Browser probieren, wenn ich Zeit habe.

marvin78 commented 5 months ago

Ich habe es im Firefox probiert und da lässt sich noch speichern. Also ist hier die Grenze für was auch immer, größer.

Ich hoffe, das hilft bei der Lösung.

Himbi777 commented 5 months ago

Hallo zusammen, ich glaube den Ansatz zur Lösung gefunden zu haben😎

Ich bin seit zwei Tagen daran, das Müllmodul entsprechend der Version 4 umzugehen. Da fingen die Speicherfehler an.

Was mir nun aufgefallen ist, es ist das erste Panel mit Umlauten (ü) Ich habe mir die config gesichert und dann mein Müll-Panel gelöscht - und siehe da - die Speicherung mit dem Chrome-Browser klappt wieder. Den Firefox jucken die Umlaute auch bei mir nicht, dort klappt das Speichern. Screenshot_20240527-200123~2 Ich hoffe es hilft

Gruss Gerhard

marvin78 commented 5 months ago

Panels mit Umlauten habe ich schon lange in der Config. Das hat zunächst keine Probleme gemacht. Ich nehme an, dass es die Größe ist. Ohne das Müllpanel ist deine config ja kleiner. Deshalb lässt sich speichern.

Himbi777 commented 5 months ago

Kurzes Update, Ich habe das Müll Panel gelöscht, Speichern klappt. Habe dann ein neues Panel angelegt mit vielen Einträgen - und dann halt das Speichern wieder.

Es liegt dann doch an der Größe der Config

jemu75 commented 5 months ago

Vielen Dank für eure ausführlichen Tests! Ich denke ebenfalls, dass die Größe der Konfiguration zu dem Problem führt. Ich konnte das Verhalten mit der Konfiguration von @marvin78 bei mir ebenfalls nachstellen. Auf dem Smartphone klappt das Speichern nicht mehr. Mit dem PC kann ich jedoch noch Änderungen an der Konfiguration speichern.

Der Fehler ist auf jeden Fall erstmal bestätigt und ich versuche zeitnah eine Lösung dafür zu finden.

jemu75 commented 5 months ago

Ich habe einen Ansatz gefunden, den ich mit v4.2.0 bereitstellen werde. Hoffe damit, dass Problem beheben zu können.

jemu75 commented 5 months ago

gelöst mit v4.2.0

benni1972 commented 5 months ago

Hallo Jens,

könntest du kurz erläutern, was das Problem verursacht hat (welches Limit) und was letztendlich die Lösung war? Für das eigentliche Speichern der Konfig ist ja das FHEMAPP-Modul zuständig, von daher muss es ja irgendwie an der Übertragung von FHEMApp nach FHEM gelegen haben.

Danke dir! Gruß Benni

marvin78 commented 5 months ago

Wie eng ist eigentlich die Verbindung zwischen FHEMApp und dem Modul?

Ich frage, weil ich immer wieder festellte, dass wenn ich im gleichen Browser 2 mal FHEMApp geöffnet habe (eine zum Bearbeiten der Panels und eine für die Ansicht), FHEM unbedienbar wird und auch FHEMApp sich immer wieder aktualisiert (aufgrund von Verbindungsverlusten durch Freezes in FHEM), was dann zu Datenverlusten in FHEMApp führt, da die editierten Daten nicht erhalten bleiben.

benni1972 commented 5 months ago

Die Verbindung zwischen dem FHEMAPP-Modul und FHEMApp ist eigentlich sehr lose. FHEMApp kommuniziert mit dem Modul eigentlich nur beim Laden und Speichern der Konfiguration. Ansonsten gar nicht. Ich arbeite i.d.R. auch mit mehreren Browser-Tabs und habe dabei mehrere FHEMApps und FHEMs geöffnet. Das von dir beschriebene Verhalten ist bei mir noch nie aufgetreten.

jemu75 commented 5 months ago

Hallo Jens,

könntest du kurz erläutern, was das Problem verursacht hat (welches Limit) und was letztendlich die Lösung war? Für das eigentliche Speichern der Konfig ist ja das FHEMAPP-Modul zuständig, von daher muss es ja irgendwie an der Übertragung von FHEMApp nach FHEM gelegen haben.

Danke dir! Gruß Benni

Hallo Benni,

du erinnerst dich sicher an das Thema mit den Umlauten und Sonderzeichen in der Konfiguration. Ich hatte dieses innerhalb der Routine zum Speichern gelöst, indem ich das JSON in utf-8 konvertiert und danach in base64 umgewandelt habe. Im Code gab es eine rekursive Funktion, die den Speicherüberlauf sehr wahrscheinlich ausgelöst hat. Ich habe diesen Teil in Javascript so umgebaut, dass der Speicherüberlauf nicht mehr verursacht wurde. Dieser Teil passiert aber noch, bevor ich die konvertierten Daten an FHEM sende. Ein Limit, was die Größe der Konfiguration anbetrifft, gibt es nicht und sollte es auch nicht geben. Wenn Du noch weitere Infos benötigst, was ich in javascript genau geändert habe, dann melde dich gern.

Grüße Jens

benni1972 commented 5 months ago

Hallo Jens,

danke für die Info!

Reicht mir! Ich wollte nur verstehen, an welcher stelle (beim Speichervorgang) das Problem auftritt und was das Problem eigentlich ist, bzw. war.

Gruß Benni

jemu75 commented 5 months ago

Wie eng ist eigentlich die Verbindung zwischen FHEMApp und dem Modul?

Ich frage, weil ich immer wieder festellte, dass wenn ich im gleichen Browser 2 mal FHEMApp geöffnet habe (eine zum Bearbeiten der Panels und eine für die Ansicht), FHEM unbedienbar wird und auch FHEMApp sich immer wieder aktualisiert (aufgrund von Verbindungsverlusten durch Freezes in FHEM), was dann zu Datenverlusten in FHEMApp führt, da die editierten Daten nicht erhalten bleiben.

Wie @benni1972 schon geschrieben hat, findet der Datenaustausch zwischen FHEMApp und FHEM zum Zeitpunkt des Ladens und beim Speichern der Konfiguration statt.

Beim Laden gibt es zwei Momente, in denen mehr oder weniger große Datenmengen übertragen werden. 1) beim Laden der JSON-Konfiguration (hier verwende ich den FHEM getter vom FHEMAPP-Modul aus FHEM - z.B. get myapp config ) 2) beim Initialen Laden aller FHEM Devices, die in die Konfiguration eingebunden sind (hier verwende ich den FHEM-Befehl JsonList2)

Für die Aktualisierung der Daten baue ich direkt nach dem Initalen Ladevorgang eine websocket- bzw. longpoll-Verbindung zu FHEM auf und "lausche" über inform auf alle Events die FHEM verarbeitet. Ich meine sogar, dass FHEMWEB die Aktualisierung über den gleichen Weg realisiert.

Das Speichern der Konfiguration passiert nur dann, wenn der Benutzer den Speichern-Button in FHEMApp betätigt. Hierbei wird die Gesamte Konfiguration (wie auch beim Laden - nur in die andere Richtung) übertragen.

Bisher ist mir auch noch nicht aufgefallen, dass FHEMApp die Stabilität von FHEM beeinflusst. Man könnte den Datenaustausch zwischen FHEM und FHEMApp aber nochmal genauer via URL-Query-Parameter loglevel=7 beobachten, um z.B. auszuschließen, dass FHEMApp ggf. dauerhaft Daten an FHEM sendet.

Melde dich gern, wenn Du noch Hilfe benötigst.

Grüße Jens