Das sieht mir danach aus das gar keine Werte vom Websocket kommen. Gehen denn Bool oder num Items?
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fehler im Log nach Update
Einklappen
X
-
Ja, mit anderen Items habe ich keine Probleme bemerkt, es werden insbesondere sehr viele Temperaturwerte mit basic.print angezeigt. Auch bool-Items nutze ich in der smartVISU ohne Probleme.
Im Log sehe ich folgende Fehlermeldungen, wobei die erste Zeile dieser Meldung einmal in der Minute kommt, die anderen Zeilen deutlich seltener:
Code:2021-11-14 21:45:40 ERROR modules.websocket update_visu: Error in 'await self.update_item(...)': Type <class 'datetime.time'> not serializable 2021-11-14 21:45:48 ERROR modules.websocket visu_protocol Exception Type <class 'datetime.time'> not serializable > Traceback (most recent call last): > File "/usr/local/smarthome/modules/websocket/__init__.py", line 563, in smartVISU_protocol_v4 > reply = json.dumps(answer, default=self.json_serial) > File "/usr/lib/python3.7/json/__init__.py", line 238, in dumps > **kw).encode(obj) > File "/usr/lib/python3.7/json/encoder.py", line 199, in encode > chunks = self.iterencode(o, _one_shot=True) > File "/usr/lib/python3.7/json/encoder.py", line 257, in iterencode > return _iterencode(o, 0) > File "/usr/local/smarthome/modules/websocket/__init__.py", line 436, in json_serial > raise TypeError("Type %s not serializable" % type(obj)) > TypeError: Type <class 'datetime.time'> not serializable 2021-11-14 21:00:07 ERROR modules.websocket smartVISU_protocol_v4 exception: received 1005 (no status code [internal]); then sent 1005 (no status code [internal])
Cheers
Art Mooney
Kommentar
-
Lass Dir mal die „smarthomeNG“-Seite aus dem Systemmenü von smartVISU anzeigen. Funktionieren da die Anzeigen von der System-Startzeit und Sonnenauf- und -untergang auch nicht? Die verwenden nämlich den gleichen Code, z. B.
Code:{{ basic.print('sunrise', 'env.location.sunrise', 'time') }}
Zuletzt geändert von wvhn; 14.11.2021, 22:43.
Kommentar
-
Übrigens: Das Datum wird nun auf meinem Tablet in der smartVISU angezeigt. Gestern Abend war das noch nicht so. Offenbar wurde der Wert für das Datum "2021-11-15" erst seit heute Nacht angezeigt, als das Datum einen neuen Wert bekommen hat. Wenn ich hier am PC die smartVISU aufrufe, wird das Datum nicht angezeigt.
Eben habe ich die Seite am Tablet aktualisiert und das Datum ist jetzt auch am Tablet weg.
Im Systemmenü sehe ich die Fehler aus dem Log auch nochmal aufgelistet. Die von Dir genannten Zeiten werden allerdings angezeigt. Siehe unten:
smarthomeng.jpg
Cheers
Art Mooney
Kommentar
-
Machen wir an dieser Stelle mal eine Bestandsaufnahme, denn ich habe Dich wohl teilweise falsch verstanden. Wenn Du schreibst, smartVISU zeige die Uhrzeit nicht an, dann meinst Du die Uhrzeit, die Deine items TIME.DATE bzw. TIME.DAYTIME repräsentieren sollen. Die schmeißen aber schon in shNG Fehler.
Nachdem Du die php-Versionen in Ordnung gebracht hast, funktioniert smartVISU und das Widget basic.print gibt auch items des Typs foo aus, wenn etwas sinnvolles drin steht (siehe z.B. env.location.sunrise und …sunset im obigen Bild).
Dein Problem beschränkt sich somit noch auf das genannte item und die damit verbundene Fehlermeldung.
Ist das so richtig zusammengefasst?
Kommentar
-
Dann schau Dir am besten im Admin-Interface an, was in den Items tatsächlich drin steht und wie oft dort ein Update kommt. Notfalls müsstest Du eine Logik schreiben, die das Datum und die Uhrzeit in Strings umsetzt, oder in einen Standard-Zeitstempel - also Inhalte, die das Websocket-Modul verarbeiten kann. Siehe hierzu die Posts von Msinn.
Kommentar
-
Msinn , die Frage in #10 woher datetime.time kommt, kann ich beantworten: aus der Decode-Methode des knx-Plugins für den DPT 10. Übrigens gibt DPT 11 dann datetime.date zurück.
Wenn das Websocket-Modul beide nicht unterstützt, dann kann man per se gültige items nicht direkt in smartVISU abfragen. Wie gehen wir damit um?
Gruß
Wolfram
Kommentar
-
Die Json Konvertierung in Python unterstützt beide Datentypen per se nicht. Man kann über eine extra Funktion der json Konvertierung jedoch zusätzliche Datentypen beibringen. Ich nehme das für das nächste Release mal ins Backlog.Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
- Likes 1
Kommentar
-
Art Mooney Wenn Du statt eines datetime.time Wertes einen datetime.datetime Wert speichern solltest, sollte das auch funktionieren. Dann musst Du nicht die Formatierung im String Anzeige konform vornehmen, sondern kannst das der Visu überlassen.
wvhn datetime.date sollte bereits funktionieren. Im Websocket Modul sind bereits folgende Konvertierungen implementiert, die die Python eigenen json Konvertierung erweitern:
Code:def json_serial(self, obj): """JSON serializer for objects not serializable by default json code""" if isinstance(obj, decimal.Decimal): return float(obj) if isinstance(obj, (datetime, date)): return obj.isoformat() raise TypeError("Type %s not serializable" % type(obj))
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Kommentar
-
Ich kann bestätigen, dass das Datum auch angegeben wird. Wie schon gesagt mit dem Nachteil, dass es sehr lange dauert, bis der Wert in der VISU angezeigt wird.
Leider bekomme ich das Item TIME.DATE und TIME.DAYTIME einzeln vom KNX-Bus geliefert. Damit habe ich nicht in der Hand, wie der Wert TIME.DAYTIME geliefert wird. Die Wetterstation, von der die Zeit kommt, bietet auch nicht an, ein kombiniertes Objekt aus Datum und Uhrzeit auszugeben. Vor dem Hintergrund ist es wohl einfacher, foo in str umzuwandeln.
Ich versuche mich in der Umwandlung in einen String.Cheers
Art Mooney
Kommentar
-
Ich habe die Umwandlung in einen String mit folgender Logik gemacht:
Code:now = sh.TIME.DAYTIME() time = now.strftime("%H:%M") sh.TIME.STRINGTIME(time)
Code:2021-11-20 23:08:22 ERROR modules.websocket update_visu: Error in 'await self.update_item(...)': Type <class 'datetime.time'> not serializable
Ich nehme an, dass die Zeit nun auch - nach einer gewissen Wartezeit - auf der VISU-Seite auftauchen wird. Im Augenblick warte ich noch darauf.Cheers
Art Mooney
Kommentar
-
Offenbar fordert smartVISU immer noch ein item vom Typ datetime.time bei shNG an. Wenn Du alle Vorkommen des items durch das Stringitem ersetzt hast und der Fehler immer noch auftritt, dann hast Du wahrscheinlich vergessen, den smartVISU-Cache zu löschen. Je nach Browser und Gerät muss man auch den Browsercache oder die Websitedaten für die betreffende URL löschen.
Die Wartezeit bis zum Anzeigen des Datums in smartVISU kann ich mir noch nicht erklären. Hier wäre ein Vergleich sinnvoll, ab wann ein brauchbarer Wert im item steht (shNG Admin Interface) und wie lange es dann dauert, bis smartVISU ihn übernimmt.
Kommentar
Kommentar