NEWS
simpleApi weiß nicht mehr welchen Typ er will
-
@jey-cee sagte in simpleApi weiß nicht mehr welchen Typ er will:
das zweite ein String.
das zweite (22.5) auch?
beim dritten (22,5) ist es klar.@homoran sagte in simpleApi weiß nicht mehr welchen Typ er will:
das zweite (22.5) auch?
beim dritten (22,5) ist es klar.Alle 3 Varianten können ein String sein. Das hängt davon ab wie im ESP damit umgegangen wird. Wenn meine Annahme zutrifft dann wird ein integer (22) als Number Übertragen aber ein Float (22.5/22,5) als String.
-
In diesem Beispiel ist es derselbe ESP, der eben eine Temperatur ausgibt.
Und er gibt z.B. 12.72 aus
Und das schon seit Jahren. Bisher ohne Probleme.
Das ist ja nur eine Zeichenfolge, die übers Lan eingeliefert wird. Da kann es keine Types geben. Kann man ja auch vom Browsr aus absenden.
Der Typ steht in den Daten.
Aber egal, was ich da hinterlege, es wird mit Verweis auf simpleApi angemeckert. -
In diesem Beispiel ist es derselbe ESP, der eben eine Temperatur ausgibt.
Und er gibt z.B. 12.72 aus
Und das schon seit Jahren. Bisher ohne Probleme.
Das ist ja nur eine Zeichenfolge, die übers Lan eingeliefert wird. Da kann es keine Types geben. Kann man ja auch vom Browsr aus absenden.
Der Typ steht in den Daten.
Aber egal, was ich da hinterlege, es wird mit Verweis auf simpleApi angemeckert.@klassisch sagte in simpleApi weiß nicht mehr welchen Typ er will:
Da kann es keine Types geben.
doch
@Jey-Cee wird das sicher noch besser wissen, aber eine Dezimale mit Komma würde vom ioBroker definitiv als String identifiziert.
Und die Wahrscheinlichkeit dass eine Ganzzahlige als Number durchgehenwird sehe ich auchdass es bisher "geklappt" hat lag daran, dss es keine Typprüfung gab
-
SimpleApi dient mir seit Jahren beim Einliefern von Werten von meinen ESP8266 Sensoren. Bislang treu und klaglos.
Die ESP-Sensoren senden ja ASCII Zeichen und wissen nichts von JS Typen.
Die JS Typen sind in den Objekten hinterlegt.
Bislang alles harmonisch und still.
Jetzt habe ich als last follower eine Updaterunde aus dem Stable repository auf eine neue Serverinstanz gewagt:js-controller 3.3.22 Plattform: Windows Betriebssystem: win32 Architektur: x64 CPUs: 4 Geschwindigkeit: 2496 MHz Modell: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz RAM: 7.3 GB System-Betriebszeit: 00:00:00 Node.js: v14.18.2 NPM: 6.14.15 Adapter-Anzahl: 364 Datenträgergröße: 166.5 GB Festplatte frei: 102.9 GB Betriebszeit: 1 T. 21:12:01 Aktive Instanzen: 31 Pfad: C:\Program Files\iobroker\ioBrMain036\SimpleApi v2.6.1
Admin 5.2.2Mittlerweile bekomme ich im log ständig weiße info-Meldungen mit simple-api.0 als source, wie z.B.
State value to set for "0_userdata.0.heating.Keller.Temp" has to be type "number" but received type "string"Ok, hat vielleicht jemand das Control-Level hochgedreht.
Eingeliefert wird ein String, was soll sonst auch übers Netzwerk kommen?Der Datenpunkt hat type Number, weil soll so als Numder weiter verarbeitet werden.
Aber gut, dann typisieren wir den Datenpunkt mal händisch auf String um und erwarten dann halt eventuell eine Fehlermeldung, wenn das Datum per Script weiter verarbeitet wird.
Ich brauche aber gar nicht so lange zu warten, denn jetzt heißt es:State value to set for "0_userdata.0.heating.Keller.Temp" has to be type "string" but received type "number"Was will der simpleApi jetzt? Der ESP sendet noch immer im gleichen Format wie seit Jahren.
@klassisch sagte: has to be type "number" but received type "string"
Laut Quellcode sollte in eine Zahl gewandelt werden.
-
@klassisch sagte: has to be type "number" but received type "string"
Laut Quellcode sollte in eine Zahl gewandelt werden.
@paul53 Das hätte ich auch erwartet.
Schauen wir uns ein anderes Beispiel an:
State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string"Das Objekt hat Typ number
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1588573013258, "common": { "name": "H-abs", "role": "", "type": "number", "desc": "Manuell erzeugt", "unit": "g/m^3", "read": true, "write": true, "def": false,Der ESP sendet 6.20
Jetzt ändere ich manuell in string
"name": "H-abs", "role": "", "type": "string", "desc": "Manuell erzeugt", "unit": "g/m^3", "read": true, "write": true,und ich erhalte:
State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "string" but received type "number.Jetzt gebe ich vom Browser aus ein:
...:8087/set/0_userdata.0.heating.Werkstatt.H-abs?value=6.30und erhalte im Browser die Antwort
id "0_userdata.0.heating.Werkstatt.H-abs" value 6.3 val 6.3und im iobroker log
State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "string" but received type "numberUnd in den Objekten sehe ich 6,3
Wo kommt jetzt das Komma her? Ich arbeite seit Jahr und Tag mit Punkt.
-
Aha, in den Systemeinstellungen steht FloaterTeiler "," statt "."
Da hat das Update wohl was verstellt
-
Aha, in den Systemeinstellungen steht FloaterTeiler "," statt "."
Da hat das Update wohl was verstellt
@klassisch sagte in simpleApi weiß nicht mehr welchen Typ er will:
Systemeinstellungen steht FloaterTeiler "," statt "."
wo steht das ?
welche Systemeinstellungen ? -
@klassisch sagte in simpleApi weiß nicht mehr welchen Typ er will:
Systemeinstellungen steht FloaterTeiler "," statt "."
wo steht das ?
welche Systemeinstellungen ? -
@klassisch nimm mal das folgende Skript pass die ID an und beobachte die Ausgaben wenn dein ESP Daten schickt.
on({id: '0_userdata.0.example_state'}, (obj) => { log( `${typeof( obj.state.val )}, value: ${obj.state.val}` ); })@klassisch sagte in simpleApi weiß nicht mehr welchen Typ er will:
Aha, in den Systemeinstellungen steht FloaterTeiler "," statt "."
Das ist reine Kosmetik, intern wird immer noch mit "." gearbeitet.
-
Habe jetzt den Datentyp wieder auf Number umgestellt, erhalte aber Fehler
State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" -
@paul53 Das hätte ich auch erwartet.
Schauen wir uns ein anderes Beispiel an:
State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string"Das Objekt hat Typ number
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1588573013258, "common": { "name": "H-abs", "role": "", "type": "number", "desc": "Manuell erzeugt", "unit": "g/m^3", "read": true, "write": true, "def": false,Der ESP sendet 6.20
Jetzt ändere ich manuell in string
"name": "H-abs", "role": "", "type": "string", "desc": "Manuell erzeugt", "unit": "g/m^3", "read": true, "write": true,und ich erhalte:
State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "string" but received type "number.Jetzt gebe ich vom Browser aus ein:
...:8087/set/0_userdata.0.heating.Werkstatt.H-abs?value=6.30und erhalte im Browser die Antwort
id "0_userdata.0.heating.Werkstatt.H-abs" value 6.3 val 6.3und im iobroker log
State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "string" but received type "numberUnd in den Objekten sehe ich 6,3
Wo kommt jetzt das Komma her? Ich arbeite seit Jahr und Tag mit Punkt.
@klassisch sagte in simpleApi weiß nicht mehr welchen Typ er will:
Jetzt gebe ich vom Browser aus ein:
...:8087/set/0_userdata.0.heating.Werkstatt.H-abs?value=6.30Wenn du folgendes eingibst erhälst du einen String statt einer Number:
...:8087/set/0_userdata.0.heating.Werkstatt.H-abs?value="6.30"Nochmal es macht einen Unterschied wie der ESP die Daten sendet, bedeutet es zählt was der Sendet und damit auch wie er intern mit den Werten umgeht.
-
@klassisch nimm mal das folgende Skript pass die ID an und beobachte die Ausgaben wenn dein ESP Daten schickt.
on({id: '0_userdata.0.example_state'}, (obj) => { log( `${typeof( obj.state.val )}, value: ${obj.state.val}` ); })@klassisch sagte in simpleApi weiß nicht mehr welchen Typ er will:
Aha, in den Systemeinstellungen steht FloaterTeiler "," statt "."
Das ist reine Kosmetik, intern wird immer noch mit "." gearbeitet.
@jey-cee sagte in simpleApi weiß nicht mehr welchen Typ er will:
on({id: '0_userdata.0.example_state'},
Vielen Dank, daß Du Dich der Sache annimmst
Ich füttere simpleApi über Browser mit 6.15 und erhalte im log (unten nach oben)
simple-api.0 2021-12-26 11:22:48.501 info State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" javascript.0 2021-12-26 11:22:42.388 info script.js.tests.testSimpleApiTypeconfusion: number, value: 6.15Kurz drauf kommt der ESP und liefert ein:
javascript.0 2021-12-26 11:23:48.512 info script.js.tests.testSimpleApiTypeconfusion: string, value: 6.20 simple-api.0 2021-12-26 11:23:48.507 info State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" simple-api.0 2021-12-26 11:23:48.506 info State value to set for "0_userdata.0.heating.Werkstatt.H-rel" has to be type "number" but received type "string"Objekt noch immer number
"name": "H-abs", "role": "", "type": "number", "desc": "Manuell erzeugt", "unit": "g/m^3", "read": true, "write": true, -
@jey-cee sagte in simpleApi weiß nicht mehr welchen Typ er will:
on({id: '0_userdata.0.example_state'},
Vielen Dank, daß Du Dich der Sache annimmst
Ich füttere simpleApi über Browser mit 6.15 und erhalte im log (unten nach oben)
simple-api.0 2021-12-26 11:22:48.501 info State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" javascript.0 2021-12-26 11:22:42.388 info script.js.tests.testSimpleApiTypeconfusion: number, value: 6.15Kurz drauf kommt der ESP und liefert ein:
javascript.0 2021-12-26 11:23:48.512 info script.js.tests.testSimpleApiTypeconfusion: string, value: 6.20 simple-api.0 2021-12-26 11:23:48.507 info State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" simple-api.0 2021-12-26 11:23:48.506 info State value to set for "0_userdata.0.heating.Werkstatt.H-rel" has to be type "number" but received type "string"Objekt noch immer number
"name": "H-abs", "role": "", "type": "number", "desc": "Manuell erzeugt", "unit": "g/m^3", "read": true, "write": true,@klassisch sagte: script.js.tests.testSimpleApiTypeconfusion: string, value: 6.20
Zahlen haben keine 0 hinten. Vielleicht wird es deshalb als String erkannt ?
EDIT: Wenn ich im Browser eine 0 anhänge, wird es trotzdem in Zahl gewandelt:

Es muss also an der Formatierung im ESP liegen, dass es als String erkannt wird.
-
@klassisch sagte: script.js.tests.testSimpleApiTypeconfusion: string, value: 6.20
Zahlen haben keine 0 hinten. Vielleicht wird es deshalb als String erkannt ?
EDIT: Wenn ich im Browser eine 0 anhänge, wird es trotzdem in Zahl gewandelt:

Es muss also an der Formatierung im ESP liegen, dass es als String erkannt wird.
@paul53 Das scheint es nicht zu sein. Wenn ich per Browser 6.15 sende hatte ich das gleiche Problem
Hatte aber auch ein großes Win Update.
Und jetzt habe ich im Win wieder den Punkt und das Datumsformat yyyy-mm-dd eingsetellt, was anscheinend auch im Win vrstellt war.Jetzt habe ich folgende Situation:
6.10 und 6.15 nacheinander über Browser eingegeben
Danach kam die 6.20 vom ESPjavascript.0 2021-12-26 11:42:48.571 info script.js.tests.testSimpleApiTypeconfusion: string, value: 6.20 simple-api.0 2021-12-26 11:42:48.568 info State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" javascript.0 2021-12-26 11:42:31.848 info script.js.tests.testSimpleApiTypeconfusion: number, value: 6.15 javascript.0 2021-12-26 11:42:26.438 info script.js.tests.testSimpleApiTypeconfusion: number, value: 6.1Die 6.1 und die 6.15 vom Browser werden nicht mehr angemeckert. die 6.20 vom ESP schon.
Was macht der Browser anders?
Ich teste mal Chrome statt FF
Gleiches Ergebnis auf 6.3:javascript.0 2021-12-26 11:47:04.677 info script.js.tests.testSimpleApiTypeconfusion: number, value: 6.3 -
@jey-cee sagte in simpleApi weiß nicht mehr welchen Typ er will:
on({id: '0_userdata.0.example_state'},
Vielen Dank, daß Du Dich der Sache annimmst
Ich füttere simpleApi über Browser mit 6.15 und erhalte im log (unten nach oben)
simple-api.0 2021-12-26 11:22:48.501 info State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" javascript.0 2021-12-26 11:22:42.388 info script.js.tests.testSimpleApiTypeconfusion: number, value: 6.15Kurz drauf kommt der ESP und liefert ein:
javascript.0 2021-12-26 11:23:48.512 info script.js.tests.testSimpleApiTypeconfusion: string, value: 6.20 simple-api.0 2021-12-26 11:23:48.507 info State value to set for "0_userdata.0.heating.Werkstatt.H-abs" has to be type "number" but received type "string" simple-api.0 2021-12-26 11:23:48.506 info State value to set for "0_userdata.0.heating.Werkstatt.H-rel" has to be type "number" but received type "string"Objekt noch immer number
"name": "H-abs", "role": "", "type": "number", "desc": "Manuell erzeugt", "unit": "g/m^3", "read": true, "write": true, -
@klassisch also der Wert vom ESP kommt als String im ioBroker an, das hatte ich ja schon vermutet.
Es liegt also definitv am ESP der die Zahl als String sendet. Was läuft den auf deinem ESP für eine Firmware?
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
