Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Homematic –> MODBUS, MODBUS --> Homematic

    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

    Homematic –> MODBUS, MODBUS --> Homematic

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mguenther last edited by

      Tag zusammen - ich bin zu doof und brauch mal wieder Hilfe…

      Folgendes:

      Ich hatte https://forum.iobroker.net/viewtopic.php?f=21&t=13479 bereits einmal eine Frage zum Datenabgleich HM und MODBUS gestellt und hat auch alles wunderbar geklappt. Ich steuere meine Lüftung über MODBUS und die Berechnung erfolgt über HomeMatic. Soweit auch so gut. Ich hatte mich gewundert, warum ich hin und wieder Fehler im LOG mit MODBUS hatte, Thema wurde https://forum.iobroker.net/viewtopic.php?f=20&t=13214, gelöst ist es nicht ganz.

      Eine Quelle der Fehler habe ich bis jetzt ausfindig gemacht. Es liegt an unserer Lüftung selber. An unserer Lüftung ist ein Bedienfeld, an dem ich die Vorheizstufe und die Lüftungsintensität einstellen kann. Die Idee ist jetzt und auch der Wunsch meines weiblichen Wesens, dass die Lüftungseinstellungen, die an der Fernbedienung eingestellt werden, für mind. eine Stunde ausgeführt werden. Und wenn ich genau das mache und die Fernbedienung nutze, dann hängt sich der MODBUS Adapter auf und ich muss ihn jedes Mal neustarten. Das mache ich bis jetzt mit diesem Skript:

      on({id: 'hm-rega.0.35587'/*Lueftung_Eingabe_manuell*/, change: "any"}, function (Lueftungstest) {
          if (getState("hm-rega.0.35587").val)
              {
              var obj = getObject("system.adapter.modbus.0");
              obj.common.enabled = false;  // Adapter einschalten
              setObject("system.adapter.modbus.0", obj);
              }
          else
              {
              var obj = getObject("system.adapter.modbus.0");
              obj.common.enabled = true;  // Adapter einschalten
              setObject("system.adapter.modbus.0", obj);
              }
          }
      )
      

      Die Variable "hm-rega.0.35587" ist eine Variable, die ich mir in HM ("Lueftung_Eingabe_manuell") setze, sobald ich einen Wert manuel in der Lüftung setze (quasi bei Eingabe über die Fernbedienung).
      6305_hm_manuwert_modbus.png
      Der Screenshot zeigt das HM Programm und das darin enthaltene Skript folgendermaßen aus:

      real Heizwert_manu = dom.GetObject("Lueftung_Heizstufe_manu").Value();
      real Heizwert = dom.GetObject("Lueftung_Heizstufe").Value();
      real L_Stufe_manu = dom.GetObject("Lueftung_Stufe_manu").Value();
      real L_Stufe = dom.GetObject("Lueftung_Stufe").Value();
      boolean Manuell = dom.GetObject("Lueftung_Eingabe_manuell").Value();
      if (Heizwert_manu != Heizwert) {
      	Heizwert=Heizwert_manu;
      	Manuell = true;
      }
      if (L_Stufe_manu != L_Stufe) {
      	L_Stufe=L_Stufe_manu;
      	Manuell = true;
      }
      dom.GetObject("Lueftung_Heizstufe").State(Heizwert );
      dom.GetObject("Lueftung_Stufe").State(L_Stufe );
      dom.GetObject("Lueftung_Eingabe_manuell").State(Manuell );
      

      Damit die Datenübergabe aus IoBroker MODBUS an HM funktioniert anbei noch das Skript in IoBroker:

      /*Lueftungstemperatur von MODBUS an HomeMatic Lueftung_Temp1*/
      const idSrc1 = "modbus.0.holdingRegisters.214_REG_HC_TEMP_IN2";
      const idDst1 = "hm-rega.0.31793";
      /*Lueftungstemperatur von MODBUS an HomeMatic Lueftung_Temp4*/
      const idSrc2 = "modbus.0.holdingRegisters.213_REG_HC_TEMP_IN1";
      const idDst2 = "hm-rega.0.31794";
      /*Lueftungstemperatur von HomeMatic Lueftung_Stufe an MODBUS*/
      const idSrc3 = "hm-rega.0.31807";
      const idDst3 = "modbus.0.holdingRegisters.100_REG_FAN_SPEED_LEVEL";
      /*Lueftungstemperatur von MODBUS an HomeMatic Lueftung_Stufe_manu*/
      const idSrc4 = "modbus.0.holdingRegisters.100_REG_FAN_SPEED_LEVEL";
      const idDst4 = "hm-rega.0.35699";
      /*Lueftungstemperatur von HomeMatic Lueftung_Heizstufe an MODBUS*/
      const idSrc5 = "hm-rega.0.32784";
      const idDst5 = "modbus.0.holdingRegisters.206_REG_HC_TEMP_LVL";
      /*Lueftungstemperatur von MODBUS an HomeMatic Lueftung_Heizstufe_manu*/
      const idSrc6 = "modbus.0.holdingRegisters.206_REG_HC_TEMP_LVL";
      const idDst6 = "hm-rega.0.35549";
      
      var val1 = Math.round(getState(idSrc1).val);
      var val2 = Math.round(getState(idSrc2).val);
      
      setState(idDst1, val1); 
      setState(idDst2, val2); 
      on(idSrc1, function(dp) {
         var val = Math.round(dp.state.val);
         if(val != val1) {
            setState(idDst1, val);
            val1 = val;
         }   
      });
      on(idSrc2, function(dp) {
         var val = Math.round(dp.state.val);
         if(val != val2) {
            setState(idDst2, val);
            val2 = val;
         }   
      });
      setState(idDst3, getState(idSrc3).val); // Scriptstart
      on(idSrc3, idDst3); // Aktualisierung bei Wertänderung
      setState(idDst4, getState(idSrc4).val); // Scriptstart
      on(idSrc4, idDst4); // Aktualisierung bei Wertänderung
      setState(idDst5, getState(idSrc5).val); // Scriptstart
      on(idSrc5, idDst5); // Aktualisierung bei Wertänderung
      setState(idDst6, getState(idSrc6).val); // Scriptstart
      on(idSrc6, idDst6); // Aktualisierung bei Wertänderung
      

      Das klappt aber leider eben genau nicht wie gewünscht. Wenn ich manuell etwas ändere, dann springt zwar die Variable "Lueftung_Eingabe_manuell" auf wahr, so soll es auch sein. Wenn aber der berechnete Wert sich ändert (die Variable "Lueftung_Stufe" bzw. "Lueftung_Heizstufe"), ändert sich dann ja quasi auch der MODBUS-Registereintrag und damit wieder die Variable "Lueftung_Eingabe_manuell" (erst wahr, dann falsch). Das hat zur Folge, dass dann auch bei den berechneten ständig der Modbusadapter gestoppt und wieder (mit einer Pause von 1h) gestartet wird. Das soll er aber gar nicht.

      Wisst ihr, was ich meine? Wie kann ich das lösen? Ich bin mir nicht so sicher, ob es ein HM oder ein IoBroker Logik-Problem bei mir ist.

      Quasi soll bei manueller Eingabe der Modbus Adapter gestoppt und gestartet werden, die Werte 1h genutzt werden und dann wieder die in HM berechneten….

      danke

      1 Reply Last reply Reply Quote 0
      • M
        mguenther last edited by

        da ich mir nicht sicher bin, ob ich ein Logik-Problem bei IoBroker habe oder eben einen Denkfehler in HomeMatic, habe ich mal auch dort im Forum einen Thread eröffnet. Hier ist der Link:

        https://homematic-forum.de/forum/viewto … 19&t=43483

        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        628
        Online

        31.7k
        Users

        79.9k
        Topics

        1.3m
        Posts

        1
        2
        541
        Loading More Posts
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes
        Reply
        • Reply as topic
        Log in to reply
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
        The ioBroker Community 2014-2023
        logo