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

                  Lädt...
                  X