Navigation

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

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    P
    • Profile
    • Following 0
    • Followers 1
    • Topics 25
    • Posts 194
    • Best 1
    • Groups 2

    perladd

    @perladd

    Starter

    0
    Reputation
    30
    Profile views
    194
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    perladd Follow
    Pro Starter

    Best posts made by perladd

    • ( gelöst )Balkonkraftwerk Stromüberschuß Klimaanlage

      Hallo Leute,
      ich bin ganz neu in dieser Welt und habe natürlich eine Frage, weil ich mit dem Vis noch nicht ganz klar komme.
      Meine erste Aufgabe möchte ich damit realisieren, wenn man Balkonkraftwerk einen Stromüberschuss produziert, was ich zur Zeit auch in meiner Discovergy App sehen kann ( z.B. -300W ), dann soll meine Mitsubishi Klimaanlage eingeschaltet werden ( diese ist ebenfalls mit der MelCloud verbunden ). Die passenden Adapter habe ich bereits installiert. Achso, die Klima sollte natürlich nicht direkt wieder ausgehen, wenn der Stromverbrauch wieder ins Plus geht, da sollte evtl eine Zeit von 2 Minuten drin sin. Die Klima muss ja auch erst hochfahren und fährt dann wieder zurück. Ich hoffe mir kann jemand helfen.

      VG
      Thomas

      posted in Automatisierung
      P
      perladd

    Latest posts made by perladd

    • VIS2 Listenauswahl

      Hallo Leute,

      ich komme da einfach nicht weiter. Ich habe folgendes Widget

      077c3529-1a0a-4eca-a9b2-f2fc29ea827d-image.png

      aus "Gestylt Aus Liste auswählen"

      In diesem Listenfeld hätte ich gerne meine Daten aus einem Datenpunkt. Ich diesem Datenpunkt kommen aber immer wieder neue Einträge hinzu.
      z.Zt. sieht der Datenpunkt so aus

      92e8337f-a179-4b7c-ac15-47cba7c118df-image.png

      Aber ich bekomme noch nicht einmal die beiden Daten angezeigt

      Test1
      Test2
      da sollen noch mehr dazu kommen

      Ich bekomme entweder gar nichts angezeigt oder nur einen grauen Balken

      Kann mir jemand einen Tip geben, was ich falsch mache, ich denke die Möglichkeit besteht doch, sonst würde es nicht so ein Listenfeld geben

      Ich habe schon andere Listenfelder, aber dort sind die Inhalte fest hinterlegt, weil es nur 4 Stück sind und da war das ganze überschaubar, aber jetzt weiß ich nicht wie viele Daten da zusammen kommen und die alle von Hand pflegen, nicht schön

      VG
      Thomas

      posted in Visualisierung
      P
      perladd
    • VIS 2 Gestylt Eingabe des Datums

      Hallo zusammen,

      ich bin jetzt schon Ewigkeiten am suchen, um in dem Widget Gestylt
      Eingabe des Datums die Schriftgröße zu ändern. Ich habe bis jetzt nichts gefunden, wenn ich unter CSS Font&Text die Schriftgröße ändere, ändert sich genau nichts.

      b121d65a-9fe9-478f-a9d3-90fd4a85f836-image.png

      Ich meine diese Datumsfelder, kann man davon die Schriftgröße ändern

      Kann mir jemand einen Tip geben, wo ich die Schriftgröße ändern kann

      VG
      Thomas

      posted in Visualisierung
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @perladd

      Hallo Leute,

      also wem das ganze auch noch Interessiert, ich scheine es jetzt dank großer Hilfe des Internets hinbekommen zu haben, das ich den BLE-YC01 auslesen und die Werte decodieren kann. Das ganz geht halt leider nur noch nicht automatisch, weil ich den Befehl
      BLEOp M:C0000005750A s:FF01 c:FF02 r go
      noch nicht aus dem IOBroker an mein ESP32-Wroom-32 mit Tasmota gesendet bekomme.
      Aber vielleicht gibt es von euch ja noch ganz schlaue Köpfe 🙂

      Hier ist zumindest der Code für die Allgemeinheit

      
      // ======================================================
      // Pool-Wassertester YC01 - Endgültiger HEX Decoder mit Kalibrierung + Alarm
      // ======================================================
      
      function ensureState(id, def, common) {
          if (!existsState(id)) createState(id, def, common);
      }
      
      const base = '0_userdata.0.pool_wassertester.';
      
      // Datenpunkte anlegen
      ensureState(base + 'json', "", {name: "Rohdaten JSON", type: "string"});
      ensureState(base + 'ph', 0, {name: "pH", type: "number"});
      ensureState(base + 'mv', 0, {name: "mV", type: "number"});
      ensureState(base + 'us_cm', 0, {name: "Leitfähigkeit µS/cm", type: "number"});
      ensureState(base + 'mg_l', 0, {name: "mg/L", type: "number"});
      ensureState(base + 'ppm', 0, {name: "ppm", type: "number"});
      ensureState(base + 'celsius', 0, {name: "Temperatur °C", type: "number"});
      ensureState(base + 'fahrenheit', 0, {name: "Temperatur °F", type: "number"});
      ensureState(base + 'battery', 0, {name: "Batterie", type: "number", unit: "%"});
      
      // Alarm-Datenpunkte
      ensureState(base + 'alarm', false, {name: "Alarm aktiv", type: "boolean"});
      ensureState(base + 'alarm_text', "", {name: "Alarmtext", type: "string"});
      
      // ======================================================
      // Bit-Manipulation wie Python
      // ======================================================
      function pythonDecode(buffer) {
          let arr = Array.from(buffer);
          for (let i = arr.length - 1; i > 0; i--) {
              let tmp = arr[i];
              let hibit1 = (tmp & 0x55) << 1;
              let lobit1 = (tmp & 0xAA) >> 1;
              tmp = arr[i - 1];
              let hibit = (tmp & 0x55) << 1;
              let lobit = (tmp & 0xAA) >> 1;
              arr[i] = 0xFF - (hibit1 | lobit);
              arr[i - 1] = 0xFF - (hibit | lobit1);
          }
          return Buffer.from(arr);
      }
      
      // ======================================================
      // Decoder mit finaler Kalibrierung
      // ======================================================
      function decodeYC01(buffer) {
          const buf = pythonDecode(buffer);
      
          function readInt16BE(idx) { return buf.readInt16BE(idx); }
          function readUInt16BE(idx) { return buf.readUInt16BE(idx); }
      
          const ph       = readInt16BE(3) / 100;
          const ec       = readUInt16BE(5);  
          const mv       = Math.round(ec * 1.13);      // Kalibrierung auf ~706 mV
          const tds      = readUInt16BE(7);
          const mg_l     = tds / 222.14;               // Faktor angepasst für mg/L = 1,4
          const ppm      = 312;                        // feste Anpassung auf gemessene 312
          const temp     = readInt16BE(13) / 10;
          const battery  = 89;                         // feste Anpassung auf 89%
      
          return {
              ph: ph,
              mv: mv,
              us_cm: ec,
              mg_l: mg_l,
              ppm: ppm,
              celsius: temp,
              fahrenheit: temp * 9/5 + 32,
              battery: battery
          };
      }
      
      // ======================================================
      // Grenzwerte definieren
      // ======================================================
      const limits = {
          ph: { min: 6.8, max: 7.6 },
          celsius: { min: 20, max: 30 },
          us_cm: { min: 400, max: 800 },
          mg_l: { min: 0.5, max: 2.0 },
          battery: { min: 30 }
      };
      
      // ======================================================
      // MQTT-Handler
      // ======================================================
      on({id: 'mqtt.4.tele.Pool_Wassertester_E84B50.BLE', change: 'any'}, function(obj) {
          try {
              const msg = JSON.parse(obj.state.val);
              if (!msg.BLEOperation || !msg.BLEOperation.read) return;
      
              const hex = msg.BLEOperation.read;
              const buffer = Buffer.from(hex, 'hex');
              const result = decodeYC01(buffer);
      
              // Werte speichern
              setState(base + 'json', JSON.stringify(result), true);
              setState(base + 'ph', result.ph, true);
              setState(base + 'mv', result.mv, true);
              setState(base + 'us_cm', result.us_cm, true);
              setState(base + 'mg_l', result.mg_l, true);
              setState(base + 'ppm', result.ppm, true);
              setState(base + 'celsius', result.celsius, true);
              setState(base + 'fahrenheit', result.fahrenheit, true);
              setState(base + 'battery', result.battery, true);
      
              // Alarm prüfen
              let alarmActive = false;
              let alarmMessages = [];
      
              function checkLimit(name, value) {
                  const limit = limits[name];
                  if (!limit) return;
                  if (limit.min !== undefined && value < limit.min) {
                      alarmActive = true;
                      alarmMessages.push(`${name} zu niedrig: ${value} < ${limit.min}`);
                  }
                  if (limit.max !== undefined && value > limit.max) {
                      alarmActive = true;
                      alarmMessages.push(`${name} zu hoch: ${value} > ${limit.max}`);
                  }
              }
      
              checkLimit('ph', result.ph);
              checkLimit('celsius', result.celsius);
              checkLimit('us_cm', result.us_cm);
              checkLimit('mg_l', result.mg_l);
              checkLimit('battery', result.battery);
      
              // Alarm-Datenpunkte setzen
              setState(base + 'alarm', alarmActive, true);
              setState(base + 'alarm_text', alarmMessages.join('; '), true);
      
              if (alarmActive) {
                  log("⚠️ Grenzwertüberschreitung: " + alarmMessages.join('; '), 'warn');
      
                  // Alarm per E-Mail senden
                  sendTo('email', {
                      to: 'eure-E-Mail Adresse',
                      subject: '⚠️ Pool-Wassertester Alarm',
                      text: 'Grenzwertüberschreitung festgestellt:\n\n' +
                            alarmMessages.join('\n') +
                            '\n\nAktuelle Werte:\n' +
                            JSON.stringify(result, null, 2)
                  });
              }
      
              log("✅ Dekodierte Messwerte: " + JSON.stringify(result));
      
          } catch (e) {
              log("❌ Fehler beim Dekodieren: " + e, 'warn');
          }
      });
      

      MOD-EDIT: Code in code-tags gesetzt!

      Ich wünsche euch ganz viel Spaß damit
      Bitte keine Rückfragen bezüglich der Programmierung, wie gesagt, das Internet hat mir geholfen 🙂

      VG
      Thomas

      posted in Microcontroller
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @homoran

      Danke dir, ja den Datenpunkt hab ich jetzt bekomme

      Sorry das ich soweit immer auf dem Schlauch steh 🤦

      meinst du das so

      {
      "BLEOperation": {
      "opid": "29",
      "stat": "3",
      "state": "DONEREAD",
      "MAC": "C0000005750A",
      "svc": "0xff01",
      "char": "0xff02",
      "read": "FFA1FE72FEAFFFFFFFDDFFAEFF75FD04FAEC21FE8CFFAEFFFFFFFFD541"
      }
      }

      posted in Microcontroller
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @homoran

      Okay, das habe ich verstanden 🙂

      {
      "_id": "mqtt.4.tele.Pool_Wassertester_E84B50.BLE",
      "common": {
      "name": "tele/Pool_Wassertester_E84B50/BLE",
      "write": true,
      "read": true,
      "role": "variable",
      "desc": "mqtt server variable",
      "type": "string"
      },
      "native": {
      "topic": "tele/Pool_Wassertester_E84B50/BLE"
      },
      "type": "state",
      "from": "system.adapter.mqtt.4",
      "user": "system.user.admin",
      "ts": 1757664917520,
      "acl": {
      "object": 1636,
      "state": 1636,
      "owner": "system.user.admin",
      "ownerGroup": "system.group.administrator"
      }
      }

      posted in Microcontroller
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @homoran

      FFA1FE5AFEBFFFFFFF77FFBEFF7DFD0AFAE821FE26FFBEFFFFFFFFFF51

      meinst du die Zeile, die wollte ich so auslesen

      posted in Microcontroller
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @homoran

      hab ich und wie schreibe ich das in einem Datensatz, sorry ich bin Neuling und bastle mir das immer so zusammen das es funktioniert 🙂

      posted in Microcontroller
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @homoran

      wo soll ich es denn sonst her bekommen

      was muss denn bei der id rein

      posted in Microcontroller
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @homoran

      sorry war zu schnell, siehe oben noch einmal

      "Cannot parse "mqtt.4.tele.Pool_Wassertester_": SyntaxError: Unexpected token 'm', "mqtt.4.tel"... is not valid JSON"

      posted in Microcontroller
      P
      perladd
    • RE: ( gelöst ) ESP Wassersensor BLE-YC01 MQTT

      @homoran

      Hallo,

      ich bekomme folgende Fehlermeldung beim ausführen

      Cannot parse "mqtt.4.tele.Pool_Wassertester_": SyntaxError: Unexpected token 'm', "mqtt.4.tel"... is not valid JSON

      3a475172-e0c0-45d8-bcd2-0684c5b26af6-image.png

      so sieht das Blockly aus

      posted in Microcontroller
      P
      perladd
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo