Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. MyStrom Switch ohne Cloud

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    MyStrom Switch ohne Cloud

    This topic has been deleted. Only users with topic management privileges can see it.
    • Becks0815
      Becks0815 last edited by Becks0815

      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');  
              }
          }); 
      });
      
      1 Reply Last reply Reply Quote 1
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      660
      Online

      31.6k
      Users

      79.6k
      Topics

      1.3m
      Posts

      1
      1
      1054
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo