Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. ACHIM BAECKER

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 10
    • Best 2
    • Groups 1

    ACHIM BAECKER

    @ACHIM BAECKER

    Starter

    5
    Reputation
    29
    Profile views
    10
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    ACHIM BAECKER Follow
    Starter

    Best posts made by ACHIM BAECKER

    • Deye Solar Sun600 Auslese-JavaScript

      Hier mein Script zum Auslesen eines Balkonkraftwerk mit einem Inverter Deye Solar Sun600 über den Inverter-Webserver.
      (ohne Cloud und Solarman Account)

      Unter "http://IP-INVERTER/status.html" können die Aktualdaten ausgelesen werden.
      Das Script liest alle 5min diese Webseite aus und trägt die Werte in die entsprechenden Datenpunkte.

      Achim

      // Auslesen der Datenpunkte eines Solarinverters Deye Solar SUN600 und baugleiche
      // (Bosswerk MI600, ..)? 
      // --------------------------------------------------------------------------------
      // Erstellt: 01.2023 Achim Bäcker
      // ================================================================================
      
      // Die Daten werden ohne externe App + Verbindung (bsp: Solarman) über den
      // Webserver im Inverter abgerufen. 
      // 
      // Hierzu im Inverter das WLan einstellen und eine IP vergeben bzw. DHCP aktivieren. 
      // 
      // ================================================================================
      // Einrichten:
      // 1. Variable SolarFolder anpassen... hier werden die Datenpunkte erstellt
      //    Funktion CreateDatapoints einmalig aufrufen
      // 2. Über den Radar2-Adapter schaue ich das der Inverter online ist (er schaltet
      //    sich bei zu wenig Sonne aus) Online-ID in SolarOnlineVar eintragen
      // 3. Url des Inverters anpassen (SolarUrl) , Username und Passwort müssen mit übergeben
      //     werden, am besten erst einmal die Url im Browser testen. Wenn die Url passt, öffnet 
      //    sich eine Webseite wo man nur Striche sieht. Hier im Browser Quelltext 
      //    anzeigen wählen... noch vor dem Body ist eine Liste mit den Aktualwerten
      // 
      // Hier auf eigene Anlage anpassen
      var SolarFolder     = "0_userdata.0.Solar";
      var SolarOnlineVar  = "radar2.0.Solar._here";    
      var SolarUrl        ="http://admin:admin@192.168.2.160/status.html";
      
      // Datenpunkte erstellen, kann nach einmaligem Aufruf deaktiviert werden
      
      CreateDatapoints(SolarFolder);   // <<<<<----- Einmalig aufrufen
      
      
      // ================================================================================
      
      schedule('*/5 5-22 * * *', GetData); // zwischen 5-22Uhr alle 5min ausführen
      
      
      function GetData(){
          // zyklisches abholen der Daten, falls Solaranlage online ist
          var SolarIsOnline = getState(SolarOnlineVar).val;
          if (SolarIsOnline) {
              getWebsite();
          }
      }
      
      var http=require('http');
      
      function getWebsite(){
          // laden der Website und wandeln in ein Zeilen-Array
          // Werte Suchen und wegschreiben 
      
          http.get(SolarUrl, function(res){
              var str = "";
              console.log('Response is '+res.statusCode);
      
              if (res.statusCode != 200) {
                  console.log("non-200 response status code:", res.statusCode);
                  console.log("for url:", SolarUrl);
                  res.resume();
                  return;
              }
      
              res.on('data', function (chunk) {
                      str += chunk;
              });
      
              res.on('end', function () {
                  var arr = str.split("\n");
                  readSolData(arr, "webdata_sn");
                  readSolData(arr, "webdata_msvn");
                  readSolData(arr, "webdata_ssvn");
                  readSolData(arr, "webdata_pv_type");
                  readSolData(arr, "webdata_rate_p");
                  readSolData(arr, "webdata_now_p", true);
                  readSolData(arr, "webdata_today_e", true);
                  readSolData(arr, "webdata_total_e", true);
                  readSolData(arr, "webdata_alarm");
                  readSolData(arr, "webdata_utime");
                  readSolData(arr, "cover_mid");
                  readSolData(arr, "cover_ver");
                  readSolData(arr, "cover_wmode");
                  readSolData(arr, "cover_ap_ssid");
                  readSolData(arr, "cover_ap_ip");
                  readSolData(arr, "cover_ap_mac");
                  readSolData(arr, "cover_sta_ssid");
                  readSolData(arr, "cover_sta_rssi");
                  readSolData(arr, "cover_sta_ip");
                  readSolData(arr, "cover_sta_mac");
                  readSolData(arr, "status_a");
                  readSolData(arr, "status_b");
                  readSolData(arr, "status_c");
      
              });
      
          });
       }
      
      function readSolData(arr, dataPoint, isNumber = false){
          // Suchen des "dataPoint" und lesen dew zugehörigen Wertes,
          // dieser wird dann in den gleichnamigen Datenpunkt geschrieben
          var sub;
          var dpSearch = "var " + dataPoint;
           
           for (var i = 0; i < arr.length; i++){
              if (arr[i].includes(dpSearch)) {
                  sub = arr[i].split("\"");
                  var res = sub[1];
      
                  if (isNumber){
                      res = parseFloat(res);
                  }
                  
                  setState(SolarFolder + '.' + dataPoint, res);
      
                  break;
                 } 
              }
      }
      
      function CreateDatapoints(myFolder){
          // Datenpunkte anlegen, muss nur einmalig aufgerufen werden
           createState(myFolder + '.' + 'cover_ap_ip', '', {type: 'string',name: 'cover_ap_ip',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_ap_mac', '', {type: 'string',name: 'cover_ap_mac',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_ap_ssid', '', {type: 'string',name: 'cover_ap_ssid',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_mid', '', {type: 'string',name: 'cover_mid',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_ip', '', {type: 'string',name: 'cover_sta_ip',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_mac', '', {type: 'string',name: 'cover_sta_mac',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_rssi', '', {type: 'string',name: 'cover_sta_rssi',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_ssid', '', {type: 'string',name: 'cover_sta_ssid',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_ver', '', {type: 'string',name: 'cover_ver',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_wmode', '', {type: 'string',name: 'cover_wmode',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'status_a', '', {type: 'string',name: 'status_a',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'status_b', '', {type: 'string',name: 'status_b',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'status_c', '', {type: 'string',name: 'status_c',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_alarm', '', {type: 'string',name: 'webdata_alarm',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_msvn', '', {type: 'string',name: 'webdata_msvn',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_now_p', 0, {type: 'number',name: 'webdata_now_p',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_pv_type', '', {type: 'string',name: 'webdata_pv_type',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_rate_p', '', {type: 'string',name: 'webdata_rate_p',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_sn', '', {type: 'string',name: 'webdata_sn',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_ssvn', '', {type: 'string',name: 'webdata_ssvn',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_today_e', 0, {type: 'number',name: 'webdata_today_e',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_total_e', 0, {type: 'number',name: 'webdata_total_e',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_utime', '', {type: 'string',name: 'webdata_utime',read: true,write: true,role: 'state'});
      
           }
      
      
      
      
      posted in JavaScript
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: [gelöst] Datenpunkte zyklisch oder ereignisgesteuert lesen

      @blockmove
      Denke "Begrenzte Prozesssteuerung" war eher bezogen auf die SPS. In dieser ist ein sehr überschaubarer Befehls-/Funktionsvorrat der, bis auf einen (freilaufend), in festen Zyklen (Zeit) oder Ereignis gesteuert ausgeführt wird.
      Gerade bei größeren Anlagen wird die Visualisierung dann über/auf separaten PCs erstellt. Auch das Loggen von Daten oder Ereignissen erfolgt extern.
      Denke wenn Du versuchen würdest die obige Abfragen, Steuerung + Visualisierung in einer SPS unter zu bringen, kommst Du schnell an diese Grenzen. ( vom Preis mal gar nicht geredet) Wenn die Abfrage dann passt, Berechnungen stimmen, ist immer noch keine Visualisierung da...

      Da sind wir wieder bei den richtigen Werkzeugen....
      Automatisierung von Industrieanlagen würde ich nie mit ioBroker machen, Teile davon über ioBroker zu Visualisieren oder auch bedienen schon (über S7-Adapter)

      Im privaten Umfeld schaut des schon wieder anders aus...

      posted in Skripten / Logik
      ACHIM BAECKER
      ACHIM BAECKER

    Latest posts made by ACHIM BAECKER

    • RE: Deye Solar Sun600 Auslese-JavaScript

      @cash
      Ja,
      Der Wechselrichter arbeitet nur bei Licht...
      ohne bekommt man keine Verbindung.

      posted in JavaScript
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: [gelöst] Datenpunkte zyklisch oder ereignisgesteuert lesen

      @blockmove
      ich habe in einer Firma auch ca. 300 Werte von 7 SPS Steuerungen die ich im ioBroker Abfrage, aber die eigentliche Prozesssteuerung läuft ausschließlich in den SPSen.
      Auch z.B. in WinCC ist es ist es "Arbeit" die Werte anzulegen...
      OPC... stimmt... aber MQTT im iobroker ist auch nicht schlecht und wird von viel Hardware unterstützt.

      Wh vs. kWh...
      Sicher hätte ich statt 2,5Wh auch 0,0025kWh schreiben können... 😉

      posted in Skripten / Logik
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: [gelöst] Datenpunkte zyklisch oder ereignisgesteuert lesen

      @blockmove
      Denke "Begrenzte Prozesssteuerung" war eher bezogen auf die SPS. In dieser ist ein sehr überschaubarer Befehls-/Funktionsvorrat der, bis auf einen (freilaufend), in festen Zyklen (Zeit) oder Ereignis gesteuert ausgeführt wird.
      Gerade bei größeren Anlagen wird die Visualisierung dann über/auf separaten PCs erstellt. Auch das Loggen von Daten oder Ereignissen erfolgt extern.
      Denke wenn Du versuchen würdest die obige Abfragen, Steuerung + Visualisierung in einer SPS unter zu bringen, kommst Du schnell an diese Grenzen. ( vom Preis mal gar nicht geredet) Wenn die Abfrage dann passt, Berechnungen stimmen, ist immer noch keine Visualisierung da...

      Da sind wir wieder bei den richtigen Werkzeugen....
      Automatisierung von Industrieanlagen würde ich nie mit ioBroker machen, Teile davon über ioBroker zu Visualisieren oder auch bedienen schon (über S7-Adapter)

      Im privaten Umfeld schaut des schon wieder anders aus...

      posted in Skripten / Logik
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: [gelöst] Datenpunkte zyklisch oder ereignisgesteuert lesen

      Wie schon gesagt, für jede Aufgabe gibt es unterschiedliche Werkzeuge...
      Man sollte aber auch darüber nachdenken, ob man alles so schnell wie irgend möglich braucht, bzw. was es einem bringt...
      Gehen wir davon aus das wir gerade mit "Solar-Stromüberschuss" 1800W/h die Batterie laden und schlagartig fällt die Sonne aus....
      Wenn wir hier erst nach 1s abfragen und die Ladeleistung runter setzen dann haben wir 0,5W aus dem Netz ziehen müssen.... bei 0,5s wären es nur 0,25W
      Also für mich wäre da ein Zyklus von >= 5s mehr als ausreichend ( wären dann 2,5W)

      posted in Skripten / Logik
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: Deye Solar Sun600 Auslese-JavaScript

      @caesarii
      wenn ich das richtig verstehe willst nur den Verlauf der Momentan-Leistung, oder?
      Ich für meinen Teil zeichne die Momentan- und Summen-Werte in einer SQL Datenbank. Den Verlauf der aktuellen Leistung kann man dann leicht z.B. über den Flot-Adapter grafisch ausgeben. Dies geht komplett ohne Programmieren.
      Zum Erstellen der Tages, Wochen, Monatswerte,... nutze ich dann die in der Datenbank gespeicherten Summen-Werte. Über eine SQL-Abfrage werden mir dann diese zurück gegeben. Mit JS passe ich diese Daten an, um sie mit "materialdesign Bar Chart" darzustellen.

      posted in JavaScript
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: Deye Solar Sun600 Auslese-JavaScript

      @caesarii
      Bei mir werden auch nicht alle Werte "gefüllt". Eigentliche verwende/logge ich nur die momentane Leistung "webdata_now_p" und die aufsummierte Leistung "webdata_total_e".
      Den Rest (Tages/wochen/Monatswerte/..) erzeuge ich über SQL-Script + JS.

      posted in JavaScript
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: Bosswerk MI600 Adapter

      @rene55
      Aus meiner Sicht kommt da schon zu viel... 😉
      Für mich reicht die momentane, sowie die aufsummierte Leistung. Diese werden in einer MariaDB geloggt und per JS + SQL ausgewertet (Tages, Wochen, Monatswerte,..)
      Achim

      posted in Entwicklung
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: Bosswerk MI600 Adapter

      Hallo,
      Ich habe für einen Deye Solar Sun600 ein Javascript erstellt, das Daten vom Inverter abholt.
      Meines Wissens nach, sollte der Bosswerk MI600 kompatible sein.
      Forumeintrag
      Achim

      posted in Entwicklung
      ACHIM BAECKER
      ACHIM BAECKER
    • RE: Js Script für externe MySQL Abfrage

      @reiner
      Für die Verbindung zur externen MySQL-DB würde ich erst einmal eine neue sql-Instanz anlegen und die Daten zur DB-Verbindung eintragen + testen.

      Beispiel Abfrage: (Das Ergebnis kommt als JSON String)

      var sql = 'SELECT MAX(iobroker.datapoints.id) AS Nummer FROM iobroker.datapoints';
      
          sendTo('sql.0', 'query', sql, function (result) {
      
          if (result.error) {
      
              console.error(result.error);
      
          } else {
      
              // Zeigt den Rückgabe JSON-String
              log('Rows: ' + JSON.stringify(result.result));
      
              // Auslesen des Feldes "Nummer" (SQL: 'AS Nummer')
              log('Nummer: ' + result.result[0].Nummer);
          }
      
          });
      
      
      posted in JavaScript
      ACHIM BAECKER
      ACHIM BAECKER
    • Deye Solar Sun600 Auslese-JavaScript

      Hier mein Script zum Auslesen eines Balkonkraftwerk mit einem Inverter Deye Solar Sun600 über den Inverter-Webserver.
      (ohne Cloud und Solarman Account)

      Unter "http://IP-INVERTER/status.html" können die Aktualdaten ausgelesen werden.
      Das Script liest alle 5min diese Webseite aus und trägt die Werte in die entsprechenden Datenpunkte.

      Achim

      // Auslesen der Datenpunkte eines Solarinverters Deye Solar SUN600 und baugleiche
      // (Bosswerk MI600, ..)? 
      // --------------------------------------------------------------------------------
      // Erstellt: 01.2023 Achim Bäcker
      // ================================================================================
      
      // Die Daten werden ohne externe App + Verbindung (bsp: Solarman) über den
      // Webserver im Inverter abgerufen. 
      // 
      // Hierzu im Inverter das WLan einstellen und eine IP vergeben bzw. DHCP aktivieren. 
      // 
      // ================================================================================
      // Einrichten:
      // 1. Variable SolarFolder anpassen... hier werden die Datenpunkte erstellt
      //    Funktion CreateDatapoints einmalig aufrufen
      // 2. Über den Radar2-Adapter schaue ich das der Inverter online ist (er schaltet
      //    sich bei zu wenig Sonne aus) Online-ID in SolarOnlineVar eintragen
      // 3. Url des Inverters anpassen (SolarUrl) , Username und Passwort müssen mit übergeben
      //     werden, am besten erst einmal die Url im Browser testen. Wenn die Url passt, öffnet 
      //    sich eine Webseite wo man nur Striche sieht. Hier im Browser Quelltext 
      //    anzeigen wählen... noch vor dem Body ist eine Liste mit den Aktualwerten
      // 
      // Hier auf eigene Anlage anpassen
      var SolarFolder     = "0_userdata.0.Solar";
      var SolarOnlineVar  = "radar2.0.Solar._here";    
      var SolarUrl        ="http://admin:admin@192.168.2.160/status.html";
      
      // Datenpunkte erstellen, kann nach einmaligem Aufruf deaktiviert werden
      
      CreateDatapoints(SolarFolder);   // <<<<<----- Einmalig aufrufen
      
      
      // ================================================================================
      
      schedule('*/5 5-22 * * *', GetData); // zwischen 5-22Uhr alle 5min ausführen
      
      
      function GetData(){
          // zyklisches abholen der Daten, falls Solaranlage online ist
          var SolarIsOnline = getState(SolarOnlineVar).val;
          if (SolarIsOnline) {
              getWebsite();
          }
      }
      
      var http=require('http');
      
      function getWebsite(){
          // laden der Website und wandeln in ein Zeilen-Array
          // Werte Suchen und wegschreiben 
      
          http.get(SolarUrl, function(res){
              var str = "";
              console.log('Response is '+res.statusCode);
      
              if (res.statusCode != 200) {
                  console.log("non-200 response status code:", res.statusCode);
                  console.log("for url:", SolarUrl);
                  res.resume();
                  return;
              }
      
              res.on('data', function (chunk) {
                      str += chunk;
              });
      
              res.on('end', function () {
                  var arr = str.split("\n");
                  readSolData(arr, "webdata_sn");
                  readSolData(arr, "webdata_msvn");
                  readSolData(arr, "webdata_ssvn");
                  readSolData(arr, "webdata_pv_type");
                  readSolData(arr, "webdata_rate_p");
                  readSolData(arr, "webdata_now_p", true);
                  readSolData(arr, "webdata_today_e", true);
                  readSolData(arr, "webdata_total_e", true);
                  readSolData(arr, "webdata_alarm");
                  readSolData(arr, "webdata_utime");
                  readSolData(arr, "cover_mid");
                  readSolData(arr, "cover_ver");
                  readSolData(arr, "cover_wmode");
                  readSolData(arr, "cover_ap_ssid");
                  readSolData(arr, "cover_ap_ip");
                  readSolData(arr, "cover_ap_mac");
                  readSolData(arr, "cover_sta_ssid");
                  readSolData(arr, "cover_sta_rssi");
                  readSolData(arr, "cover_sta_ip");
                  readSolData(arr, "cover_sta_mac");
                  readSolData(arr, "status_a");
                  readSolData(arr, "status_b");
                  readSolData(arr, "status_c");
      
              });
      
          });
       }
      
      function readSolData(arr, dataPoint, isNumber = false){
          // Suchen des "dataPoint" und lesen dew zugehörigen Wertes,
          // dieser wird dann in den gleichnamigen Datenpunkt geschrieben
          var sub;
          var dpSearch = "var " + dataPoint;
           
           for (var i = 0; i < arr.length; i++){
              if (arr[i].includes(dpSearch)) {
                  sub = arr[i].split("\"");
                  var res = sub[1];
      
                  if (isNumber){
                      res = parseFloat(res);
                  }
                  
                  setState(SolarFolder + '.' + dataPoint, res);
      
                  break;
                 } 
              }
      }
      
      function CreateDatapoints(myFolder){
          // Datenpunkte anlegen, muss nur einmalig aufgerufen werden
           createState(myFolder + '.' + 'cover_ap_ip', '', {type: 'string',name: 'cover_ap_ip',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_ap_mac', '', {type: 'string',name: 'cover_ap_mac',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_ap_ssid', '', {type: 'string',name: 'cover_ap_ssid',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_mid', '', {type: 'string',name: 'cover_mid',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_ip', '', {type: 'string',name: 'cover_sta_ip',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_mac', '', {type: 'string',name: 'cover_sta_mac',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_rssi', '', {type: 'string',name: 'cover_sta_rssi',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_sta_ssid', '', {type: 'string',name: 'cover_sta_ssid',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_ver', '', {type: 'string',name: 'cover_ver',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'cover_wmode', '', {type: 'string',name: 'cover_wmode',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'status_a', '', {type: 'string',name: 'status_a',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'status_b', '', {type: 'string',name: 'status_b',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'status_c', '', {type: 'string',name: 'status_c',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_alarm', '', {type: 'string',name: 'webdata_alarm',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_msvn', '', {type: 'string',name: 'webdata_msvn',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_now_p', 0, {type: 'number',name: 'webdata_now_p',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_pv_type', '', {type: 'string',name: 'webdata_pv_type',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_rate_p', '', {type: 'string',name: 'webdata_rate_p',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_sn', '', {type: 'string',name: 'webdata_sn',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_ssvn', '', {type: 'string',name: 'webdata_ssvn',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_today_e', 0, {type: 'number',name: 'webdata_today_e',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_total_e', 0, {type: 'number',name: 'webdata_total_e',read: true,write: true,role: 'state'});
           createState(myFolder + '.' + 'webdata_utime', '', {type: 'string',name: 'webdata_utime',read: true,write: true,role: 'state'});
      
           }
      
      
      
      
      posted in JavaScript
      ACHIM BAECKER
      ACHIM BAECKER
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo