Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues MQTT Plugin

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

    Neues MQTT Plugin

    Hi,

    ich habe die erste Version des neuen MQTT Plugins fertig gestellt. Es ist ab SmartHomeNG v1.3 lauffähig.

    Dieses komplett neu geschriebene Plugin ersetzt das bisherige MQTT Plugin. Das neue Plugin sollte in der Nutzung kompatibel zum bisherigen Plugin sein. Die einzige bewusste Änderung ist der Parameter zum triggern von Logiken, der jetzt mqtt_watch_topic heißt. Das alte MQTT Plugin wird retired, steht aber vorerst noch als MQTT_1_0 zur Verfügung für den Fall das jemand Probleme mit dem neuen MQTT Plugin haben sollte.

    Die README.md beschreibt ausführlich die Konfigurationsmöglichkeiten.

    Das neue MQTT Plugin ist noch nicht Feature-Complete. Dieser Post gibt immer eine Info, welche Features implementiert sind und welche noch geplant sind.

    MQTT Plugin v1.3.2 (2017-05-11)
    • Anmeldung am Broker mit user/password wird unterstützt
    • Typ und Version des Brokers wird geloggt
    • In der Konfiguration kann der Broker per ip-Adresse oder DNS-Name angegeben werden
    • Interface implementiert, um einem anderen Plugin die Nutzung des MQTT Protokolls durch dieses Plugin zu ermöglichen

    MQTT Plugin v1.3.1 (2017-05-01)
    • Unterstützung aller drei QoS Modi für Nachrichten
    • Retained Flag Unterstützung für Nachrichten
    • MQTT Testamant Message (Last Will)
    • Birth Message
    • Je Plugin Instanz nur eine Client Session zum Broker
      .
    • Smart Plugin
    • Multi-Instance fähig
    • Type-Casting (Umwandlung in die SmartHomeNG Datentypen) für ein- und ausgehende Nachrichten
    • Type-Casting (Umwandlung in die SmartHomeNG Datentypen) für Payloads in Logik-Triggern


    Folgende Features sind geplant und werden in kommenden Releases implementiert:

    - Password als Hash in der Konfiguration speichern
    - Unterstützung für Verschlüsselung der Kommunikation
    - Unterstützung für clean/persistent sessions
    - Items in der Item-Tree Struktur publizieren (Abhängig von einer Access Control List)
    - Unterstützung mehrerer Plugin Instanzen durch das Interface
    Zuletzt geändert von Msinn; 11.05.2017, 10:03. Grund: Features der Version 1.3.2 ergänzt
    Viele Grüße
    Martin

    #2
    In der Plugin Konfiguration (plugin.yaml / plugin.conf) kann festgelegt werden, welcher Quality-of-Service standardmäßig verwendet werden soll. Bei Bedarf kann für einzelne Topics in der Item-Konfiguration ein abweichender Quality-of-Service festgelegt werden.

    Über eine Kombination von MQTT Testamant Message und Birth Message ein Topic implementiert werden, der sicher anzeigt ob die SamrtHomeNG Instanz läuft oder nicht.

    Das neue MQTT Plugin öffnet nur eine Client Session zum Broker. Im Gegensatz zum alten MQTT Plugin, welches je Topic das gelesen werden sollte (Subscription) eine eigene Session erzeugte (und somit einen eigenen Thread).

    Bei Bedarf können mehrere Instanzen des Plugins konfiguriert werden. Das ermöglicht:
    - mehrere MQTT Testamant Messages/Birth Messages
    - die Kommunikation mit mehreren Brokern
    Viele Grüße
    Martin

    Kommentar


      #3
      Die Version 1.3.2 des MQTT-Plugins ist inline.

      Das wichtigste neue Feature ist die Unterstützung für andere Plugins. Ich arbeite zum Beispiel an einem Plugin, welches mit einem EnOcean Gateway über MQTT kommuniziert. Das EnOcean Gateway implementiere ich auf Basis eines Pi3. Damit ist es räumlich von meiner SmartHomeNG Installation unabhängig und ich kann es dort installieren, wo es aus EnOcean Gesichtspunkten am besten positioniert sein sollte. Es ist auch in größeren Installationen der Einsatz mehrerer solcher Gateways denkbar. - Weitere Gateway Typen sind denkbar: Z-Wave, ZigBee, Homekit, Bluetooth, ...

      Weiterhin ist nun die Anmeldung am Broker mit User/Passwort möglich. Die Übertragung erfolgt noch nicht verschlüsselt. Es bietet aber damit Interessierten die Möglichkeit sich schon mal in die vielfältigen Konfigurationsmöglichkeiten des Brokers in Bezug auf die Rechtestruktur einzuarbeiten.

      Die vollständige Change History findet ihr im ersten Post.
      Viele Grüße
      Martin

      Kommentar


        #4
        Hallo Msinn,
        ich bin so frei und habe es einfach nal hierzu gepostet, mit dem Smart 1.3 und dem neuen Mqtt tauchten bei dem Backend die die MQTT items nicht mehr auf. Ist das so richtig, wo kann ich nach den fehlenden items suchen gehen.
        mfg

        Kommentar


          #5
          Das "Auftauchen" von Items hat nichts mit Plugins zu tun. Plugins werden von SmartHomeNG vollständig eingelesen bevor das erste Plugin initialisiert wird.

          Wenn Items im Backend oder im CLI nicht auftauchen liegt bei Dir vermutlich ein Fehler in der entsprechenden Item Konfigurationsdatei (.conf oder .yaml) vor. Falls Du bereits .yaml Konfigurationsdateien verwendest, ist die Chance groß, dass Du in der smarthome.log einen direkten Hinweis auf die fehlerhafte Stelle findest.
          Viele Grüße
          Martin

          Kommentar


            #6
            Hallo Msinn,

            ich hab es mal getestet.
            2 Sachen:
            - in parse_item (Zeile 239) steht if self._connected: connect wird aber erst nach dem parsen ausgeführt also werden die items nicht überwacht.
            - wenn in der plugin.yaml "last_will_topic" und "birth_topic" nicht gesetzt sind, knallt es
            Code:
            ERROR    lib.plugin   Plugin mqtt exception: string index out of range
            Traceback (most recent call last):
              File "/usr/local/smarthome/lib/plugin.py", line 90, in __init__
                plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance)
              File "/usr/local/smarthome/lib/plugin.py", line 144, in __init__
                exec("self.plugin.__init__(smarthome{0}{1})".format("," if len(arglist) else "", argstring))
              File "<string>", line 1, in <module>
              File "/usr/local/smarthome/plugins/mqtt/__init__.py", line 142, in __init__
                if last_will_topic [-1] == '/':
            IndexError: string index out of range
            Ich habe es mal bei mir angepasst - läuft!

            Danke

            Kommentar


              #7
              Msinn

              Danke für das überarbeitete Plugin, steht schon auf meiner Todo-Liste.

              kaiwerner

              Möchtest du nicht einen Pull Request für deine bugfixes aufmachen?

              Gruß,
              Henning

              Kommentar


                #8
                Zitat von ratzi82 Beitrag anzeigen
                ...
                kaiwerner

                Möchtest du nicht einen Pull Request für deine bugfixes aufmachen?
                ....
                Fur das Prasen:
                https://github.com/smarthomeNG/plugins/pull/60

                lastwill ist bei mir definiert, aus dem Grund habe ich da nichts geändert. Das war mir nur beim testen aufgefallen.

                Grüße

                Kommentar


                  #9
                  hallo,
                  es kostet mich wieder Nerven.
                  so sieht die Fehlermeldung aus, jetzt komm mir bitte keiner und Schreibt siehe oben bei
                  kaiwerner

                  habe alles durch mit den Änderungen.

                  2017-06-30 13:26:19 ERROR Main Plugin mqtt exception: string index out of range
                  Traceback (most recent call last):
                  File "/usr/local/smarthome/lib/plugin.py", line 90, in __init__
                  plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance)
                  File "/usr/local/smarthome/lib/plugin.py", line 144, in __init__
                  exec("self.plugin.__init__(smarthome{0}{1})".forma t("," if len(arglist) else "", argstring))
                  File "<string>", line 1, in <module>
                  File "/usr/local/smarthome/plugins/mqtt/__init__.py", line 142, in __init__
                  if last_will_topic [-1] == '/':
                  IndexError: string index out of range


                  habe smarthome 1.3.ec1de2b und visu 2.8.

                  zum anderen hatte mein System neu gemacht ( Net install minimal ) anleitung ist auch soweit OK, musste nur feststellen das einiges nicht instaliert wurde oder eine alte version.
                  ( python3-dateutil
                  python3-psutil
                  python3-cherrypy3
                  python3-jinja2 )

                  Wer alsö alles mit Python ( pip3 ) akt. möchte ( sollte ) hier ein Beispiel was geht.
                  sudo pip3 freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U

                  mfg

                  Kommentar


                    #10
                    Wie sieht denn Deine Konfiguration des Plugins in der etc/plugin.yaml aus?
                    Viele Grüße
                    Martin

                    Kommentar


                      #11
                      durch die ganze Aktion bin ich zurzeit noch mit der (" conf ") unterwegs, habe aber auch schon die (" yaml") getestet.
                      Wie geschrieben habe ich schon versucht eine lösung zu finden, unteranderem auch schon über die alte mqtt geschichte , sprich ich hatte eine Sicherung die ich zurück gespielt habe und auch die sache mit (" last_will_topic" und "birth_topic" ). "also Fragen über fragen" und keine Lösung
                      mfg

                      Kommentar


                        #12
                        Wie sieht denn der entsprechende Abschnitt Deiner etc/plugin.conf aus?
                        Viele Grüße
                        Martin

                        Kommentar


                          #13
                          habe die lange fassung und die kurze probiert,
                          unterscheiden sich nur in der fehlermeldung
                          (kurze) anbei und die lange von der README Orgiginal nur halt meine ip

                          [mqtt]
                          class_name = Mqtt
                          class_path = plugins.mqtt
                          host = 192.168.x.x
                          port = 1883

                          Kommentar


                            #14
                            Zitat von kaiwerner Beitrag anzeigen
                            Hallo Msinn,

                            ich hab es mal getestet.
                            2 Sachen:
                            - in parse_item (Zeile 239) steht if self._connected: connect wird aber erst nach dem parsen ausgeführt also werden die items nicht überwacht.
                            - wenn in der plugin.yaml "last_will_topic" und "birth_topic" nicht gesetzt sind, knallt es
                            kaiwerner :
                            - Bei Punkt Zwei (leerem last_will_topic) hast Du recht. Den Fix pushe ich nachher (pino : Das beseitigt dann Dein Problem)
                            - Bei Punkt Eins liegst Du falsch. Der Connect wird durch self.ConnectToBroker() in der __init__ Routine ausgeführt, also vor dem parsen. (sonst würde das Plugin keine messages abonnieren)


                            Viele Grüße
                            Martin

                            Kommentar


                              #15
                              Problem gefunden, Broker ( mosquitto ) hatte ihn von git ... gezogen weil ich alles auf dem neusten haben wolte.
                              Habe jetzt über apt neu install gemacht und den anderen gelöscht, dazu aber meine plugin.conf und das alte mqtt plugin, jetzt ist alles bei mqtt wieder gut.
                              Danke für die mühe und die analyse
                              mfg

                              Kommentar

                              Lädt...
                              X