NEWS
Shelly per Blockly auslesen / parsen
-
Moin zusammen,
ich habe mal wieder eine Frage / ein Anliegen:
Meine Shelly-Geräte übermitteln ihre Werte alle per MQTT an meinen zentralen MQTT Server (EMQX). Den Shelly-Adapter möchte ich eigentlich nicht nutzen, da ich alles auf dem MQTT Server halten möchte.
Meine Shellys schreiben ihre Informationen also alle in Richtung des MQTT Server, den habe ich im ioBroker abonniert und die Werte stehen dann in den entsprechenden Datenpunkt, hier also der Datenpunkt:
mqqt/0/Waermepumpe1/status/switch:0:
In dem Datenpunkt stehen dann folgende Informationen:
{"id":0, "source":"init", "output":true, "apower":1072.6, "voltage":231.4, "current":4.870, "aenergy":{"total":4145268.729,"by_minute":[17865.943,17855.005,17845.969],"minute_ts":1758697440},"temperature":{"tC":45.3, "tF":113.5}}
Nun würde ich gerne den Wert apower und total auslesen. Den Wert "apower" kann ich nun mit dem untenstehenden Blockly auslesen, den Wert aenergy/total leider nicht.
Und eine Frage: Ist mein Vorgehen so "logisch" okay oder komplett falsch abgebogen?
Hier mein Blockly-Segment (das ist quasi nur eine Herleitung, bin schon froh, dass überhaupt apower kommt):
schedule("*/5 * * * * *", async () => { console.info((() => { try { return JSON.parse(getState('mqtt.0.Waermepumpe1.status.switch:0').val); } catch (e) { return {}; }})()); console.info(getAttr((() => { try { return JSON.parse(getState('mqtt.0.Waermepumpe1.status.switch:0').val); } catch (e) { return {}; }})(), 'apower')); console.info(getAttr((() => { try { return JSON.parse(getState('mqtt.0.Waermepumpe1.status.switch:0').val); } catch (e) { return {}; }})(), 'total')); });
Für den Wert "aenergy/total" bekomme ich aber nur "undefined" zurück, ich glaube weil der verschachtelt unter aenergy hängt?
Mag mir da mal jemand helfen?
Ich kann leider keine weiteren Screenshots hochladen, ich weiß nicht warum
Danke,
Moritz -
@dasmoritz die Funktion getAttr kenn ich nicht, aber:
JSON.parse("dein Payload").aenergy.total sollte deinen Wert beinhalten.
Wenn du dir sorgen machst das er nicht existiert, dann:
const jsonObj = JSON.parse(obj.val); const total = jsonObj.aenergy ? jsonObj.aenergy.total ? 'no energy'; const power = jsonObj.apower;
Ansonsten:
- warum zum Teufel ein Heartbeat ?
- warum liest du den gleichen State im Heartbeat 3 mal ein ?
- warum parsed du den gleichen String im Heartbeat 3 mal ?
- Du willst blockly - warum postest du dann JS Code ?
A.
-
@dasmoritz sagte: Für den Wert "aenergy/total" bekomme ich aber nur "undefined" zurück
Das trennt man mit einem Punkt: