Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS19001070 - MQTT Subscription Client / LBS19001071 - MQTT Publish Client

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

    LBS19001070 - MQTT Subscription Client / LBS19001071 - MQTT Publish Client

    UPDATE:
    Diese Bausteine werden nicht weiterentwickelt. Als Alternative empfehle ich die neuen MQTT Bausteine von jonofe.
    Diese benutzen über einen PHP-Wrapper die offizielle
    Eclipse Mosquitto™ MQTT client library.

    Die Bausteine LBS19001070 und LBS19001071 wurden im Download-Portal deaktiviert.

    Hallo zusammen,

    ich möchte Euch gerne meine beiden neuen MQTT LBS vorstellen:

    MQTT Subscription Client: https://service.knx-user-forum.de/?c...ad&id=19001070
    MQTT Publish Client: https://service.knx-user-forum.de/?c...ad&id=19001071

    Mit diesen Bausteinen ist es möglich, zu einem MQTT Broker wie zum Beispiel Mosquitto Kontakt aufzunehmen und dann Daten zu senden bzw. zu empfangen.

    Ich selbst habe mir diese Bausteine unter anderem für die einfache Einbindung von Homematic in Edomi gebaut.
    Dazu nutze ich das Homematic CCU Addon von O. Wagner, das direkt auf einer CCU installiert wird: https://github.com/owagner/hm2mqtt
    Ich nutze allerdings selbst keine echte CCU, sondern einen Raspberry Pi mit RaspberryMatic (https://github.com/jens-maus/RaspberryMatic).
    Das hm2mqtt-Addon wird auch RaspberryMatic unterstützt und bietet damit eine komfortable Einbindung von Homematic in MQTT per Web-GUI.

    Ansonsten könnten vielleicht auch folgende Listen mit MQTT Software interessant sein:
    https://github.com/mqtt-smarthome/mq...er/Software.md
    https://github.com/hobbyquaker/awesome-mqtt

    Der Code enthält Fragmente aus bereits existierenden Bausteinen von jonofe.

    Viel Spass damit!
    Zuletzt geändert von Nanosonde; 16.05.2017, 10:31.

    #2
    Vielen Dank. Wird die Tage getestet. Werde es einsetzen um domoticz oder vielleicht sogar node red (noch nie eingesetzt) an edomi anzubinden.
    LG und nochmals danke!!!!!
    Jean-Luc Picard: "Things are only impossible until they are not."

    Kommentar


      #3
      Nanosonde: Super Sache! MQTT ist wirklich cool. Ich bin auch schon seit einigen Wochen an zwei LBS dran. Insbesondere an einem MQTT Publisher der die gesamte EDOMI KO Struktur bereitstellt. Ist zwar im Setup etwas komplexer, aber im Vergleich zu nem Alexa Skill eher Kindergarten.

      Im Test läuft das inzwischen ganz stabil. Muss aber noch ein wenig dokumentieren. Mein Subscription LBS wird vermutlich funktional ähnlich sein wie deiner, ich suche allerdings noch nach einer Möglichkeit ein EDOMI iKO aus einem LBS heraus so zu setzen als würde man es über einen Ausgang tun und zwar auf Basis der bekannten ID bzw. KNX-GA. Dann könnte man auch per MQTT Publish aus anderen Systemen direkt und sehr einfach Aktionen in EDOMI auslösen.

      Im Moment geht nur:
      • EDOMI KOs bereitstellen
      • Andere Topics publishen und damit ggf. Aktionen in anderen Systemen auslösen
      • Topics per subscribe empfangen und dann in EDOMI Aktionen per Logik auslösen.
      Hoffe das in den nächsten Tagen auch mal soweit zu haben, dass ich es hochladen kann.

      Kommentar


        #4
        Zitat von jonofe Beitrag anzeigen
        Nanosonde: MQTT Publisher der die gesamte EDOMI KO Struktur bereitstellt.
        Sehr gut. Sowas hatte ich ja in dem anderen Thread auch schon angeregt, allerdings ohne LBS, da ja die Remote-Schnittstelle im Quelltext vorliegt.
        Leider fehlen noch Teile, die eine vernünftige Umsetzung verhindern. Vom Erschaffer ist da auch wohl nichts zu erwarten. Schade.

        Deine Lösung verwendet dann aber die DB direkt, oder? Also auch keine offizielle Schnittstelle, richtig?

        Zitat von jonofe Beitrag anzeigen
        Mein Subscription LBS wird vermutlich funktional ähnlich sein wie deiner, ich suche allerdings noch nach einer Möglichkeit ein EDOMI iKO aus einem LBS heraus so zu setzen als würde man es über einen Ausgang tun und zwar auf Basis der bekannten ID bzw. KNX-GA. Dann könnte man auch per MQTT Publish aus anderen Systemen direkt und sehr einfach Aktionen in EDOMI auslösen.
        Ja genau. So hatte ich mir das auch vorgestellt. Die iKOs/GAs schreien gerade dazu danach per MQTT zugänglich gemacht zu werden.
        Wenn es wenigstens einen Ausgangsbaustein gäbe, bei dem die KO-Nummer dynamisch sein kann, so dass man sowohl die KO-Nummer bzw. den Namen des KOs übergibt und den Wert.


        Zitat von jonofe Beitrag anzeigen
        Im Moment geht nur:
        • Andere Topics publishen und damit ggf. Aktionen in anderen Systemen auslösen
        • Topics per subscribe empfangen und dann in EDOMI Aktionen per Logik auslösen.


        Diese beiden Features bieten meine beiden LBS auch bereits.

        Welche MQTT-Lib benutzt Du?

        Was ist denn Dein Use-Case für die MQTT EDOMI KOs? Node-Red?

        Kommentar


          #5
          Der Erschaffer hält dies für eine Insellösung - irgendwann werde ich schon entsprechende Schnittstellen bereitstellen und dokumentieren, keine Angst. Dann aber richtig und offiziell - und nicht auf speziell diese Anforderung gemünzt
          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

          Kommentar


            #6
            Zitat von Nanosonde Beitrag anzeigen

            Sehr gut. Sowas hatte ich ja in dem anderen Thread auch schon angeregt, allerdings ohne LBS, da ja die Remote-Schnittstelle im Quelltext vorliegt.
            Leider fehlen noch Teile, die eine vernünftige Umsetzung verhindern. Vom Erschaffer ist da auch wohl nichts zu erwarten. Schade.

            Deine Lösung verwendet dann aber die DB direkt, oder? Also auch keine offizielle Schnittstelle, richtig?
            So offiziell wie ein MySQL Trigger und eine UDF sein können. Diese werden in der edomiLive DB angelegt und werden beim Aktivierung von EDOMI ohnehin gelöscht oder auch wenn der Baustein über den Start/Stop Eingang angehalten wird. Außerdem ist dann der EXEC Teil des LBS gar kein echter LBS Teil, sondern nur ein PHP Skript. Dieses wird von dann von der Stored Procedure aufgerufen.

            Zitat von Nanosonde Beitrag anzeigen
            Welche MQTT-Lib benutzt Du?
            Mosquitto-PHP. Schien mir recht stabil und aktuell zu sein und supportet wohl auch QoS 2. Habe ich aber noch nicht komplett getestet.

            Zitat von Nanosonde Beitrag anzeigen
            Was ist denn Dein Use-Case für die MQTT EDOMI KOs? Node-Red?
            Ja, ich wollte mit Node-Red experimentieren und ggf. auch mal mit anderen MQTT Dashboards für Andoid oder iOS.

            Kommentar


              #7
              Zitat von jonofe Beitrag anzeigen
              So offiziell wie ein MySQL Trigger und eine UDF sein können. Diese werden in der edomiLive DB angelegt und werden beim Aktivierung von EDOMI ohnehin gelöscht oder auch wenn der Baustein über den Start/Stop Eingang angehalten wird. Außerdem ist dann der EXEC Teil des LBS gar kein echter LBS Teil, sondern nur ein PHP Skript. Dieses wird von dann von der Stored Procedure aufgerufen.
              Klingt spannend.Trigger und UDF muss ich mir mal anschauen. Habe mit PHP und MySQL eigentlich nichts am Hut.

              Zitat von jonofe Beitrag anzeigen
              Mosquitto-PHP. Schien mir recht stabil und aktuell zu sein und supportet wohl auch QoS 2. Habe ich aber noch nicht komplett getestet.
              Oh. Nutzt Du eine aktuelle(re) Version von PHP mit phpbrew oder so? Ich hatte damals Probleme, das Mosquitto-PHP für das alte PHP 5.3 zu bauen.

              Zitat von jonofe Beitrag anzeigen
              Ja, ich wollte mit Node-Red experimentieren und ggf. auch mal mit anderen MQTT Dashboards für Andoid oder iOS.
              Interessant. Waren auch genau meine Überlegungen.
              Bei den Dashboards wollte ich mal IoT-Manager von Victor Brutskiy unter iOS testen.
              Auf dem Smartphone benötigte ich eigentlich keine super schöne GUI oder so.
              Da fand ich so eine GUI wie bei OpenHAB immer praktisch, die sich nur anhand der Item-Definitionen "selbst aufbaut".
              Könnte man THEORETISCH ja auch nutzen, indem man nur MQTT Items definiert.

              Beispiel:
              Code:
              Number temperature "temp [%.1f]" {mqtt="<[publicweatherservice:london-city/temperature:state:default]"}
              Number waterConsumption "consum [%d]" {mqtt="<[mybroker:myHome/watermeter:state:XSLT(parse_water_message.xslt)]"}
              Switch doorbell "bell [%s]" {mqtt="<[mybroker:myHome/doorbell:command:ON]"} Number mfase1 "mfase1 [%.3f]" {mqtt="<[flukso:sensor/9cf3d75543fa82a4662fe70df5bf4fde/gauge:state:REGEX(.*,(.*),.*)]"}
              Number humidity "humidity [%.1f%%] {mqtt="<[broker:weatherstation/readings:state:JS(convertPercent.js):humidity=.*]"}
              Dann müsste man zumindestens für das Smartphone keine Klickorgie veranstalten.

              Kommentar


                #8
                Zitat von Nanosonde Beitrag anzeigen

                Klingt spannend.Trigger und UDF muss ich mir mal anschauen. Habe mit PHP und MySQL eigentlich nichts am Hut.
                Oh. Nutzt Du eine aktuelle(re) Version von PHP mit phpbrew oder so? Ich hatte damals Probleme, das Mosquitto-PHP für das alte PHP 5.3 zu bauen.
                Nein, es war nur eine minimale Modifikation von Mosquitto-PHP notwendig. Es fehlte lediglich eine Konstante, die erst ab PHP 5.3.10 eingeführt wurde.
                Danach kompilierte es problemlos.

                Zitat von Nanosonde Beitrag anzeigen
                Interessant. Waren auch genau meine Überlegungen.
                Bei den Dashboards wollte ich mal IoT-Manager von Victor Brutskiy unter iOS testen.
                Auf dem Smartphone benötigte ich eigentlich keine super schöne GUI oder so.
                Da fand ich so eine GUI wie bei OpenHAB immer praktisch, die sich nur anhand der Item-Definitionen "selbst aufbaut".
                Könnte man THEORETISCH ja auch nutzen, indem man nur MQTT Items definiert.

                Beispiel:
                Code:
                Number temperature "temp [%.1f]" {mqtt="<[publicweatherservice:london-city/temperature:state:default]"}
                Number waterConsumption "consum [%d]" {mqtt="<[mybroker:myHome/watermeter:state:XSLT(parse_water_message.xslt)]"}
                Switch doorbell "bell [%s]" {mqtt="<[mybroker:myHome/doorbell:command:ON]"} Number mfase1 "mfase1 [%.3f]" {mqtt="<[flukso:sensor/9cf3d75543fa82a4662fe70df5bf4fde/gauge:state:REGEX(.*,(.*),.*)]"}
                Number humidity "humidity [%.1f%%] {mqtt="<[broker:weatherstation/readings:state:JS(convertPercent.js):humidity=.*]"}
                Dann müsste man zumindestens für das Smartphone keine Klickorgie veranstalten.
                Ja das wäre wirklich interessant, so stelle ich mir das auch vor. Insbesondere für kleine VISUs und Dashboards wäre das genial.
                Aber nicht ohne auch Aktionen auslösen zu können, ohne alle in EDOMI manuell zu konfigurieren. Ich denke aber das sollte auch mit zwei SQL Statements im Subscriber machbar sein. Ich publishe die EDOMI KOs als

                edomi/ko/knx/<GA>/<GA-Name>
                edomi/ko/internal/<ID>/<iKO-Name>

                Damit sollte es dann auch möglich sein, sich selbst einfach auf edomi/ko/# zu subscriben. Beim Empfang einfach das topic zerlegen und mit zwei SQL Statements das EDOMI KO setzen. Werde das mal auf einem Testsystem ausprobieren.

                Kommentar


                  #9
                  Den IoT-Manager werde ich nicht weiter verfolgen.
                  Hier wird mir zuviel eigenes Protokoll auf MQTT aufgesetzt.

                  Vielleicht ist das hier auch noch interessant:
                  https://github.com/klauserber/homr-react (aus https://homematic-forum.de/forum/viewtopic.php?t=33973)

                  Nochmal zurück zu den beiden MQTT LBS:
                  Also Du hast dann bald auch zwei komplexere MQTT-LBS Bausteine, die die komplette Funktionalität meiner beiden LBS beinhalten, richtig?
                  Du setzt aber auf Mosquitto-PHP. Da ich das eigentlich auch wollte, werde ich an meinen beiden LBS dann nichts mehr weiter entwickeln oder umstellen.

                  Achja, und bezüglich der Homematic-Anbindung an Edomi per MQTT bin ich gerade erst über die Info gestolpert, dass der Author Oliver Wagner leider plötzlich verstorben.
                  Das hm2mqtt-Addon (JAVA) wird also nicht weiter gepflegt. Stattdessen gibt es jetzt eine node.js Variante davon: hm2mqtt.js
                  Diese läuft aber leider nicht mehr auf einer CCU, da node.js benötigt wird.


                  Kommentar


                    #10
                    ja, die beiden Bausteine laufen bei mir seit gestern. Damit kann man sogar die knx GA's per MQTT publish setzen.
                    muss allerdings noch ein bisschen optimieren, so dass beim subscriber ein automatisches reconnect erfolgt, wenn mal die connection zum Broker verloren geht. Und eine Filter Funktion werde ich noch einbauen. Die ist beim publisher schon drin, beim subscriber mach ich das in den nächsten Tagen. Dann kann einschränken welche KO Bereiche gepublished werden und welche subscribed werden und somit steuerbar sind.

                    Kommentar


                      #11
                      Kurzer Zwischenstand: ES FUNKTIONIERT!

                      In dem abgebildeten Beispiel schalte ich via MQTT-publish eine Leuchte ein und aus und bekomme die Rückmeldung über ein MQTT-subscribe, welches dann rechts im debug Bereich angezeigt wird.

                      Screenshot from 2017-05-12 19-21-16.png

                      In EDOMI muss ich dazu nur die beiden LBS MQTT Subscriber und MQTT Publisher einfügen und grundlegend konfigurieren:

                      Screenshot from 2017-05-12 20-02-52.png

                      Noch ein bischen Testen und ein bischen Doku, dann lade ich die Bausteine hoch...

                      Kommentar


                        #12
                        Ich habe soeben die beiden angekündigten MQTT LBS hochgeladen:
                        1. MQTT Publisher LBS 19001051 v0.1
                        2. MQTT Subscriber LBS 19001052 v0.1
                        In beiden LBS ist ein ZIP File enthalten, welches ein Installationsskript (install.sh) enthält. Dieses muss entpackt werden und dann als root auf dem EDOMI Server ausgeführt werden. Das Skript installiert eine Erweiterung zu MySQL und die MQTT Library Mosquitto-PHP. Dies ist Voraussetzung für die Funktion beider LBS.
                        Das Installationsskript muss nur einmal ausgeführt werden, ist aber bei beiden LBS enthalten, da jeder LBS auch einzeln eingesetzt werden kann.

                        Mit dem Subscriber LBS kann EDOMI quasi per MQTT Publish Befehlen gesteuert werden, d.h. es können iKOs und KNX-GAs gesetzt werden. Dies ist über folgende Topics möglich

                        edomi/ko/set/knx/<KNX-GA>
                        edomi/ko/set/knx/<KNX-GA-Name>
                        edomi/ko/set/internal/<EDOMI-iKO-ID>
                        edomi/ko/set/internal/<EDOMI-iKO-Name>
                        wobei

                        KNX-GA: mit Bindestrichen separierte KNX Gruppenadresse, z.B. /edomi/ko/set/knx/1-1-30
                        KNX-GA-NAME: Name der KNX Gruppenadresse wie in der ETS angegeben
                        EDOMI iKO-ID: ID des internen Kommunikationsobjekt in EDOMI
                        EDOMI iKO-Name: Name des internen Kommunikationsobjekt in EDOMI

                        Der MQTT Publisher hingegen veröffentlicht die EDOMI iKO und KNX GA Werte, so dass diese von anderen IoT Geräten oder Applikationen (z.B. Node-Red) verwendet werden können. Die iKOs und KNX GAs werden veröffentlicht als:
                        edomi/ko/get/knx/<KNX-GA>
                        edomi/ko/get/knx/<KNX-GA-Name>
                        edomi/ko/get/internal/<EDOMI-iKO-ID>
                        edomi/ko/get/internal/<EDOMI-iKO-Name>

                        Zur Verwendung dieser LBS is natürlich als zentrale Instanz ein MQTT Broker notwendig. Ich habe die Implementierung und Tests mit dem Mosquitto MQTT Broker durchgeführt. Dieser ist sehr einfach auf jedem Linux System (z.B. RPi) zu installieren und die Konfiguration ist sehr einfach.

                        Code:
                        apt-get install mosquitto
                        Hier mein /etc/mosquitto/mosquitto.conf Konfigurationsfile:

                        Code:
                        pid_file /var/run/mosquitto.pid
                        log_dest file /var/log/mosquitto/mosquitto.log
                        listener 1883
                        persistence true
                        persistence_location /var/lib/mosquitto/
                        persistence_file mosquitto.db
                        log_dest syslog
                        log_dest stdout
                        log_dest topic
                        log_type all
                        connection_messages true
                        log_timestamp true
                        allow_anonymous false
                        password_file /etc/mosquitto/pwfile
                        Danach kann mit

                        Code:
                        mosquitto_passwd -c /etc/mosquitto/pwfile edomi
                        ein Passwort für den User 'edomi' angelegt werden und Mosquitto neu gestartett werden:

                        Code:
                        /etc/init.d/mosquitto restart
                        Jetzt ist der Mosquitto Broker einsatzfähig und man kann die LBS entsprechend konfigurieren mit IP (IP des Mosquitto Servers), Port (1883), User (edomi), Password (wie gerade festgelegt).

                        Testen kann man es nun mit dem Befehl

                        Code:
                        mosquitto_pub -h <IP-Mosquitto-Server> -u edomi -P <password> -t edomi/ko/set/knx/1-1-30 -m 1
                        Damit wird die KNX GA 1/1/30 via MQTT Publish auf 1 gesetzt und damit ggf. entsprechende Logiken in EDOMI getriggert.

                        Rückfragen natürlich gerne hier ...

                        Kommentar


                          #13
                          Hi,

                          schonmal vielen Dank!!!!! an euch beide!!


                          @jonofe

                          In deiner Hilfe zu dem Bausteinen schreibst du

                          yum -y install php-process git gcc make
                          cd /tmp
                          git clone https://github.com/jonofe/lib_mysqludf_sys
                          cd lib_mysqludf_sys/
                          ./install.sh
                          Sehe ich das richtig das ich das install.sh nicht via ssh uploaden muss sondern das ich es mir auch von dir bei github holen kann?
                          LG
                          Jean-Luc Picard: "Things are only impossible until they are not."

                          Kommentar


                            #14
                            nein, das sind zwei unterschiedliche install.sh. Eins welches beim LBS dabei ist. Das musst du ausführen. Das andere gehört zum lib_mysqludf_sys.
                            Du kannst natürlich auch in einer EDOMI Console einfach die Befehle aus der Hilfe Schritt für Schritt ausführen, dann benötigst du das install.sh Skript aus dem LBS ZIP nicht.

                            Kommentar


                              #15
                              Hi,

                              wollte mir auch mal den Baustein anschauen um DHT22 in Verbindung mit ESP8266 einzubinden. Spricht etwas dagegen, den Broker zum Test auf dem EDOMI zu installieren (Testserver)

                              Kommentar

                              Lädt...
                              X