NEWS
State ... has to be type "string" but received type "object"
-
Hallo zusammen,
ich weiß, es gab da eine Änderng/verschärfung der Prüfungen. Aber wie mache ich es richtig?
Ich habe einen Statem it Zeitstempel als type = string, role = datetime. Diesem weise ich bisher einen aktuellen Zeitstempel mit new date() zu.
Wie erflgt die Zuweisung richtig? Mit .toISOString()? Oder sollte ich den State anders definieren?
Viele Grüße
Sneak-L8 -
@sneak-l8 sagte in State ... has to be type "string" but received type "object":
Oder sollte ich den State anders definieren?
Vielleicht hilft Dir das weiter.
https://www.iobroker.net/#de/documentation/dev/stateroles.md -
@dslraser Danke für den Hinweis.
Musste erst auch Chrome wechseln, mit Firefox blieb die Seite leider bis auf den Balken oben leer...Role = date ist wohl das richtige. datetime finde ich nicht, ist doch aber auch sehr üblich gewesen. Wird auch nicht als Fehler gemeldet.
Leider steht auf der Seite nicht, wie ein Datum korrekt als String übergeben wird (also welches Format). Aber da der state als Datum mit new Date(state) ausgelesen wird und dort das ISO-Format erwartet wird, ist wohl toISOString() ie Antwort ... -
@sneak-l8 sagte in State ... has to be type "string" but received type "object":
datetime finde ich nicht,
Es gibt z.B. auch value.datetime
Ob das hilft oder wie man es übergibt weiß ich nicht.Auf der Seite suchen.
-
@dslraser sagte: Es gibt z.B. auch value.time
Das sind die ms seit 1.1.1970 0:00 Uhr UTC, also eine Zahl.
-
gelöscht.
-
@dslraser Danke für den Hinweis. Hatte datetime selbst nicht gesehen, mit Textsuche klappt's dann auch Und damit ist datetime ja auch nicht falsch, nur meine Zuweisung mit dem Date-Objekt.
@paul53 formatDate() führt hier m.E. nicht zum Ziel, da datetime ja gerade nicht nach jedes Gusto formatiert werden soll sondern nach einem festen Format. Leider steht da nur Systemformat und nicht eine konkrete Funktion. Aber da new Date(xxx) mit xxx = ISOString funktioniert, halte ich asISOString() für sehr wahrscheinlich.
-
@sneak-l8 sagte: new Date(xxx) mit xxx = ISOString funktioniert
Ja, wenn Du mit dem Anzeigeformat leben kannst.
Sonst verwende besser .toLocaleString()
-
@paul53 Hm, dann hat ioBroker bisher (es funktioniert ja "noch" mit Objekt) den toString() gemnommen. Denn so standen sie bisher drin.
Dann wäre aber schön, das würde so in der Doku stehen. Ist der vis-Adapter da flexibel und nimmt sowohl das Format aus toSting() als auch toISOString()? -
Um noch zur Verwirrung beizutragen: In der englischen (Originalvariante) stehen
date
unddatetime
als deprecated (durchgestrichen).
https://www.iobroker.net/#en/documentation/dev/stateroles.mdDiese sollten nicht mehr verwendet werden und stattdessen nur
value.time
. Dortnew Date().getTime()
reinschreiben, dann gibts auch keine Format-Verwirrungen. -
@alcalzone Danke, das ist eine klare Aussage.
Wie mache ich das aber mit bestehenden Adaptern? Den bestehenden State ändern? Das ist wohl auch deshalb schwierig, weil dann von string auf number gewechselt wird und die in der Datenbank (SQL.0) in unterschiedlichen Tabellen stehen ... -
@sneak-l8 Das macht's wohl schwieriger. Meine Meinung: Lass es so wie es ist und plane für neue Entwicklungen damit, nur noch
value.time
zu nutzen. -
@sneak-l8
Verwende Rolle "date", da laut Dokudate common.type = string - parsable by new Date(ddd) string