Navigation

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

    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

    B
    • Profile
    • Following 0
    • Followers 0
    • Topics 32
    • Posts 281
    • Best 10
    • Groups 2

    Bongo

    @Bongo

    14
    Reputation
    59
    Profile views
    281
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Bongo Follow
    Pro Starter

    Best posts made by Bongo

    • [Script] Die sprechende Kaffeemaschine – Home Connect

      Vielleicht ist das Programm für den Einen oder Anderen hilfreich. Deshalb möchte ich es der Community zur Verfügung stellen.

      Ziel - Was kann das Programm?

      • Kaffeemaschine über Sprachassistenten ein- und ausschalten.
      • Status und Hinweise der Kaffeemaschine soll über einen Sprachassistenten ausgegeben werden.
      • Wechselnde Sprachausgaben für bestimmte Statusmeldungen.
      • Favoriten (Profil) der Kaffeespezialitäten (Kaffee Crema, Cappuccino, …) mit unterschiedlichen Parametern (Kaffeemenge, Wassertemperatur, …) erstellen.
      • Kaffeefavoriten per Sprachassistent ausgeben.
      • Pflegestatus (Entkalken, Reinigen, Wasserfilter wechseln) bereitstellen für Ausgabe mit Sprachassistenten oder VIS.

      Vorraussetzung

      • Eine Home Connect kompatible Kaffeemaschine.
        Getestet wurde das Script mit der Kaffeemaschine Siemens EQ.9 plus connect s500. Vermutlich funktioniert es auch mit ähnlichen Kaffeemaschinen von Siemens oder vielleicht auch mit Kaffeemaschinen von anderen Herstellern. Das wurde aber nicht getestet. Wenn ihr das Script benutzt, bitte um ein Feedback mit welcher Kaffeemaschine.
      • Adapter cloudless-homeconnect
        Der Adapter ist (noch) nicht im ioBroker Repository. Deshalb muss er über die Katze installiert werden.
        https://github.com/eifel-tech/ioBroker.cloudless-homeconnect
        Eine Instanz wird mit dem + am Adapter zugefügt.
        Der Adapter steuert die Kaffeemaschine ohne Cloud wie es zum Beispiel für die Home Connect APP notwendig ist. Nur beim ersten Start der Instanz wird eine Konfiguration aus der Cloud geladen. Deshalb ist eine Anmeldung an der Home Connect Cloud nötig.
      • Adapter iot
        Für Geräte-Erstellung in Alexa.
        Nach dem ersten Start des Scripts oder nach Änderung der Favoriten können über Alexa die neuen Geräte gesucht werden.
      • Adapter alexa2
        Für Sprachbefehle und Sprachausgabe.
        Tipp: Wenn man für den Sprachbefehl „Alexa, Erichs Kaffee ein“ unschick findet, kann man eine Routine „Erichs Kaffee“ erstellen, was das entsprechende „Gerät“ einschaltet.
      • Einstellung in der Javascript Instanz:
        Kommando "setObject" erlauben - muss aktiviert sein.

      Bedienung und Konfiguration

      • Vor dem ersten Start bitte die Voraussetzungen prüfen.
      • Im Programm im Abschnitt Settings die Variablen der Kanäle und Datenpunkte richtig setzen.
        ** In myConfig eventuell den Smartnamen nach eigenen Vorlieben ändern.
        ** In myProfile die Favoriten der Kaffeespezialitäten definieren.
        ** In myPowerState die Texte für Kaffeemaschine Ein/Aus definieren.
        ** In myStatus die Texte für die Statusmeldungen anpassen.
      • Programm starten.
      • Nach dem Start unter 0_userdata.0.Home-Connect.Kaffeemaschine.Profile die Kaffeespezialität konfigurieren.

      Bekannte Probleme

      • Betrifft Datenpunkt DisplayName für eine gespeicherte Kaffeespezialität
        Ich vermute, dass dieser Wert im Display der Kaffeemaschine erscheinen soll. Tut es aber bei meiner Kaffeemaschine nicht. Eventuell könnte es bei einem anderen Model angezeigt werden.

      Script Home-Connect-Kaffeemaschine.js:

      //
      // Home-Connect-Kaffeemaschine.js
      //
      // 09.10.2024 Version 1.0
      // Initialversion
      //
      // 23.11.2024 Version 1.1
      // Datenpunkt ob Pflege notwendig.
      // Text für Pflegestatus angepasst.
      //
      // 24.12.2024 Version 1.2
      // ack=false für Adapter-Datenpunkte
      //
      //
      //--------------------------- Settings ------------------------
      const hcDevice =      "cloudless-homeconnect.0.SIEMENS-TI9558X1DE-xxxxxxxxxxxx";    // Kanal für Kaffemaschine im cloudless-homeconnect
      const echoSpeak =     "alexa2.0.Echo-Devices.xxxxxxxxxxxxxxxx.Commands.speak";      // speak-Datenpunkt des Echo-Device für die Sprachausgabe im alexa2
      const dpUserdata =    "0_userdata.0.Home-Connect.Kaffeemaschine";                   // Namespace im Userdata
      //
      // Datenpunkte im 0_userdata
      //
      const myConfig = {
        "row": [
          {
            "dp": "status-speak",                         // Datenpunkt für Statusmeldungen
            "name": "Displaymeldung für Sprachassistent",
            "read": true, "write": true,
            "type": "string", "role": "value",
            "value": "", "unit": "",
            "smartName": ""
          },
          {
            "dp": "maintenance",                          // Datenpunkt ob Pflege notwendig - Version 1.1
            "name": "Pflege notwendig?",
            "read": true, "write": false,
            "type": "boolean", "role": "switch",
            "value": false, "unit": "",
            "smartName": ""
          },
          {
            "dp": "maintenance-speak",                    // Datenpunkt für Pflegeanfrage
            "name": "Status der Kaffeemaschine",
            "read": true, "write": true,
            "type": "string", "role": "value",
            "value": "", "unit": "",
            "smartName": ""
          },
          {
            "dp": "kaffeemaschine",                       // Datenpunkt für Ein/Aus
            "name": "Kaffemaschine Ein/Aus",
            "read": true, "write": true,
            "type": "boolean", "role": "switch",
            "value": false, "unit": "",
            "smartName": { de: "Kaffeemaschine, Kaffee" , // Smartname für iot zur Übergabe an Alexa
                              smartType: "SWITCH"}
          }
        ]
      }
      //
      // Datenpunkte für Profile (Favoriten) im 0_userdata
      //
      const myProfile = {
          "row": [
              {
                  "profile": "Erich1",                    // beliebiger Favoritenname
                  "DisplayName": "Erichs Kaffee Crema",
                  "Program": "Beverage_Coffee",           // Kaffeespezialität aus cloudless-homeconnect.0.SIEMENS-TI9558X1DE-68A40E7DD334.Program
                  "smartName": { de: "Erichs Kaffee",     // Smartname für iot zur Übergabe an Alexa
                                  smartType: "SWITCH" },
              },
              {
                  "profile": "Erich2",
                  "DisplayName": "Erichs Cappuccino",
                  "Program": "Beverage_Cappuccino",
                  "smartName": { de: "Erichs Cappuccino",
                                  smartType: "SWITCH" },
              },
              {
                  "profile": "Sonja1",
                  "DisplayName": "Sonjas Kaffee Crema",
                  "Program": "Beverage_Coffee",
                  "smartName": { de: "Sonjas Kaffee",
                                  smartType: "SWITCH" },
              },
              {
                  "profile": "Sonja2",
                  "DisplayName": "Sonjas großer Kaffee Crema",
                  "Program": "Beverage_Coffee",
                  "smartName": { de: "Sonjas großer Kaffee",
                                  smartType: "SWITCH" },
              }
          ]
      }
      //
      // Texte zum Anpassen für Ein/Aus
      // Texte im Array mit Komma getrennt werden zufällig wiedergegeben.
      //
      const myPowerState ={
          "2": ["Is <emphasis>schowieder</emphasis> Kaffeezeit!", "Is schowieder Kaffee!"],   // On
          "3": ["Pfiat di.","Servus.","An scheener Kaffee!"],                                             // Standby
      };
      //
      // Texte zum Anpassen der Statusmeldungen. Mögliche Status für andere Maschinen
      // zu finden unter dem Datenpunkt deiner Kaffeemaschine:
      // cloudless-homeconnect.0.SIEMENS-TI9558X1DE-xxxxxxxx.Event
      // Texte im Array mit Komma getrennt werden zufällig wiedergegeben.
      //
      const myStatus = {
          "AdjustGrindSetting": [""],
          "BeanContainerEmpty": ["Bohnenbehälter ist leer. Bitte auffüllen."],
          "BrewingUnitIsMissing": [""],
          "CallHotline": [""],
          "CleanBrewingUnit": ["Bitte Brüheinheit reinigen und einfetten."],
          "CleanFillWaterTank": ["Bitte Wassertank reinigen."],
          "CleanMilkTank": ["Bitte Milchbehälter reinigen."],
          "CloseDoor": ["Bitte Türe schließen."],
          "CoffeeOutletMissing": [""],
          "CustomerServiceRequest": [""],
          "DeactivatePlaylist": [""],
          "DeviceDescalingBlockage": [""],
          "DeviceDescalingOverdue": ["Entkalken der Kaffeemaschine ist überfällig!"],
          "DeviceIsToCold4C": [""],
          "DeviceShouldBeCalcNCleaned": ["Bitte Kaffemaschine entkalken und reinigen."],
          "DeviceShouldBeCleaned": ["Bitte Kaffeemaschine reinigen."],
          "DeviceShouldBeDescaled": ["Bitte Kaffeemaschine entkalken."],
          "DripTrayFull": ["Tropfschale ist voll. Bitte leeren."],
          "DripTrayNotInserted": ["Bitte Tropfschale einsetzten."],
          "EmptyDripTray": [""],
          "EmptyDripTrayRemoveContainer": [""],
          "EmptyMilkTank": ["Milchbehälter ist leer. Bitte auffüllen."],
          "Enjoy": ["Genieße deinen Kaffee.","Möge Dein Kaffee stark und Dein Montag kurz sein.","Alles vor dem ersten Kaffee ist Notwehr.",
          "Du könntest auf Kaffee verzichten. Aber du bist kein Aufgeber.","Guter Kaffee ist wie gute Musik – beides berührt die Seele.",
          "Mit Kaffee und Humor kommt man allem Stress zuvor.","Es sprüht Dein Geist nur träge Funken, hast Du noch nicht Kaffee getrunken.",
          "Ein guter Tag beginnt mit Kaffee und einem Lächeln.","Halte Kurs und trink Kaffee, dann wird das schon!","Wach zu werden und zu leben, beginnt mit Kaffee.",
          "Jede Tasse Kaffee ist eine frische Chance.","Leben passiert, Kaffee hilft."],
          "FillDescaler": [""],
          "InsertWaterFilter": ["Bitte Wasserfilter einsetzen."],
          "MilkContainerConnected": [""],
          "MilkContainerRemoved": [""],
          "MilkReminder": ["Ich erinnere dich, den Milchbehälter zu entfernen."],
          "MilkStillOK": [""],
          "MilkTubeRemoved": [""],
          "NotEnoughPomaceCapacityForThisKindOfBeverage": [""],
          "NotEnoughWaterForThisKindOfBeverage": ["Nicht genügend Wasser für dieses Getränk vorhanden. Bitte auffüllen."],
          "PlaceContainerUnderOutlet": ["Bitte einen Behälter unter dem Auslass stellen."],
          "PlaceEmptyGlassUnderOutlet": [""],
          "PowerSupplyError": [""],
          "PressOnOff": [""],
          "ProgramFinished": ["Das Programm ist beendet. Du hast es geschafft."],
          "RefillEmptyBeanContainer": ["Bitte Bohnenbehälter auffüllen."],
          "RefillEmptyWaterTank": ["Bitte Wassertank auffüllen."],
          "RefillRemovedMilkContainer": [""],
          "RemoveContainerUnderOutlet": ["Bitte Behälter unter dem Auslass entfernen."],
          "RemoveMilkContainer": ["Bitte Milchbehälter entfernen."],
          "RemoveWaterFilter": ["Bitte Wasserfilter entfernen."],
          "RestartAppliance": [""],
          "ServiceProgramFinished": [""],
          "SoftwareUpdateAvailable": ["Ein Softwareupdate ist verfügbar."],
          "SoftwareUpdateSuccessful": ["Das Softwareupdate ist installiert."],
          "SpecialRinsing": ["Spülen ist notwendig."],
          "SwitchOffPower30sekBackOn": [""],
          "SystemHasRunDry": ["Das System ist trocken gefahren. Bitte Wasser nachfüllen oder Filter entfernen."],
          "ThrowCleaningDiscInTheDrawer": ["Bitte gib eine Reinigungstablette in das Fach für Pulverkaffee."],
          "UnderOverVoltage": [""],
          "WaterFilterShouldBeChanged": ["Der Wasserfilter muss gewechselt werden."],
          "WaterTankEmpty": ["Der Wassertank ist leer. Bitte auffüllen."],
          "WaterTankNearlyEmpty": ["Der Wassertank ist fast leer. Für das Spülen reicht es noch."],
          "WaterTankNotInserted": ["Bitte Wassertank einsetzen."],
      }
      //--------------------------- Settings end ---------------------
      const hcEvent =       hcDevice+".Event";
      const hcProgram =     hcDevice+".Program";
      const hcStatus =      hcDevice+".Status";
      const hcPowerState =  hcDevice+".Setting.PowerState";
      const dpProfile =     dpUserdata+".Profile";
      
      init();
      async function init() {
          await createMyConfig(myConfig, dpUserdata);
          await createMyProfile(myProfile, dpProfile);
          await sleep(5 * 1000); // 5 Sekunden Pause
          //
          // Datenpunkt für Start der Kaffeeausgabe im Profile triggern
          //
          on({ id: [].concat(Array.prototype.slice.apply($(dpProfile + ".*.Start"))), change: 'any' }, async (dp) => {
              if (getState(dp.id).val) {
                  // Wenn Start = true
                  var length = dp.id.split(".").length;
                  var program = dp.id.split(".")[length - 2]; // Programmordnername
                  var parameter = dp.id.split(".").pop();
                  var srcFolder = dp.id.replace("." + parameter, ""); // Programmordner ID
                  // Datenpunkte im Quellverzeichnis/Userdata scannen
                  $(srcFolder + ".*").each(function (id, i) {
                      //console.log(id);
                      var parameter = id.split(".").pop();
                      // Parameter übertragen
                      if (parameter != "Start") {
                          var value = getState(id).val;
                          var hcProgramID = hcProgram + "." + program + "." + parameter;
                          setState(hcProgramID, value, false);
                      }
                  })
                  await sleep(1 * 1000); // 1 Sekunden Pause
                  var hcProgramID = hcProgram + "." + program + ".Start";
                  setState(hcProgramID, true, false);
              }
          });
          //
          // Datenpunkte für Event/Statusansagen triggern bei Änderung
          //
          const mySelector = $(hcEvent + ".*");
          mySelector.on(async function (dp) { // triggert bei Wertänderung der Datenpunkte des Selectors
              var event = dp.id.substring(hcEvent.length + 1,)
      
              if (typeof myStatus[event] !== "undefined" && myStatus[event] != "") {
                  if (dp.state.val == 1) {
                      var text = await randomText(myStatus[event]);
                      setMyState(dpUserdata + "." + "status-speak", text);
                  }
              } else {
                  console.log("Keine Übersetzung für: " + event);
              }
          });
          //
          // Pflege triggern
          //
          const maintenance = [hcEvent + ".DeviceDescalingOverdue", hcEvent + ".DeviceShouldBeCleaned",
                      hcEvent + ".DeviceShouldBeCalcNCleaned", hcEvent + ".WaterFilterShouldBeChanged",
                      hcEvent + ".DeviceShouldBeDescaled",
                      hcStatus + ".BeverageCountdownDescaling",hcStatus + ".BeverageCountdownCleaning",
                      hcStatus + ".BeverageCountdownCalcNClean",hcStatus + ".BeverageCountdownWaterfilter"]
          on({ id: maintenance, change: "ne" }, async (dp) => { // triggert bei Änderung der Datenpunkte
              var maintenanceSpeak = ""
              let text="";
              let maintenance = false;    // Version 1.1
              if(getState(hcEvent + ".DeviceDescalingOverdue").val){
                  text = await randomText(myStatus["DeviceDescalingOverdue"]);
                  maintenanceSpeak = maintenanceSpeak + text+" ";
                  maintenance = true;     // Version 1.1
              } else if (getState(hcEvent + ".DeviceShouldBeCleaned").val){
                  text = await randomText(myStatus["DeviceShouldBeCleaned"]);
                  maintenanceSpeak = maintenanceSpeak + text+" ";
                  maintenance = true;     // Version 1.1
              } else if (getState(hcEvent + ".DeviceShouldBeCalcNCleaned").val){
                  text = await randomText(myStatus["DeviceShouldBeCalcNCleaned"]);
                  maintenanceSpeak = maintenanceSpeak + text+" ";
                  maintenance = true;     // Version 1.1
              } else if (getState(hcEvent + ".DeviceShouldBeDescaled").val){
                  text = await randomText(myStatus["DeviceShouldBeDescaled"]);
                  maintenanceSpeak = maintenanceSpeak + text+" ";
                  maintenance = true;     // Version 1.1
              } else if (getState(hcEvent + ".WaterFilterShouldBeChanged").val){
                  text = await randomText(myStatus["WaterFilterShouldBeChanged"]);
                  maintenanceSpeak = maintenanceSpeak + text+" ";
                  maintenance = true;     // Version 1.1
              } else {
                  maintenanceSpeak = "Keine Pflegemaßnahmen für die Kaffeemaschine notwendig.";
              }
              // Pflege notwendig     Version 1.1
              setMyState(dpUserdata + "." + "maintenance", maintenance);
              // Calc’nClean
              let dummy = getState(hcStatus + ".BeverageCountdownCalcNClean").val;
              let countCups = dummy;
              let nextMaitenance = "";
              if (dummy > 0){                         // Version 1.1
                  countCups = dummy;
                  nextMaitenance = "Calc’nClean notwendig in "+countCups+" Tassen.";
              }
              // Entkalken
              dummy = getState(hcStatus + ".BeverageCountdownDescaling").val;
              if (dummy < countCups && dummy > 0){    // Version 1.1
                  countCups = dummy;
                  nextMaitenance = "Entkalken notwendig in "+countCups+" Tassen.";
              }
              // Reinigen
              dummy = getState(hcStatus + ".BeverageCountdownCleaning").val;
              if (dummy < countCups && dummy > 0){    // Version 1.1
                  countCups = dummy;
                  nextMaitenance = "Reinigen notwendig in "+countCups+" Tassen.";
              }
              // Wasserfilter
              dummy = getState(hcStatus + ".BeverageCountdownWaterfilter").val;
              if (dummy < countCups && dummy > 0){    // Version 1.1
                  countCups = dummy;
                  nextMaitenance = "Wasserfilter wechseln in "+countCups+" Tassen.";
              }
              maintenanceSpeak = maintenanceSpeak + " " +nextMaitenance;
              setMyState(dpUserdata + "." + "maintenance-speak", maintenanceSpeak);
          });
          //
          // PowerState triggern
          //
          on({ id: hcPowerState, change: "ne" }, async (dp) => { // triggert bei Änderung der Datenpunkte
              if (typeof myPowerState[dp.state.val] !== "undefined" && myPowerState[dp.state.val] != "") {
                  var text = await randomText(myPowerState[dp.state.val]);
                  setState(echoSpeak, text, false);
              }
          });
          //
          // Datenpunkt für Kaffeemaschine triggern bei Aktualisierung
          //
          on({ id: dpUserdata + ".kaffeemaschine", change: "any" }, async (dp) => { // triggert bei Aktualisierung der Datenpunkte
              if (dp.state.val) {
                  setState(hcPowerState, 2, false);   // On
              } else {
                  setState(hcPowerState, 3, false);   // Standby
              }
          });
          //
          // Datenpunkt für Speak triggern bei Aktualisierung
          //
          on({ id: dpUserdata + ".status-speak", change: "any" }, async (dp) => { // triggert bei Aktualisierung der Datenpunkte
              setState(echoSpeak, dp.state.val, false);
          });
      }
      /**
       * Objekte erzeugen
       * @param {Object} MyConfig Json-Objekt
       * @param {String} dpUserdata Workspace
       */
      async function createMyConfig(MyConfig, dpUserdata) {
        // Config scannen
        for (let i = 0; i < MyConfig.row.length; i++) {
          //console.log('Erzeuge: '+myConfig.row[i].dp);
          await createMyState(dpUserdata+"."+myConfig.row[i].dp, myConfig.row[i].name, myConfig.row[i].name, myConfig.row[i].read, myConfig.row[i].write, myConfig.row[i].type, myConfig.row[i].role, myConfig.row[i].unit, myConfig.row[i].smartName, myConfig.row[i].value);
      
        }
      }
      /**
       * Profile Objekte erzeugen
       * @param {Object} myProfile Json-Objekt
       * @param {String} dpProfile Workspace
       */
      async function createMyProfile(myProfile, dpProfile) {
        // Profile scannen
        for (let i = 0; i < myProfile.row.length; i++) {
          //console.log('Erzeuge Profil: '+myProfile.row[i].profile);
          var srcid = hcProgram+"."+myProfile.row[i].Program;
          var dstid = dpProfile+"."+myProfile.row[i].profile+"."+myProfile.row[i].Program;
          // Datenpunkte im Quellverzeichnis scannen
          $(srcid+".*").each(async function(id) { 
              //console.log("id: "+id);
              var obj = getObject(id);
              if(obj && obj.type === 'state') {
                  var lastElement = id.split(".").pop();  // letztes Element des Datenpunktes
                  setObject(dstid+"."+lastElement, obj);
                  if ( !existsState(dstid+"."+lastElement)) {
                      if (lastElement == "Start"){
                          obj.common.smartName = myProfile.row[i].smartName;
                      }
                      setTimeout(function() {
                          setState(dstid+"."+lastElement, obj.common.def,true);
                      }, 200);
                  }
              };
          })
          await sleep(1*1000);
      //    console.log(dstid+".DisplayName: ->"+myProfile.row[i].DisplayName);
          setState(dstid+".DisplayName", myProfile.row[i].DisplayName,true);
        }
      }
      /**
       * Zufälliger Text
       * @param {Array} text - Array aus mehreren Texten
       * @returns {String} return - gibt einen zufälligen Text aus dem Array zurück
       */
      async function randomText(text) {
          var length = text.length;
          var min = 0;
          var max = length-1;
          var zahl = Math.floor(Math.random() * (max - min + 1)) + min;
          return text[zahl];
      }
      /**
       * Objekt setzen
       * @param {String} state Objektpfad
       * @param {any} value Inhalt  
       */
      async function setMyState(state, value) {
        setState(state, value, true);
      }
      /**
       * Objekt erzeugen
       * @param {String} state Objektpfad
       * @param {String} name Name des Objektes
       * @param {String} desc Beschreibung des Objektes
       * @param {String} type Type des Objektes string,number
       * @param {Boolean} read Leserechte des Objektes
       * @param {Boolean} write Schreibrechte des Objektes
       * @param {String} role Rolle des Objektes button,...
       * @param {String} unit Rolle des Objektes button,...
       * @param {Object} smartName Smartname für Alexa
       * @param {any} value Inhalt  
       */
      async function createMyState(state, name, desc, read, write, type, role, unit, smartName, value) {
        if (type == "number") {
            //value = Number(value);
            await createStateAsync(state, 0, {
                name: name,
                desc: desc,
                read: read,
                write: write,
                type: type,
                role: role,
                unit: unit
            });
        } else {
            if (smartName == "") {
                // ohne Smartnamen
                await createStateAsync(state, value, {
                    name: name,
                    desc: desc,
                    read: read,
                    write: write,
                    type: type,
                    role: role,
                    unit: unit
                });
            } else {
                await createStateAsync(state, value, {
                    // mit Smartnamen
                    name: name,
                    desc: desc,
                    read: read,
                    write: write,
                    type: type,
                    role: role,
                    unit: unit,
                    smartName: smartName
                });
            }
        }
      }
      

      Benutzung auf eigene Gefahr.
      Support kann ich nur eingeschränkt bieten.
      Über Feedback würde ich mich freuen.

      View

      Als kostenlose Zugabe eine View für die Vis 🙂
      Kaffeemaschine Vis.gif

      Voraussetzung

      • Adapter Material Design Widgets
        Für mich das flexibelste und beste Material Widget.
      • Vis 1
        Leider findet sich niemand, der die Material Design Widgets in Vis 2 anpasst. Das ist sehr schade. Für mich ist das unverzichtbar, deshalb muss ich bei Vis 1 bleiben.

      View CardHaushaltEGKücheKaffee.json:
      CardHaushaltEGKücheKaffee.json

      • Edit 14.12.2024
        Neue Version 1.1
        Vis View korrigiert und neue Gif-Animation.
      • Edit 24.12.2024
        Neue Version 1.2
        ack=false für Adapter-Datenpunkte.
      posted in Skripten / Logik
      B
      Bongo
    • RE: Alexa2 3.26.x

      @apollon77 sagte in Alexa2 3.26.x:

      @ammawel Das wäre cool ... und ein grund mehr beim SUpport anzufragen und von ioBroker nichts zu erzählen

      Hab ich gemacht. Hier die Antwort:

      Derzeit, gibt es gibt es ein Paar Probleme in der Alexa, unsere Techniker Arbeiten diesbezüglich schon an einer Lösung. Ich würde Sie bis dahin, um ein wenig Geduld bitten.

      Aber ihr solltet alle Anfragen damit sie sehen, dass ist ein ernsthaftes Problem.

      posted in Entwicklung
      B
      Bongo
    • RE: [SourceAnalytix 0.4.8-Final] Released !

      @dutchman sagte in [SourceAnalytix 0.4.8-Final] Released !:

      musette moeglich sein, ich Überwege aber diese werte als Datenpunkte anstatt der config bereit zu stellen frage währe (auch fuer die version 0.5 woran ich gerade arbeite) ob das sinn macht oder wir die settings hier lassen

      Als einfacher Anwender hätte ich es lieber in einem idiotensicheren Formular als in einem oder mehreren Datenpunkten wo ich mir nicht sicher bin ob ich das was verändern darf.
      Aber bitte auch andere Meinungen.

      posted in Tester
      B
      Bongo
    • RE: [Script] Die sprechende Kaffeemaschine – Home Connect

      @sigi234
      Ich habe noch einen Geschirrspüler und einem Backofen von Siemens über Home-Connect.
      Da wird das Programm für die Kaffeemaschine sicher nicht funktionieren. Aber ich plane auch für diese Geräte ein Script zu machen. Wird aber noch dauern 🙂

      posted in Skripten / Logik
      B
      Bongo
    • RE: Alexa2 3.25.x (Beta) - jetzt wieder mit History :-)

      @emil70 sagte in Alexa2 3.25.x (Beta) - jetzt wieder mit History 🙂:

      @bongo sagte in Alexa2 3.25.x (Beta) - jetzt wieder mit History 🙂:
      So etwas nutze ich nicht.

      Das zu erwähnen, was genau nicht geht ist mit Sicherheit wichtig
      Damit @apollon77 damit etwas anfangen kann

      Ok, das habe ich in meiner Mail an @apollon77 schon richtig beschrieben.
      Wobei bei Schalter ein/aus nicht wichtig ist ob die History aktualisiert wird. Deshalb bin ich davon ausgegangen, das Diejenigen mit Problemen auch ähnliches machen.
      Aber gut, dass wir darüber gesprochen haben 🙂

      posted in ioBroker Allgemein
      B
      Bongo
    • RE: Test Adapter YouTube

      Sehr schöner Adapter.

      Erweiterungs-Vorschlag:
      Ich betreibe Livestreams von Nistkastenkameras mit Livechat. Da wäre es interessent wie viele Zuschauer es gerade hat. Wenn gerade viel los ist und eine Grenze überschritten wird, könnte man dan in den Chat mit einsteigen.

      posted in Tester
      B
      Bongo
    • RE: [Script] Die sprechende Kaffeemaschine – Home Connect

      Ich habe noch ein paar Änderungen gemacht:

      • Ein kleiner Bugfix.
      • Ein neuer Datenpunkt maintenance. Ich benutze das in meinem Sprachbefehl "Status Haus", wo geöffnete Fenster, schwache Batterien usw. ausgegeben werden. Wenn maintenance=true ist eine Pflege der Kaffeemaschine nötig und der Text in maintenance-speak wird in der Sprachausgabe mit ausgegeben.
      • Statusmeldungen etwas angepasst.
      posted in Skripten / Logik
      B
      Bongo
    • RE: Alexa2 3.26.x

      Im Gegensatz zu heute Morgen läuft es bei mir jetzt wieder ohne Update mit der v3.26.3.

      posted in Entwicklung
      B
      Bongo
    • Wolf Link Home, ISM7i, ISM8i - Was ist nötig?

      Seit kurzem habe ich eine Wolf Wärmepumpe CHA am Laufen.
      Jetzt stellt sich mir die Frage, wie bekomme ich die Betriebsdaten in den ioBroker? Hauptsächlich zur Visualisierung oder vielleicht kann man sogar was steuern.

      Als Adapter habe ich wolf und wolf-smartset ausgemacht.
      Dann gibt es noch verschiedene Schnittstellenmodule in der Wärmepumpensteuerung:

      Wolf Link Home
      ISM7i
      ISM8i
      Mal mit i mal ohne. Mal mit Cloud mal ohne.

      Wolf Link Home liegt vor mir aber noch verpackt. Bevor ich es öffne, vielleicht kann Jemand sagen was ich benötige?
      Oder gar einen kleinen Praxisbericht geben?

      Einen speziellen Thread für den Wolf-Adapter gibt es wohl nicht. Da könnten sich die Nutzer besser austauschen.

      Edit 18.03.2024:
      Nach Recherche und freundlicher Unterstützung von @UlliJ hier meine Erkenntnisse.
      Falls meine Aussagen nicht zutreffen, bitte unten korrigieren. Dann werde ich es anpassen.

      Schnittstellenmodule:

      • ISM7i ist das selbe wie Wolf Home link.
        Benutzung mit Smartset App, Smartset PC-App und Adapter wolf-smartset über die Wolf Smartset Cloud.
        Alternativ mit Benutzung von ism7mqtt. Siehe Empfehlung unten von @UlliJ. Nicht parallel mit Smartset App nutzbar.

      • ISM7e läuft bei Wolf unter der Bezeichnung Wolf Home link Pro.
        Ist im Prinzip ein ISM7i in einem externen Gehäuse mit ein paar kleinen Unterschieden. Läuft vermutlich auch mit Smartset App, Smartset PC-App und Adapter wolf-smartset.

      • ISM8i läuft über ein offenes TCP/IP-Protokoll.
        Benutzung über Adapter wolf mit Anzeigen und Änderung. Mit Smartset App nicht möglich.

      • ISM9i scheint ausschließlich für WiButler zu sein.
        An verschiedenen Stellen wird auch von Wolf Home link Pro gesprochen.

      posted in ioBroker Allgemein
      B
      Bongo
    • RE: Scriptsammlung Vol. 2 -- Diskussion

      Ich habe ein Script bereit gestellt und kann gerne in die Scriptsammlung aufgenommen werden:
      [Script] JUDO Wasserenthärtung - Connectivity-Modul API

      Ziel – Was kann das Programm?

      • Nutzung der JUDO API über das Connectivity-Modul. Keine Cloud!
      • Auslesen der Werte:
        Gerätetyp, Gerätenummer, SW-Version Gerätesteuerung, Inbetriebnahme Datum, Betriebsstundenzähler, Wunschwasserhärte, Weichwassermenge.
        Gesamtwassermenge (Wasserverbrauch) Tagesstatistik, Wochenstatistik, Monatsstatistik, Jahresstatistik.
      • Berechnen der Werte mit Unterstützung der Fa. JUDO:
        Gesamtwassermenge (Wasserverbrauch), Anzahl der Regenerierungen, Salzvorrat, Minerallösungsvorrat, gesamter Salzverbrauch, gesamter Minerallösungsverbrauch.
      • Warnung für das Nachfüllen und des Salz- und Minerallösungsvorrates. Auch für Sprachassistent, Nachricht und VIS nutzbar.
      • Pflegestatus in Textform der Pflegemaßnahmen für Sprachassistent, Nachricht und VIS.
      posted in Skripten / Logik
      B
      Bongo

    Latest posts made by Bongo

    • RE: ioBroker App 2023 [Android & iOS] - jetzt erhältlich

      @da_woody sagte in ioBroker App 2023 [Android & iOS] - jetzt erhältlich:

      @bongo im Vordergrund wird halt aktualisiert. Im Hintergrund nicht.

      Im Hintergrund muss ja nicht aktualisiert werden. Ich dachte man könnte das Neuladen verhindern.
      Aber wenn das bei Allen so ist ...

      posted in Tester
      B
      Bongo
    • RE: ioBroker App 2023 [Android & iOS] - jetzt erhältlich

      Hi,
      auch wenn ich die App für nur 2 Min. in den Hintergrund gebe und dann wieder in den Vordergrund wird immer neu geladen.
      Da kann man doch sicher noch Einstellungen optimieren? Ich weiß aber nicht wo.

      Android, Samsung S24.

      posted in Tester
      B
      Bongo
    • RE: Test Adapter Zendure Solarflow

      @nograx sagte in Test Adapter Zendure Solarflow:

      @karacho sagte in Test Adapter Zendure Solarflow:

      Frage:
      Wenn ich den Smart Meter D0 von Zendure in der Zendure App anmelde, erscheint der dann wir der Speicher auch in der iobroker Zendure Instanz, so dass ich den vom Zähler gelieferten aktuellen Wert im iobroker verarbeiten kann wie beim Bitshake?

      Danke

      Stand jetzt, nein. Dazu wären größere Anpassungen notwendig.

      Schade, hätte mir auch gefallen. Dann ist es wohl mit dem Shelly 3EM genauso?

      Kann man den Smart Meter D0 im ioBroker nativ einbinden?

      posted in Tester
      B
      Bongo
    • RE: Test Adapter Zendure Solarflow

      @maxclaudi
      Danke für die ausführliche Antwort.
      Da werde ich als Adapter-Anfänger wohl bei der Cloud bleiben. Im Moment vermisse ich nichts. Wobei ich auch nicht weiß was ich vermissen könnte 🙂

      posted in Tester
      B
      Bongo
    • RE: Test Adapter Zendure Solarflow

      Liefert Cloud und lokal mit MQTT eigentlich die selben Datenpunkte? Oder liefert da das Eine mehr als das Andere?

      posted in Tester
      B
      Bongo
    • RE: Support Adapter Energiefluss-erweitert v0.7.7

      @warp735 sagte in Support Adapter Energiefluss-erweitert v0.7.7:

      @bongo
      Schwellwerte

      Hab ich schon gesehen. Dachte das der mit CSS zusammen hängt.
      Aber Schwellwert auf 1 geändert und die Animation stoppt bei 0. Soweit bin ich glücklich. 🙂

      posted in Visualisierung
      B
      Bongo
    • RE: Support Adapter Energiefluss-erweitert v0.7.7

      @warp735
      Hätte ich auch selbst drauf kommen können 🙂
      23a523c3-1bc2-4277-b101-97b79b248250-grafik.png

      Bei minus wird jetzt umgekehrt. Eigentlich dachte ich bei 0 wird keine Animation dargestellt. Wird aber bei 0 trotzdem animiert. 0 wird wohl auch als positiv interpretiert.
      Gibt es da noch einen Trick?

      posted in Visualisierung
      B
      Bongo
    • RE: Support Adapter Energiefluss-erweitert v0.7.7

      @warp735 sagte in Support Adapter Energiefluss-erweitert v0.7.7:

      @bongo
      Ich hab es auch so. Allerdings wechselt mein DP von + nach - und somit die Richtung.

      Ich habe mir jetzt einen Datenpunkt erstellt, der von + nach - wechselt. Aber wie bringe ich der Linie bei, dass es die Richtung wechselt?

      posted in Visualisierung
      B
      Bongo
    • RE: Support Adapter Energiefluss-erweitert v0.7.7

      Danke für die Antworten.
      Das in der Mitte stellt den Zendure Hyper 2000 dar, mit dem alles Verbunden ist und alles steuert. Deshalb finde ich es schon eine logische Darstellung.
      Wollte es vermeiden aber dann werde ich mir wohl einen Hilfsdatenpunkt machen müssen.

      posted in Visualisierung
      B
      Bongo
    • RE: Support Adapter Energiefluss-erweitert v0.7.7

      @skb
      Naja, ich wollte es wie in der Zendure-App nachbilden.
      Screenshot_20250703_114212.jpg

      posted in Visualisierung
      B
      Bongo
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo