NEWS
MyStrom Switch ohne Cloud
-
Die MyStrom-Dinger sind recht einfach gestrickt und können direkt und ohne Umwege ausgelesen werden. Eine Beschreibung der Möglichkeiten (sowie Gefahren, sollte jemand von aussen drauf zugreifen können): https://api.mystrom.ch/
Was das Skript macht: es ruft die Report Webseite eines MyStrom-Switches auf,lLiest die Daten (JSON-Format) aus und speichert den Verbrauchswert als Zahl ab. Zudem werden die letzten x Werte als Liste/Array gespeichert und daraus der Durchschnitts der letzten x Messpunkte berechnet.
Der Vorteil: es reicht, den MyStrom-Switch in das eigene Netzwerk zu integrieren (geht z.B. über WPS oder auch das Troubleshooting-Tool), aber zum Auslesen der Daten braucht es keine Cloud und kein MyStrom-Account. Es funktioniert also alles auch ohne I-Net Anbindung.
Installation:
- Den in der Variable datapath hinterlegten Datenpfad unter Obejket erzeugen. Ich nutze für jeden Switch ein eigenes Unterverzeichnis unter MyStrom
- Drei Variablen im Datenpfad erzeugen: conumption_array (Typ array), consumption_average (Zahl), consumption_current (Zahl)
- Entweder die IP-Adresse oder den Rechnernamen des Switch in der Variable myStromAdapterName hinterlegen
- Wenn gewünscht die Anzahl der Messwerte zur Mittelwertsbildung ändern und die Abruffrequenz (derzeitig alle 10 Sekunden) anpassen.
- JS-Programm speichern und starten.
// Rechnername des Adapters var myStromAdapterName = "myStrom-Switch-B16674.home"; // Pfad zur Speicherung der Daten var datapath = "0_userdata.0.myStrom.Switch-B16674"; var max_datapoints = 10; var consumption_list; var myStrom; // Berechnet den Durschnittswert einer gegebenen Liste function mathMean(myList) { return myList.reduce(function(x, y) {return x + y;}) / myList.length; } if (getState(datapath+".consumption_array").val) { consumption_list = getState(datapath+".consumption_array").val; } else { consumption_list = []; setState(datapath+".consumption_array", consumption_list, true); } schedule("*/10 * * * * *", async function () { // Pull data from Switch API -> JSON format result request("http://"+myStromAdapterName+"/report", function (err, state, body){ if (body) { //console.log(JSON.stringify(body)); //console.log(body); myStrom = JSON.parse(body); console.log(myStrom.power); console.log(myStrom.temperature); // store newest data point in array, drop anything above while (consumption_list.length >= max_datapoints) { consumption_list.shift(); } consumption_list.push(myStrom.power).val; setState(datapath+".consumption_array", consumption_list, true); setState(datapath+".consumption_current", myStrom.power, true); setState(datapath+".consumption_average", Math.round((mathMean(consumption_list))*10)/10, true); console.log(consumption_list); } else { log('Request meldet Fehler: ' + err, 'error'); } }); });
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