Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Einbindung von Modbus TCP

    Hallo Leute,

    würde gerne meine IDM Wärmepumpe in SmartHome integrieren.
    IDM stellt mir Modbus TCP zur Verfügung.

    Gibt es dafür ein funktionierendes Plugin?

    #2
    Es gibt verschiedene Möglichkeiten, hängt davon ab wie deine Kenntnisse sind:

    1. Du schreibst dir ein eigenes SmartHomeNG Plugin, dass Modbus TCP über die pymodbus lib https://pymodbus.readthedocs.io/en/latest/ verwendet. Ein fertiges Beispiel ist z.B. mein Pluggit plugin, siehe https://github.com/smarthomeNG/plugi...evelop/pluggit
    Dafür brauchst du auf jeden Fall die Modbus Register Beschreibung vom Hersteller.

    2. Du installierst dir node-red ( https://nodered.org/ ) und einen MQTT Broker ( https://mosquitto.org/ ) und verwendest z.B. node-red-contrib-modbus um die Anbindung für deine Wärmepumpe zu realisieren. Von node-red werden die Daten dann über MQTT an den MQTT Broker geschickt und auf SmartHomeNG-Seite gibt es seit kurzem ein MQTT Client Plugin https://github.com/smarthomeNG/plugi...e/develop/mqtt womit du die Daten dann nach SmartHomeNG bekommst.

    3. Wenn 1. und 2. rausfällt, laut https://www.idm-energie.at/de/idm-navigator.html gibt es ja eine KNX-Schnittstelle, z.B. die hier http://www.siblik.com/produkte/heizu...knx-modul.html

    Hoffe das hilft dir schon mal weiter.

    Gruß,
    Henning

    Kommentar


      #3
      Kollege, gleiches/identisches Thema nur ein paar km südlich ...
      https://knx-user-forum.de/forum/%C3%...sw-l%C3%B6sung

      Vielleicht telefonieren wir mal kurz ...

      Kommentar


        #4
        Hallo zusammen,
        ich hab ein Plugin für meine Dimplex Wärmepumpe geschrieben. Greif ebenfalls über Modbus TCP die Daten ab.
        Läuft schon seit ca. einem Jahr problemlos bei mir. Hab das Plugin nur leider noch nicht der Community zur Verfügung gestellt...

        Kann ich bei Interesse aber gerne machen...

        Gruß
        Christian

        Kommentar


          #5
          am besten wäre es das Modbus TCP Plugin ähnlich dem KNX plugin aufzubauen, sodass man im item das Register und die Funktion angeben kann und dann den inhalt bekommt, dann wäre es universell für alles einsetzbar ..

          Kommentar


            #6
            Zitat von fuppy Beitrag anzeigen
            Kann ich bei Interesse aber gerne machen...
            Hätte großes Interesse an deinem PlugIn.

            Kommentar


              #7
              Zitat von Bonze Beitrag anzeigen
              am besten wäre es das Modbus TCP Plugin ähnlich dem KNX plugin aufzubauen, sodass man im item das Register und die Funktion angeben kann und dann den inhalt bekommt, dann wäre es universell für alles einsetzbar ..
              Das wäre wirklich eine gute Idee. Allerdings gibt es da auch funktionen wo das nicht so einfach geht. z.b. meherere Register auf einmal lesen.

              Kommentar


                #8
                Ja z.b. ginge das nur wenn man nem array -liste oder aehnliches als item wert hat
                vl sollten wir mal auf ner plugin basis, ein sehr allgemeines plugin entwickeln.. 1bit , 8bit , 16bit werte sollte es schon können ...

                Kommentar


                  #9
                  Zitat von macs412 Beitrag anzeigen
                  Hätte großes Interesse an deinem PlugIn.
                  Zitat von fuppy Beitrag anzeigen
                  Kann ich bei Interesse aber gerne machen...

                  Hey Jungs, was ist den daraus geworden?

                  Kommentar


                    #10
                    mh hatte da was, ist aber recht alt und unspezifisch, es gab doch dieses Modbus Plugin für den Trovis? Naja egal, das lesen usw von modbus tcp sollte kein Problem darstellen ..

                    könnte eventuell ein Grundplugin zur verfügung stellen , müsste es vorher nur etwas aufräumen, dann könntest du für dein gerät eventuell ein struct anlegen ...
                    Zuletzt geändert von Bonze; 10.12.2021, 21:08.

                    Kommentar


                      #11
                      Zitat von Bonze Beitrag anzeigen
                      könnte eventuell ein Grundplugin zur verfügung stellen , müsste es vorher nur etwas aufräumen
                      Das wäre eine feine Sache.

                      Wenn ich diese Modbus-Geschichte richtig verstanden habe.
                      Ich erklär es jetzt mal mit "Nicht-Programmierer-Worten"

                      In diesem Beispiel: ein Wechselrichter und ein RasPi die im selben Netzwerk hängen.

                      (vgl. hierzu Seite 17 vom Handbuch https://www.solaredge.com/sites/defa...nical-note.pdf )

                      Der WR ruft die Nummer 40083 kurze Pause 2135
                      Der RasPi hört die 40083 / 2135 --> weiß 40083 = I_AC_Power in Watt --> schreibt "aktuelle Leistung 2135 Watt

                      60 sekunden später
                      selbes Spiel

                      ich glaube aber das der WR bzw. Modbus nur auf Anforderung sendet, richtig? --> dann müsste es heißen RasPi ruft 40083 --- WR sendet 2135 --- RasPi schreibt Leistung 2135 Watt.


                      Dann wäre es nur eine Fleißaufgabe, die Nummern (Adress / base0 - base1) mit der richtigen Einheit und kurzem Kommentar in der plugin.yaml (die vom Plugin selbst) einzutragen.





                      Bin gespannt ob wenigstens ein Teil von meiner Ausführung richtig ist.
                      Danke

                      Kommentar


                        #12
                        Zitat von Maexle Beitrag anzeigen
                        Bin gespannt ob wenigstens ein Teil von meiner Ausführung richtig ist.
                        Ja. Die Hauptarbeit ist die Identifikation der Register und die Übersetzung der zurückgelieferten Int-Werte in die finalen 'echten' Werte samt Kommastellen und Maßeinheiten. Kannst Du Dir im Trovis-Plugin alles ansehen - und sogar dessen Config-Dateien so umbiegen, dass Du statt einer Trovis Dein Gerät mit dem Plugin ausliest. Das Plugin ist mit Absicht so geschrieben, dass man weitere Geräte einfach adaptieren kann ...

                        Konfigurationsdatei mit Registern: hier
                        Als Beispiel die VL-Temp im Heizkreis 1:
                        Mein Variablenname (von mir frei definiert): VorlauftempVF1; Register Nr. 12, Datentyp Zahl, Faktor 0.1, Einheit °C.
                        Derzeit liefert das Register 12 auf Anfrage den Wert 284 zurück = 28.4 °C.

                        Zugehörige Itemdefinition:
                        Code:
                                vf1:
                                    desc: Vorlauffühler 1 (Anlage 2.1 - sekundär, Heizkreis 1)
                                    type: num
                                    trovis557x_var: VorlauftempVF1
                                    liste: []
                                    visu_acl: ro
                                    database: 'init'
                        Hoffe, das hilft weiter.

                        /tom

                        Edit: Zusätzlich hat jedes Item des Trovis-Plugins ein Attribut "liste", in dem die wichtigen Werte nochmal als einfache Liste vorgehalten werden: [Buswert, Echtwert, Einheit] - [284, 28.4, '°C']. So wird sichergestellt, dass die ausgelesenen Werte auch durch Drittplugins beliebig verwendet können.
                        Zuletzt geändert von Tom Bombadil; 11.12.2021, 11:29.

                        Kommentar


                          #13
                          Vl wäre es besser, das trovis plugin zu nutzen um ein eventuelles modbus master plugin zu generieren, welches universell für viele geräte genutzt werden kann..
                          Die register müssten ja in einer doku stehen..
                          Was eventuell schwierig werden könnte sind die verschiedenen modbus functions, wobei ich aber glaube, bei normalen geräten wird da nur die registerfunktion genutzt, in der automatisierungstechnik siehts da etwas anders aus...

                          Achso, modbus funktioniert nach dem master-client prinzip, du musst dir das so vorstellen, im WR is ne art tabelle hinterlegt, die register sind die Zeilen, der WR schreibt seine aktuellen Daten in diese Tabelle rein. SHNG schickt dann über modbus die anforderung eine gewisse zeile auszulesen, und der WR sendet diese daten dann zurück .. das wäre so der vereinfachte anwendungsfall..
                          Zuletzt geändert von Bonze; 11.12.2021, 09:21.

                          Kommentar


                            #14
                            die kosalmodbus und ksemmodbus sind bereit recht universell aufgebaut, und man könnte mit dem selben Prinzip andere Gerätschaften adaptiert. Für das solaredge - Plugin geht das leider nicht so ganz universell, da dort einige Werte aus zwei Registern berechnet werden müssen: in einem Register steht der Wert und im anderen der Scale-Faktor. (dies könnte natürlich dann über die SH-Items mit eval,.. verrechnet werden)

                            Code:
                            'I_AC_Power' : 40083, # 40084: AC Power Value, int16
                            'I_AC_Power_SF' : 40084, # 40085: AC Power Scale Factor, int16
                            
                            Result = Value + ScaleFaktor
                            Zuletzt geändert von ivande; 11.12.2021, 10:23.

                            Kommentar


                              #15
                              Zitat von ivande Beitrag anzeigen
                              Code:
                              'I_AC_Power' : 40083, # 40084: AC Power Value, int16
                              'I_AC_Power_SF' : 40084, # 40085: AC Power Scale Factor, int16
                              
                              Result = Value + ScaleFaktor
                              Ja, in dem Fall dann wohl sowas hier:

                              Code:
                              'I_AC_Power_SF':
                                 type: num
                              
                              'I_AC_Power':
                                  type: num
                              
                              'I_AC_Power_final':
                                  type: num
                                  eval: ..I_AC_Power_SF() * ..I_AC_Power()
                                  eval_trigger: ..I_AC_Power_SF, ..I_AC_Power
                              Wenn das häufiger vorkommt, kann man z.B. im Trovis-Plugin auch einfach eine Spezialbehandlung für diese 'Sonderlocken' definieren.

                              /tom
                              Zuletzt geändert von Tom Bombadil; 11.12.2021, 11:42.

                              Kommentar

                              Lädt...
                              X