/MiniWeather

Primary LanguageC++MIT LicenseMIT

MiniWeather

MiniWeather ist ein Projekt welches verschiedene Wetterdaten erfasst und im Netzwerk veröffentlicht.

Hardware

  • WeMos D1 mini
  • Sensirion SHT85 (Luftfeuchtigkeit und Temperatur)
  • Bosch BMP180 (Luftdruck und Temperatur)
  • Vishay VEML7700 (Beleuchtungsstärke)

Installing the Arduino ESP32 Filesystem Uploader

ioBroker implemetation

You can use this JS:

const url = 'http://<MiniWeather-IP>/api';
const idTemperature = '0_userdata.0.MiniWeather.Temperature';
const idTemperatureBmp = '0_userdata.0.MiniWeather.TemperatureBMP';
const idHumidity = '0_userdata.0.MiniWeather.Humidity';
const idPressure = '0_userdata.0.MiniWeather.Pressure';
const idIlluminance = '0_userdata.0.MiniWeather.Illuminance';
const idWll = '0_userdata.0.MiniWeather.WhiteLightLevel';
const idIlluminanceNom = '0_userdata.0.MiniWeather.IlluminanceNormalized';
const idWllNom = '0_userdata.0.MiniWeather.WhiteLightLevelNormalized';
const idRSSI = '0_userdata.0.MiniWeather.RSSI';
const idFW = '0_userdata.0.MiniWeather.FirmwareVersion';
const idDewPoint = '0_userdata.0.MiniWeather.DewPoint';
const idHumidityAbs = '0_userdata.0.MiniWeather.HumidityAbs';
const idTemperatureError = '0_userdata.0.MiniWeather.TemperatureError';
 

schedule('* * * * *', function() { //every minute
    request(url, function(error, response, result) {
        let obj = JSON.parse(result);
        //console.log(result);
        let temperatureSht85 = parseFloat(obj['SHT85']['Temperature'].Value);
        let temperatureBmp180 = parseFloat(obj['BMP180']['Temperature'].Value);
        let humidity = parseFloat(obj['SHT85']['Humidity'].Value);
        setState(idTemperature, temperatureSht85, true);
        setState(idTemperatureBmp, temperatureBmp180, true);
        setState(idHumidity, humidity, true);
        setState(idPressure, parseFloat(obj['BMP180']['Pressure'].Value), true);
        setState(idIlluminance, parseFloat(obj['VEML7700']['Illuminance'].Value), true);
        setState(idWll, parseFloat(obj['VEML7700']['White light level'].Value), true);
        setState(idIlluminanceNom, parseFloat(obj['VEML7700']['Illuminance normalized'].Value), true);
        setState(idWllNom, parseFloat(obj['VEML7700']['White light level normalized'].Value), true);
        setState(idRSSI, parseInt(obj['RSSI']), true);
        setState(idFW, obj['Firmware'], true);



        setState(idTemperatureError, Math.round((temperatureSht85 - temperatureBmp180 + Number.EPSILON) * 10000) / 10000, true);
        setState(idDewPoint, Math.round((calcDewPoint(temperatureSht85, humidity) + Number.EPSILON) * 100) / 100, true);
        setState(idHumidityAbs, Math.round((calcHumidityAbs(temperatureSht85, humidity) + Number.EPSILON) * 100) / 100, true);
    });
});

function calcDewPoint(t, r) {
     
  // Konstanten
  var mw = 18.016; // Molekulargewicht des Wasserdampfes (kg/kmol)
  var gk = 8214.3; // universelle Gaskonstante (J/(kmol*K))
  var t0 = 273.15; // Absolute Temperatur von 0 °C (Kelvin)
  var tk = t + t0; // Temperatur in Kelvin
  
  var a, b;
  if (t >= 0) {
    a = 7.5;
    b = 237.3;
  } else if (t < 0) {
    a = 7.6;
    b = 240.7;
  }
  
  // Sättigungsdampfdruck in hPa
  var sdd = 6.1078 * Math.pow(10, (a*t)/(b+t));
  
  // Dampfdruck in hPa
  var dd = sdd * (r/100);
  
  // v-Parameter
  var v = Math.log10(dd/6.1078);
  
  // Taupunkttemperatur (°C)
  var tt = (b*v) / (a-v);
  return tt; 
}

function calcHumidityAbs(t, r) {
     
  // Konstanten
  var mw = 18.016; // Molekulargewicht des Wasserdampfes (kg/kmol)
  var gk = 8214.3; // universelle Gaskonstante (J/(kmol*K))
  var t0 = 273.15; // Absolute Temperatur von 0 °C (Kelvin)
  var tk = t + t0; // Temperatur in Kelvin
  
  var a, b;
  if (t >= 0) {
    a = 7.5;
    b = 237.3;
  } else if (t < 0) {
    a = 7.6;
    b = 240.7;
  }
  
  // Sättigungsdampfdruck in hPa
  var sdd = 6.1078 * Math.pow(10, (a*t)/(b+t));
  
  // Dampfdruck in hPa
  var dd = sdd * (r/100);
  
  // Wasserdampfdichte bzw. absolute Feuchte in g/m3
  var af = Math.pow(10,5) * mw/gk * dd/tk;
  
  return af; 
}