Navigation

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

    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

    J
    • Profile
    • Following 0
    • Followers 0
    • Topics 3
    • Posts 9
    • Best 2
    • Groups 1

    Johannes 3

    @Johannes 3

    Starter

    2
    Reputation
    4
    Profile views
    9
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Johannes 3 Follow
    Starter

    Best posts made by Johannes 3

    • [Javascript] Wetterstation Renkforce WH2600

      Hallo,

      ich habe vor Jahren diese Wetterstation gekauft und sie an FHEM angebunden. Ich will jetzt aber zu ioBroker wechseln. Leider fand ich keinen passenden Adapter für den ioBroker. Deshalb habe ich ein Skript geschrieben, dass die Wetterdaten entgegennimmt und umrechnet. Vielleicht kann es ja noch wer gebrauchen.
      Ich bin kein Programmierer und würde mich deshalb über Verbesserungsvorschläge freuen.

      
      const express = require('express');
      const app = express();
      const PORT = 3011;
      const adapterInstance = 'javascript.0.Wetter';
      const stateMappings = {
          temp: {type: 'number', unit: '°C', role: 'value' },
          dewpt: {type: 'number', unit: '°C', role: 'value' },
          windchill: {type: 'number', unit: '°C', role: 'value' },
          indoortemp: {type: 'number', unit: '°C', role: 'value' },
          humidity: {type: 'mixed', unit: '%', role: 'value' },
          indoorhumidity: {type: 'mixed', unit: '%', role: 'value' },
          windspeed: {type: 'number', unit: 'm/s', role: 'value' },
          windgust: {type: 'number', unit: 'm/s', role: 'value' },
          winddir: {type: 'mixed', unit: '°', role: 'value' },
          rain: {type: 'number', unit: 'l', role: 'value' },
          dailyrain: {type: 'number', unit: 'l', role: 'value' },
          weeklyrain: {type: 'number', unit: 'l', role: 'value' },
          monthlyrain: {type: 'number', unit: 'l', role: 'value' },
          yearlyrain: {type: 'number', unit: 'l', role: 'value' },
          UV: {type: 'mixed', role: 'value' },
          solarradiation: {type: 'mixed', unit: 'W/m²', role: 'value' },
          barom: {type: 'string', unit: 'l', role: 'value' },
          lowbatt: {type: 'mixed', role: 'value' },
          dateutc: {type: 'mixed', role: 'value' }
      };
      
      Object.keys(stateMappings).forEach(key => {
          const stateId = `javascript.0.Wetter.${key}`;
          if (!existsState(stateId)) {
              const mapping = stateMappings[key];
              createState(stateId, null, {
                  name: key,
                  type: mapping.type,
                  role: mapping.role,
                  unit: mapping.unit
              });
          }
      });
      
      const conversions = {
          // Temperaturumrechnungen von Fahrenheit nach Celsius
          'tempf': { target: 'temp', convert: value => (value - 32) * 5/9 },
          'dewptf': { target: 'dewpt', convert: value => (value - 32) * 5/9 },
          'windchillf': { target: 'windchill', convert: value => (value - 32) * 5/9 },
          'indoortempf': { target: 'indoortemp', convert: value => (value - 32) * 5/9 },
      
          // Windgeschwindigkeitsumrechnung von mph nach m/s
          'windspeedmph': { target: 'windspeed', convert: value => value * 0.44704 },
          'windgustmph': { target: 'windgust', convert: value => value * 0.44704 },
      
          // Regenmengenumrechnungen von inches nach l/m²
          'rainin': { target: 'rain', convert: value => value * 25.4 },
          'dailyrainin': { target: 'dailyrain', convert: value => value * 25.4 },
          'weeklyrainin': { target: 'weeklyrain', convert: value => value * 25.4 },
          'monthlyrainin': { target: 'monthlyrain', convert: value => value * 25.4 },
          'yearlyrainin': { target: 'yearlyrain', convert: value => value * 25.4 },
      
          //Rest
          'humidity': { target: 'humidity', convert: value => value   },
          'indoorhumidity': { target: 'indoorhumidity', convert: value => value   },
          'winddir': { target: 'winddir', convert: value => value   },
          'solarradiation': { target: 'solarradiation', convert: value => value   },
          'UV': { target: 'UV', convert: value => value   },
          'baromin': { target: 'barom', convert: value => value   },
          'lowbatt': { target: 'lowbatt', convert: value => value   },
          'dateutc': { target: 'dateutc', convert: value => value   }
      };
      
      function isValidData(data) {
          return typeof data === 'object' && data !== null;
      }
      
      function convertData(key, value) {
          if (conversions[key]) {
              return conversions[key].convert(value);
          }
          return null;
      }
      
      function updateState(key, value) {
          setState(`${adapterInstance}.${key}`, value, true, (err) => {
              if (err) {
                  console.error(`Fehler beim Aktualisieren des Zustands ${key}: ${err}`);
              }
          });
      }
      
      app.get('/weatherstation/updateweatherstation.php', (req, res) => {
          const data = req.query;
          console.log(data);
      
          if (!isValidData(data)) {
              return res.status(400).send('Ungültige Daten empfangen');
          }
      
          for (const key in data) {
              if (data.hasOwnProperty(key)) {
                  const convertedValue = convertData(key, data[key]);
                  if (convertedValue !== null) {
                      updateState(conversions[key].target, convertedValue);
                  }
              }
          }
      
          res.send('success');
      });
      
      app.use((err, req, res, next) => {
          console.error(err.stack);
          res.status(500).send('Etwas ist schief gelaufen!');
      });
      
      app.listen(PORT, () => {
          console.log(`Server läuft auf http://localhost:${PORT}`);
      });
      

      In der Wetterstation muss man nur noch die IP und den Port eintragen.
      b73241e9-c640-4a9d-a4e9-10c81508b885-grafik.png

      posted in Praktische Anwendungen (Showcase)
      J
      Johannes 3
    • RE: Ecovacs Deebot Adapter: Status und Feedback

      @mrbungle64
      Hallo,
      ich wollte nach ein paar Wochen testen eine kleine Zusammenfassung mit meinen T20 geben.

      Es läuft alles sehr stabil.
      Mir ist nur ein Punkt aufgefallen. Die Einstellung "ecovacs-deebot.0.control.extended.scrubbingPattern" springt nach einer Weile auf "standard(1)" zurück, wenn ich sie verstellt habe. In der App wird sie aber richtig angezeigt.

      Vielen Dank für diesen tollen Adapter.

      posted in Entwicklung
      J
      Johannes 3

    Latest posts made by Johannes 3

    • RE: Echo Dot mit Uhr LED Anzeige

      Ich bin gerade auf folgende Seite gestoßen.
      https://developer.amazon.com/en-US/docs/alexa/alexa-presentation-language/understand-apl-and-character-displays.html

      Aber kann man das im ioBroker nutzen?
      Oder muss man hier einen eigenen Alexa Skill schreiben?

      posted in ioBroker Allgemein
      J
      Johannes 3
    • RE: Echo Dot mit Uhr LED Anzeige

      @marc-berg Da hast du wahrscheinlich recht.
      Allerdings so Sachen wie die aktuelle Außentemperatur würden gehen.

      posted in ioBroker Allgemein
      J
      Johannes 3
    • Echo Dot mit Uhr LED Anzeige

      Hallo,

      ich habe einen Echo Dot mit Uhr (Gen 5) und würde gerne über die LED Anzeige (Uhr) einen Text ausgeben.
      Zum Beispiel: Wenn der Trockner fertig ist, soll hier ein Text durchlaufen "Trockner ist fertig".
      Geht das Irgendwie?

      Gruß
      Johannes

      posted in ioBroker Allgemein
      J
      Johannes 3
    • RE: Objekte Schraubenschlüssel oben rechts

      @bommel_030 Alles klar. Danke

      posted in Einsteigerfragen
      J
      Johannes 3
    • RE: Objekte Schraubenschlüssel oben rechts

      Vielen Dank für die Antworten.
      Bei mir sieht es so aus:
      600e820c-0720-447e-97d7-3f9d5dad2fdf-image.png
      Zum Verständnis für mich.
      Wenn ich hier etwas ändere, wird dies bei allen Zuständen angepasst?
      Oder dient dies als eine Art Default Einstellung?

      posted in Einsteigerfragen
      J
      Johannes 3
    • Objekte Schraubenschlüssel oben rechts

      Hallo,
      kann mir jemanden sagen, was man mit dem Schraubenschlüssel einstellen kann.
      de3684ca-5b80-4772-9d61-98e39a73ac4a-image.png
      Bearbeite ich damit alles Zustände?

      posted in Einsteigerfragen
      J
      Johannes 3
    • RE: Ecovacs Deebot Adapter: Status und Feedback

      @mrbungle64
      Hallo,
      ich wollte nach ein paar Wochen testen eine kleine Zusammenfassung mit meinen T20 geben.

      Es läuft alles sehr stabil.
      Mir ist nur ein Punkt aufgefallen. Die Einstellung "ecovacs-deebot.0.control.extended.scrubbingPattern" springt nach einer Weile auf "standard(1)" zurück, wenn ich sie verstellt habe. In der App wird sie aber richtig angezeigt.

      Vielen Dank für diesen tollen Adapter.

      posted in Entwicklung
      J
      Johannes 3
    • [Javascript] Wetterstation Renkforce WH2600

      Hallo,

      ich habe vor Jahren diese Wetterstation gekauft und sie an FHEM angebunden. Ich will jetzt aber zu ioBroker wechseln. Leider fand ich keinen passenden Adapter für den ioBroker. Deshalb habe ich ein Skript geschrieben, dass die Wetterdaten entgegennimmt und umrechnet. Vielleicht kann es ja noch wer gebrauchen.
      Ich bin kein Programmierer und würde mich deshalb über Verbesserungsvorschläge freuen.

      
      const express = require('express');
      const app = express();
      const PORT = 3011;
      const adapterInstance = 'javascript.0.Wetter';
      const stateMappings = {
          temp: {type: 'number', unit: '°C', role: 'value' },
          dewpt: {type: 'number', unit: '°C', role: 'value' },
          windchill: {type: 'number', unit: '°C', role: 'value' },
          indoortemp: {type: 'number', unit: '°C', role: 'value' },
          humidity: {type: 'mixed', unit: '%', role: 'value' },
          indoorhumidity: {type: 'mixed', unit: '%', role: 'value' },
          windspeed: {type: 'number', unit: 'm/s', role: 'value' },
          windgust: {type: 'number', unit: 'm/s', role: 'value' },
          winddir: {type: 'mixed', unit: '°', role: 'value' },
          rain: {type: 'number', unit: 'l', role: 'value' },
          dailyrain: {type: 'number', unit: 'l', role: 'value' },
          weeklyrain: {type: 'number', unit: 'l', role: 'value' },
          monthlyrain: {type: 'number', unit: 'l', role: 'value' },
          yearlyrain: {type: 'number', unit: 'l', role: 'value' },
          UV: {type: 'mixed', role: 'value' },
          solarradiation: {type: 'mixed', unit: 'W/m²', role: 'value' },
          barom: {type: 'string', unit: 'l', role: 'value' },
          lowbatt: {type: 'mixed', role: 'value' },
          dateutc: {type: 'mixed', role: 'value' }
      };
      
      Object.keys(stateMappings).forEach(key => {
          const stateId = `javascript.0.Wetter.${key}`;
          if (!existsState(stateId)) {
              const mapping = stateMappings[key];
              createState(stateId, null, {
                  name: key,
                  type: mapping.type,
                  role: mapping.role,
                  unit: mapping.unit
              });
          }
      });
      
      const conversions = {
          // Temperaturumrechnungen von Fahrenheit nach Celsius
          'tempf': { target: 'temp', convert: value => (value - 32) * 5/9 },
          'dewptf': { target: 'dewpt', convert: value => (value - 32) * 5/9 },
          'windchillf': { target: 'windchill', convert: value => (value - 32) * 5/9 },
          'indoortempf': { target: 'indoortemp', convert: value => (value - 32) * 5/9 },
      
          // Windgeschwindigkeitsumrechnung von mph nach m/s
          'windspeedmph': { target: 'windspeed', convert: value => value * 0.44704 },
          'windgustmph': { target: 'windgust', convert: value => value * 0.44704 },
      
          // Regenmengenumrechnungen von inches nach l/m²
          'rainin': { target: 'rain', convert: value => value * 25.4 },
          'dailyrainin': { target: 'dailyrain', convert: value => value * 25.4 },
          'weeklyrainin': { target: 'weeklyrain', convert: value => value * 25.4 },
          'monthlyrainin': { target: 'monthlyrain', convert: value => value * 25.4 },
          'yearlyrainin': { target: 'yearlyrain', convert: value => value * 25.4 },
      
          //Rest
          'humidity': { target: 'humidity', convert: value => value   },
          'indoorhumidity': { target: 'indoorhumidity', convert: value => value   },
          'winddir': { target: 'winddir', convert: value => value   },
          'solarradiation': { target: 'solarradiation', convert: value => value   },
          'UV': { target: 'UV', convert: value => value   },
          'baromin': { target: 'barom', convert: value => value   },
          'lowbatt': { target: 'lowbatt', convert: value => value   },
          'dateutc': { target: 'dateutc', convert: value => value   }
      };
      
      function isValidData(data) {
          return typeof data === 'object' && data !== null;
      }
      
      function convertData(key, value) {
          if (conversions[key]) {
              return conversions[key].convert(value);
          }
          return null;
      }
      
      function updateState(key, value) {
          setState(`${adapterInstance}.${key}`, value, true, (err) => {
              if (err) {
                  console.error(`Fehler beim Aktualisieren des Zustands ${key}: ${err}`);
              }
          });
      }
      
      app.get('/weatherstation/updateweatherstation.php', (req, res) => {
          const data = req.query;
          console.log(data);
      
          if (!isValidData(data)) {
              return res.status(400).send('Ungültige Daten empfangen');
          }
      
          for (const key in data) {
              if (data.hasOwnProperty(key)) {
                  const convertedValue = convertData(key, data[key]);
                  if (convertedValue !== null) {
                      updateState(conversions[key].target, convertedValue);
                  }
              }
          }
      
          res.send('success');
      });
      
      app.use((err, req, res, next) => {
          console.error(err.stack);
          res.status(500).send('Etwas ist schief gelaufen!');
      });
      
      app.listen(PORT, () => {
          console.log(`Server läuft auf http://localhost:${PORT}`);
      });
      

      In der Wetterstation muss man nur noch die IP und den Port eintragen.
      b73241e9-c640-4a9d-a4e9-10c81508b885-grafik.png

      posted in Praktische Anwendungen (Showcase)
      J
      Johannes 3
    • RE: Ecovacs Deebot Adapter: Status und Feedback

      Vielen Dank für diesen tollen Adapter.

      Ich habe damit einen T20 Omni angebunden und möchte hier meine Erfahrungen teilen.

      Es scheint das allermeiste zu funktionieren.

      Die Karte (Map) wurde erst angezeigt, nachdem ich in der App die Karte gesichert habe
      Die einzelnen Räume / Bereich werden nicht angezeigt. Gibt es hier eine Möglichkeit, die Abfrage manuell anzustoßen?
      map.JPG
      Unter CleaningLog wird auch nicht alles ausgefüllt.
      CleaningLog.JPG

      posted in Entwicklung
      J
      Johannes 3
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo