Navigation

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

    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 11
    • Posts 366
    • Best 55
    • Groups 2

    Boronsbruder

    @Boronsbruder

    69
    Reputation
    80
    Profile views
    366
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Boronsbruder Follow
    Pro Starter

    Best posts made by Boronsbruder

    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      Der Fehler liegt in der Berechnung des Meterologischen Sommers und tritt immer um 23:58 Uhr auf!

      Ich warte mal heute Nacht noch ab, aber der Fix sollte folgendes sein:

      @SBorg
      ein Tippfehler in der wetterstation.sub Zeile 1293 und 1294 -> +Y% in +%Y ändern!

      Falsch:

      local FLUXSTART=$(date +Y%-06-01)"T00:00:00Z"
      local FLUXENDE=$(date +Y%-08-31)"T23:59:59Z"
      

      Richtig:

      local FLUXSTART=$(date +%Y-06-01)"T00:00:00Z"
      local FLUXENDE=$(date +%Y-08-31)"T23:59:59Z"
      
      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • [Vorlage] Luftqualitätswerte abrufen

      Ich möchte euch mein Skript zum Abrufen der Luftqualitätsdaten über die Api des Umweltbundesamtes zur Verfügung stellen.
      Funktion:
      auf der SEITE des Umwelbundesamtes die StationsID raussuchen
      582e07dc-ceb1-4d47-8e50-73147c3d7d8b-grafik.png
      Es können auch mehrere Stationen durch Komma getrennt im Skript eingetragen werden.
      Dann werden die Daten (letzter Stündlicher Mittelwert) unter dem eingestellten Datenpunkt um **:10 gespeichert. (um 10, nach da ich festgestellt habe, dass manche Werte erst später kommen)

      c8ba31a0-117b-4283-8709-69b904c57a3a-grafik.png

      v2.1 - Datumsfix => Danke an @Sborg
      - Fehlerbehandlung für nicht abgerufene Daten eingebaut
      v2.2 - fix Clear Timeouts und Schedules beim Stoppen
      v2.3 - fix Fehlerbearbeitung
      v2.4 - Die API scheint keine Stunde 0 korrekt verarbeiten zu können, deswegen werden hier zwischen 23 Uhr und 1 Uhr keine Daten geliefert.
      Es wird nur noch "kein Datensatz" geloggt, anstatt einen Fehler auszulösen.
      v2.5 - Abfrage an API angepasst (1- 24 Uhr wird dort gefordert).
      v2.6 - Anpassung zu Sommerzeit-Problemen
      v2.7 - Schönheitskorrekturen im Code
      v2.8 - Werte werden mit ack=true gespeichert

      Hinweis:
      Um den Datumswechsel fehlen meist zwischen 0 und 2 Uhr immer mal wieder Daten, die von der API nicht geliefert werden. Später am Tag sind sie zwar vorhanden, aber das Skript ist nur für die letzten aktuellen Werte gedacht. Dies wird nur als normale Log-Meldung geführt.

      // Luftqualität v2.8
      // v1 - Erst-Version
      // v2 - Qualitätsindizes hinzugefügt
      // v2.1 - Datumsberechnung korrigiert => Danke an @SBorg
      //      - Fehlerbehandlung für nicht abgerufene Daten eingebaut
      // v2.2 - fix Clear Timeouts und Schedules
      // v2.3 - fix Fehlerbearbeitung
      // v2.4 - Die API scheint keine Stunde 0 korrekt verarbeiten zu können, deswegen werden hier zwischen 23 Uhr und 1 Uhr keine Daten geliefert.
      //        Es wird nur noch kein Datensatz gelogt anstatt einen Fehler auszulösen 
      // v2.5 - Abfrage an API angepasst (1- 24 Uhr wird dort gefordert).
      // v2.6 - Anpassung zu Sommerzeit-Problemen
      // v2.7 - Schönheitskorrekturen im Code
      // v2.8 - Werte werden mit ack=true gespeichert
      
      // User Einstellungen
      
      const stations = ["DEBW019", "DEBY052"]; // Stationen, können durch Komma getrennt werden z.B. ["DEBW019", "DEBY007"]
      const datenpunkt_pre ="0_userdata.0" // => wird in 0_userdata.0.Luftqualität gespeichert
      const debug = false;
      //  Abfrage findet um **:10 stündlich statt (um fehlende Daten eventl. nachzufüllen). Die Daten werden sowieso nur stündlich von der letzten Stunde zur Verfügung gestellt...
      
      // Datenverarbeitung 
      
      var dp_path = datenpunkt_pre + ".Luftqualität.";
      var timer;
      var components;
      var stations_list;
      var re_init = false;
      var re_init_timeout;
      
      const fetch = require('node-fetch');
      
      function createBaseFolder(ID, type, name)
      {
      /** geklaut bei grrfield
       * Erstellt Basisfolder und stellt den richtigen Typ ein
       * @param   {string}    ID          ID des Folders
       * @param   {any}       type        Typ des Folders
       * @param   {string}    [name]      (optional) Name des Folders
       */  
      
          createState(ID, function() {
              let obj=getObject(ID);
              obj.type=type;
              if(name != undefined) obj.common.name=name;
              obj.common.role='';
              setObject(ID, obj);
          });
      }
      
      const get_stations = async () => {
          const url_stations = "https://umweltbundesamt.api.proxy.bund.dev/api/air_data/v3/stations/json?lang=de";
          var stations_json = fetch(url_stations)
              .then(response => response.json())
              .then(data => {
                  //if (debug) console.log(data);
                  return data})
              .catch ((err) => {
              console.error("failed fetch " + err);
              
          }
          );
          return stations_json;
      }
      
      const send_request = async (station_code) => {
              
              const d = new Date(); 
              if (debug) console.log ("TIMEZONE: " + d.getTimezoneOffset());
              if (d.getTimezoneOffset() == -120) d.setTime(d.getTime()-3600000);
              
              let month_to = (d.getMonth()+1) < 10 ? "0"+ (d.getMonth()+1) : (d.getMonth()+1);
              let day_to = (d.getDate()) < 10 ? "0"+ (d.getDate()) : (d.getDate());
              let date_to = d.getFullYear() +'-'+ month_to  +'-' + day_to;
              let hour_to = d.getHours();
              
              if (debug) console.log ("to => " + date_to + " " + hour_to);
              
              const now_round = new Date (date_to +' '+ hour_to + ":00");       
              
              let now = now_round.getTime()-3600000;
              
              d.setTime(now);
              
              let month_from = (d.getMonth()+1) < 10 ? "0"+ (d.getMonth()+1) : (d.getMonth()+1);
              let day_from = (d.getDate() < 10) ? "0"+ (d.getDate()) : d.getDate();
              let date_from = d.getFullYear() +'-'+ month_from +'-' + day_from;
              let hour_from = d.getHours();
              if (debug) console.log ("from => " + date_from + " " + hour_from);
      
              if (hour_to == 0){
                  hour_to =24;
                  date_to = date_from
                  if (debug) console.warn ("STUNDE 0 => to => " + date_to + " " + hour_to);
              }
              else if (hour_from == 0){
                  let fixed_now = d.getTime()-3600000;
                  d.setTime(fixed_now);
      
                  month_from = (d.getMonth()+1) < 10 ? "0"+ (d.getMonth()+1) : (d.getMonth()+1);
                  day_from = (d.getDate() < 10) ? "0"+ (d.getDate()) : d.getDate();
                  date_from = d.getFullYear() +'-'+ month_from +'-' + day_from;
                  hour_from = 24;
                  if (debug) console.warn ("STUNDE 0 => from => " + date_from + " " + hour_from);
              }
      
              
              const url_server = "https://umweltbundesamt.api.proxy.bund.dev/api/air_data/v3/airquality/json?date_from=" + date_from + "&time_from=" + hour_from + "&date_to=" +date_to +"&time_to=" + hour_to + "&station=" + station_code + "&lang=de";
              
              if (debug) console.log("SERVER-URL: "+ url_server);
      
              var request = fetch(url_server)
              .then(response => response.json())
              .then(data => {
                  if (debug) console.log(data);
                  return data})
              .catch ((err) => {
              console.error("failed fetch " + err);
        
          }
          );
          return request;
      
      };
      
      const get_components = async () => {
              var list = fetch("https://umweltbundesamt.api.proxy.bund.dev/api/air_data/v3/components/json?lang=de&index=id")
              .then(response => response.json())
              .then(data => {
                  if (debug) console.log(data);
                  return data})
              .catch ((err) => {
              console.error("failed fetch " + err);
              
          }
          );
          return list;
      };
      
      async function get_data (station_code) {
          if (re_init) return;
          
         var data = await send_request(station_code);
      
         if (Object.keys(data.data).length == 0){
             let time_req = new Date();
              if (time_req.getHours() == 0 || time_req.getHours() == 1) console.log ('Keine Daten Empfangen (evtl. "Stunde 0" - BUG)');
              else console.log ('Keine Daten Empfangen');
              return;
          }
         
          else if (typeof components === 'undefined'){
              console.warn ("Keine components geladen => Neue Initialisierung in 15 Sekunden");
              clearSchedule(timer);
              re_init = true;
              re_init_timeout = setTimeout(function(){
                  re_init = false;
                  init();
              },15000);
      
              return;
          }
          else if (typeof stations_list === 'undefined'){
              console.warn ("Keine Stationsliste geladen => Neue Initialisierung in 15 Sekunden");
              re_init = true;
              re_init_timeout = setTimeout(function(){
                  re_init = false;
                  init();
              },15000);
              return;
          }
      
          if (!existsObject(dp_path + station_code)){
              if (debug) console.warn("not exist => " +  stations_list.data[data.request.station][2]);
              createBaseFolder(dp_path + station_code, "folder", stations_list.data[data.request.station][2]);
          }
          
          var measure_set = data.data[data.request.station][data.request.datetime_from];
      
          for (let i = 3 ; i < measure_set.length; i++) {
          
              var id = dp_path + station_code + "." + components[measure_set[i][0]][1];
              if (debug) console.log ("ID: " + id);
              
              // Roh-Wert anlegen/speichern
              existsState(id, (err, isExists) => {
                  var idwork = dp_path + station_code + "." + components[measure_set[i][0]][1];
                  if (debug){
                      console.log ("IDwork: " + idwork);
                      console.log ("initval: " + measure_set[i][1]);
                      console.log ("Name: " + components[measure_set[i][0]][4] + "(" + components[measure_set[i][0]][1] + ")");
                      console.log ("unit: " + components[measure_set[i][0]][3]);
                  }
                  if (err) console.error (err);
              
                  if (isExists) {
                      if (debug) console.log ("Exists writing new value");
                      setState(idwork,  measure_set[i][1], true);
                  }
              
                  else{
                      if (debug) console.log ("Not Exists - creating State");
                      createState(idwork, measure_set[i][1], { name: components[measure_set[i][0]][4] + " (" + components[measure_set[i][0]][2] + ")", unit: components[measure_set[i][0]][3], type: "number", role: "value", read: true, write: true} , () => { log('Dp '+ idwork + ' erstellt!'); });
                  }
              });
      
              // Qualitätsindex anlegen/speichern gerundet
              let id_index = id + "_index";
              existsState(id_index, (err, isExists) => {
                  let id_index_work = id_index;
                  if (debug){
                      console.log ("ID_index_work: " + id_index_work);
                      console.log ("initval: " + measure_set[i][2]);
                      console.log ("Name: Qualitätsindex " + components[measure_set[i][0]][4]);
                  }
      
                  if (err) console.error (err);
      
                  if (isExists) {
                      if (debug) console.log ("Exists writing new value");
                      setState(id_index_work,  measure_set[i][2], true);
                  }
              
                  else{
                      if (debug) console.log ("Not Exists - creating State");
                      createState(id_index_work, measure_set[i][2], { name: "Qualitätsindex " + components[measure_set[i][0]][4], type: "number", role: "indicator", read: true, write: true} , () => { log('Dp '+ id_index_work + ' erstellt!'); });
                  }
              });
      
              // Roh-Wert Qualitätsindex anlegen/speichern gerundet
              let id_index_val = id + "_index_val";
              existsState(id_index_val, (err, isExists) => {
                  let id_index_val_work = id_index_val;
                  if (debug){
                      console.log ("IDwork: " + id_index_val_work);
                      console.log ("initval: " + measure_set[i][3]);
                      console.log ("Name: Qualitätsindex (roh)" + components[measure_set[i][0]][4]);
                  }
      
                  if (err) console.error (err);
      
                  if (isExists) {
                      if (debug) console.log ("Exists writing new value");
                      setState(id_index_val_work,  parseFloat(measure_set[i][3]), true);
                  }
              
                  else{
                      if (debug) console.log ("Not Exists - creating State");
                      createState(id_index_val_work, parseFloat(measure_set[i][3]), { name: "Qualitätsindex " + components[measure_set[i][0]][4] + " (roh)", type: "number", role: "indicator", read: true, write: true} , () => { log('Dp '+ id_index_val_work + ' erstellt!'); });
                  }
      
              });
          }
      
          // timestamp
          let id_ts = dp_path + station_code + ".ts";
          existsState(id_ts, (err, isExists) => {
              let id_ts_work = id_ts;
              if (debug){
                  console.log ("IDwork: " + id_ts);
                  console.log ("initval: " + measure_set[0]);
              }
      
              if (err) console.error (err);
      
                  let ts = new Date(measure_set[0]+"Z");
                  let string_ts = ts.getDate()+ "." + (ts.getMonth()+1) + "." + ts.getFullYear() + " " + ts.getHours() + ":" + (ts.getMinutes() < 10 ? "0" + ts.getMinutes() : ts.getMinutes());
      
              if (isExists) {
                      if (debug) console.log ("Exists writing new value");
                      setState(id_ts_work,  string_ts, true);
              }
              else {
                  if (debug) console.log ("Not Exists - creating State");
            
                  createState(id_ts, string_ts, { name: "Ende der Messung", type: "string", role: "value", read: true, write: true} , () => { log('Dp '+ id_ts + ' erstellt!'); });
              }
          });
      
      }
      onStop (() => {
          clearSchedule(timer);
          clearTimeout(re_init_timeout);
      });
      
      async function init(){
          stations_list = await get_stations();
          components = await get_components();
          stations.forEach (get_data); // init für sofortige Datenverfügbarkeit
      }
      
      init();
      
      // timer um */10
      timer = schedule({minute: [10]}, () => {
          stations.forEach (get_data);
      });
      
      posted in Skripten / Logik
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @SBorg
      FIX ist wahrscheinlich

      Zeile 1320 PREDP in PRE_DP ändern

      Richtig:

      --data 'from(bucket: "'${INFLUX_BUCKET}'") |> range(start: '${FLUXSTART}', stop: '${FLUXENDE}') |> filter(fn: (r) => r._measurement == "'${PRE_DP}'.Regen_Tag" and r._field == "value") |> aggregateWindow(every: 1d, fn: max) |> sum()')
      
       ./wetterstation.sh --metsommer
      
       Daten vom 01.06.2023 bis 31.08.2023 wurden ermittelt...
      
               Ø-Temperatur: 19.47 °C
               Regenmenge  : 0 l/m²
      
      
      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Vorlage] Luftqualitätswerte abrufen

      @siggi0904

      v2.8 online
      Änderung => Daten werden mit ack=true gespeichert

      posted in Skripten / Logik
      Boronsbruder
      Boronsbruder
    • RE: VIS editor Sprache und Darstellung

      @skvarel
      Ich weiß, ich weiß... hab ich auch zu oft in meinen Skripts...
      Aber Lösung ist ja schon in Arbeit 👍

      posted in ioBroker Allgemein
      Boronsbruder
      Boronsbruder
    • RE: Test Adapter TrashSchedule

      Es gibt Probleme mit Version 0.0.7 (siehe hier)!

      Die Version setzt die Übersetzungen im Vis Editor ausser Kraft und die Überschriften zeigen nur noch die Systemnamen!

      Ein Issue wurde bei Git-Hub schon von einem User erstellt

      Edit:

      Die Version 0.0.8 wurde veröffentlicht! Dort ist der Fehler behoben!

      posted in Tester
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @rene55
      Adapter kann ich nicht.
      Skripten ein bischen, deswegen hab ich für euch/uns Daten-Fetischisten mal mit nem Skript angefangen:

      // Luftqualität v1
      
      // User Einstellungen
      
      const stations = ["DEBW019"]; // Stationen, können durch Komma getrennt werden z.B. ["DEBW019", "DEBY007"]
      const datenpunkt_pre ="0_userdata.0" // => wird in 0_userdata.0.Luftqualität gespeichert
      const debug = false;
      //  Abfrage findet um **:05 und **:10 stündlich statt (um fehlende Daten eventl. nachzufüllen). Die Daten werden sowieso nur stündlich von der letzten Stunde zur Verfügung gestellt...
      
      // Datenverarbeitung 
      
      var dp_path = datenpunkt_pre + ".Luftqualität.";
      var timer;
      var components;
      var stations_list;
      
      const fetch = require('node-fetch');
      
      function createBaseFolder(ID, type, name)
      {
      /** geklaut bei grrfield
       * Erstellt Basisfolder und stellt den richtigen Typ ein
       * @param   {string}    ID          ID des Folders
       * @param   {any}       type        Typ des Folders
       * @param   {string}    [name]      (optional) Name des Folders
       */  
      
          createState(ID, function() {
              let obj=getObject(ID);
              obj.type=type;
              if(name != undefined) obj.common.name=name;
              obj.common.role='';
              setObject(ID, obj);
          });
      }
      
      const get_stations = async () => {
          const url_stations = "https://umweltbundesamt.api.proxy.bund.dev/api/air_data/v3/stations/json?lang=de";
          var stations_json = fetch(url_stations)
              .then(response => response.json())
              .then(data => {
                  //if (debug) console.log(data);
                  return data})
              .catch ((err) => {
              console.error("failed fetch " + err);
              
          }
          );
          return stations_json;
      }
      
      const send_request = async (station_code) => {
              const d = new Date();
      
      let hour = d.getHours()-1;
      let date = d.getFullYear + "-" + d.getMonth + "-" + d.getDay;
      
              const url_server = "https://umweltbundesamt.api.proxy.bund.dev/api/air_data/v3/airquality/json?date_from=" + date + "&time_from=" + hour + "&date_to=" +date +"&time_to=" + (hour +1) + " &station=" + station_code + "&lang=de";
              var request = fetch(url_server)
              .then(response => response.json())
              .then(data => {
                  if (debug) console.log(data);
                  return data})
              .catch ((err) => {
              console.error("failed fetch " + err);
        
          }
          );
          return request;
      
      };
      
      const get_components = async () => {
              var list = fetch("https://umweltbundesamt.api.proxy.bund.dev/api/air_data/v3/components/json?lang=de&index=id")
              .then(response => response.json())
              .then(data => {
                  if (debug) console.log(data);
                  return data})
              .catch ((err) => {
              console.error("failed fetch " + err);
              
          }
          );
          return list;
      };
      
      async function get_data (station_code) {
            
          var data = await send_request(station_code);
      
          if (!existsObject(dp_path + station_code)){
              if (debug) console.warn("not exist => " +  stations_list.data[data.request.station][2]);
              createBaseFolder(dp_path + station_code, "folder", stations_list.data[data.request.station][2]);
          }
          var measure_set = data.data[data.request.station][data.request.datetime_from];
          
          for (let i = 3 ; i < measure_set.length; i++) {
          
              var id = dp_path + station_code + "." + components[measure_set[i][0]][1];
              if (debug) console.log ("ID: " + id);
              existsState(id, (err, isExists) => {
                  var idwork = dp_path + station_code + "." + components[measure_set[i][0]][1];
                  if (debug){
                      console.log ("IDwork: " + idwork);
                      console.log ("initval: " + measure_set[i][1]);
                      console.log ("Name: " + components[measure_set[i][0]][4] + "(" + components[measure_set[i][0]][1] + ")");
                      console.log ("unit: " + components[measure_set[i][0]][3]);
                  }
                  if (err) console.error (err);
              
                  if (isExists) {
                      if (debug) console.log ("Exists writing new value");
                      setState(idwork,  measure_set[i][1]);
                  }
              
                  else{
                      if (debug) console.log ("Not Exists - creating State");
                      createState(idwork, measure_set[i][1], { name: components[measure_set[i][0]][4] + " (" + components[measure_set[i][0]][2] + ")", unit: components[measure_set[i][0]][3], type: "number", role: "value", read: true, write: true} , () => { log('Dp '+ idwork + ' erstellt!'); });
                  }
              });
          }
      }
      onStop (() => {
          clearSchedule(timer);
      });
      async function init(){
          stations_list = await get_stations();
          components = await get_components();
          stations.forEach (get_data); // init für sofortige Datenverfügbarkeit
      
          // timer um */5 und */10
          timer = schedule({minute: [5,10]}, () => {
          stations.forEach (get_data);
      });
      }
      
      init();
      

      Funktion:
      auf der SEITE des Umwelbundesamtes die StationsID raussuchen
      582e07dc-ceb1-4d47-8e50-73147c3d7d8b-grafik.png
      Es können auch mehrere Stationen durch Komma getrennt im Skript eingetragen werden.
      Dann werden die Daten (letzter Stündlicher Mittelwert) unter dem eingestellten Datenpunkt um **:05 und **:10 gespeichert.

      f026f669-f3ef-431f-a141-8cc9ae77705a-grafik.png

      Ich plane noch die "Airquality indexes" hinzuzufügen.

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: Test Adapter Husqvarna Automower v0.3.x

      @opossum @Kaschi68
      Das liegt daran, dass es 2 verschiedene Arten gibt, wie die Daten übertragen werden:

      1. Der Websocket:
        Hier wird eine Verbindung aufgebaut und er der Husqvarna-Server sendet die Paket mit den Daten an den Adapter.
        Daten wie z.B. die "Totals" sind hier nicht enthalten.
      2. Die Api:
        Die Daten müssen vom Adapter gehohlt werden und werden nicht geliefert.
        Hier sind die Daten wie die Totals enthalten, AAABER die Anzahl der möglichen Abrufe ist beschränkt.
      Limits
      
      The following limitations currently apply to the Automower® Connect API:
      
          Max 1 request per second and appKey.
          Max 10 000 request per month and appKey.
      
      Any additional requests above these limits will be throttled.
      

      Im Adapter von @ice987 werden, meines Wissens nach, die Daten beim Start per API abgerufen und dann mit den Daten, die der Websocket liefert, aktualisiert.

      Eine Möglichkeit wäre, dass @ice987 eine regelmäßige API-Abfrage einbaut. Die muss aber zeitlich beschränkt sein, da sie sonst zu einer Drosselung führt.

      Am besten auf GitHub eine Anfrage auf Erweiterung stellen?

      posted in Tester
      Boronsbruder
      Boronsbruder
    • RE: Meldungen seit controller v3.3 zu falschem Datentyp

      @apollon77 said in Meldungen seit controller v3.3 zu falschem Datentyp:

      @boronsbruder Warte noch paar Stunden, das Repo wird gerade verschoben. Dann bitte dort anlegen

      So hier der Issue

      https://github.com/iobroker-community-adapters/iobroker.kodi/issues/1

      ist aber nicht zu kodi.0.seek der ist ja schon gefixed.
      sondern zu:

      State value to set for "kodi.0.info.audio_channels" has to be type "number" but received type "string"
      State value to set for "kodi.0.info.audio_bitrate" has to be type "string" but received type "number"
      
      State value to set for "kodi.1.info.genre" has to be type "string" but received type "boolean"
      

      letzterer erscheint nur beim Adapter-Neustart

      Boronsbruder created this issue in iobroker-community-adapters/iobroker.kodi

      closed State Value -> Wrong Type #1

      posted in ioBroker Allgemein
      Boronsbruder
      Boronsbruder
    • RE: [Vorlage] Luftqualitätswerte abrufen

      Version 2.3 eingestellt

      // v2.2 - fix Clear Timeouts und Schedules beim Stoppen
      // v2.3 - fix Fehlerbearbeitung

      !!! Sollte das Skript vor den Fixes nicht mehr gestoppt werden können (tritt normalerweise nur bei einem Fehler beim Abrufen der Daten auf), dann bitte die Javascript-Instanz neustarten: Dann werden alle nicht gelöschten Timeouts gestoppt

      posted in Skripten / Logik
      Boronsbruder
      Boronsbruder

    Latest posts made by Boronsbruder

    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @Shakira1972

      @sborg sagte in [Linux Shell-Skript] WLAN-Wetterstation:

      Da ich einen gedanklichen Fehler bei der V3.5.0 bei der Erhöhung der Sensoranzahl auf 16 Stück beim DP100 hatte:

      Neues Bugfix-Release des Wetterstation WLAN-Skriptes auf GitHub V3.5.1

      • ~ Fix falsche Messwerte bei DP100 Sensor Nr.1 wenn mehr als 10 Sensoren vorhanden sind

      Wie immer zu finden im GitHub


      Update-Routine von Vorgängerversion:

      • aktuellen WS-Updater nutzen

        wget -O ws_updater.sh https://raw.githubusercontent.com/SBorg2014/WLAN-Wetterstation/master/ws_updater.sh
      • ./ws_updater.sh im Installationsverzeichnis ausführen
      • Menüpunkt "4" wählen und die Fragen beantworten

      Update enthält lediglich einen Fix für mehr als 9 Stück DP100 Sensoren, ist also optional.

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @negalein
      Jo, die Zeile 2035 der wetterstation.sub in

      local MESSAGE=$(wget -qO- --tries=1 --timeout=15 "${AWEKAS_URL}" --no-check-certificate)
      

      ändern.

      Edith: Und natürlich den Dienst neustarten...

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @negalein

      Es kann sein, dass die Awekasbox Zertifikatsfehler ignoriert

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @negalein
      Nur mal zur Info.
      Laut der Awekas-Seite hat mein Skript (V3.4.0) auch seit heute morgen 09:53 keine Daten mehr empfangen...

      Sorry, der teil hinter wget muss in Anführungzeichen

      wget "https://ws.awekas.at/weatherstation/updateweatherstation.php?ID=xxxxxxxxxx&PASSWORD=xxxxxxxxxxx&dateutc=2025-07-12+12:44:06&tempf=64.0&humidity=71&winddir=51&uv=0&windspeedmph=1.3&absbaromin=28.394&baromin=29.832&solarradiation=73.28&windgustmph=2.2&dailyrainin=0.020&indoortempf=75.9&indoorhumidity=77&softwaretype=IOWS"
      
      

      Bei mir kommt im Browser als auch über wget ein Zertifikatsfehler:

      b64f9ab1-d278-46b7-ae2b-e3487981b703-grafik.png

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @negalein
      in der Konsole.

      Das entspricht dann dem Aufruf den du auch über den Browser machst

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @negalein
      setz mal wget davor

      wget https://ws.awekas.at/weatherstation/updateweatherstation.php?ID=xxxxxxxxxx&PASSWORD=xxxxxxxxxxx&dateutc=2025-07-12+12:44:06&tempf=64.0&humidity=71&winddir=51&uv=0&windspeedmph=1.3&absbaromin=28.394&baromin=29.832&solarradiation=73.28&windgustmph=2.2&dailyrainin=0.020&indoortempf=75.9&indoorhumidity=77&softwaretype=IOWS
      
      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: Neuer Robonect HX Adapter

      @iobrokermike
      Hast du den Robonect-Adapter auf "DEBUG" laufen?
      Bei mir kommen nur hin und wieder mal Warnungen, dass kein Ping möglich war:

      2025-07-11 07:29:26.818 - warn: robonect.0 (1998307) No connection to lawn mower (Not able to ping it). Check network connection.
      posted in ioBroker Allgemein
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @icebear
      Siehe oben 😄

      Ich hab z.B. ein WH32P (ehem WH32B?) für den Luftdruck und den Fühler am GW2000 abgetrennt, weil das GW draussen unter dem Vordach hängt.

      Zitat von der Ecowitt-Seite:

      
      The WN32 sensor serves as your primary source for outdoor temperature and humidity readings.
      
      When used with a multi-sensor array, the WN32 will override the built-in temperature and humidity readings of other devices (such as WN67, WS69, WS80, WS90, WittBoy models). It’s ideal for separating your temperature and humidity data from the main array. However, if you need an additional set of readings, consider using the WN31 instead.
      
      Only one WN32 sensor or multi-sensor array can be set as the primary device for reporting temperature and humidity to online services via the gateway or console.
      This cannot be used as an additional sensor; please opt for the WN31 multi-channel sensor.
      Make sure to enable the T&H sensor option on your console or gateway before the readings are recorded.
      `
      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @icebear
      Also selbst das sollte nicht das Problem sein.
      Der Sensor wird ja vom Gateway erkannt.
      Die Station sendet dann die Daten als

      rainratein=0.000&eventrainin=0.000&hourlyrainin=0.000&dailyrainin=0.000&weeklyrainin=0.650&monthlyrainin=1.063&yearlyrainin=11.197&totalrainin=11.197
      

      Nur für die Zusatzsensoren, wie z.B. Feuchte muss ja ausgefiltert werden, welche Sensor-Nummer zu welchen Daten gehört und wieviele vorhanden sind.
      Die Basis-Daten wie Regen, Aussen-Luftfeuchte, -Temperatur, Luftdruck, Wind, Lichteinstrahlung und UV sind alles "SINGLE"-Werte

      278876a7-b256-490f-a801-7e898a422ffe-grafik.png

      Du musst dann einstellen, welche Daten im Gateway genutzt werden sollen:
      1b2d335d-9847-4e7f-900d-e09efa97ca1f-grafik.png

      Der WN32 ist eigentlich unnötig, da das WS80 ja die Aussentemperatur und Luftfeucht misst.

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    • RE: [Linux Shell-Skript] WLAN-Wetterstation

      @negalein
      Reines Gateway und lieber dazu ein Tablet mit einer schönen Vis oder Grafana 😉
      Ich hab hier das GW2000 (Lan und Wifi) und ein GW1100 (nur Wlan - ist nur für meine Bewässerung) am laufen.
      Zur Stabilität bei Stromausfall kann ich nix sagen da das GW2000 über ein POE-Splitter am Switch mit USV hängt.

      posted in Praktische Anwendungen (Showcase)
      Boronsbruder
      Boronsbruder
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo