Fehler im grafischen Dashboard: „Nach“ gruppieren“ mit identischem Wert

Hallo,

Ich möchte einen Fehler melden :sweat_smile:

Wenn ich mit diesem Gerät einen Graphen dieses Typs erstelle:


Und die Seite speichere, werden die Daten zwar gespeichert, aber dann lande ich auf einer Seite wie dieser, die eingefroren bleibt:

Ich kann im Browser auf „Zurück“ gehen und zur Bearbeitungsseite zurückkehren, und wenn ich „Nicht gruppieren“ auswähle:

image

Und die Seite speichere, werden die Daten gespeichert und ich lande auf meiner korrekt geladenen Seite:

Die anderen Graphen sind genauso konfiguriert mit der Gruppierung nach Stunde und die funktionieren einwandfrei.

Der einzige Unterschied ist, dass der Wert auf diesem Sensor schon eine Weile nicht mehr geändert wurde (ich werde das untersuchen, denn das ist nicht normal), aber ich denke, dass das Problem hier liegt :thinking:

Danke :slight_smile:

Edit: Ich konnte mein Problem mit dem Wertesenden lösen, indem ich das Modul wieder integriert habe.
Ein neuer Wert wurde gesendet und ich konnte die Gruppierung nach Stunde wiederherstellen und es ist alles okay

Danke für die Rückmeldung! Wenn du es reproduzieren kannst, hast du dann den Fehler in der Browserkonsole? (Rechtsklick → Untersuchen → Konsole)

Falls nicht, versuche ich es selbst zu reproduzieren :slight_smile:

Ich konnte den Fehler nicht mit denselben Bedingungen reproduzieren, aber ich habe dies erhalten:

{
    "response": {
        "status": 500,
        "data": {
            "status": 500,
            "code": "SERVER_ERROR",
            "error": {}
        }
    }
}
index.js:652 Gladys Gateway, verbunden über WebSocket
main.js:56 {response: {…}}response: data: code: "SERVER_ERROR"error: {}status: 500[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()__proto__: (...)get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()status: 500[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()__proto__: (...)get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()__proto__: (...)get __proto__: ƒ __proto__()set __proto__: ƒ __proto__()
refreshTabletMode @ main.js:56
await in refreshTabletMode
checkSession @ main.js:71
await in checkSession
(anonymous) @ index.js:60
componentWillMount @ app.jsx:383
E @ index.js:150
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
k @ render.js:42
t @ entry.js:60
Pq/i @ entry.js:66
i @ bootstrap:68
(anonymous) @ bootstrap:252
(anonymous) @ bundle.995e6.esm.js:1
SetTabletMode.jsx:34 {response: {…}}
(anonymous) @ SetTabletMode.jsx:34
await in (anonymous)
(anonymous) @ SetTabletMode.jsx:63
await in (anonymous)
componentDidMount @ SetTabletMode.jsx:81
(anonymous) @ index.js:358
(anonymous) @ index.js:356
x @ index.js:351
p @ component.js:149
Promise.then
h @ component.js:210
c.setState @ component.js:54
(anonymous) @ async.js:36
(anonymous) @ index.js:7
Promise.then
(anonymous) @ index.js:5
i.componentWillMount @ async.js:34
E @ index.js:150
f @ children.js:96
E @ index.js:262
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
E @ index.js:262
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
k @ render.js:42
t @ entry.js:60
Pq/i @ entry.js:66
i @ bootstrap:68
(anonymous) @ bootstrap:252
(anonymous) @ bundle.995e6.esm.js:1
apexcharts.common.js:6 Uncaught (in promise) RangeError: Ungültige Arraylänge
    at Array.push (<anonymous>)
    at e.value (apexcharts.common.js:6:166933)
    at e.value (apexcharts.common.js:6:168998)
    at e.value (apexcharts.common.js:6:175666)
    at e.value (apexcharts.common.js:6:171632)
    at e.value (apexcharts.common.js:6:427093)
    at e.value (apexcharts.common.js:14:38538)
    at e.create (apexcharts.common.js:6:5550)
    at apexcharts.common.js:14:37073
    at new Promise (<anonymous>)
    at e.value (apexcharts.common.js:14:21768)
    at t.c.displayChart (ApexChartComponent.jsx:218:18)
    at t.c.componentDidMount (ApexChartComponent.jsx:222:10)
    at index.js:358:8
    at Array.some (<anonymous>)
    at index.js:356:16
value @ apexcharts.common.js:6
value @ apexcharts.common.js:6
value @ apexcharts.common.js:6
value @ apexcharts.common.js:6
value @ apexcharts.common.js:6
value @ apexcharts.common.js:14
(anonymous) @ apexcharts.common.js:6
(anonymous) @ apexcharts.common.js:14
value @ apexcharts.common.js:14
(anonymous) @ ApexChartComponent.jsx:218
componentDidMount @ ApexChartComponent.jsx:222
(anonymous) @ index.js:358
(anonymous) @ index.js:356
x @ index.js:351
p @ component.js:149
Promise.then
h @ component.js:210
c.setState @ component.js:54
(anonymous) @ Chart.jsx:326
await in (anonymous)
componentDidMount @ Chart.jsx:357
(anonymous) @ index.js:358
(anonymous) @ index.js:356
x @ index.js:351
p @ component.js:149
Promise.then
h @ component.js:210
c.setState @ component.js:54
(anonymous) @ index.js:98
await in (anonymous)
(anonymous) @ index.js:123
await in (anonymous)
componentDidMount @ index.js:224
(anonymous) @ index.js:358
(anonymous) @ index.js:356
x @ index.js:351
p @ component.js:149
Promise.then
h @ component.js:210
c.setState @ component.js:54
(anonymous) @ async.js:36
(anonymous) @ index.js:7
Promise.then
(anonymous) @ index.js:5
i.componentWillMount @ async.js:34
E @ index.js:150
f @ children.js:96
E @ index.js:262
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
E @ index.js:262
f @ children.js:96
_ @ index.js:527
E @ index.js:321
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
f @ children.js:96
E @ index.js:262
k @ render.js:42
t @ entry.js:60
Pq/i @ entry.js:66
i @ bootstrap:68
(anonymous) @ bootstrap:252
(anonymous) @ bundle.995e6.esm.js:1

Ok danke, das sollte mir reichen, um es zu reproduzieren!

Ich habe ein Github-Issue mit den Details erstellt:

Ich halte dich auf dem Laufenden.

@prohand Ich konnte es nicht reproduzieren :smiley: Ich habe genau denselben Fall wie du versucht, und alles funktioniert. Kannst du mir mehr Details geben, wie man es reproduzieren kann?

In der Zwischenzeit habe ich die Fehlerbehandlung dieses Widgets verbessert, um genau den Fehler anzuzeigen, der vom Server kommt, anstatt weiter im Leeren zu laufen :slight_smile:

Ein Beispiel mit einem erfundenen Fehler zum Testen:

Edit: Der PR:

Danke für das PR :slight_smile:

Aktuell kann ich das Problem nicht reproduzieren ^^

Hast du versucht, nur einen Wert im Graph zu haben, denke ich, und ihn nach Stunden gruppiert zu setzen?

Ansonsten werde ich es sehen, wenn das PR in Prod ist, ob es eine Fehlermeldung anzeigt :innocent:

Ja! Ich habe mehrere Fälle ausprobiert: ohne Werte und mit nur einem Wert.

Das funktioniert auch :slight_smile: Wenn du den Fehler erneut hast, schau auch in die Logs von Gladys, denn laut dem Fehler ist es ein Server-Fehler.

Ich habe es geschafft, das Diagramm nur mit einem Temperaturwert zu reproduzieren :slight_smile:

Keine Fehler in den Gladys-Logs

Die Konsole zeigt mir nicht mehr Fehler als zuvor an, da sich der Bildschirm beim Speichern einfriert und ich gezwungen bin, F5 zu drücken, um zum Bearbeitungsfenster zurückzukehren.

Kannst du mir die Schritte beschreiben, um es zu reproduzieren?

Das Problem scheint nicht auf allen Geräten aufzutreten.

Ich konnte das Problem wie folgt reproduzieren:

Hier habe ich einen Temperatursensor an einer Sonde ausgewählt, die erkennt, ob ein Wasseraustritt vorliegt (Wassersensor Waschmaschine (Temperatur))

Hinzufügen eines Diagramms.
Ein Gerät mit einer Temperatur auswählen, das nur einen einzigen Wert hat
Diagrammtyp auswählen: Fläche
Achsen anzeigen: Ja
Aggregationsfunktion: Mittelwert
Gruppieren nach: Stunde (auch mit „Nicht gruppieren“ getestet)
Änderung anzeigen: Ja
Standardintervall: 24h

Und speichern

Ich konnte Folgendes in der Konsole sehen:

{
    "response": {
        "status": 422,
        "data": {
            "status": 422,
            "code": "UNPROCESSABLE_ENTITY",
            "properties": [
                {
                    "message": "\"[2][4].chart_type\" darf nicht leer sein",
                    "attribute": "boxes",
                    "value": [
                        [
                            {
                                "type": "temperature-in-room",
                                "room": "chambre-2",
                                "temperature_use_custom_value": true
                            },
                            {
                                "type": "temperature-in-room",
                                "room": "chambre-enfants",
                                "temperature_use_custom_value": true
                            },
                            {
                                "type": "temperature-in-room",
                                "room": "salle-de-bain",
                                "temperature_use_custom_value": true
                            },
                            {
                                "type": "temperature-in-room",
                                "room": "informatique",
                                "temperature_use_custom_value": true,
                                "temperature_min": 17,
                                "temperature_max": 30
                            },
                            {
                                "type": "temperature-in-room",
                                "room": "cuisine",
                                "temperature_use_custom_value": true
                            },
                            {
                                "type": "temperature-in-room",
                                "room": "salon",
                                "temperature_use_custom_value": true
                            },
                            {
                                "type": "temperature-in-room",
                                "room": "entree",
                                "temperature_use_custom_value": true
                            },
                            {
                                "type": "temperature-in-room",
                                "room": "toilettes",
                                "temperature_use_custom_value": true
                            },
                            {
                                "type": "chart",
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-salle-de-bain-temperature-sensor-decimal-temperature"
                                ],
                                "units": [
                                    "celsius"
                                ],
                                "chart_type": "area",
                                "display_variation": true,
                                "interval": "last-day",
                                "display_axes": true,
                                "title": "Température salle de bain",
                                "device_feature_names": [
                                    "Capteur température salle de bain (Température)"
                                ],
                                "group_by": "hour"
                            },
                            {
                                "type": "chart",
                                "device_feature_names": [
                                    "Capteur température cuisine (Température)"
                                ],
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-cuisine-temperature-sensor-decimal-temperature"
                                ],
                                "title": "Température cuisine",
                                "chart_type": "area",
                                "units": [
                                    "celsius"
                                ],
                                "aggregate_function": "avg",
                                "display_axes": true,
                                "display_variation": true,
                                "interval": "last-day",
                                "group_by": "hour"
                            }
                        ],
                        [
                            {
                                "type": "humidity-in-room",
                                "room": "chambre-2",
                                "humidity_use_custom_value": true
                            },
                            {
                                "type": "humidity-in-room",
                                "room": "chambre-enfants",
                                "humidity_use_custom_value": true
                            },
                            {
                                "type": "humidity-in-room",
                                "room": "salle-de-bain",
                                "humidity_use_custom_value": true
                            },
                            {
                                "type": "humidity-in-room",
                                "room": "informatique",
                                "humidity_use_custom_value": true
                            },
                            {
                                "type": "humidity-in-room",
                                "room": "cuisine",
                                "humidity_use_custom_value": true
                            },
                            {
                                "type": "humidity-in-room",
                                "room": "salon",
                                "humidity_use_custom_value": true,
                                "humidity_min": 45,
                                "humidity_max": 60
                            },
                            {
                                "type": "humidity-in-room",
                                "room": "entree",
                                "humidity_use_custom_value": true
                            },
                            {
                                "type": "humidity-in-room",
                                "humidity_use_custom_value": true,
                                "room": "toilettes"
                            },
                            {
                                "type": "chart",
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-salle-de-bain-humidity-sensor-decimal-humidity"
                                ],
                                "units": [
                                    "percent"
                                ],
                                "chart_type": "area",
                                "display_axes": true,
                                "display_variation": true,
                                "interval": "last-day",
                                "title": "Humidité salle de bain",
                                "colors": [
                                    "#d63031"
                                ],
                                "device_feature_names": [
                                    "Capteur température salle de bain (Humidité (pourcentage))"
                                ],
                                "group_by": "hour"
                            },
                            {
                                "type": "chart",
                                "device_feature_names": [
                                    "Capteur température cuisine (Humidité (pourcentage))"
                                ],
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-cuisine-humidity-sensor-decimal-humidity"
                                ],
                                "title": "Humidité cuisine",
                                "units": [
                                    "Prozent"
                                ],
                                "aggregate_function": "avg",
                                "chart_type": "area",
                                "colors": [
                                    "#d63031"
                                ],
                                "display_axes": true,
                                "display_variation": true,
                                "interval": "last-day",
                                "group_by": "hour"
                            }
                        ],
                        [
                            {
                                "type": "chart",
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-chambre-1-temperature-sensor-decimal-temperature",
                                    "zigbee2mqtt-capteur-temperature-chambre-2-temperature-sensor-decimal-temperature"
                                ],
                                "units": [
                                    "celsius",
                                    "celsius"
                                ],
                                "chart_type": "area",
                                "display_axes": true,
                                "display_variation": true,
                                "interval": "last-day",
                                "title": "Temperaturen Schlafzimmer",
                                "device_feature_names": [
                                    "Temperatursensor Schlafzimmer 1 (Temperatur)",
                                    "Temperatursensor Schlafzimmer 2 (Temperatur)"
                                ],
                                "aggregate_function": "avg",
                                "group_by": "hour"
                            },
                            {
                                "type": "chart",
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-chambre-1-humidity-sensor-decimal-humidity",
                                    "zigbee2mqtt-capteur-temperature-chambre-2-humidity-sensor-decimal-humidity"
                                ],
                                "units": [
                                    "Prozent",
                                    "Prozent"
                                ],
                                "title": "Luftfeuchtigkeit Schlafzimmer",
                                "chart_type": "area",
                                "display_axes": true,
                                "display_variation": true,
                                "interval": "last-day",
                                "device_feature_names": [
                                    "Temperatursensor Schlafzimmer 1 (Luftfeuchtigkeit (Prozent))",
                                    "Temperatursensor Schlafzimmer 2 (Luftfeuchtigkeit (Prozent))"
                                ],
                                "group_by": "hour"
                            },
                            {
                                "type": "chart",
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-salon-temperature-sensor-decimal-temperature"
                                ],
                                "units": [
                                    "celsius"
                                ],
                                "title": "Temperatur Wohnzimmer",
                                "chart_type": "area",
                                "display_axes": true,
                                "display_variation": true,
                                "interval": "last-day",
                                "device_feature_names": [
                                    "Temperatursensor Wohnzimmer (Temperatur)"
                                ],
                                "aggregate_function": "avg",
                                "group_by": "hour"
                            },
                            {
                                "type": "chart",
                                "device_features": [
                                    "zigbee2mqtt-capteur-temperature-salon-humidity-sensor-decimal-humidity"
                                ],
                                "units": [
                                    "Prozent"
                                ],
                                "title": "Luftfeuchtigkeit Wohnzimmer",
                                "chart_type": "area",
                                "display_axes": true,
                                "interval": "last-day",
                                "display_variation": true,
                                "colors": [
                                    "#d63031"
                                ],
                                "device_feature_names": [
                                    "Temperatursensor Wohnzimmer (Luftfeuchtigkeit (Prozent))"
                                ],
                                "aggregate_function": "avg",
                                "group_by": "hour"
                            },
                            {
                                "type": "chart",
                                "device_feature_names": [
                                    "Wassersensor Waschmaschine (Temperatur)"
                                ],
                                "device_features": [
                                    "zigbee2mqtt-capteur-eau-lave-linge-device-temperature-sensor-decimal-device-temperature"
                                ],
                                "units": [
                                    "celsius"
                                ],
                                "aggregate_function": "avg",
                                "chart_type": "",
                                "display_axes": true,
                                "group_by": "hour",
                                "interval": "last-day",
                                "display_variation": true
                            }
                        ]
                    ],
                    "type": "Validierungsfehler"
                }
            ]
        }
    }
}

Meiner Meinung nach ist das etwas anderes, du hast einfach keinen Diagrammtyp ausgewählt? [2][4].chart_type\" darf nicht leer sein

Das sieht nicht nach dem Fehler aus, den du vorher hattest

Tatsächlich, entschuldige :frowning:

Ich kann das Problem im Moment nicht erneut reproduzieren

Aber jedes Mal, wenn ich speichere, habe ich viele Fehler wie diesen, ohne dass der Fehler reproduziert wird:

{
    "status": 500,
    "data": {
        "status": 500,
        "code": "SERVER_ERROR",
        "error": {}
    }
}

Hast du im Tab „Netzwerk“ die Anfrage, die diesen Fehler anzeigt?

Im Netzwerk-Tab habe ich keinen Statuscode 500:

Aber ich habe die Meldung in der Konsole

Du bist auf Gladys Plus, das ist normal. Kannst du den gleichen Test lokal durchführen? :slight_smile:

Ich kann das Problem lokal nicht reproduzieren
Ich habe wirklich das Gefühl, dass es mit Gladys Plus zusammenhängt

Man macht Fortschritte :slight_smile:

Ich habe auf meiner Seite versucht, es auf Gladys Plus zu reproduzieren, aber ohne Erfolg.

Ich habe einen Temperatursensor erstellt, ihn im Dashboard in einem Diagramm mit allen denselben Parametern hinzugefügt, und es funktioniert gut:

Bist du sicher, dass du keine Logs in Gladys hast? Wenn es einen Fehler 500 gibt, gibt es normalerweise einen Fehlerlog.

Ich habe mehrmals versucht, das Grundproblem zu reproduzieren, aber es ist mir nicht gelungen :frowning:
Ich habe das Gefühl, dass das Problem zufällig auftritt und ich keinen gemeinsamen Nenner finde…

Bei dem Fehler 500 bin ich mir sicher, dass es keine Fehlerprotokolle in den Docker-Logs von glagys gibt :wink:

Ich habe nachgeschaut, und tatsächlich ist der „Log-Level“ eines 500-Fehlers nicht hoch genug, um in den Produktionsprotokollen sichtbar zu sein. Ich habe das in einem PR geändert, da es nun einfacher sichtbar sein sollte:

Keine Sorge, mit den beiden Änderungen, die ich vorgenommen habe:

  • Fehlermeldung in der Benutzeroberfläche angezeigt
  • Vollständiger 500-Fehler in den Protokollen angezeigt

Du solltest nach dem nächsten Release in der Lage sein, das besser zu debuggen :wink:

Perfekt :slight_smile:

Vielen Dank, ich werde mich nach dem nächsten Release wieder melden.