Ankündigung

Einklappen
Keine Ankündigung bisher.

(Verständnis)Probleme mit ebus Plugin

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

    (Verständnis)Probleme mit ebus Plugin

    Hallo,

    ich bekomme mein ebus Plugin nicht mehr ans laufen. Es hat vor längerer Zeit mit einer alten Installation mal funktioniert. Ich arbeite mit 1.9.2-master auf einem Debian mit python 3.9.2.

    Um der Ursache auf die Spur zu kommen, habe ich in die connect-Funktion des Plugins mal ein Log self.logger.error("Try to connect") reingemacht, das wird aber nie geschrieben. Ich finde im Plugin aber auch keinen Aufruf der connect-Funktion. Wird die Funktion irgendwie mit an das socket gebunden? Wie kann es dazu kommen, dass sie gar nicht aufgerufen wird?

    Code:
        def connect(self):
            """
            Open socket connection to ebusd deamon
            """
            self.logger.error("Try to connect")
            self._lock.acquire()
            try:
                self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                self._sock.settimeout(2)
                self._sock.connect((self.host, self.port))
            except Exception as e:
                self._connection_attempts -= 1
                if self._connection_attempts <= 0:
                    self.logger.error('eBus: could not connect to ebusd at {0}:{1}: {2}'.format(self.host, self.port, e))
                    self._connection_attempts = self._connection_errorlog
                self._lock.release()
                return
                self.logger.info('Connected to {0}:{1}'.format(self.host, self.port))
            self.connected = True
            self._connection_attempts = 0
            self._lock.release()
    Noch ein paar Randdaten:

    Der ebusd läuft aus meiner Sicht korrekt:

    Code:
    ebusctl i
    version: ebusd 22.4.v22.4-3-g406e7be
    update check: revision v22.4 available
    device: 192.168.188.110:9999, enhanced
    signal: acquired
    symbol rate: 40
    max symbol rate: 125
    min arbitration micros: 3
    max arbitration micros: 7
    min symbol latency: 6
    max symbol latency: 7
    reconnects: 0
    masters: 3
    messages: 451
    conditional: 16
    poll: 0
    update: 10
    address 03: master #11
    address 08: slave #11, scanned "MF=Vaillant;ID=BAI00;SW=0518;HW=7401", loaded "vaillant/bai.0010006101.inc" ([PROD='']),                        "vaillant/08.bai.csv"
    address 10: master #2
    address 15: slave #2, scanned "MF=Vaillant;ID=43000;SW=0215;HW=2002", loaded "vaillant/15.430.csv"
    address 31: master #8, ebusd
    address 36: slave #8, ebusd
    ​

    Die Plugin Konfig sieht wie folgt aus, Dort ist die localhost ip auf dem auch der ebusd läuft eingetragen

    Code:
    ebusd:
        plugin_name: ebus
        host: 192.168.188.60
        port: 8888
    Die Konfig des ebusd:

    Code:
    EBUSD_OPTS="--scanconfig -p 8888 -d enh:192.168.188.110:9999"
    Das Log des ebusd sieht eigentlich gut aus:

    Code:
    2022-11-03 18:49:03.725 [update notice] received unknown BC cmd: 10feb505020400
    2022-11-03 18:49:05.517 [update notice] received update-write bai SetMode QQ=10: auto;43.0;55.0;-;0;0;0;0;0;0
    2022-11-03 18:49:11.581 [update notice] received read bai Status01 QQ=10: 29.0;30.0;9.938;-;62.0;off
    2022-11-03 18:49:15.632 [update notice] received update-write bai SetMode QQ=10: auto;43.0;55.0;-;0;0;0;0;0;0
    2022-11-03 18:49:19.649 [update notice] received read bai Status01 QQ=10: 29.0;30.0;9.938;-;62.0;off
    2022-11-03 18:49:21.628 [update notice] received update-read broadcast vdatetime QQ=10: 18:49:23;03.11.2022
    2022-11-03 18:49:21.887 [update notice] received update-write bai StatusCirPump QQ=10: off
    2022-11-03 18:49:25.730 [update notice] received update-write bai SetMode QQ=10: auto;43.0;55.0;-;0;0;0;0;0;0

    #2
    Ich habe jetzt mal die request-Funktion des Plugins von:

    Code:
    if not self.connected:
        self.logger.info("eBusd not connected")
        return
    zu geändert

    Code:
    if not self.connected:
        self.connect()
        if not self.connected:
            self.logger.info("eBusd not connected")
            return
    und dann geht es direkt. Aus meiner Sicht kann das Plugin so nicht funktionieren, aber es hat ja mal bei mir selbst vor ca. einem Jahr funktioniert =). Die gravierenden Änderungen im Plugin liegen eigentlich weiter zurück. Kann mir da jemand weiterhelfen?
    Zuletzt geändert von android; 03.11.2022, 19:19.

    Kommentar


      #3
      Auf einen Aufruf hin von Msinn hatte sich niemand gemeldet. Es kann durchaus sein, das das Plugin nach der Umstellung auf ein SmartPlugin (aber evtl. auch vorher) nicht funktioniert hatte.
      Es gibt ja auch keine vernünftige Dokumentation und auf den ersten Blick fehlen auch einige weitere Eigenschaften "modernisierter" Plugins.

      Wenn Dein Patch oben funktioniert dann kann der ja in develop mit eingepflegt werden und ist beim nächsten Release wieder funktional für alle.

      Kommentar


        #4
        Damals hatte ich die Anlage/Haus noch nicht und konnte auch nicht testen.
        Ich verstehe es wirklich nicht. Eigentlich kann es mit den Änderungen nicht zusammenhängen, da ich den smarthomeNg Server letztes Jahr (also vermutlich V1.8) aufgesetzt habe und es da lief bis ich meine Heizung im April ausgeschaltet habe und dann auf proxmox mit v1.9 neu aufgesetzt habe und jetzt die Heizung wieder eingeschaltet habe.
        Aber in den letzten zwei Jahren hat sich in dem Plugin nichts geändert. Ich werde nochmal schauen, ob ich eine Datensicherung von vor dem Umstieg finde. Evtl. habe ich die classic Version oder so genutzt ohne mich noch dran erinnern zu können😵.

        Ohne den connect Befehl kann es nach meinem Verständnis eigentlich nicht funktionieren und nie haben.

        Wie würde man so einen socket-connect am besten machen? Vor jedem request neu connecten und dann wieder schließen oder immer bestehen lassen? Dann würde ich das mal so einbauen und für develop zur Verfügung stellen.

        Kommentar


          #5
          Es könnte durch aus mit der Umstellung zu tun haben. Es gab (und gibt noch) die lib/connection die aber abgelöst worden ist durch die lib/network. Bei der lib/network geschehen solche Sachen etwas anders als damals mit der lib/connection. Aber es könnte sein das die lib/connection früher im Hintergrund für einen Connect gesorgt hat. Da die aber sowieso als deprecated gilt und die wesentlichen Plugins umgestellt worden sind auf die lib/network könntest Du das mit dem eBus Plugin ebenso machen. Da schaust Du gerne einfach z.B. ins knx Plugin und guckst wie das dort implementiert wurde.

          Ich würde tatsächlich so vorgehen, das ich das Plugin komplett neu aufsetzt mit dem SmartPLugin Template, dort die existierenden Funktionen reinintegriere, eine user_doc.rst in deutsch aufsetzte, die PLugin.yaml anpasse soweit notwendig und zu guter letzt ein Webinterface spendieren.

          Wenn der Daemon der ebus bereitstellt immer verfügbar ist, würde ich den einfach connecten am Anfang und gut. Das Plugin kann die Verbindung bei Abbruch dann halt wieder aufbauen. Anders als bei einer seriellen Schnittstelle werden ja keine Ressourcen belegt.

          Kommentar


            #6
            Ja es scheint mit der lib/connection Umstellung zu tun zu haben.

            Am 12 Mar 2021 hat Morg die Änderung eingecheckt
            image.png

            Kommentar


              #7
              Jup, auch dazu gab es vorher schon Abfragen (ohne Rückmeldungen).

              Die "autoconnect" und "autoreconnect"-Funktionen der lib.connection gehen nicht mehr, das muss umgestellt werden.

              Ich hänge mich an Bernds Empfehlung:

              - bau das Plugin als SmartPlugin neu (alles andere hat vor dem Hintergrund anstehender Änderungen zum Ändern von Items und Neuladen von Plugins eh wenig Zukunft...)
              - nutze die lib.network
              - rufe in run() einmal connect() auf
              - nutze ggf. das autoreconnect-Feature von lib.network
              - und sei so gut und dokumentiere deine Arbeit

              Kommentar


                #8
                Hallo zusammen,

                hab erst vor paar Tagen mein ebus Interface zum laufen bekommen. Mit den Kommandos ebusctl komme ich an die Daten meiner Wärmepumpe.
                Ich hätte natürlich großes Interesse das Plugin zu nutzen. ich könnte auch was testen.

                So wie ich es verstanden habe, ist der aktuelle Stand nicht lauffähig oder? Ich bin noch auf dem Smarthomeng Release 1.8.2.master​.

                Trotz lesen hab ich aber nicht richtig kapiert wie das Plugin funktionieren kann. In der Doku steht ja bei den ebus_cmd noch get und set. In diversen Foren wird aber von einer Umstellung auf read und write gesprochen.

                Wenn jemand eine Idee hat wie ich unterstützen kann, gerne melden.

                Grüße

                Kommentar


                  #9
                  Kurzes Update. Ich kann über das Plugin die Werte meiner Heizung auslesen. Hattes etwas mit der Syntax der ebus_cmd gekämpft aber jetzt klappt es.

                  Kommentar


                    #10
                    Ich habe von 1.8.2 auf 1.9.5 geupdatet. Ebusd läuft und ich kann dei Werte der Heizung auslesen. Bei 1.8.2 hat das ebusd plugin auch funktioniert und ich hab die items übernommen.

                    Ich bekomme beim starten die Fehlermeldung

                    plugin 'ebus' version differs between Python code (1.5.1) and metadata (1.5.0)

                    Hat da einer eine Idee was schief läuft?

                    Danke

                    Kommentar


                      #11
                      Das bedeutet das in der __init__.py des Plugins eine andere Versionsinformation des Plugins hinterlegt ist als in der plugin.yaml die die Metadaten beinhaltet. Da müsste das mal jemadn nachziehen.

                      Kommentar


                        #12
                        OK ich hab das bei mir lokal mal angeglichen und es gibt keinen Fehler mehr. Allerdings werden die Werte nicht vom ebusd gelesen. Der ebusd läuft und dort kann ich die Werte auslesen.

                        Ich hab die Plugin Konfig aus 1.8.2 übernommen:

                        Code:
                        ebus:
                            plugin_name: ebus
                            host: localhost
                            port: 8888
                            cycle: 240​
                        Folgende Item Konfig hat unter 1.8.2 bestens funktioniert:

                        Code:
                        ebus:
                            hotwater:
                                Temperatur:
                                type: num
                                knx_dpt: 14
                                ebus_cmd: 21576 temperature.hotwater temperature
                                ebus_type: get​
                        Müssten also schon die Smartplugin gewesen sein. Hat noch jemand eine Idee wie ich den Fehler eingrenzen kann. Ich hab noch ein altes 1.8.2 am laufen bei dem es funktioniert.
                        Zuletzt geändert von bmx; 11.12.2023, 08:30.

                        Kommentar


                          #13
                          Aus deinem ersten Beitrag wurde nicht klar (aus deiner PN schon =)), dass es neben der Meldung auch nicht funktioniert. Du musst die Codezeile ändern, wie ich oben beschrieben habe.

                          Ich bin bei github leider (noch) nicht wirklich aktiv, kann evtl. jemand mal einen PullRequest drauf machen?! Ohne die Änderungen kann das Plugin nicht laufen, da nie ein connect stattfindet.

                          Zitat von android Beitrag anzeigen
                          Ich habe jetzt mal die request-Funktion des Plugins von:

                          Code:
                          if not self.connected:
                              self.logger.info("eBusd not connected")
                              return
                          zu geändert

                          Code:
                          if not self.connected:
                              self.connect()
                              if not self.connected:
                                  self.logger.info("eBusd not connected")
                                  return

                          Kommentar


                            #14
                            Super lieben Dank, damit funktioniert es bestens.

                            Hab eine Github Account und gerade mal ein Issue erstellt. Bin aber Newbie und weiß nicht ob ich auch einen Pullrequest erzeugen kann.

                            Hab in das Issue auch das Versionsproblem reingeschrieben.

                            Damit läuft es einwandfrei und bin unheimlich froh, dass es dieses Plugin gibt.

                            Kommentar


                              #15
                              Hallo zusammen, hier nochmal die Nachfrage wie der Fix am besten ins Github kommt?

                              Ich hab ein Issue erstellt, da ich vermutlich keinen Pullrequest erzeugen kann.

                              Kann hier jemand helfen oder sagen, was ich machen kann.

                              vielen Dank

                              Kommentar

                              Lädt...
                              X