NEWS
Json-String in Objekte schreiben
-
@chrischros sagte: würde das so klappen?
Nein, so:
createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'})@chrischros sagte in Json-String in Objekte schreiben:
Diese Zeilen müssten dann auch ganz an den Anfang des Skrips, noch vor on
Ja, oder in einem zusätzlichen Skript, das anschließend gelöscht werden kann.
Erstelle manuell im Tab "Objekte" ein Objekt (Typ "folder" oder "device") unter "0_userdata.0" mit dem Namen "Hichi_Wifi_IR".@paul53 sagte in Json-String in Objekte schreiben:
Hichi_Wifi_IR
Super danke, wie sieht das dann bei z.B. der Seriennummer aus, die sowohl aus Zahlen und Buchstaben besteht?
createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'mixed', name: 'Seriennummer', read: true, write: false, role: 'state'}) -
@paul53 sagte in Json-String in Objekte schreiben:
Hichi_Wifi_IR
Super danke, wie sieht das dann bei z.B. der Seriennummer aus, die sowohl aus Zahlen und Buchstaben besteht?
createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'mixed', name: 'Seriennummer', read: true, write: false, role: 'state'})@chrischros sagte: Seriennummer
type: 'string' -
@paul53 sagte in Json-String in Objekte schreiben:
Hichi_Wifi_IR
Super danke, wie sieht das dann bei z.B. der Seriennummer aus, die sowohl aus Zahlen und Buchstaben besteht?
createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'mixed', name: 'Seriennummer', read: true, write: false, role: 'state'})eine Zeichenkette die keine nummer ist ist ein string.
-
Vielen Dank für die Unterstützung.
Habe das jetzt noch etwas angepasst, sieht nun so aus:createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Export', 0, {type: 'number', name: 'Export', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', 0, {type: 'number', name: 'Leistung_aktuell', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', 0, {type: 'number', name: 'Leistung_L1', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', 0, {type: 'number', name: 'Leistung_L2', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', 0, {type: 'number', name: 'Leistung_L3', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', 0, {type: 'number', name: 'Spannung_L1', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', 0, {type: 'number', name: 'Spannung_L2', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', 0, {type: 'number', name: 'Spannung_L3', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'string', name: 'Seriennummer', read: true, write: false, role: 'state'}) on('mqtt.0.tasmota/discovery/3494548E85FC/sensors', function (dp) { let obj = {}; //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object try {obj = JSON.parse(dp.state.val).sn.SM; } catch (e) { console.error('Cannot parse: ' + dp.state.val); return; } setState('0_userdata.0.Hichi_Wifi_IR.Bezug', obj['1_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Export', obj['2_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', obj['16_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', obj['36_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', obj['56_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', obj['76_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', obj['32_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', obj['52_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', obj['72_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', obj['96_1_0'], true); });Würde das soweit passen oder gibt es noch Fehler darin?
-
Vielen Dank für die Unterstützung.
Habe das jetzt noch etwas angepasst, sieht nun so aus:createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Export', 0, {type: 'number', name: 'Export', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', 0, {type: 'number', name: 'Leistung_aktuell', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', 0, {type: 'number', name: 'Leistung_L1', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', 0, {type: 'number', name: 'Leistung_L2', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', 0, {type: 'number', name: 'Leistung_L3', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', 0, {type: 'number', name: 'Spannung_L1', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', 0, {type: 'number', name: 'Spannung_L2', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', 0, {type: 'number', name: 'Spannung_L3', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'string', name: 'Seriennummer', read: true, write: false, role: 'state'}) on('mqtt.0.tasmota/discovery/3494548E85FC/sensors', function (dp) { let obj = {}; //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object try {obj = JSON.parse(dp.state.val).sn.SM; } catch (e) { console.error('Cannot parse: ' + dp.state.val); return; } setState('0_userdata.0.Hichi_Wifi_IR.Bezug', obj['1_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Export', obj['2_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', obj['16_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', obj['36_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', obj['56_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', obj['76_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', obj['32_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', obj['52_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', obj['72_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', obj['96_1_0'], true); });Würde das soweit passen oder gibt es noch Fehler darin?
ich weiß gerade nicht ob obj im Fehlerfall
{}oderundefiniedenthält. Das solltest du checken in dem du einen absichtlich Fehler erzeugst. Ansonsten siehts gut aus.Noch was kleinkarriertes, wenn du rolen benutzten willst, hier findest du die richtigen: https://github.com/ioBroker/ioBroker.docs/blob/master/docs/en/dev/stateroles.md
-
Vielen Dank für die Unterstützung.
Habe das jetzt noch etwas angepasst, sieht nun so aus:createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Export', 0, {type: 'number', name: 'Export', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', 0, {type: 'number', name: 'Leistung_aktuell', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', 0, {type: 'number', name: 'Leistung_L1', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', 0, {type: 'number', name: 'Leistung_L2', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', 0, {type: 'number', name: 'Leistung_L3', unit: 'W', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', 0, {type: 'number', name: 'Spannung_L1', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', 0, {type: 'number', name: 'Spannung_L2', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', 0, {type: 'number', name: 'Spannung_L3', unit: 'V', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', 0, {type: 'string', name: 'Seriennummer', read: true, write: false, role: 'state'}) on('mqtt.0.tasmota/discovery/3494548E85FC/sensors', function (dp) { let obj = {}; //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object try {obj = JSON.parse(dp.state.val).sn.SM; } catch (e) { console.error('Cannot parse: ' + dp.state.val); return; } setState('0_userdata.0.Hichi_Wifi_IR.Bezug', obj['1_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Export', obj['2_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', obj['16_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', obj['36_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', obj['56_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', obj['76_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', obj['32_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', obj['52_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', obj['72_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', obj['96_1_0'], true); });Würde das soweit passen oder gibt es noch Fehler darin?
@chrischros sagte: gibt es noch Fehler darin?
Der Initialisierungswert für die Seriennummer sollte ein Leerstring sein - keine 0.
Die Rollen passen nicht. Leistung: "value.power", Spannung: "value.voltage". -
habe das Skript angepasst:
createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Export', 0, {type: 'number', name: 'Export', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', 0, {type: 'number', name: 'Leistung_aktuell', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', 0, {type: 'number', name: 'Leistung_L1', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', 0, {type: 'number', name: 'Leistung_L2', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', 0, {type: 'number', name: 'Leistung_L3', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', 0, {type: 'number', name: 'Spannung_L1', unit: 'V', read: true, write: false, role: 'value.voltage'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', 0, {type: 'number', name: 'Spannung_L2', unit: 'V', read: true, write: false, role: 'value.voltage'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', 0, {type: 'number', name: 'Spannung_L3', unit: 'V', read: true, write: false, role: 'value.voltage'}) createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', ' ', {type: 'string', name: 'Seriennummer', read: true, write: false, role: 'state'}) on('mqtt.0.tasmota/discovery/3494548E85FC/sensors', function (dp) { let obj = {}; //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object try {obj = JSON.parse(dp.state.val).sn.SM; } catch (e) { console.error('Cannot parse: ' + dp.state.val); return; } setState('0_userdata.0.Hichi_Wifi_IR.Bezug', obj['1_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Export', obj['2_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', obj['16_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', obj['36_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', obj['56_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', obj['76_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', obj['32_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', obj['52_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', obj['72_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', obj['96_1_0'], true); });Ist der Leerstring so richtig eingepflegt?
-
habe das Skript angepasst:
createState('0_userdata.0.Hichi_Wifi_IR.Bezug', 0, {type: 'number', name: 'Bezug', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Export', 0, {type: 'number', name: 'Export', unit: 'kWh', read: true, write: false, role: 'value.energy'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', 0, {type: 'number', name: 'Leistung_aktuell', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', 0, {type: 'number', name: 'Leistung_L1', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', 0, {type: 'number', name: 'Leistung_L2', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', 0, {type: 'number', name: 'Leistung_L3', unit: 'W', read: true, write: false, role: 'value.power'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', 0, {type: 'number', name: 'Spannung_L1', unit: 'V', read: true, write: false, role: 'value.voltage'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', 0, {type: 'number', name: 'Spannung_L2', unit: 'V', read: true, write: false, role: 'value.voltage'}) createState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', 0, {type: 'number', name: 'Spannung_L3', unit: 'V', read: true, write: false, role: 'value.voltage'}) createState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', ' ', {type: 'string', name: 'Seriennummer', read: true, write: false, role: 'state'}) on('mqtt.0.tasmota/discovery/3494548E85FC/sensors', function (dp) { let obj = {}; //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object try {obj = JSON.parse(dp.state.val).sn.SM; } catch (e) { console.error('Cannot parse: ' + dp.state.val); return; } setState('0_userdata.0.Hichi_Wifi_IR.Bezug', obj['1_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Export', obj['2_8_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_aktuell', obj['16_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L1', obj['36_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L2', obj['56_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Leistung_L3', obj['76_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L1', obj['32_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L2', obj['52_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Spannung_L3', obj['72_7_0'], true); setState('0_userdata.0.Hichi_Wifi_IR.Seriennummer', obj['96_1_0'], true); });Ist der Leerstring so richtig eingepflegt?
@chrischros sagte: Ist der Leerstring so richtig eingepflegt?
Das ist zwar ein String mit einem Leerzeichen, ist aber auch in Ordnung.
-
ich weiß gerade nicht ob obj im Fehlerfall
{}oderundefiniedenthält. Das solltest du checken in dem du einen absichtlich Fehler erzeugst. Ansonsten siehts gut aus.Noch was kleinkarriertes, wenn du rolen benutzten willst, hier findest du die richtigen: https://github.com/ioBroker/ioBroker.docs/blob/master/docs/en/dev/stateroles.md
-
@ticaki sagte: ob obj im Fehlerfall {} oder undefinied enthält.
Das spielt keine Rolle, da
objim Fehlerfall nicht ausgewertet wird. -
Habe nun das Skript mal aktiviert, die neuen Objekte werden erstellt aber es sind nur "0" Werte hinterlegt.
-
Habe nun das Skript mal aktiviert, die neuen Objekte werden erstellt aber es sind nur "0" Werte hinterlegt.
@chrischros sagte: es sind nur "0" Werte hinterlegt.
Nur bis zum ersten Trigger, wenn das JSON so stimmt, wie angegeben.
-
@chrischros sagte: es sind nur "0" Werte hinterlegt.
Nur bis zum ersten Trigger, wenn das JSON so stimmt, wie angegeben.
@paul53
ok, habe festgestellt, dass das Json nicht wirklich aktualisiert wird. Muss ich mal schauen woran das liegt.