Ankündigung

Einklappen
Keine Ankündigung bisher.

Einbindung von Modbus TCP

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

    #91
    Das hätte ich jetzt auch Mal gesagt. "Probier" doch Mal etwas rum mit +/- 1.

    Ist der String wirklich 16bit? Könnte evtl. auch daran liegen?! 32bit werden bei Modbus m.W. nach auf zwei Register aufgeteilt. Bei mir trifft das zumindest bei einigen numerischen Parametern zu. Das könnte evtl. auch das Problem bei deinen nicht passenden Leistungen/Verbräuchen sein ... wenn du das noch hast. Laut Screenshot sind die ja 32bit.

    Kommentar


      #92
      Zitat von ooUrmeloo Beitrag anzeigen
      Ist der String wirklich 16bit?
      Was mich jetzt mal am Rande interessiert: Wie macht der aus einem "16-bit-String" eine Zeichenkette wie "E3/DC GmbH"??? Oder ist String16 = 16 Byte (hab mir jetzt die Quellen des Plugins nicht angesehen)?
      /tom

      Kommentar


        #93
        Zitat von ooUrmeloo Beitrag anzeigen
        Das hätte ich jetzt auch Mal gesagt. "Probier" doch Mal etwas rum mit +/- 1.

        Ist der String wirklich 16bit? Könnte evtl. auch daran liegen?! 32bit werden bei Modbus m.W. nach auf zwei Register aufgeteilt. Bei mir trifft das zumindest bei einigen numerischen Parametern zu. Das könnte evtl. auch das Problem bei deinen nicht passenden Leistungen/Verbräuchen sein ... wenn du das noch hast. Laut Screenshot sind die ja 32bit.
        Hat jetzt alles geklappt! Danke noch mal. Ich muss grundsätzlich die Adresse -1 nehmen. Die Leistungswerte musste ich von int32 auf int16 wechseln obwohl der Hersteller was anderes sagt. Egal, die Werte stimmen jetzt alle ;-)

        e3dc.png

        Kommentar


          #94
          vl könntest du ja ein struct für dein gerät erstellen, und zur verfügung stellen ..

          Kommentar


            #95
            Zitat von Tom Bombadil Beitrag anzeigen
            Was mich jetzt mal am Rande interessiert: Wie macht der aus einem "16-bit-String" eine Zeichenkette wie "E3/DC GmbH"??? Oder ist String16 = 16 Byte (hab mir jetzt die Quellen des Plugins nicht angesehen)?
            /tom
            Code:
            if dataType.lower() == 'string':
                words = int(bits/2) # bei string: bits = bytes !! string16 -> 16Byte - 8 words
            die String-Länge kann deshalb flexibel angegeben werden:

            String16 wird als String mit 16Bytes interpretiert, also 8 Word-Register werden gelesen.
            String32 wird als String mit 32Bytes interpretiert, also 16 Word-Register werden gelesen.


            Zitat von ooUrmeloo ooUrmeloo Beitrag anzeigen
            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?)?
            Runden sollte auch ohne extra-Item jedoch mit Eval machbar sein.

            das mit dem Runden ist mir auch schon aufgefallen. Mir ist nur nicht eingefallen auf wie viele Kommastellen gerundet werden sollte? Das wird bei jedem individuell sein. evtl. Abhängig vom modBusFactor- Attribut, oder mit einen weiteren zusätzlichen Attribut?

            Zitat von Tom Bombadil Beitrag anzeigen
            Diese N+1 Problematik
            die werde ich wohl in die Dokumentation aufnehmen müssen..


            Zuletzt geändert von ivande; 13.02.2022, 19:03.

            Kommentar


              #96
              Zitat von teddytornado Beitrag anzeigen
              Die Leistungswerte musste ich von int32 auf int16 wechseln obwohl der Hersteller was anderes sagt. Egal, die Werte stimmen jetzt alle ;-)
              hast du evtl. einen Link auf deine Hersteller-Unterlagen? Weshalb das mit den int32 nicht passt würde mich schon interessieren? (Könnte ja durchaus auch im Plugin noch etwas nicht stimmen)

              Kommentar


                #97
                Zitat von ivande Beitrag anzeigen
                hast du evtl. einen Link auf deine Hersteller-Unterlagen? Weshalb das mit den int32 nicht passt würde mich schon interessieren? (Könnte ja durchaus auch im Plugin noch etwas nicht stimmen)
                Modbus/TCP-Schnittstelle der E3/DC GmbH E3/DC GmbH Rechtliche Bestimmungen Änderungshistorie Datum Änderung Bemerkung Bearbeiter Erstellung der Dokumentationen Version 1.0 HWD Tippfehler

                Kommentar


                  #98
                  Hallo zusammen,

                  um meinen Solaredge Wechselrichter mit modbus_tcp (1.0.6) auszulesen, habe ich mich an der example.yaml auf der Plugin Seite bei Git orientiert.
                  Das Auslesen aller Werte entsprechend dem Sunspec Protokoll funktioniert soweit auch tadellos.
                  Ich wundere mich gerade über einen Log-Eintrag bei dessen Interpretation ich nicht weiter komme und hoffe hier noch einen passenden Tipp zu bekommen:

                  Im Detail geht es um die Lookup Table, die anhand einer Dezimalzahl einen Text zurück gibt:

                  Meine yaml:
                  Code:
                  Speicher_Status:
                     type: num
                     name: S_Status
                     modBusAddress: 59782
                     modBusDataType: uint32
                     Text:
                        type: str
                        eval_trigger: Photovoltaik.Speicher_Status
                        eval: sh..lookup()[value]
                        lookup:
                           type: dict
                           initial_value: "{0: 'Aus', 1: 'Standby', 2: 'Init', 3: 'Laden', 4: 'Entladen', 5: 'Fehler', 6: 'Leerlauf', 7: 'sieben', 8: 'acht', 9: 'neun', 10: 'Energiesparmodus'}"
                  Bildschirmfoto 2022-02-20 um 12.24.10.png

                  Die Auflösung 10 = Energiesparmodus funktioniert soweit

                  In der Log Datei finde ich dennoch eine Meldung:

                  Code:
                  WARNING  lib.item.item       Item Photovoltaik.Speicher_Status.Text: problem evaluating 'sh.Photovoltaik.Speicher_Status.Text.lookup()[value]': ''
                  Hat jemand einen Tipp was es mit dem Log-Eintrag auf sich hat?

                  Gruß
                  Andre

                  Kommentar


                    #99
                    Der besagt, dass Dein eval Ausdruck im Item Photovoltaik.Speicher_Status.Text einen Fehler hat.
                    Evtl. hat value einen Wert, der im dict Deines lookup Items nicht vorkommt. Un da sicher zu gehen, solltest Du mit der .get() Methode auf das dict zugreifen.

                    Probiere doch den eval Ausdruck in der Admin GUI im eval Syntax Prüfer aus. Wenn er da dann die gewünschten Ergebisse liefert, setzt Du ihn in die Item Definition ein.
                    Viele Grüße
                    Martin

                    There is no cloud. It's only someone else's computer.

                    Kommentar


                      Zitat von knx75knx Beitrag anzeigen
                      Item Photovoltaik.Speicher_Status.Text: problem evaluating 'sh.Photovoltaik.Speicher_Status.Text.lookup()[value]': ''
                      die Fehlermeldung kam auch bei mir unmittelbar nach dem Start von SH. Ich habe die Meldung (bisher) einfach ignoriert.

                      Grund für die Meldung dürfte sein:
                      Beim Starten von SH ist das Item photovoltaik.Speicher_Status noch leer, also value ''

                      du könntest versuchen noch '':'' in das initial_value rein zu schreiben. (2xeinfaches Anführungszeichen vor und nach dem Doppelpunkt)


                      initial_value: "{'':'', 0: 'Aus', 1: 'Standby', 2: 'Init', 3: 'Laden', 4: 'Entladen', 5: 'Fehler', 6: 'Leerlauf', 7: 'sieben', 8: 'acht', 9: 'neun', 10: 'Energiesparmodus'}"
                      Zuletzt geändert von ivande; 20.02.2022, 21:40.

                      Kommentar


                        Zitat von ivande Beitrag anzeigen
                        beim Starten von SH ist das Item photovoltaik.Speicher_Status noch leer, also value ''
                        Genau. Ich habe das auch. Wenn Du SH startest, bringt der Lookup eine Warnmeldung.
                        Wenn sich der 'Speicher_Status' das erste Mal ändert und der eval getriggert wird, ist alles gut, und bleibt auch gut.

                        Mach's wie ich, erste Warnung ignorieren und dann läuft's wunderbar
                        So oft startet man SH ja nicht neu ... wenn's mal stabil läuft

                        Kommentar


                          Zitat von ivande ivande Beitrag anzeigen
                          Runden sollte auch ohne extra-Item jedoch mit Eval machbar sein.

                          das mit dem Runden ist mir auch schon aufgefallen. Mir ist nur nicht eingefallen auf wie viele Kommastellen gerundet werden sollte? Das wird bei jedem individuell sein. evtl. Abhängig vom modBusFactor- Attribut, oder mit einen weiteren zusätzlichen Attribut?
                          Bei mir würden 2 Kommastellen vollkommen ausreichen. Konfigurierbar wäre natürlich schick, ich hab's jetzt aber so umgesetzt. Scheint zu funktionieren:

                          Code:
                          paradigma:
                               Aussentemperatur:
                                  type: num
                                  name: AT
                                  enforce_updates: True
                                  modBusObjectType: InputRegister
                                  modBusAddress: 0000
                                  modBusFactor: 0.1
                                  modBusDataType: int16
                                  eval: round(value, 2)
                                  eval_trigger: paradigma.Aussentemperatur
                                  # database_maxage: 365
                                  database: yes

                          Kommentar


                            Zitat von Bonze Beitrag anzeigen
                            vl könntest du ja ein struct für dein gerät erstellen, und zur verfügung stellen ..
                            Hi, sorry für die späte Rückmeldung. Ich habe noch ein wenig rumgebastelt und bin jetzt soweit fertig. Was meinst Du mit einem "Struct" zur Verfügung stellen? Meine Item Datei der E3DC S10? Es fehlen noch einige Dinge aber bei mir sieht diese jetzt so aus. Vielleicht hilft es dem einen oderen anderen weiter:

                            Code:
                            %YAML 1.1
                            ---
                            
                            PHOTOVOLATIK:
                            
                                Hersteller:
                                    type: str
                                    name: Hersteller
                                    modBusAddress: 40003
                                    modBusDataType: string16
                                    name: Hersteller
                                Modell:
                                    type: str
                                    name: Modell
                                    modBusAddress: 40019
                                    modBusDataType: string16
                                Seriennummer:
                                    type: str
                                    name: Seriennummer
                                    modBusAddress: 40035
                                    modBusDataType: string16
                                Firmware:
                                    type: str
                                    name: Firmware
                                    modBusAddress: 40051
                                    modBusDataType: string16
                                Photovoltaikleistung:
                                    type: num
                                    name: Photovoltaikleistung
                                    #enforce_updates: True
                                    modBusAddress: 40067
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                Batterieleistung:
                                    type: num
                                    name: Batterieleistung
                                    #enforce_updates: True
                                    modBusAddress: 40069
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                Batterieladezustand:
                                    type: num
                                    name: Batterieladezustand
                                    #enforce_updates: True
                                    modBusAddress: 40082
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360    
                                Hausverbrauch:
                                    type: num
                                    name: Hausverbrauch
                                    #enforce_updates: True
                                    modBusAddress: 40071
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                Netzuebergabepunkt:
                                    type: num
                                    name: Netzuebergabepunkt
                                    #enforce_updates: True
                                    modBusAddress: 40073
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                Autarkie:
                                    type: num
                                    name: Autarkie
                                    modBusAddress: 40081
                                    modBusDataType: uint16
                                    eval: (value>>8)&0xff
                                Notstrom:
                                    type: num
                                    name: Notstrom
                                    modBusAddress: 40083
                                    modBusDataType: int16
                                String1Power:
                                    type: num
                                    name: String1Power
                                    #enforce_updates: True
                                    modBusAddress: 40101
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                String1Voltage:
                                    type: num
                                    name: String1Voltage
                                    #enforce_updates: True
                                    modBusAddress: 40095
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                String1Strom:
                                    type: num
                                    name: String1Strom
                                    #enforce_updates: True
                                    modBusAddress: 40098
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                String2Power:
                                    type: num
                                    name: String2Power
                                    #enforce_updates: True
                                    modBusAddress: 40102
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                String2Voltage:
                                    type: num
                                    name: String2Voltage
                                    #enforce_updates: True
                                    modBusAddress: 40096
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                String2Strom:
                                    type: num
                                    name: String2Strom
                                    #enforce_updates: True
                                    modBusAddress: 40099
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                Wallboxleistung:
                                    type: num
                                    name: Wallboxleistung
                                   #enforce_updates: True
                                   modBusAddress: 40077
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                                Wallboxverbrauch:
                                    type: num
                                    name: Wallboxverbrauch
                                    #enforce_updates: True
                                    modBusAddress: 40079
                                    modBusDataType: int16
                                    database: 'init'
                                    database_maxage: 360
                            
                                name: PV-Anlage
                                sv_page: room
                                sv_img: scene_solar_panel.svg
                            
                                Info_Wechselrichter:
                                    name: Wechselrichter
                                    sv_widget: "Hersteller: {{ basic.print('', 'PHOTOVOLATIK.Hersteller', 'html') }} <br>
                                        Modell: {{ basic.print('', 'PHOTOVOLATIK.Modell', 'html') }} <br>
                                        Seriennumer: {{ basic.print('', 'PHOTOVOLATIK.Seriennummer', 'html') }} <br>
                                        Firmware: {{ basic.print('', 'PHOTOVOLATIK.Firmware', 'html') }} <br>"
                                        
                                Daten_Wechselrichter:
                                    name: PV-Daten
                                    sv_widget: "PV-Leistung: {{ basic.print('', 'PHOTOVOLATIK.Photovoltaikleistung', 'W', '', [50,16000], ['red', 'green']) }} <br>
                                        Batterieleistung: {{ basic.print('', 'PHOTOVOLATIK.Batterieleistung', 'W') }} <br>
                                        Hausverbrauch: {{ basic.print('', 'PHOTOVOLATIK.Hausverbrauch', 'W') }} <br>
                                        Netzuebergabepunkt: {{ basic.print('', 'PHOTOVOLATIK.Netzuebergabepunkt', 'W', '', [1,50000], ['green', 'red', 'red']) }} <br>
                                        Batterieladezustand: {{ basic.print('', 'PHOTOVOLATIK.Batterieladezustand', '%', '', [30,40], ['red', 'orange', 'green']) }} <br>            
                                        Autarkie: {{ basic.print('', 'PHOTOVOLATIK.Autarkie', '%') }} <br>
                                        Notstromstatus: {{ basic.print('', 'PHOTOVOLATIK.Notstrom', '') }} <br>
                                        String 1 (Nord/West): {{ basic.print('', 'PHOTOVOLATIK.String1Power', 'W') }} / {{ basic.print('', 'PHOTOVOLATIK.String1Voltage', 'V') }} / {{ basic.print('', 'PHOTOVOLATIK.String1Strom', 'A') }} <br>
                                        String 2 (Ost/Süd): {{ basic.print('', 'PHOTOVOLATIK.String2Power', 'W') }} / {{ basic.print('', 'PHOTOVOLATIK.String2Voltage', 'V') }} / {{ basic.print('', 'PHOTOVOLATIK.String2Strom', 'A') }}"
                                
                                Plot1:
                                    name: Photovoltaikleistungschart
                                    sv_widget: "{{ plot.period('', 'PHOTOVOLATIK.Photovoltaikleistung', 'avg', '24h', '', '', '', '', '', '', '', '', 'advanced', '', '', '', '', '') }}"
                                    
                                Plot2:
                                    name: Batterieleistungschart
                                    sv_widget: "{{ plot.period('', 'PHOTOVOLATIK.Batterieleistung', 'avg', '24h', '', '', '', '', '', '', '', '', 'advanced', '', '', '', '', '') }}"    
                                
                                Plot3:  
                                    name: Batterieladezustandschart
                                    sv_widget: "{{ plot.period('', 'PHOTOVOLATIK.Batterieladezustand', 'avg', '24h', '', '', '', '', '', '', '', '', 'advanced', '', '', '', '', '') }}"
                                
                                Plot4:  
                                    name: Hausverbrauchchart
                                    sv_widget: "{{ plot.period('', 'PHOTOVOLATIK.Hausverbrauch', 'avg', '24h', '', '', '', '', '', '', '', '', 'advanced', '', '', '', '', '') }}"
                            
                                Plot5:  
                                    name: Leistungschart am Netzuebergabepunkt
                                    sv_widget: "{{ plot.period('', 'PHOTOVOLATIK.Netzuebergabepunkt', 'avg', '24h', '', '', '', '', '', '', '', '', 'advanced', '', '', '', '', '') }}"
                                
                                Plot6:
                                    name: String 1 (Nord/West)
                                    sv_widget: "{{ plot.period('', 'PHOTOVOLATIK.String1Power', 'avg', '24h', '', '', '', '', '', '', '', '', 'advanced', '', '', '', '', '') }}"        
                            
                                Plot7:
                                    name: String 2 (Ost/Süd)
                                    sv_widget: "{{ plot.period('', 'PHOTOVOLATIK.String2Power', 'avg', '24h', '', '', '', '', '', '', '', '', 'advanced', '', '', '', '', '') }}"
                            Bild1.pngBild2.png
                            Zuletzt geändert von teddytornado; 18.03.2022, 14:36.

                            Kommentar


                              Hallo zusammen, und vielen Dank für die Bereitstellung des Plugins, ivande. Ich nutze dieses Plugin bereits seit Monaten problemlos für die Abfrage eines Victron Geräts.

                              Jetzt würde ich gerne ein weiteres Gerät abfragen und offenbar kann man mehrere Instanzen in der plugins.yaml definieren. Mir ist jedoch nicht klar geworden, wie ich in den einzelnen Item-Definitionen dann die zugehörige Instanz anspreche. Bräuchte man nicht ein Parameter wie, modBusInstance=...?

                              Code:
                                  Battery_Voltage:
                                      name: Batterie Spannung
                                      type: num
                                      modBusInstance: Victron # So was bräuchte man vermutlich?
                                      modBusUnit: 100
                                      modBusAddress: 840
                                      modBusDataType: uint16
                                      modBusFactor: 0.1
                                      database: True
                                      cache: True​
                              Danke und Gruß, zittho

                              Kommentar


                                Zitat von zittho Beitrag anzeigen
                                Jetzt würde ich gerne ein weiteres Gerät abfragen und offenbar kann man mehrere Instanzen in der plugins.yaml definieren. Mir ist jedoch nicht klar geworden, wie ich in den einzelnen Item-Definitionen dann die zugehörige Instanz anspreche. Bräuchte man nicht ein Parameter wie, modBusInstance=...?
                                Durch Zufall gesehen, dass dies generell bei Multiinstanz-Plugins durch ein Suffix passiert:
                                https://www.smarthomeng.de/user/konf...ance-fahigkeit

                                Kommentar

                                Lädt...
                                X