Navigation

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

    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

    T
    • Profile
    • Following 0
    • Followers 1
    • Topics 1
    • Posts 8
    • Best 0
    • Groups 1

    timae146

    @timae146

    0
    Reputation
    8
    Profile views
    8
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    timae146 Follow
    Starter

    Latest posts made by timae146

    • RE: Gelöst:MotionEye nicht auf FullyKiosk darstellbar

      kann das problem bestätigen. bis vor ca einem monat wurde die seite noch dargestellt im fully browser.

      workaround für den Pc auf chrome:
      chrome://flags/#enable-lazy-image-loading
      auf disabled setzen

      posted in ioBroker Allgemein
      T
      timae146
    • RE: Parser Adapter Timer/Solarview von website auslesen

      @vatoslocos:

      meinst du so eine ?

       Timer.listOnTimeout (timers.js:214:5)
      javascript.0	2019-01-14 15:30:25.449	error	at tryOnTimeout (timers.js:250:5)
      javascript.0	2019-01-14 15:30:25.449	error	at ontimeout (timers.js:399:34)
      javascript.0	2019-01-14 15:30:25.449	error	at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1762:34)
      javascript.0	2019-01-14 15:30:25.448	error	at Object. <anonymous>(script.js.common.SolarView:19:24)
      javascript.0	2019-01-14 15:30:25.448	error	Error in callback: TypeError: Cannot read property 'replace' of undefined</anonymous> 
      

      Diese bekomme ich nämlich rein…. `

      Genau.. denke das lag bei mir an einer schlechten Wlan Verbindung des Pi im Keller.

      Habe mittlerweile das Errorhandling etwas verbessert, sowie die Möglichkeit hinzugefügt einen Zeitraum festzulegen wann Anfragen an den Pi gesendet werden.

      In der Funktion "errormsg()" können dann noch beliebige Aktionen (Telegram nachricht o.ä.) ,wenn gewollt, ergänzt werden.

      Hatte zwischendurch auch mal den automatischen restart des Pi implementiert. Aber wieder rausgenommen, da mir das dann doch ein bisschen zu "overkill" war und es ja warscheinlich eh an der Verbindung liegt.

      Hier Version "2.0":

      ! ````
      createState("Solarview.W_actual", {unit: "W", read: true, write: false});
      createState("Solarview.kWh_today", {unit: "kWh", read: true, write: false});
      createState("Solarview.kWh_month", {unit: "kWh", read: true, write: false});
      createState("Solarview.kWh_year", {unit: "kWh", read: true, write: false});
      createState("Solarview.kWh_total", {unit: "kWh", read: true, write: false});
      ! const ip_adress = "192.168.178.101";
      const port = "15000";
      const interval_time = 45000; //in ms
      const max_errors = 8; //danach erroraction
      ! /* ---Zeitraum in dem Anfragen gesendet werden--- /
      const starttime = '05:00';
      const endtime = '23:00';
      ! /
      ---Wird nach der bei "max_errors" festgelegten aufeinanderfolgenden errors ausgeführt---/
      function erroraction(){
      console.error("ERROR. TCP-Server is not responding. Bad Wifi connection? "+ countedErrors +" errors in row");
      ! //hier können beliebige aktionen ergänzt werden.
      ! }
      ! /
      -------------------------------------------------------------------------------------/
      /
      ---------------Hauptprogramm--------------*/
      ! var raw_data, W_actual, kWh_today, kWh_month, kWh_year, kWh_total, countedErrors = 0;
      ! setInterval (function() { //arbeitsschleife
      ! if (compareTime(starttime, endtime, "between")) { //Zeit zwischen der die Daten abgerufen werden sollen

          raw_data = "";
          client.start();     //tcp server anfrage - springe in unterprogramm
      
          setTimeout(function () {    //delay, damit die empfangenen daten in raw_data geschrieben werden können
      

      ! if (raw_data !== "") {
      countedErrors = 0; //errorcounter zurücksetzen

              raw_data = raw_data.replace (/[{]+/,"");        // "{" entfernen
              raw_data = raw_data.replace (/[}]+/,"");        // "}" entfernen
              raw_data = raw_data.split(",");                 // split von raw_data in array bei (,)
      
              W_actual = raw_data[10];
              W_actual = del_0(W_actual);
      
              kWh_today = raw_data[6];
              kWh_today = del_0(kWh_today);
      
              kWh_month = raw_data[7];
              kWh_month = del_0(kWh_month);
      
              kWh_year = raw_data[8];
              kWh_year = del_0(kWh_year);
      
              kWh_total = raw_data[9];
              kWh_total = del_0(kWh_total);
      
              setState("Solarview.W_actual", W_actual);         //status in Objekt schreiben
              setState("Solarview.kWh_today", kWh_today);
              setState("Solarview.kWh_month", kWh_month);
              setState("Solarview.kWh_year", kWh_year);
              setState("Solarview.kWh_total", kWh_total);
      
              console.debug("W_actual: " + W_actual);         //Ausgabe im debug log
              console.debug("kWh_today: " + kWh_today);
              console.debug("kWh_month: " + kWh_month);
              console.debug("kWh_year: " + kWh_year);
              console.debug("kWh_total: " + kWh_total); 
      

      !
      } else{
      errorcounter();
      }
      ! }, 3000); // klammer timeout
      }//klammer if Logging time
      },interval_time); //klammer interval
      ! /-------------------------------------------------------------------------------------/
      /---------------Unterprogramme--------------/
      ! /* ########################## Errorcounter ########################## /
      ! function errorcounter()
      {
      countedErrors = countedErrors + 1;
      if (countedErrors <= max_errors){
      console.warn("TCP-Server not responding: " + countedErrors + " times");
      }else {
      erroraction();
      }
      }
      ! /
      ########################## del_0 ########################## */
      ! function del_0(input_del_0) //vorne stehenden 0en löschen
      {
      input_del_0 = input_del_0.replace (/^[0]+/,""); // um alle vorranstehenden 0en zu entfernen

      if (input_del_0 === "")                 //falls wert nun leer, setze wert auf 0
      {                            
      input_del_0 = "0";
      }
      else if (input_del_0.match (/^[.]+/))   //falls wert mit einem "." beginnt, setze "0" vor "."
      {             
          input_del_0 = "0"+input_del_0;
      }
      return input_del_0;
      

      }

      ! /* ########################## TCP-retrieve ########################## /
      ! var Netcat = require('node-netcat');
      var client = Netcat.client(port, ip_adress);
      ! client.on('open', function ()
      {
      console.debug('connect');
      client.send('00
      '); //cmd der nach dem connect ausgeführt wird
      });
      ! client.on('data',function (data) { //empfangenden daten werden in variable "data" abgelegt
      raw_data = data.toString(); //daten in globale variable raw_data ablegen und in string formatieren (notwendig für replace funktion)
      console.debug("client.on: " + raw_data); //received data in debug log
      ! client.send(); //close connection
      });
      ! client.on('error', function (err) {
      console.debug(err);
      });
      ! client.on('close', function () {
      console.debug('close');
      });
      ! ````

      Falls dir sonst noch was auffällt, oder an Funktionen fehlt, lass es mich wissen 😄

      Edit 27.05.19 | Siehe zweiter Beitrag für das aktuelle script. bei der forum umstellung hat es wohl die darstellung zerschossen.

      posted in ioBroker Allgemein
      T
      timae146
    • RE: Android App 'States to ioBroker'

      > Klar hier ist der export von Tasker.

      top. danke 🙂

      posted in Tester
      T
      timae146
    • RE: Android App 'States to ioBroker'

      gerade den Thread hier gefunden. auf den ersten blick ja schon mal eine ganz witzige app. wollte mir eigl selber sowas in der art zusammenbauen. hat sich dann wohl erledigt. und das mit Sicherheit eleganter wie ich das hinbekommen hätte.

      danke für die mühe 🙂

      bekommt man es vllt. auch i-wie hin in die APP noch einen log einzubauen? um z.B. sehen zu können, was und wann etwas gesendet wurde.

      einfach nur interessehalber. finde sowas immer ganz interessant.

      mich würde interessieren wie sowas arbeitet, bzw wie man sowas "programmiert"

      könntest du mir in dem Zuge evtl. auch deinen "sourcecode" bzw die Projektdateien zukommen lassen? die app wurde doch komplett mit tasker erstellt, oder? wäre sehr nett von dir.

      nicht das ich mich zwischen Weihnachten und Neujahr noch langweile. 😉

      Ansonsten noch eine kleine "Schönheitsverbesserung" im Script. Man könnte die write attribute immer auf false setzen. Dies würde ungewollten manuellen Änderungen vorbeugen.

      Und mir ist aufgefallen das auf meinem Wiko Lenny3 mit android 6.0 hin und wieder ein kleines "popup" von unten kommt, obwohl alle sensoren deaktiviert sind. auch wenn die app nicht im vordergrund ist:

      ! 8516_screenshot_20181217-222339.png

      posted in Tester
      T
      timae146
    • RE: Parser Adapter Timer/Solarview von website auslesen

      kein Problem. 🙂

      schön zu hören das meine mühen noch woanders Anwendung finden 😄

      mir ist allerdings aufgefallen, dass sich alle paar tage der tcp-server auf dem raspberry aufhängt? kannst du das bestätigen?

      also die daten werden weiterhin geloggt und auf der vom webserver bereitgestellten website dargestellt.

      nur der tcp-server gibt halt keinen datenstring mehr raus, was sich im iobroker-log mit einer error-meldung bemerkbar macht.

      posted in ioBroker Allgemein
      T
      timae146
    • RE: Parser Adapter Timer/Solarview von website auslesen

      okay. habe meine Probleme jetzt gelöst. allerdings ohne das parsen von websites (auch wenn es schön wäre hierzu mal ein komplexeres beispiel als eine wetterseite zu sehen zu bekommen)

      ich halte meine Lösungen hier mal für die Nachwelt fest.

      1. Lösung Solarview

      Hierfür habe ich mir ein kleines Script geschrieben. vorher muss allerdings noch das "node-netcat" modul installiert, und "setObjekt" aktiviert werden. Dafür einfach node-netcad im adapter eintragen und speichern:

      8516_node-netcat.png

      Script:

      createState("Solarview.W_actual", {unit: "W", read: true, write: false});
      createState("Solarview.kWh_today", {unit: "kWh",  read: true, write: false});
      createState("Solarview.kWh_month", {unit: "kWh",  read: true, write: false});
      createState("Solarview.kWh_year", {unit: "kWh",  read: true, write: false});
      createState("Solarview.kWh_total", {unit: "kWh",  read: true, write: false});
      
      const ip_adress = "192.168.178.101";
      const port = "15000";
      const interval_time = 60000;        //in ms
      const max_errors = 5;               //danach error action 
      
      
      /* ---Zeitraum in dem Anfragen gesendet werden--- */
      const starttime = '05:00';
      const endtime   = '23:00';
      
      /* ---Wird nach bei "max_errors"  hintereinander folgenden errors ausgeführt---*/
      function erroraction(){
      console.error("ERROR. TCP-Server is not responding. Bad Wifi connection? "+ countedErrors +" errors in row");
      
      //hier können beliebige aktionen ergänzt werden. Meldeleuchte einschalten o.ä.
      
      }
      
      
      
      /*-------------------------------------------------------------------------------------*/
                      /*---------------ab hier nichts mehr ändern--------------*/
      
      var raw_data, W_actual, kWh_today, kWh_month, kWh_year, kWh_total, countedErrors = 0;
      
      
      setInterval (function() {       //arbeitsschleife
      
          if (compareTime(starttime, endtime, "between")) {     //Zeit zwischen der die Daten abgerufen werden sollen
          
              raw_data = "";
              client.start();     //tcp server anfrage - springe in unterprogramm
          
              setTimeout(function () {    //delay, damit die empfangenen daten in raw_data geschrieben werden können
      
                  if (raw_data !== "")  {
                      countedErrors = 0;      //errorcounter zurücksetzen
          
                  raw_data = raw_data.replace (/[{]+/,"");        // "{" entfernen
                  raw_data = raw_data.replace (/[}]+/,"");        // "}" entfernen
                  raw_data = raw_data.split(",");                 // split von raw_data in array bei (,)
          
          
                  W_actual = raw_data[10];
                  W_actual = del_0(W_actual);
          
                  kWh_today = raw_data[6];
                  kWh_today = del_0(kWh_today);
          
                  kWh_month = raw_data[7];
                  kWh_month = del_0(kWh_month);
          
                  kWh_year = raw_data[8];
                  kWh_year = del_0(kWh_year);
          
                  kWh_total = raw_data[9];
                  kWh_total = del_0(kWh_total);
          
          
                  setState("Solarview.W_actual", W_actual);         //status in Objekt schreiben
                  setState("Solarview.kWh_today", kWh_today);
                  setState("Solarview.kWh_month", kWh_month);
                  setState("Solarview.kWh_year", kWh_year);
                  setState("Solarview.kWh_total", kWh_total);
       
                  console.debug("W_actual: " + W_actual);         //Ausgabe im debug log
                  console.debug("kWh_today: " + kWh_today);
                  console.debug("kWh_month: " + kWh_month);
                  console.debug("kWh_year: " + kWh_year);
                  console.debug("kWh_total: " + kWh_total); 
      
          
                  } else{
                   errorcounter();
                  }
      
              }, 3000);       // klammer timeout
          }//klammer if Logging time
      },interval_time); //klammer interval 
      
      
      
      /*-------------------------------------------------------------------------------------*/
                      /*---------------Unterprogramme--------------*/
      
      /* ########################## Errorcounter ########################## */
      
      function errorcounter()
      {
          countedErrors = countedErrors + 1;
              if (countedErrors <= max_errors){
              console.warn("TCP-Server not responding: " + countedErrors + " times");
              }else {
              erroraction();
              }
      }
      
      /* ########################## del_0 ########################## */
      
      function del_0(input_del_0)      //vorne stehenden 0en löschen
      {                           
          input_del_0 = input_del_0.replace (/^[0]+/,"");         // um alle vorranstehenden 0en zu entfernen
          
          if (input_del_0 === "")                 //falls wert nun leer, setze wert auf 0
          {                            
          input_del_0 = "0";
          }
          else if (input_del_0.match (/^[.]+/))   //falls wert mit einem "." beginnt, setze "0" vor "."
          {             
              input_del_0 = "0"+input_del_0;
          }
          return input_del_0;
      }
      
      /* ########################## TCP-retrieve ########################## */
      
      var Netcat = require('node-netcat');
      var client = Netcat.client(port, ip_adress);
      
        client.on('open', function () 
        {
        console.debug('connect');
        client.send('00*');                   //cmd der nach dem connect ausgeführt wird
        });
      
      
        client.on('data',function  (data) {       //empfangenden daten werden in variable "data" abgelegt
        raw_data = data.toString();               //daten in globale variable raw_data ablegen und in string formatieren (notwendig für replace funktion)
        console.debug("client.on: " + raw_data);    //received data in debug log
      
        client.send();                            //close connection
      });
      
      
      client.on('error', function (err) {
        console.debug(err);
      });
      
      
      client.on('close', function () {
        console.debug('close');
      });
      

      Bedingung hierfür ist das in Solarview@Fritzbox der TCP Server aktiviert ist. Wie das geht kann man der Solarview Anleitung nachlesen.

      Danach einfach im Javascript Adapter einfügen, IP-Adresse, sowie Port anpassen und starten. danach sollte bei den Objekten der JS-Instanz ein neuer Unterordner "Solarview" auftauchen.

      Anmerkung: das Script fragt nur die Gesamtanlage ab. also nicht jeden Wechselrichter für sich, falls mehrere vorhanden sind.

      Lösung 2: Timer von der Website

      Ich wurde darauf hingewiesen, das die Seite glücklicherweise über eine Api verfügt.

      Diese habe ich auch per Script abgefragt:

      createState("Warframe.Cetus_day/night_cycle", {unit: "", read: true, write: false});
      const url = 'https://api.warframestat.us/pc/cetusCycle'
      var raw_data, time_till_night;
      
      try {
              require("request")(url, function (error, response, result) 
              {
              raw_data = result.split(",");       //raw_data splitten
              console.debug("incoming: " +raw_data);          //raw_data gesamt anzeigen
              return raw_data;                    //raw_data aus der funktion in globale variable schieben
              }).on("error", function (e) {console.error(e);});
          }catch (e) {console.error(e);}
      
       //######### String verarbeitung #########
      timeout = setTimeout(function () 
      {
              time_till_night = raw_data[5].split(':');
              time_till_night[1] = time_till_night[1].replace (/[}]+/,"");         
              time_till_night[1] = time_till_night[1].replace (/["]+/,"");
              time_till_night[1] = time_till_night[1].replace (/["]+/,"");
              console.debug("time_till_night: " +time_till_night[1]);
              setState("Warframe.Cetus_day/night_cycle", time_till_night[1]);
      }, 1500);
      

      Edit: 27.5 19 | Eintrag angepasst, da durch die Forumumstellung wohl was durcheinander gekommen ist

      posted in ioBroker Allgemein
      T
      timae146
    • Parser Adapter Timer/Solarview von website auslesen

      Hallo,

      ich habe auch mal eine Frage zum Parser Adapter.

      ich würde unter anderem einen timer von einer Website (https://hub.warframestat.us/timer) abgreifen wollen. leider klappt das nicht wirklich 😕

      nach dem ich das Beispiel auf github, mit der Temperatur erfolgreich nachgebaut habe, habe ich mich mal ein bisschen eingelesen und folgenden regex erstellt und auf regex101.com (erfolgreich wie ich meine) getestet.

      ((\d+(\.\d+)?)\s*(h))?(\s*(\d+)\s*(m))?(\s*(\d+)\s*(s))
      

      dieser sollte mir ja jetzt quasi alle werte von der website in diesem Format rausfiltern: XXh YYm ZZs

      ! https://www.pic-upload.de ~~leider scheint das nur theoretisch zu funktionieren, da der vom Adapter erstellte Datenpunkt leer bleibt.

      –-------------------------------------------------------------------------------------------------------------------------------------------

      genauso wie in meinem zweiten test.

      Da ich https://forum.iobroker.net/viewtopic.php?f=21&t=6548&p=68067&hilit=solarview#p68067 im Forum schon gelesen hatte das es jemandem gelungen ist, mit dem Parser Adapter Daten von Solarview

      ! Solarview ist ein Photovoltaiklogger, der (bei mir) auf einem Raspberry läuft, den ich über http://192.168.178.101:88/ erreichen kann. in Iobroker zu bekommen, habe ich erstmal versucht das hinzubekommen.

      Leider steht nicht dabei wie der Ersteller das Problem letztendlich gelöst hat 😢

      hier finde ich allerdings nichteinmal einen Ansatz, da keine einheit dahinter steht wonach ich filtern könnte.

      ! https://www.pic-upload.de ~~die seite sieht so aus: http://www.solarview.info/solarview_fb/

      bin für jede hilfe dankbar~~~~

      posted in ioBroker Allgemein
      T
      timae146
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo