Die Idee die Messung direkt auf dem Shelly zu betreiben ist sehr gut. Ich habe mal die API dokumentiert und ein JavaScript für den Shelly Pro 3EM erstellt.
Die Datenerfassung soll breit aufgestellt sein und einfach zu benutzen. Die Shelly Erfassung ist sehr schlank und braucht wirklich nur den Shelly am Netzanschluss.
Ich habe für iobroker auch ein JavaScript erstellt, damit kann man einfach die Daten senden. Hier im Repo ist alles zusammengefasst:
Danke dir, das Iobroker Skript läuft, der Punkt ist in der Karte. Allerdings liegt er genau auf dem Nachbarhaus - möglicherweise ist er darüebr nicht so glücklich
Hab versucht den code zu verstehen und aufn EM50 umzuschreiben. Das muss sich später nen slot und Daten mim vorhandenen script teilen, es laufen ja immer höchstens 3 aufm shelly.
Da ich -1 für L2 und L3 schicke, krieg ich 422 zurück. oder hab ich was andres verbockt ... ?
// Shelly Pro EM50 script for ``www.ortsnetz-auslastung.de/v1 // before enabling the script: const lat=0; // insert your latitude here const lon=0; // insert your longitude here const cap=0.5; // insert your plant capacity in kWp here const vdef=230.0; // insert your default line voltage here const fdef=50.0; // insert your default line frequency here const url="``https://www.ortsnetz-auslastung.de/v1/measurements``"; // push url const src="Shelly Pro EM50"; // data source const iv="EM50-0.1.0"; // integraton version const tsMs=300000; // timeslice in ms var pp=1.0; // planned productin in kWh var ev=Shelly.getComponentStatus("EM1",0); // array for response var ts=Date().toISOString(); // timestamp var send={observed_at:ts,latitude:lat,longitude:lon, // send data structure l1_v:vdef,l2_v:-1,l3_v:-1,grid_frequency_hz:fdef, plant_capacity_kwp:cap,pv_forecast_kwh:pp, smartmeter_model:src,integration_version:iv}; function conlog(res,err,errMsg){ // console log if (err!==0){console.log("Ortsnetz fail:"+errMsg);return} // fail console.log("Ortsnetz HTTP"+res.code)} // OK function vc(v){return typeof v==="number"&&v>=70&&v<=300} // voltage check function fc(v){return typeof v==="number"&&v>=45&&v<=65} // frequency check function push(){ ev=Shelly.getComponentStatus("EM1",0); // get shelly data ch 0 ts=Date().toISOString(); // timestamp if(ev===null||!vc(ev.voltage)||!fc(ev.freq)){ // invalid values console.log("Ortsnetz: EM data invalid");return} send = {observed_at:ts,latitude:lat,longitude:lon,// assemble send structure l1_v: ev.voltage,l2_v:-1,l3_v:-1,grid_frequency_hz:ev.freq, smartmeter_model:src,integration_version:iv}; Shelly.call("HTTP.Request", {method: "POST",url:url, // push message body:JSON.stringify(send),headers:{"Content-Type":"application/json"}, timeout: 10},conlog)} push(); Timer.set(tsMs,true,push);
ich habe zwei Anlagen, per Shelly Pro 3EM gemessen, integriert.
Das Shelly mJS habe ich ein wenig verbessert, im Bereich des Shelly.Call. Dass sollte besser per Try/Catch realisiert werden. Dann auch noch ne Kleinigkeit bzgl. der Debuggfähigkeit.
Vielen lieben Dank für die Unterstützung. Wenn die programmatischen Unterstützer vielleicht Pull Requests bei GitHub öffnen können? Macht alles sehr einfach und keine Änderung geht unter. Danke