Navigation

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

    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

    D
    • Profile
    • Following 0
    • Followers 0
    • Topics 5
    • Posts 26
    • Best 1
    • Groups 1

    Dschaedl

    @Dschaedl

    1
    Reputation
    80
    Profile views
    26
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Dschaedl Follow
    Starter

    Best posts made by Dschaedl

    • Skript für DarkSky Wetterdaten

      Hallo zusammen

      Da WU keine Daten mehr liefert (zumindest gratis nicht) habe ich mir heute ein Skript zum auslesen der DarkSky Daten gebaut (quick&dirty).
      Wenn's jemand gebrauchen kann, nur zu.
      Falls ich mal Zeit finde werde ich evtl. einen Adapter daraus machen - oder jemand von euch übernimmt 😉

      var request = require('request');
      var moment = require('moment');
      
      extractDarkSkyData(null);
      
      
      // Trigger
      schedule("*/5 * * * *", function (data) {
          extractDarkSkyData(data);
      });
      
      function extractDarkSkyData(data) {
          log("calling Darksky Wetter URL", 'info');
          //https://api.darksky.net/forecast/2cd....997/47.2694981,8.6569669?units=si&lang=de
          request('https://api.darksky.net/forecast/<yourApiKey>/<yourCoordinates>?units=si&lang=de', 
                   {json:true}, function (error, response, body) {
              log("looking for DarkSky data...", 'info');
              if (!error && response.statusCode == 200) {
                  log ("error:" + error);            
      
                  log ("basics", 'info');
                  setIfDifferent('darksky.latitude', "Latitude", body.latitude, 0, "°", true);
                  setIfDifferent('darksky.longitude', "Longitude", body.longitude, 0, "°", true);
                  setIfDifferent('darksky.timezone', "Timezone", body.timezone, "n/a", "", false);
                  
                  log ("current", 'info');
                  setIfDifferent('darksky.currently.time', "time (unix, local)", body.currently.time, 0, " unix", true);
                  setIfDifferent('darksky.currently.summary', "Weather", body.currently.summary, "n/a", "", false);
                  setIfDifferent('darksky.currently.icon', "", body.currently.icon, "", "", false);
                  setIfDifferent('darksky.currently.precipIntensity', "Niederschlag", body.currently.precipIntensity, 0, "mm/h", true);
                  setIfDifferent('darksky.currently.precipProbability', "Niederschlag Wahrscheinlichkeit", body.currently.precipProbability *100, 0, "%", true);
                  setIfDifferent('darksky.currently.precipType', "Niederschlag Typ", body.currently.precipType, "", "", false);
                  setIfDifferent('darksky.currently.temperature', "Temperatur", body.currently.temperature, 0, "°C", true);
                  setIfDifferent('darksky.currently.apparentTemperature', "Temperatur (Windchill)", body.currently.apparentTemperature, 0, "°C", true);
                  setIfDifferent('darksky.currently.dewPoint', "Taupunkt", body.currently.dewPoint, 0, "°C", true);
                  setIfDifferent('darksky.currently.humidity', "Luftfeuchtigkeit", body.currently.humidity *100, 0, "%", true);
                  setIfDifferent('darksky.currently.pressure', "Luftdruck", body.currently.pressure, 0, "hPa", true);
                  setIfDifferent('darksky.currently.windSpeed', "Windgeschwindigkeit", body.currently.windSpeed, 0, "m/s", true);
                  setIfDifferent('darksky.currently.windGust', "Boen", body.currently.windGust, 0, "m/s", true);
                  setIfDifferent('darksky.currently.windBearing', "Windrichtung", body.currently.windBearing, 0, "°", true);
                  setIfDifferent('darksky.currently.cloudCover', "Bedeckungsgrad", body.currently.cloudCover *100, 0, "%", true);
                  setIfDifferent('darksky.currently.uvIndex', "UV Index", body.currently.uvIndex, 0, "", true);
                  setIfDifferent('darksky.currently.visibility', "Sichtweite", body.currently.visibility, 0, "km", true);
                  setIfDifferent('darksky.currently.ozone', "Ozon", body.currently.ozone, 0, "DU", true);
                  
                  
                  var obsDate = moment.unix(body.currently.time);
                  var now = moment();
                  var age = moment.duration(now.diff(obsDate));
                  log("age in Seconds: " + age.asSeconds(), 'info');
                      
                  setIfDifferent('darksky.currently.age', 'current_age', age.asSeconds(), 0, 's', true);
                  setIfDifferent('darksky.currently.time2', 'Zeit', obsDate.format("DD.MM.YYYY HH:mm:ss ZZ"), "", '', false);
                  
                  log ("hourly", 'info');
                  var i=0;
                  body.hourly.data.forEach(function(value, index, array){
                      var obsDate = moment.unix(value.time);
                      var now = moment();
                      var age = moment.duration(now.diff(obsDate));
                      log("age in Seconds: " + age.asSeconds(), 'info');
      
                      //I'm only interested in future data. If you want all data, remove the 'if'
                      if (age < 0) {
                          log("future entry. store it", 'debug');
                          setIfDifferent('darksky.hourly.'+i+'.time', "time (unix, local)", value.time, 0, "unix", true);
                          setIfDifferent('darksky.hourly.'+i+'.summary', "Weather", value.summary, "n/a", "", false);
                          setIfDifferent('darksky.hourly.'+i+'.icon', "", value.icon, "", "", false);
                          setIfDifferent('darksky.hourly.'+i+'.precipIntensity', "Niederschlag", value.precipIntensity, 0, "mm/h", true);
                          setIfDifferent('darksky.hourly.'+i+'.precipProbability', "Niederschlag Wahrscheinlichkeit", value.precipProbability *100, 0, "%", true);
                          setIfDifferent('darksky.hourly.'+i+'.precipType', "Niederschlag Typ", value.precipType, "", "", false);
                          setIfDifferent('darksky.hourly.'+i+'.temperature', "Temperatur", value.temperature, 0, "°C", true);
                          setIfDifferent('darksky.hourly.'+i+'.apparentTemperature', "Temperatur (Windchill)", value.apparentTemperature, 0, "°C", true);
                          setIfDifferent('darksky.hourly.'+i+'.dewPoint', "Taupunkt", value.dewPoint, 0, "°C", true);
                          setIfDifferent('darksky.hourly.'+i+'.humidity', "Luftfeuchtigkeit", value.humidity *100, 0, "%", true);
                          setIfDifferent('darksky.hourly.'+i+'.pressure', "Luftdruck", value.pressure, 0, "hPa", true);
                          setIfDifferent('darksky.hourly.'+i+'.windSpeed', "Windgeschwindigkeit", value.windSpeed, 0, "m/s", true);
                          setIfDifferent('darksky.hourly.'+i+'.windGust', "Boen", value.windGust, 0, "m/s", true);
                          setIfDifferent('darksky.hourly.'+i+'.windBearing', "Windrichtung", value.windBearing, 0, "°", true);
                          setIfDifferent('darksky.hourly.'+i+'.cloudCover', "Bedeckungsgrad", value.cloudCover *100, 0, "%", true);
                          setIfDifferent('darksky.hourly.'+i+'.uvIndex', "UV Index", value.uvIndex, 0, "", true);
                          setIfDifferent('darksky.hourly.'+i+'.visibility', "Sichtweite", value.visibility, 0, "km", true);
                          setIfDifferent('darksky.hourly.'+i+'.ozone', "Ozon", value.ozone, 0, "DU", true);
                          setIfDifferent('darksky.hourly.'+i+'.age', 'current_age', age.asSeconds(), 0, 's', true);
                          setIfDifferent('darksky.hourly.'+i+'.time2', 'Zeit', obsDate.format("DD.MM.YYYY HH:mm:ss ZZ"), "", '', false);
                          i++
                      } else {
                          log("past entry - not stored");
                      }
                  });
                  
                  log ("daily", 'info');
                  i=0;
                  body.daily.data.forEach(function(value, index, array){
                      var obsDate = moment.unix(value.time);
                      var now = moment();
                      var age = moment.duration(now.diff(obsDate));
                      log("age in Seconds: " + age.asSeconds(), 'info');
                      
                      if (age < 0) {
                          log("future entry. store it", 'debug');
                          setIfDifferent('darksky.daily.'+i+'.time', "time (unix, local)", value.time, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.summary', "Weather", value.summary, "n/a", "", false);
                          setIfDifferent('darksky.daily.'+i+'.icon', "", value.icon, "", "", false);
                          setIfDifferent('darksky.daily.'+i+'.sunriseTime', "Sonnenaufgang", value.sunriseTime, "", "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.sunsetTime', "Sonnenuntergang", value.sunsetTime, "", "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.moonPhase', "Mondphase", value.moonPhase *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensity', "Niederschlag", value.precipIntensity, 0, "mm/h", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensityMax', "Niederschlag MAX", value.precipIntensityMax, 0, "mm/h", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensityMaxTime', "Niederschlag MAX Zeit", value.precipIntensityMaxTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensity', "Niederschlag", value.precipIntensity, 0, "mm/h", true);
                          setIfDifferent('darksky.daily.'+i+'.precipProbability', "Niederschlag Wahrscheinlichkeit", value.precipProbability *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.precipType', "Niederschlag Typ", value.precipType, "", "", false);
                          setIfDifferent('darksky.daily.'+i+'.temperatureHigh', "Temperatur High", value.temperatureHigh, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureHighTime', "Temperatur High Zeit", value.temperatureHighTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureLow', "Temperatur Low", value.temperatureLow, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureLowTime', "Temperatur Low Zeit", value.temperatureLowTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureHigh', "Temperatur High (Windchill)", value.apparentTemperatureHigh, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureHighTime', "Temperatur (Windchill) High Zeit", value.apparentTemperatureHighTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureLow', "Temperatur Low (Windchill)", value.apparentTemperatureLow, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureLowTime', "Temperatur (windchill) Low Zeit", value.apparentTemperatureLowTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.dewPoint', "Taupunkt", value.dewPoint, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.humidity', "Luftfeuchtigkeit", value.humidity *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.pressure', "Luftdruck", value.pressure, 0, "hPa", true);
                          setIfDifferent('darksky.daily.'+i+'.windSpeed', "Windgeschwindigkeit", value.windSpeed, 0, "m/s", true);
                          setIfDifferent('darksky.daily.'+i+'.windGust', "Boen", value.windGust, 0, "m/s", true);
                          setIfDifferent('darksky.daily.'+i+'.windGustTime', "Boen Zeit", value.windGustTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.windBearing', "Windrichtung", value.windBearing, 0, "°", true);
                          setIfDifferent('darksky.daily.'+i+'.cloudCover', "Bedeckungsgrad", value.cloudCover *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.uvIndex', "UV Index", value.uvIndex, 0, "", true);
                          setIfDifferent('darksky.daily.'+i+'.uvIndexTime', "UV Index Zeit", value.uvIndexTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.visibility', "Sichtweite", value.visibility, 0, "km", true);
                          setIfDifferent('darksky.daily.'+i+'.ozone', "Ozon", value.ozone, 0, "DU", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMax', "Temperatur MAX", value.temperatureMax, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMaxTime', "Temperatur MAX Zeit", value.temperatureMaxTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMin', "Temperatur MIN", value.temperatureMin, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMinTime', "Temperatur MIN Zeit", value.temperatureMinTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMax', "Temperatur MAX (Windchill)", value.apparentTemperatureMax, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMaxTime', "Temperatur (Windchill) MAX Zeit", value.apparentTemperatureMaxTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMin', "Temperatur MIN (Windchill)", value.apparentTemperatureMin, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMinTime', "Temperatur (windchill) MAX Zeit", value.apparentTemperatureMinTime, 0, "unix", true);
      
                          setIfDifferent('darksky.daily.'+i+'.age', 'current_age', age.asSeconds(), 0, 's', true);
                          setIfDifferent('darksky.daily.'+i+'.time2', 'Zeit', obsDate.format("DD.MM.YYYY HH:mm:ss ZZ"), "", '', false);
                          i++
                      } else {
                          log("past entry - not stored");
                      }
                  });                                
              } else {
                  log ("error:" + error.stack, 'error');
              }
              log("END Darksky Wetter data...", 'info');
          });
      }
      
      
      function setIfDifferent(id, name, value, initVal, unit, isNumber) {
          var oldVal = getState(id);
          if (oldVal.notExist) {
              createState(id, {name: name, initialValue: initVal, unit: unit}, function(){
              log("new State created: " + id + " ->" + name);
              setIfDifferent(id, name, value, initVal, unit);
              });
          }
          else if (oldVal.val != value) {
              if (isNumber) {
                  setState(id, parseFloat(value));
              } else {
                  setState(id, value);
              }
              log("new Value set for " + name + " (" + id + ")" + ": " + value + " / old: " + oldVal.val, 'info');
          }
      }
      

      viele Grüsse
      Daniel

      posted in Skripten / Logik
      D
      Dschaedl

    Latest posts made by Dschaedl

    • RE: Skript für DarkSky Wetterdaten

      Hallo Martin

      Lass diese Option einfach mal weg. die braucht es eigentlich gar nicht:
      also

      ...
      request('https://api.darksky.net/forecast/<yourApiKey>/<yourCoordinates>?units=si&lang=de', 
                   {json:true}, function (error, response, body) {
      ...
      
      

      viele Grüsse
      Daniel

      P.S.
      Ich nehme sie oben auch raus.

      posted in Skripten / Logik
      D
      Dschaedl
    • Skript für DarkSky Wetterdaten

      Hallo zusammen

      Da WU keine Daten mehr liefert (zumindest gratis nicht) habe ich mir heute ein Skript zum auslesen der DarkSky Daten gebaut (quick&dirty).
      Wenn's jemand gebrauchen kann, nur zu.
      Falls ich mal Zeit finde werde ich evtl. einen Adapter daraus machen - oder jemand von euch übernimmt 😉

      var request = require('request');
      var moment = require('moment');
      
      extractDarkSkyData(null);
      
      
      // Trigger
      schedule("*/5 * * * *", function (data) {
          extractDarkSkyData(data);
      });
      
      function extractDarkSkyData(data) {
          log("calling Darksky Wetter URL", 'info');
          //https://api.darksky.net/forecast/2cd....997/47.2694981,8.6569669?units=si&lang=de
          request('https://api.darksky.net/forecast/<yourApiKey>/<yourCoordinates>?units=si&lang=de', 
                   {json:true}, function (error, response, body) {
              log("looking for DarkSky data...", 'info');
              if (!error && response.statusCode == 200) {
                  log ("error:" + error);            
      
                  log ("basics", 'info');
                  setIfDifferent('darksky.latitude', "Latitude", body.latitude, 0, "°", true);
                  setIfDifferent('darksky.longitude', "Longitude", body.longitude, 0, "°", true);
                  setIfDifferent('darksky.timezone', "Timezone", body.timezone, "n/a", "", false);
                  
                  log ("current", 'info');
                  setIfDifferent('darksky.currently.time', "time (unix, local)", body.currently.time, 0, " unix", true);
                  setIfDifferent('darksky.currently.summary', "Weather", body.currently.summary, "n/a", "", false);
                  setIfDifferent('darksky.currently.icon', "", body.currently.icon, "", "", false);
                  setIfDifferent('darksky.currently.precipIntensity', "Niederschlag", body.currently.precipIntensity, 0, "mm/h", true);
                  setIfDifferent('darksky.currently.precipProbability', "Niederschlag Wahrscheinlichkeit", body.currently.precipProbability *100, 0, "%", true);
                  setIfDifferent('darksky.currently.precipType', "Niederschlag Typ", body.currently.precipType, "", "", false);
                  setIfDifferent('darksky.currently.temperature', "Temperatur", body.currently.temperature, 0, "°C", true);
                  setIfDifferent('darksky.currently.apparentTemperature', "Temperatur (Windchill)", body.currently.apparentTemperature, 0, "°C", true);
                  setIfDifferent('darksky.currently.dewPoint', "Taupunkt", body.currently.dewPoint, 0, "°C", true);
                  setIfDifferent('darksky.currently.humidity', "Luftfeuchtigkeit", body.currently.humidity *100, 0, "%", true);
                  setIfDifferent('darksky.currently.pressure', "Luftdruck", body.currently.pressure, 0, "hPa", true);
                  setIfDifferent('darksky.currently.windSpeed', "Windgeschwindigkeit", body.currently.windSpeed, 0, "m/s", true);
                  setIfDifferent('darksky.currently.windGust', "Boen", body.currently.windGust, 0, "m/s", true);
                  setIfDifferent('darksky.currently.windBearing', "Windrichtung", body.currently.windBearing, 0, "°", true);
                  setIfDifferent('darksky.currently.cloudCover', "Bedeckungsgrad", body.currently.cloudCover *100, 0, "%", true);
                  setIfDifferent('darksky.currently.uvIndex', "UV Index", body.currently.uvIndex, 0, "", true);
                  setIfDifferent('darksky.currently.visibility', "Sichtweite", body.currently.visibility, 0, "km", true);
                  setIfDifferent('darksky.currently.ozone', "Ozon", body.currently.ozone, 0, "DU", true);
                  
                  
                  var obsDate = moment.unix(body.currently.time);
                  var now = moment();
                  var age = moment.duration(now.diff(obsDate));
                  log("age in Seconds: " + age.asSeconds(), 'info');
                      
                  setIfDifferent('darksky.currently.age', 'current_age', age.asSeconds(), 0, 's', true);
                  setIfDifferent('darksky.currently.time2', 'Zeit', obsDate.format("DD.MM.YYYY HH:mm:ss ZZ"), "", '', false);
                  
                  log ("hourly", 'info');
                  var i=0;
                  body.hourly.data.forEach(function(value, index, array){
                      var obsDate = moment.unix(value.time);
                      var now = moment();
                      var age = moment.duration(now.diff(obsDate));
                      log("age in Seconds: " + age.asSeconds(), 'info');
      
                      //I'm only interested in future data. If you want all data, remove the 'if'
                      if (age < 0) {
                          log("future entry. store it", 'debug');
                          setIfDifferent('darksky.hourly.'+i+'.time', "time (unix, local)", value.time, 0, "unix", true);
                          setIfDifferent('darksky.hourly.'+i+'.summary', "Weather", value.summary, "n/a", "", false);
                          setIfDifferent('darksky.hourly.'+i+'.icon', "", value.icon, "", "", false);
                          setIfDifferent('darksky.hourly.'+i+'.precipIntensity', "Niederschlag", value.precipIntensity, 0, "mm/h", true);
                          setIfDifferent('darksky.hourly.'+i+'.precipProbability', "Niederschlag Wahrscheinlichkeit", value.precipProbability *100, 0, "%", true);
                          setIfDifferent('darksky.hourly.'+i+'.precipType', "Niederschlag Typ", value.precipType, "", "", false);
                          setIfDifferent('darksky.hourly.'+i+'.temperature', "Temperatur", value.temperature, 0, "°C", true);
                          setIfDifferent('darksky.hourly.'+i+'.apparentTemperature', "Temperatur (Windchill)", value.apparentTemperature, 0, "°C", true);
                          setIfDifferent('darksky.hourly.'+i+'.dewPoint', "Taupunkt", value.dewPoint, 0, "°C", true);
                          setIfDifferent('darksky.hourly.'+i+'.humidity', "Luftfeuchtigkeit", value.humidity *100, 0, "%", true);
                          setIfDifferent('darksky.hourly.'+i+'.pressure', "Luftdruck", value.pressure, 0, "hPa", true);
                          setIfDifferent('darksky.hourly.'+i+'.windSpeed', "Windgeschwindigkeit", value.windSpeed, 0, "m/s", true);
                          setIfDifferent('darksky.hourly.'+i+'.windGust', "Boen", value.windGust, 0, "m/s", true);
                          setIfDifferent('darksky.hourly.'+i+'.windBearing', "Windrichtung", value.windBearing, 0, "°", true);
                          setIfDifferent('darksky.hourly.'+i+'.cloudCover', "Bedeckungsgrad", value.cloudCover *100, 0, "%", true);
                          setIfDifferent('darksky.hourly.'+i+'.uvIndex', "UV Index", value.uvIndex, 0, "", true);
                          setIfDifferent('darksky.hourly.'+i+'.visibility', "Sichtweite", value.visibility, 0, "km", true);
                          setIfDifferent('darksky.hourly.'+i+'.ozone', "Ozon", value.ozone, 0, "DU", true);
                          setIfDifferent('darksky.hourly.'+i+'.age', 'current_age', age.asSeconds(), 0, 's', true);
                          setIfDifferent('darksky.hourly.'+i+'.time2', 'Zeit', obsDate.format("DD.MM.YYYY HH:mm:ss ZZ"), "", '', false);
                          i++
                      } else {
                          log("past entry - not stored");
                      }
                  });
                  
                  log ("daily", 'info');
                  i=0;
                  body.daily.data.forEach(function(value, index, array){
                      var obsDate = moment.unix(value.time);
                      var now = moment();
                      var age = moment.duration(now.diff(obsDate));
                      log("age in Seconds: " + age.asSeconds(), 'info');
                      
                      if (age < 0) {
                          log("future entry. store it", 'debug');
                          setIfDifferent('darksky.daily.'+i+'.time', "time (unix, local)", value.time, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.summary', "Weather", value.summary, "n/a", "", false);
                          setIfDifferent('darksky.daily.'+i+'.icon', "", value.icon, "", "", false);
                          setIfDifferent('darksky.daily.'+i+'.sunriseTime', "Sonnenaufgang", value.sunriseTime, "", "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.sunsetTime', "Sonnenuntergang", value.sunsetTime, "", "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.moonPhase', "Mondphase", value.moonPhase *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensity', "Niederschlag", value.precipIntensity, 0, "mm/h", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensityMax', "Niederschlag MAX", value.precipIntensityMax, 0, "mm/h", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensityMaxTime', "Niederschlag MAX Zeit", value.precipIntensityMaxTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.precipIntensity', "Niederschlag", value.precipIntensity, 0, "mm/h", true);
                          setIfDifferent('darksky.daily.'+i+'.precipProbability', "Niederschlag Wahrscheinlichkeit", value.precipProbability *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.precipType', "Niederschlag Typ", value.precipType, "", "", false);
                          setIfDifferent('darksky.daily.'+i+'.temperatureHigh', "Temperatur High", value.temperatureHigh, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureHighTime', "Temperatur High Zeit", value.temperatureHighTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureLow', "Temperatur Low", value.temperatureLow, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureLowTime', "Temperatur Low Zeit", value.temperatureLowTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureHigh', "Temperatur High (Windchill)", value.apparentTemperatureHigh, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureHighTime', "Temperatur (Windchill) High Zeit", value.apparentTemperatureHighTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureLow', "Temperatur Low (Windchill)", value.apparentTemperatureLow, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureLowTime', "Temperatur (windchill) Low Zeit", value.apparentTemperatureLowTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.dewPoint', "Taupunkt", value.dewPoint, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.humidity', "Luftfeuchtigkeit", value.humidity *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.pressure', "Luftdruck", value.pressure, 0, "hPa", true);
                          setIfDifferent('darksky.daily.'+i+'.windSpeed', "Windgeschwindigkeit", value.windSpeed, 0, "m/s", true);
                          setIfDifferent('darksky.daily.'+i+'.windGust', "Boen", value.windGust, 0, "m/s", true);
                          setIfDifferent('darksky.daily.'+i+'.windGustTime', "Boen Zeit", value.windGustTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.windBearing', "Windrichtung", value.windBearing, 0, "°", true);
                          setIfDifferent('darksky.daily.'+i+'.cloudCover', "Bedeckungsgrad", value.cloudCover *100, 0, "%", true);
                          setIfDifferent('darksky.daily.'+i+'.uvIndex', "UV Index", value.uvIndex, 0, "", true);
                          setIfDifferent('darksky.daily.'+i+'.uvIndexTime', "UV Index Zeit", value.uvIndexTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.visibility', "Sichtweite", value.visibility, 0, "km", true);
                          setIfDifferent('darksky.daily.'+i+'.ozone', "Ozon", value.ozone, 0, "DU", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMax', "Temperatur MAX", value.temperatureMax, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMaxTime', "Temperatur MAX Zeit", value.temperatureMaxTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMin', "Temperatur MIN", value.temperatureMin, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.temperatureMinTime', "Temperatur MIN Zeit", value.temperatureMinTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMax', "Temperatur MAX (Windchill)", value.apparentTemperatureMax, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMaxTime', "Temperatur (Windchill) MAX Zeit", value.apparentTemperatureMaxTime, 0, "unix", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMin', "Temperatur MIN (Windchill)", value.apparentTemperatureMin, 0, "°C", true);
                          setIfDifferent('darksky.daily.'+i+'.apparentTemperatureMinTime', "Temperatur (windchill) MAX Zeit", value.apparentTemperatureMinTime, 0, "unix", true);
      
                          setIfDifferent('darksky.daily.'+i+'.age', 'current_age', age.asSeconds(), 0, 's', true);
                          setIfDifferent('darksky.daily.'+i+'.time2', 'Zeit', obsDate.format("DD.MM.YYYY HH:mm:ss ZZ"), "", '', false);
                          i++
                      } else {
                          log("past entry - not stored");
                      }
                  });                                
              } else {
                  log ("error:" + error.stack, 'error');
              }
              log("END Darksky Wetter data...", 'info');
          });
      }
      
      
      function setIfDifferent(id, name, value, initVal, unit, isNumber) {
          var oldVal = getState(id);
          if (oldVal.notExist) {
              createState(id, {name: name, initialValue: initVal, unit: unit}, function(){
              log("new State created: " + id + " ->" + name);
              setIfDifferent(id, name, value, initVal, unit);
              });
          }
          else if (oldVal.val != value) {
              if (isNumber) {
                  setState(id, parseFloat(value));
              } else {
                  setState(id, value);
              }
              log("new Value set for " + name + " (" + id + ")" + ": " + value + " / old: " + oldVal.val, 'info');
          }
      }
      

      viele Grüsse
      Daniel

      posted in Skripten / Logik
      D
      Dschaedl
    • RE: Nginx und geofency

      Hi

      Ist wahrscheinlch wirklich trivial:

      Benutzername und Passwort im Geofency unter 'Webhook' -> 'Authentifizierung' setzen. fertig 😉

      Gruss

      Daniel

      posted in ioBroker Allgemein
      D
      Dschaedl
    • RE: Nginx und geofency

      gerne. hier meine config:

      # The ioBroker Geofency Server
      server {
              listen  8444 ; ## listen for ipv4; this line is default and implied
              server_name dschaedl.mooo.com;
      
              #SSL stuff
              ssl_certificate           /etc/nginx/ssl/dschaedl_mooo_com.pem;
              ssl_certificate_key       /etc/nginx/ssl/dschaedl_mooo_com.key;
              ssl on;
      
              location / {
                      #authentication
                      auth_basic              "Restricted";
                      auth_basic_user_file    /etc/nginx/ssl/htpasswd;
                      # you might also want to deny access based on IP here
                      #allow <ip-address>;
                      #deny all;
      
                      #Reverse Proxy
                      proxy_set_header        Host $host;
                      proxy_set_header        X-Real-IP $remote_addr;
                      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                      proxy_set_header        X-Forwarded-Proto $scheme;
                      # additional Headers for Websockets
                      proxy_http_version      1.1;
                      proxy_set_header        Upgrade $http_upgrade;
                      proxy_set_header        Connection "upgrade";
                      # local target to proxy to
                      proxy_pass              http://localhost:7999;
      
              }
      }</ip-address> 
      
      posted in ioBroker Allgemein
      D
      Dschaedl
    • RE: History Adpater (History vs. influxdb vs SQL)

      endlich habe ich etwas Zeit gefunden um mich um meine Wunschliste zu kümmern. Ich habe den SQL-Adapter als Vorlage genommen und erweitert:

      • mit "node-persist" werden alle gewählten Daten gecached und jeweils alle 10min lokal persistiert.

      • In Intervallen von X Minuten werden die gecachten Daten in die SQL Datenbank geschrieben (wenn diese erreichbar ist [1])

      • Zum Abrufen der Historieserten Daten gibt's dann zwei Vairanten

      • DB ist verfügbar: Daten werden per SQL aus der DB gelesen

      • DB nicht verfügbar: Daten werden aus dem Cache gelesen (soweit dort verfügbar)

      zum Testen:

      original SQL-Adapter deinstallieren und mit diesem ersetzen

      npm install https://github.com/dschaedl/iobroker.sq … ll/master/

      Wichtig: im MySQL Schema habe ich in den Datentabellen eine Spalte "dt" vom Datentyp "datetime" eingefügt um ein lesbares Datum in der DB zu haben.

      -> ALTER TABLE iobroker.ts_number ADD COLUMN dt DATETIME NULL AFTER q; (für ts_number, ts_boolean, ts_string)

      ein paar Details:

      • Die gecachten Werte werden nach dem Transfer in die DB nicht gelöscht, sondern nur markiert; damit beim Abrufen ohne DB genügend Daten zurück kommen

      • Ein Aufräum-Job löscht die gecachten Daten nach X Tagen (lässt sich konfigurieren)

      • Das überspielen der Daten in die SQL-DB findet synchron statt; Asynchron/parallel ist der Raspi rasch überfordert mit der grossen Menge an Daten.

      • Ich arbeite mit MySQL. Die anderen Schemen habe ich aktuell nicht berücksichtigt.

      • [1] Ich habe es nicht hingekriegt einen SQL-Verbindungsfehler zu fangen, ohne dass der Adapter beendet wird. Als Workaorund macht der Adapter nun einen 'Ping' um zu überprüfen ob der PC mit der MySQL DB am laufen ist -> nehme gerne Tips entgegen.

      • Der Timestamp in der DB enspricht dem ts-Attribut des ioBroker States (was leider nicht einem Javascript Date entspricht)

      ==> Bitte Vorsicht mit diesem Adapter; es ist eine erste Version eines Updates. Wenn ihr wichtige Daten in der DB habt, unbedingt vorher backuppen.

      viele Grüsse

      Daniel

      posted in ioBroker Allgemein
      D
      Dschaedl
    • RE: Portierung eines CCU.IO-Adapters zu ioBroker

      don't worry… spring einfach mal rein ins kalte Wasser.

      von aussen siehst du nicht wie kalt es wirklich ist.

      Wenn du von Programmierung etwas Ahnung hast verstehst du sofort wie ioBroker aufgebaut ist - ist nämlich wirklich sehr schön strukturiert und erklärt (Der :twisted: liegt wie immer in den Details)

      viel Erfolg!

      Daniel

      posted in ioBroker Allgemein
      D
      Dschaedl
    • RE: History Adpater (History vs. influxdb vs SQL)

      @mctom:

      • es wird eng auf RasPi2 `
        Die DB muss ja nicht auf dem Raspi laufen… :mrgreen:

      Ich habe versucht meine MySQL vom PC anzubinden - klappt tadellos 8-)

      Mein Wunsch: (resp. werde bei nächster Gelegenheit selbst mal reinschauen...)

      Die DB auf dem PC ist nicht immer verfügbar, da dieser nicht 24/7 läuft.

      Der SQL Adapter soll die Daten so lange selber cachen, bis die DB auf dem PC verfügbar wird und dann alles rüberspielen.

      Da mich die History normalerweise sowieso nur interessiert wenn der PC läuft passt das...

      Alternative Idee: Eine DB im Internet benutzen.

      viele Grüsse

      Daniel

      posted in ioBroker Allgemein
      D
      Dschaedl
    • RE: Adapter: Geofency

      @Bluefox:

      Kann jemand ausprobieren, ob die neue Änderungen funktionieren?

      cd /opt/iobroker
      npm install https://github.com/ioBroker/ioBroker.geofency/tarball/master
      ```` `  
      

      funktioniert bestens bei mir. :mrgreen:

      Daniel

      posted in ioBroker Allgemein
      D
      Dschaedl
    • RE: Adapter: Weatherunderground 24h Prognose

      @versteckt:

      Das ist dann natürlich mit dem Adapter ein Problem, weil die Werte als value.xxx definiert sind und somit in HomeKit in die falsche Regel reinfallen.

      @Dschaedl: Hast du dich auf Referenzwerte bezogen beim festlegen, oder einfach aufgrund von "best practice"?

      Mir geht es darum ob ich das anpassen muss, oder ob ich das an dich übergebe. `

      Ich habe versucht mich an https://github.com/ioBroker/ioBroker/bl … commonrole zu halten.

      Und habe dann kreativ mit neuen Typen erweitert…

      @bluefox: Wie ist hier das korrekte Vorgehen?

      btw: Ich habe dich als collaborator hinzugefügt.

      viele Grüsse

      Daniel

      posted in ioBroker Allgemein
      D
      Dschaedl
    • RE: Adapter: Weatherunderground 24h Prognose

      @versteckt:

      Hallo, habe grade den Adapter installiert, ich gehe davon aus, das du auch das Script "damals" gebaut hast.

      Das war bis jetzt im Einsatz. `
      Script? welches script :shock: :shock: (Ich habe nie ein script publiziert)

      > 1.) In der Admin Maske wird > < style="padding-left: 12px"> Apikey angezeigt, sieht nach einem HTML Fehler aus
      schon gefixt 8-) (nächste Version)
      > 2.) Beim starten liefert er folgende Fehler im Logfile:
      schalte mal das Log auf Debug. Dann solltest du ganz am Anfang die URL sehen, die aufgerufen wird. Ich vermute da stimmt etwas nicht. copy/paste sie dann einfach mal in einen Browser um zu sehen was passiert…

      Daniel

      posted in ioBroker Allgemein
      D
      Dschaedl
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo