Ankündigung

Einklappen
Keine Ankündigung bisher.

[Codebeispiel]: HomeConnect ohne Cloud für Geschirrspüler

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

    [Codebeispiel]: HomeConnect ohne Cloud für Geschirrspüler

    Tach'

    nun habe ich es doch in das SHNG Plug-in Format gebracht.

    Als Anhang ein reines Entwickler-Plugin.(Zuvor hier bereits andiskutiert: https://knx-user-forum.de/forum/supp...connect-plugin
    Disclaimer: Der Code ist stark verbesserungsbedürftig und daher voll experimentell und darf gerne zur Weiterentwicklung verwendet werden.

    Ein Hinweis zu den Dateien:
    1. Das ZIP-file ist ins Verzeichnis ./plugins/homeconnectlocal zu entpacken.
    2. Beispiel Items sind in dishwasher.yaml enthalten. Die Struktur und die Keywords sind relevant für das Webinterface.
    3. Beispiel Konfig: plugin.yaml ist in der Datei etc_plugin.yaml enthalten. Hier sind noch die IP + 2 private Schlüssel der Geräte abzuwandeln. Siehe: https://github.com/osresearch/hcpy
    4. Das Plug-in wurde nur für eine Instanz entwickelt, da ich nur einen Geschirrspüler habe - daher sind auch nur diese UIDs / Inhalte definiert.
    Feedback zu Verbesserung nehme ich gerne an.🤗 Ich freue mich, wenn jemand das Plugin auch nutzen kann und auf ein solide Basis stellt.
    Angehängte Dateien

    #2
    Nicht, dass ich dich bremsen will, nur ein paar Infos:

    ich habe bei mir hcpy als rein-lokale Lösung (ohne Cloud-Anbindung der Geräte) auch laufen, und der füttert shng direkt über das mqtt-Plugin. Mit den passenden Item-Structs brauchts da kein Plugin.

    Aber wenn dein Plugin noch Mehrwert mitbringt - super!

    [edit]Nachdem ich mir das Plugin mal angesehen habe, trotzdem noch einige Anmerkungen:

    - das Plugin basiert auf einer alten Version des Plugins, da ist viel Überflüssiges drin, was man mit SmartPlugin nicht mehr braucht
    - Verbindungen (Netzwerk/Seriell/Socket) bitte erst in run() öffnen, nicht schon in init()
    - wenn schon im ersten Versuch ws nicht erstellt werden kann, kann das Plugin gleich abbrechen, dann kann der Rest doch gar nicht mehr laufen, oder? (gilt für die späteren Aufrufe genauso)

    Wenn du noch mehr Feedback möchtest, dan vielleicht woanders
    Zuletzt geändert von Morg; 12.12.2023, 18:52.

    Kommentar


      #3
      Moin Morg.

      Besten Dank fürs Feedback.
      Meine Beweggründe von mqtt-hcpy auf ein Plugin zu wechseln sind maßgeblich folgende gewesen.
      1. XML Klartext Übersetzung vom Status für eine geplante Visu ( geht sicherlich auch mit einem gutem Item Struct)
      2. System Replizierung nur mit SHNG möglich - ohne "externe" mqtt crontab / systemd Services
      3. Plugin Website für eine kompakte Darstellung nutzbar
      4. Mitloggen von XML unbekannten UIDs - werden beim aktuellen mqtt-hcpy Ansatz meines Wissens nach gefiltert.
      5. Die Hoffnung, dass die Community das Plugin als Basis Idee nutzen kann, um weitere Geräte ( Waschmaschine, Kaffemaschine, ..) mit nur einem Plugin erweitert könnte. Stichwort: Upgrade zu Multi-Instanz.

      Verbesserungen:
      Beim Erstellen des Plugins ist es mir schwer gefallen zu identifizieren, welches Plugin ich als Basis nehmen sollte... Daher sind kritische und konstruktive Ruckmeldungen herzlich willkommen.

      Bzgl. "Feedback woanders", meinst Du direkt in GitHub oder PN?

      Kommentar


        #4
        Feedback woanders heißt, dass ich nicht hier öffentlich deinen Code zerpflücken möchte zB PN, Gitter, Github, Discord, ausgewählte In-Game-Chats... ;-)

        Okay, Punkt 1 und 4 kaufe ich sofort, Punkt 2 finde ich mäßig schlüssig, MQTT ist kein Aufwand und für vieles nötig/hilfreich, und Punkt 5 - siehe meine Eingangsbemerkung aber Ideen kann man ja immer übernehmen

        Ich bin als Plugin-Autor natürlich nicht objektiv, und bin bei sowas eher kritisch - mir ist immer auch wichtig, dass der Code von Anfang an gut dokumentiert und gut lesbar ist. zigbee2mqtt ist eng am SmartPlugin-Standard, aber hat keine eigene IO-Komponente, Viessmann hat IO, ist aber noch nicht ganz aktuell.

        Vielleicht versuchst du dich mal mit dem HomeConnect-Plugin und machst ein HomeConnect2 oder so draus. Da hast du in der Basis ggf. schon einen guten Start, und müsstest im Wesentlichen die IO- und Parsing-Komponenten überarbeiten bzw. anpassen...? Dann musst du den Rest erstmal nicht komplett selber schreiben.

        Ich würde dir auch smartdeviceplugin empfehlen, aber das wäre für den Start ggf. etwas komplex. Da steht das gesamte Plugin schon fertig da, und du musst "nur"
        - die IO-Konvertierung definieren oder schreiben, je nach Aufwand, und
        - den Befehlssatz intelligent definieren.

        kodi, denon, lms und (demnächst vielleicht) viessmann sind Beispiele für sdp-Plugins.

        Falls du generell Fragen hast oder sdp mal ausprobieren willst, dann melde dich.

        Kommentar


          #5
          Zitat von Morg Beitrag anzeigen
          ich habe bei mir hcpy als rein-lokale Lösung (ohne Cloud-Anbindung der Geräte) auch laufen, und der füttert shng direkt über das mqtt-Plugin. Mit den passenden Item-Structs brauchts da kein Plugin.
          Morg
          Hi. Könntest du mir eventuell Details dazu geben, wie du das genau umgesetzt hast? Mit dem mqtt-Plugin hatte ich bisher keinen "Kontakt".
          Ich hab Geschirrspüler und Waschmaschine mit Home Connect in Verwendung.

          mfg
          Markus

          Kommentar


            #6
            Hey,

            du musst hcpy lokal zum Laufen bekommen, das ist bei hcpy beschrieben.

            Dann lasse ich einfach hc2mqtt mit config.json als Argument laufen, mehr ist da nicht.

            Das mqtt-Plugin braucht keine Konfiguration, muss nur eingebunden werden. Dem MQTT-Modul gibst du Adresse und Port von deinem MQTT-Broker.

            Die mqtt-Topics kannst du zB mit MQTT-Explorer rausfinden und baust dir für die Topics, die du möchtest, entsprechend Items.

            Geschirrspüler:
            Code:
                    geschirr:
                        type: dict
                        mqtt_topic_in: homeconnect/dishwasher/state
                        cache: true
            
                        temp:
                            type: dict
                            mqtt_topic_in: homeconnect/dishwasher
            
                        status:
                            type: str
                            eval: sh...()['state']
                            eval_trigger: ..
                        
                        tuer:
                            type: bool
                            eval: sh...()['door'] == 'Open'
                            eval_trigger: ..
                        
                        laufzeit:
                            type: str
                            eval: sh...()['remaining']
                            eval_trigger: ..
                        
                        power:
                            type: bool
                            eval: sh...()['power']
                            eval_trigger: ..
                        
                        wasserdruck:
                            type: bool
                            eval: sh...()['lowwaterpressure']
                            eval_trigger: ..
                        
                        aquastop:
                            type: bool
                            eval: sh...()['aquastop']
                            eval_trigger: ..
                        
                        error:
                            type: bool
                            eval: sh...()['error']
                            eval_trigger: ..
                        
                        laufzeitsec:
                            type: num
                            eval: sh...()['remainingseconds']
                            eval_trigger: ..
            ​
            Zuletzt geändert von Morg; 12.10.2024, 15:16.

            Kommentar


              #7
              Morg danke für deine Rückmeldung. Vorab noch eine Frage.

              Shng läuft ja ebenfalls in einer virtuellen Umgebung.
              muss hcpy in der selben Umgebung laufen oder ist das nicht relevant?

              Code:
              python3 -m venv venv
              source venv/bin/activate
              git clone https://github.com/osresearch/hcpy
              cd hcpy
              pip3 install -r requirements.txt​
              Wie finde ich das?
              Code:
               Dem MQTT-Modul gibst du Adresse und Port von deinem MQTT-Broker

              mfg
              Markus
              Zuletzt geändert von fuxl66; 12.10.2024, 19:44.

              Kommentar


                #8
                etc/modules.yaml

                Da hcpy mit shng nur über MQTT spricht, ist die virtuelle Umgebung völlig egal.

                Kommentar


                  #9
                  Ich hab Probleme bei der Installation von 'sslpsk' bzw. bei der dem Unterpacket 'bdist_wheel'

                  Ich habe eine venv unter python 3.11 am Laufen.

                  Code:
                  ERROR: Could not find a version that satisfies the requirement bdist_wheel (from versions: none)
                  ERROR: No matching distribution found for bdist_wheel​
                  Klappt das bei euch ohne Probleme?

                  Kommentar


                    #10
                    Ich habe sslpsk-1.0.0 installiert, ich kann dir aber nicht mehr sagen, wie ich das gemacht habe oder ob es da Probleme gab...

                    Ich bin damals verwiesen worden auf https://github.com/hcpy2-0/hcpy...

                    Kommentar


                      #11
                      Zitat von Morg Beitrag anzeigen
                      Ich habe sslpsk-1.0.0 installiert, ich kann dir aber nicht mehr sagen, wie ich das gemacht habe oder ob es da Probleme gab...

                      Ich bin damals verwiesen worden auf https://github.com/hcpy2-0/hcpy...
                      Code:
                      pip install sslpsk
                      hat das problem gelöst. Ich hab nun alle requirements installiert.

                      Jedoch bekomme ich mit
                      Code:
                      hc-login fuxl@XXXX XXXXXX > config.json​
                      eine Fehlermeldung
                      Code:
                      Traceback (most recent call last):
                        File "/usr/local/smarthome/hcpy/./hc-login", line 139, in <module>
                          return_url = query["returnUrl"][0]
                                       ~~~~~^^^^^^^^^^^^^
                      KeyError: 'returnUrl'
                      Error.png

                      Hat jemand einen Tipp für mich?

                      /Markus

                      Kommentar


                        #12
                        Ok, ich bin nun etwas weiter und habe verstanden, dass man einen Home Connect Developer Account benötigt.

                        Unter "Applications" gibt es nun eine Client ID zu finden. Ich denke das ist die "app_id" in der hc-login.
                        Wo bekomme ich nun aber die Client ID her.

                        Wie ihr merkt bin ich etwas verwirrt.
                        Bitte um Hilfe.

                        Code:
                          "error": "unauthorized_client",
                          "error_description": "client or redirection URI not authorized",
                          "state": "X3l1ZjlNRjhqVlpWVW55TnhiMjRCUT09"
                        P.S. was bedeutet das "state"
                        Zuletzt geändert von fuxl66; 16.10.2024, 13:29.

                        Kommentar

                        Lädt...
                        X