Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

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

  • ooUrmeloo
    antwortet
    Zitat von ivande Beitrag anzeigen
    V1.0.6 nun auch zum Schreiben von Register (HoldingRegister, Coil)
    Hi ivande,

    ich habe auch aktualisiert, die Schreib-Funktion aber noch nicht ausprobiert.

    Kleiner Verbesserungsvorschlag für eine zukünftige Version?!
    Könnte man gleich noch eine Rundungs-Funktion mit einbauen, damit man solche Temperaturen vermeiden kann (bzw. nicht mit einem Extra-Item (per eval) korrigieren muss - oder geht das einfacher?)?

    Kommt bei mir immer wieder vor:
    Zuletzt geändert von ooUrmeloo; 12.02.2022, 23:20.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Zitat von teddytornado Beitrag anzeigen
    Beim "Hausverbrauch" kann auch etwas nicht stimmen. Es würde sonst bedeuten, dass ich aktuell 65kW beziehe :-) Irgendeine Idee?
    Hast Du mal ein anderes Tool zum auslesen versucht? Ich habe z.B. qModMaster für Windows ausprobiert. Da kann man auch sehen, was "ankommt". Das hat bei mir auf Anhieb funkioniert. Fehlt bei den numerischen Werten evtl. ein Faktor? Bei mir muss ich mit "0.1" multiplizieren, um das richtige Ergebnis zu bekommen.
    Bei den Strings weiß ich nicht, habe ich keine ...

    Einen Kommentar schreiben:


  • teddytornado
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Schau mal in diesen Thread. Dort ist beschrieben, wie Du Konfigurationen mit den Einrückungen posten kannst. Das hilft Leuten, die Dir helfen wollen deutlich beim lesen.
    ok! Vielen Dank für den Hinweis. Ich habe den Code entsprechend formatiert! Ich hänge hier auch noch den Screenshot an.

    Webinterface1.png

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Schau mal in diesen Thread. Dort ist beschrieben, wie Du Konfigurationen mit den Einrückungen posten kannst. Das hilft Leuten, die Dir helfen wollen deutlich beim lesen.

    Einen Kommentar schreiben:


  • teddytornado
    antwortet
    Hi zusammen,

    vielen Dank erstmal für dieses Tolle Plugin! Ich versuche gerade meinen E3DC Wechselrichter einzubinden. Die Kommunikation scheint zu funktionieren aber die Daten sind teilweise sehr komisch. Ich habe mir natürlich die letzte Dev. V1.06 vom Plugin gezogen.

    Im Webinterface werden mir zwar Daten angezeigt aber irgendwie werden bei den Strings die ersten zwei Zeichen abgeschnitten

    Beim "Hersteller" z.B. wird als Wert "/DC GmbH" zurückgegeben. Da sollte eigentlich "E3/DC GmbH" zurückkommen. Bei den anderen Strings fehlen ebenfalls die ersten zwei Zeichen. Beim "Hausverbrauch" kann auch etwas nicht stimmen. Es würde sonst bedeuten, dass ich aktuell 65kW beziehe :-) Irgendeine Idee?


    Vielen Dank!
    Kai

    Einstellung plugin.yaml:

    Code:
    modbus_tcp:
        plugin_name: modbus_tcp
        cycle: '300'
        host: 192.168.77.161
        port: '502'
    Code:
    e3dc:
        Hersteller:
            type: str
            name: Hersteller
            modBusAddress: 40004
            modBusDataType: string16
        Modell:
            type: str
            name: Modell
            modBusAddress: 40020
            modBusDataType: string16
        Seriennummer:
            type: str
            name: Seriennummer
            modBusAddress: 40036
            modBusDataType: string16
        Firmware:
            type: str
            name: Firmeware
            modBusAddress: 40052
            modBusDataType: string16
        Photovoltaikleistung:
            type: num
            name: Photovoltaikleistung
            enforce_updates: True
            modBusAddress: 40068
            modBusDataType: int32
        Batterieleistung:
            type: num
            name: Batterieleistung
            enforce_updates: True
            modBusAddress: 40070
            modBusDataType: int32
        Hausverbrauch:
            type: num
            name: Hausverbrauch
            enforce_updates: True
            modBusAddress: 40072
            modBusDataType: int32
        Netzuebergabepunkt:
            type: num
            name: Netzuebergabepunkt
            enforce_updates: True
            modBusAddress: 40074
            modBusDataType: int32
    Zuletzt geändert von teddytornado; 12.02.2022, 14:29.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    V1.0.6 nun auch zum Schreiben von Register (HoldingRegister, Coil)
    Zuletzt geändert von ivande; 13.02.2022, 19:11.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    fein dass das Plugin für das Gröbste nun läuft.

    Zitat von ooUrmeloo Beitrag anzeigen
    ein paar kleine Fehler gefunden bzw. Verbesserungsvorschläge:
    Danke auch für's durchschauen,.. hast ja ein Adlerauge wie damals mein Deutschlehrer. Da haben sich doch noch einige Fehler eingeschlichen,..
    Zuletzt geändert von ivande; 04.02.2022, 19:21.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    So, ich habe jetzt mal noch ca. 40 weitere Register von Interesse eingetragen. Scheint alles soweit zu funktionieren!
    Das "N+1 Problem" scheint bei meiner Paradigma nur bei den Coils aufzutreten. Und wenn man's weiß, ist's ja auch kein Problem. Da ich die Coils nicht nutze, für mich eh nicht relevant.
    Im ersten Schritt werde ich sowieso die Parameter loggen und visualisieren. Mit der aktiven Steuerung warte ich mal noch, und beobachte


    Beim Durchlesen der Dateien habe ich noch ein paar kleine Fehler gefunden bzw. Verbesserungsvorschläge:

    - In der "user_doc.rst" steht "modBusByteOrder: 'Endian.Little' #(optional) default: 'Endian.Big'"
    Laut yaml ist es aber 'Endian.Big or Endial.Little' ... und im *.py steht's dann wieder anders ...

    - Ein möglicher modBusDataType ist "uint32", in der yaml steht aber "unit32" (nur in der Description) --> Typo?

    - In der example.yaml: Wenn ich das richtig sehe, verweist Du auf Werte "photovoltaik.xxx", die 'Überschrift' ist aber "solaredge_SE6000" --> passt nicht zusammen, oder verstehe ich das falsch?


    PS: wenn ich noch was anderes testen kann/soll, gerne Bescheid geben. Ich bin im Moment erstmal zufrieden.
    Danke nochmal!

    Einen Kommentar schreiben:


  • Sipple
    antwortet
    Diese N+1 Problematik ist so alt wie ModBus selbst. Je nachdem, wie der Hersteller des Geräts das eben implementiert hat. Mal so, mal so. Leider. Manche fangen halt bei 0 an zu zählen, manche bei 1. Meistens besch... dokumentiert und wenn es dann auch noch gemischt ist, dann wird's unangenehm.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Ich habe als Plugin-Testobjekt eine Siemens LOGO und den Solaredge Wechselrichter genommen, und auch mal Multi-Instanz probiert.
    Mit der LOGO kann ich auch die verschiedene Typen (Coil, DiscreteInput, InputRegister, HoldingRegister) auslesen. Komischerweise sind die Addressen dort um 1 zu hoch,..

    Zitat von ooUrmeloo Beitrag anzeigen
    die Außentemperatur und eine weitere Vorlauftemperatur funktioniert
    bei den InputRegistern scheint dann die Addresse wiederum zu stimmen,.. (0-Außentemp, 1 Vorlauftemp.)

    mit der LOGO kann ich dann auch das Schreiben von Register angehen/testen kann, (da kann zumindest nicht viel schief gehen, wenn ich das falsche Register schreibe). Das wird aber noch ein bisschen dauern.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Zitat von ivande Beitrag anzeigen

    Du könntest bitte versuchen die Coil Adressen um 1 zu erhöhen also TestC0-Addresse:9996 + TestC1-Addresse:9997
    Sieht gut aus. Das könnte es gewesen sein.

    2022-02-03_23h04_04.png

    Ich versuche morgen mal noch ein paar andere Register.

    Vielen Dank nochmal für Deine Hilfe!!

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Zitat von ooUrmeloo Beitrag anzeigen
    Jetzt geht's (wieder). Auch die Außentemperatur und eine weitere Vorlauftemperatur funktioniert.
    👍


    Zitat von ooUrmeloo Beitrag anzeigen
    IllegalAddress) register:9995
    es scheint die Adresse 9995 nicht zu geben:

    Du könntest bitte versuchen die Coil Adressen um 1 zu erhöhen also TestC0-Addresse:9996 + TestC1-Addresse:9997


    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    Zitat von ivande Beitrag anzeigen

    ich hab gerade noch mal diese Version von git heruntergeladen, bei mir startet das Plugin.. die plugin.yaml sollte nur 113 Zeilen haben:
    Sorry, mein Fehler ... da hab ich was beim Download verbockt ...
    Jetzt geht's (wieder). Auch die Außentemperatur und eine weitere Vorlauftemperatur funktioniert.

    Auch der zweite Coil Wert wird ausgelesen wobei der m.E. "True" sein sollte?! Der erste aber bringt noch eine Fehlermeldung:

    Code:
    2022-02-03  21:40:49 ERROR    plugins.modbus_tcp  read error: Exception Response(129, 1, IllegalAddress) register:9995 registerCount:1 slaveUnit:1
    und Webinterface:

    2022-02-03_21h45_05.png

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Zitat von ooUrmeloo Beitrag anzeigen
    line 164
    ich hab gerade noch mal diese Version von git heruntergeladen, bei mir startet das Plugin.. die plugin.yaml sollte nur 113 Zeilen haben:

    Code:
    # Metadata for the Smart-Plugin
    plugin:
        # Global plugin attributes
        type: gateway
        description:
            de: 'Plugin zur Geräte-Anbindung über ModBus an SmartHomeNG'
            en: 'Plugin to connect via modbus with SmartHomeNG'
        maintainer: ivande
        tester: 'n/a'
        state: ready
        keywords: modbus_tcp
        documentation: https://github.com/smarthomeNG/plugins/blob/develop/modbus_tcp/user_doc.rst
        support: https://knx-user-forum.de/forum/supportforen/smarthome-py/1154368-einbindung-von-modbus-tcp
        version: 1.0.4a                 # Plugin version
        sh_minversion: 1.8             # minimum shNG version to use this plugin
        py_minversion: 3.6  
        multi_instance: True           # plugin supports multi instance
        restartable: unknown
        classname: modbus_tcp          # class containing the plugin
    
    parameters:
        host:
            type: ipv4
            description:
                de: 'IP Adresse des Modbus-Geraetes'
                en: 'IP address from the modbus-device'
                
        port:
            type: num
            description:
                de: 'modbus Port'
                en: 'modbus port'
    
        cycle:
            type: num
            default: 300
            description:
                de: 'Update Zyklus in Sekunden'
                en: 'Update cycle in seconds'
                
        slaveUnit:
            type: num
            default: 1
            description:
                de: 'Slave-Addresse der zu lesenden Modbus-Einheit'
                en: 'slave-address of the Modbus-Unit to read'
    
    item_attributes:
        modBusObjectType:
            type: str
            default: 'HoldingRegister'
            description:
                de: 'Auswahl welcher Objekt-Type gelesen werden soll'
                en: 'Selection of which object type should be read '
            valid_list:
            - 'Coil'
            - 'DiscreteInput'
            - 'InputRegister'
            - 'HoldingRegister'
        
        modBusAddress:
            type: num
            description:
                de: 'Register Adresse welche gelesen werden soll'
                en: 'register address to read'
    
        modBusUnit:
            type: num
            default: 1  # als default wird die slaveUnit aus der plugin-Konfig verwendet
            description:
                de: 'Slave-Addresse der zu lesenden Modbus-Einheit (Unit aus der plugin-Konfig wird überschrieben)'
                en: 'slave-address of the Modbus-Unit to read - (Value from plugin config will be overwritten)'
                
        modBusDataType:
            type: str
            default: 'uint16'
            description:
                de: 'Datentyp vom zu lesenden Register (bit, int16 uint16 int32 unit32 float32 string16 stringNN)'
                en: 'datatype from register to read (bit, int16 uint16 int32 unit32 float32 string16 stringNN)'
    
        modBusByteOrder:
            type: str
            default: 'Endian.Big'
            description:
                de: 'Endian.Big oder Endial.Little'
                en: 'Endian.Big or Endial.Little'
            valid_list:
            - 'Endian.Big'
            - 'Endial.Little'
                
        modBusWordOrder:
            type: str
            default: 'Endian.Big'
            description:
                de: 'Endian.Big oder Endial.Little'
                en: 'Endian.Big or Endial.Little'
            valid_list:
            - 'Endian.Big'
            - 'Endial.Little'
    
        modBusFactor:
            type: num
            default: 1
            description:
                de: 'Faktor mit welchem der gelesene Register-Wert multipliziert wird'
                en: 'Factor by which the read register value is multiplied'
    
    item_structs: NONE
    
    plugin_functions: NONE
    
    logic_parameters: NONE
    Zitat von ooUrmeloo Beitrag anzeigen
    hat die Außentemperatur nicht funktioniert
    erscheint die Aussentemp. im Webinterface? gibt es einen read-error?
    Zuletzt geändert von ivande; 03.02.2022, 17:32.

    Einen Kommentar schreiben:


  • ooUrmeloo
    antwortet
    mit der Version 1.0.4a läuft bei mir das Plugin nicht mehr ...

    Code:
    2022-02-03 13:59:21 WARNING lib.shyaml Unable to correct line number for yaml-file error. Wrong line number is ng values are not allowed here
    in "<unicode string>", line 164, column 65:
    ... e" content="{&quot;version&quot;: &quot;4&quot;, &quot;rollouts& ...
    ^ (line: 164
    2022-02-03 13:59:21 ERROR lib.shyaml YAML-file load error in /usr/local/smarthome/plugins/modbus_tcp/plugin.yaml:
    mapping values are not allowed here
    in "<unicode string>", line 164, column 65:
    ... e" content="{&quot;version&quot;: &quot;4&quot;, &quot;rollouts& ...
    ^ (line: 164)
    NOTE: Look for the error at the expected <block end>, near the second specified line number
    2022-02-03 13:59:21 ERROR lib.plugin Plugins, section modbus_tcp: class_name is not defined
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestInputRegister', attribute 'modBusObjectType': Attribute is undefined and has value 'InputRegister' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestInputRegister', attribute 'modBusAddress': Attribute is undefined and has value '9997' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestInputRegister', attribute 'modBusFactor': Attribute is undefined and has value '0.1' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestInputRegister', attribute 'modBusDataType': Attribute is undefined and has value 'int16' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestHoldingRegister', attribute 'modBusAddress': Attribute is undefined and has value '9998' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestHoldingRegister', attribute 'modBusFactor': Attribute is undefined and has value '0.1' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestHoldingRegister', attribute 'modBusDataType': Attribute is undefined and has value 'int16' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestCoil0', attribute 'modBusObjectType': Attribute is undefined and has value 'Coil' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestCoil0', attribute 'modBusAddress': Attribute is undefined and has value '9995' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestCoil0', attribute 'modBusDataType': Attribute is undefined and has value 'bit' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestCoil1', attribute 'modBusObjectType': Attribute is undefined and has value 'Coil' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestCoil1', attribute 'modBusAddress': Attribute is undefined and has value '9996' (defined in paradigma.yaml)
    2022-02-03 13:59:35 WARNING lib.metadata Item 'paradigma.TestCoil1', attribute 'modBusDataType': Attribute is undefined and has value 'bit' (defined in paradigma.yaml)
    mit der Item Konfig hat die Außentemperatur nicht funktioniert:

    Code:
    Aussentemperatur:
      type: num
      name: AT
      enforce_updates: True
      modBusObjectType: InputRegister
      modBusAddress: 0
      modBusFactor: 0.1
      modBusDataType: int16
    wobei ich auch andere Bus Adressen versucht hatte.

    Einen Kommentar schreiben:

Lädt...
X