NEWS
Shelly 3EM Pro Datenpunkte
-
Hallo
ich habe den Shelly 3EM Pro über MQQT angebunden.
die Messwerte sind unter status emdata:
das Format ist zusammengewürfelt:
Das ist insofern hinderlich, dass ich die Daten z.B. nicht Loggen kann.
Gibt es da eine einfache Abhilfe?mfg
-
@killroy2 sagte in Shelly 3EM Pro Datenpunkte:
Gibt es da eine einfache Abhilfe?
Shelly Adapter benutzen?
-
@Samson71 Danke für den Tip. Einen zweiten MQTT Broker laufen zu lassen für den kleinen Vorteil der besseren Darstellung gefällt mir für mich persönlich nicht.
Ich habe jetzt doch ein Skript gebastelt, was den Job macht. Es ist nur sehr grob getestet.//split shelly 3 pro em json const idShellyPro3EM = "shellypro3em-yourid"; const idEmJson = "mqtt.0."+idShellyPro3EM + ".status.em:0"; const idEmdataJson = "mqtt.0."+idShellyPro3EM + ".status.emdata:0"; const userdataPath = "0_userdata.0.ShellyPro3EM."; on(idEmJson, function(dp) { let id = "a_current"; let obj = JSON.parse(dp.state.val); let storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.current', unit: 'A'}); id = "b_current"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.current', unit: 'A'}); id = "c_current"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.current', unit: 'A'}); id = "n_current"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.current', unit: 'A'}); id = "total_current"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.current', unit: 'A'}); id = "a_voltage"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.voltage', unit: 'V'}); id = "b_voltage"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.voltage', unit: 'V'}); id = "c_voltage"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.voltage', unit: 'V'}); id = "a_act_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'W'}); id = "b_act_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'W'}); id = "c_act_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'W'}); id = "total_act_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'W'}); id = "a_aprt_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'VA'}); id = "b_aprt_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'VA'}); id = "c_aprt_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'VA'}); id = "total_aprt_power"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power', unit: 'VA'}); id = "a_pf"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value'}); id = "b_pf"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value'}); id = "c_pf"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value'}); }); on(idEmdataJson, function(dp) { let id = "a_total_act_energy"; let obj = JSON.parse(dp.state.val); let storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); id = "b_total_act_energy"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); id = "c_total_act_energy"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); id = "total_act"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); id = "a_total_act_ret_energy"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); id = "b_total_act_ret_energy"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); id = "c_total_act_ret_energy"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); id = "total_act_ret"; obj = JSON.parse(dp.state.val); storageId = userdataPath + id; if(existsState(storageId)) setState(storageId, obj[id], true); else createState(storageId, obj[id], {type: 'number', name: id, role: 'value.power.consumption', unit: 'Wh'}); });
-
@killroy2
Ich hab dazu ein Skript geschrieben. https://github.com/ticaki/iobroker-skript-sammlung/blob/main/mqtt-shellyplus.jsEDIT: wenn ich mich recht entsinne konnte der shelly adapter nicht mit 3em pro
-
@ticaki
Danke für den Link, dein Skript funktioniert für mich und ist universell.
Der Shelly Adapter kann mittlerweile Pro 3 EM