Homematic
ModBus in Homematic

ModBus in Homematic

Als meine neue Pelletheizung von Solarfocus kam, war mir klar, dass die Heizung irgendwie ins Smarthome mit Homematic muss. Da die Heizung über eine ModBus Schnittstelle verfügt, habe ich mir vom Hersteller die Schnittstellenbeschreibung zukommen lassen.
Die Freischaltung zur Nutzung des ModBus musste vom Hersteller per Fernaufschaltung durchgeführt werden. (5min)

Wer hier Fachinfos zum ModBus erwartet, den muss ich leider enttäuschen. Bei mir läuft es wie im Folgenden beschrieben. Bei Problemen kann ich wahrscheinlich nicht helfen. Aber versuchen kann man es ja. 🙂

Voraussetzung:

  1. Installierten ioBroker (https://www.iobroker.net)
  2. Installierten ModBus Adapter
  3. CCU 2/3
  4. Gerät ist für die Kommunikation über den ModBus eingerichtet (In meinem Fall ist das die Pelletheizung von Solarfocus (https://www.solarfocus.com/produkte/Waermepumpe/EcoManager-t_Modbus-TCP-Registerdaten_Anleitung.pdf)

Wenn der Adapter installiert ist, müssen zuerst die Verbindungsparameter eingegeben werden. Diese sollten bei der Schnittstellenbeschreibung vorhanden sein.

Jetzt kommt der schwierige Teil. Die Zuordnung der Adressen zu den Geräten. Wichtig dabei ist die Start-Adresse rechts oben. Bei mir 30001. Diese Startadresse hat zur Folge, dass sich alle ModBus-Adressen automatisch auf die Start-Adresse aktualisieren.

In meinem Beispiel ist meine erste Startadresse laut Anleitung des Herstellers, die „1100“. Wenn ich die Adresse eingebe, ergänzt der Adapter in iobroker automatisch auf 31100. Der Name und die Beschreibung ist frei wählbar. Die Einheit ist zur reinen Optik. Wichtig ist noch der Typ, Länge und Faktor.

Bei Typ muss man rumprobieren, was funktioniert. Bei ioBroker unter „Objekte“ erscheinen dann die neuen Geräte. Wenn der Wert stimmt, war der Typ richtig. 🙂

Der Faktor sollte ebenfalls in der Schnittstellenbeschreibung stehen.

ACHTUNG – BESONDERHEIT: Bei mir war es so, dass die Adresse selbst nicht funktioniert. Ich musste bei mir über die nächsthöhere Zahl nehmen.

Also in der Anleitung steht: 1100 = Vorlauftemperatur. Ich gebe also 31100 ein und es passiert nichts. Erhöhe ich um eine Zahl auf 31101, erhalten ich die Vorlauftemperatur. Keine Ahnung ob das ein Bug ist, oder üblich bei ModBus. Bei mir funktioniert es seit einigen Wochen so Problemlos.

Zu guter letzt habe ich in Homematic die Systemvariablen erstellt und in ioBroker unter „Skripte“ per Blockly ein paar Bausteine eingebaut, sodass die Objekte auch in die CCU übertragen werden.

Im Anschluss habe ich noch ein Script in Homematic erstellt, womit ich den Pelletlager Füllstand überwachen kann. Wer den selben Aufbau hat, kann das gerne in die Kommentare schreiben, dann ergänze ich das Script hier noch.

9

9 thoughts on “ModBus in Homematic

    • Hallo,

      das script für den Pelletlager-Füllstand würde mich interessieren. Leider gibt es ja bei Fronius kein Register, das den Verbrauch ausgibt. Wie berechnest du das, aus der Aschebox?

      Grüße
      Daniel

      • Hallo Daniel,
        nein, nicht über die Aschebox, wobei die Idee auch nicht schlecht ist. Über Modbus erfahre ich, wann die Pumpe läuft, um Pellets einzusaugen. Immer wenn die Pumpe läuft, ziehe ich 8kg von der Lagermenge ab. Die 8kg sind definitiv falsch, aber Sie sind annähernd richtig, sodass sich der Verbrauch +/- 10% gut schätzen lässt.

        #HIER DAS PROGRAMM Nr. 1
        integer Fs = dom.GetObject(„Pelletlager_Fuellstand“).Value();
        integer Sa = dom.GetObject(„PH-Saugaustragung“).Value();
        integer ZwS = Fs – Sa;
        dom.GetObject(„Pelletlager_Fuellstand“).State(ZwS);

        Ich gleichen Programm berechne ich noch die Kosten die auf Lager sind, und auch den Füllstand in %. Kann man auch in ein Programm machen, aber ich hab da noch meine Kommentare mit der Historie drin 🙂

        #HIER DAS PROGRAMM Nr. 2
        !Pelletswert berechnen
        real Fs = dom.GetObject(„Pelletlager_Fuellstand“).Value();
        real PPt = dom.GetObject(„Pelletspreis“).Value();
        real maF = dom.GetObject(„Pelletlager_max_Fuellstand“).Value();
        real maFP = dom.GetObject(„Pelletlager_Fuellstand_Prozent“).Value();

        !Pelletpreis je kg
        var PPkg = PPt / 1000;

        !Umrechung auf Prozent
        var FsP = (Fs / maF) * 100;

        !Wert aktuell auf Lager
        var vb = Fs * PPkg;

        !Pelletkosten für volles lager berechnen
        !Differenz zum vollen Lager in kg
        real dif = maF – Fs;

        !Berechnung Differenz zum vollen Lager x Pelletpreis je kg
        var difG = PPkg * dif;

        dom.GetObject(„Pelletswert“).State(vb);
        dom.GetObject(„Pelletskosten_volles_Lager“).State(difG);
        dom.GetObject(„Pelletlager_Fuellstand_Prozent“).State(FsP);

        Beste Grüße…

        • Hallo Michael,

          8 kg sagst du? Was für einen Kessel hast du? Bei mir meinte der Solarfocus-MA, es würden 40 kg in den internen Pellettank passen, wobei der nie ganz leer wird. Aber bei 8 kg wäre er ja noch zu 3/4 voll. Ich muss mal schauen, ob ich das irgendwo nachlesen kann…
          Wie bist du auf den Wert 8 kg gekommen? Kann ja schlecht den Kessel auf die Waage stellen 😀
          Beste Grüße
          Daniel

          • Ja, bei mir auch. Ich sehe nur, wenn das Lager leer ist, ob ich mit dem er zu hoch oder zu niedrig war. Wenn du irgendwie rausbekommen hast, wir viel Liter mit einmal ansaugen geholt werden, wäre es klasse, wenn du die Info hier Teilst. 😊

            • Also ich werde das mit der Aschebox mal testen. Aktuell steht die Box bei 7%, den Verbrauch gibt die Steuerung bei mir mit 145kg an. Auf 100% hochgerechnet wären das ziemlich genau 2 Tonnen, also 20kg je %. Den Wert nehme ich jetzt erst einmal an, wenn er nicht stimmt (ich habe den Kessel erst seit kurzem), kann ich den ja immernoch mit einem Faktor multiplizieren. Mir kommt das jedenfalls sicherer vor, als das Sauggebläse, hier gibt es zu viele Unsicherheiten (Freigabezeiten fürs Sauggebläse, kein Saugvorgang während der Kessel läuft usw. -> dass da immer die gleiche Menge gezogen wird kann ich mir nicht vorstellen), auch wenn es sich übers Jahr gesehen dann sicher irgendwann ausgleicht. Das einzige, was man bei der Aschebox beachten muss ist, dass beim Leeren der Box der bis dahin ausgerechnete Verbrauch beibehalten und dazuaddiert werden muss, aber das ist ja kein großes Ding. Ich speichere den bisherigen Wert ab, sobald die Box wieder 0% meldet. Ich werde die nächsten Wochen mal beobachten, ob der so errechnete Wert in der Nähe des Wertes bleibt, den die Solarfocus-Steuerung ausgibt. Eigentlich verwunderlich, dass ein so wesentlicher Wert nicht über Modbus ausgegeben wird…
              Grüße
              Daniel

            • Wenn das klappt, wäre das mega und super, wenn du Bescheid geben könntest.

    • Hallo,

      das script für den Pelletlager-Füllstand würde mich interessieren. Leider gibt es ja bei Fronius keine Modbus-Adresse, die den Verbrauch ausgibt. Wie berechnest du das, aus der Aschebox?

      Grüße
      Daniel

    • Hallo,

      ich bin selbst Besitzer einer Fröling-Pelletheizung und habe die Einbindung auf meiner CCU3 auf den Plan stehen. Soweit hast du das gut beschrieben, aber ich als Neuling habe da natürlich noch zwei, drei Fragen:

      Auf welcher Plattform läuft ioBroker? NAS, CCU3 oder Raspberry Pi?
      Erfolgt der Datenzugriff auf deine Heizung per LAN (CCU3 ioBroker Heizung) oder indirekt über Datenkabel auf die ioBroker-Plattform?

      Vielen Dank für deine Hinweise

      Grüße
      Marc

      • Hallo Marc,
        Inzwischen läuft bei mir alles auf einem Server. Für die „normalen“ Anwender ist das etwas übertrieben. Gestartet hatte ich, wie viele andere, mit einem Raspberry Pi. Die Heizung ist per LAN im Netzwerk. Die Daten werden dann von der Heizung an ioBroker übertragen und von dort über „Skripte“ in die CCU.

        PS: Ich habe eine Solarfocus Pelletheizung und weiß nicht, ob eine Frölingheizung das selbe ModBussystem hat, falls ja kann du mich bei Problemen gerne fragen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.