Ankündigung

Einklappen
Keine Ankündigung bisher.

MQTT Subscribe Server(LBS19001052) Beispiel 1Wire-owfs-ioBroker -MQTT-Server-Edomi

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

    MQTT Subscribe Server(LBS19001052) Beispiel 1Wire-owfs-ioBroker -MQTT-Server-Edomi

    Ich wurde aufgefordert mal ein HowTo zu erstellen.
    Also hier ein Beispiel, für ein Setup um 1Wire Sensoren über einen Raspberry Pi mit ioBroker und Mosquitto Server (MQTT-Server) an den Edomi zu schicken.
    Ist aus dem Gedächtnis protokolliert, hoffe ich habe keine Ablauffehler drin...
    • Installation ioBroker
      Image "ioBroker Image für Raspberry Pi2/3/4 Buster 20190723" von iobroker.net runterladen und auf der SD-Karte installieren.
      Raspberry damit starten
      Standard Einstellungen nach Neuinstallation konfigurieren, z.B. Dateisystem erweitern, etc.
    • Installation owfs und mosquitto Server
    Code:
    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install -y owfs
    systemctl stop owfs
    vi /etc/owfs.conf
    Zeile: server: usb = all:all auskommentieren.
    Zeilen localhost mit 127.0.0.1 ersetzen (Meiner Ansicht nach ein sicherer Weg um die Dienste an IPv4 zu binden)
    Mindestens einen USB-Adapter DS9490R mit 1Wire Sensoren anschließen.
    Code:
    sudo systemctl disable owftpd
    systemctl start owfs.service
    sudo apt-get install -y mosquitto
    sudo systemctl enable mosquitto
    • Webinterface des ioBroker aufrufen
    • Adapter "1Wire OWFS" installieren
    • Instanz OFWS konfigurieren:
      • im Adapter 1Wire die IP Adresse auf 127.0.0.1 eintragen.
      • in Adapter 1Wire im Tab WIRES ADRESSEN oben auf "Adressen lesen" (das Pfeil im Kreis Symbol) klicken
        Abwarten bis die Sensoren angezeigt werden. Ich habe hier die Namen in sprechende Namen umgeändert. Unter Property habe ich Fasttemp eingetragen um die Abfragen schneller zu machen, sind aber damit ungenauer. Poll-Intervall bei mir ist 300.
    • Adapter "MQTT Client" installieren
    • Instanz mqtt-client konfigurieren
      • MQTT Broker IP auf 127.0.0.1 setzen
      • Client ID auf iobroker setzen
    • Eventuell muss zwischendurch mal der jeweilige Dienst durchgestartet werden um die Konfiguration zu übernehmen.
    • Unter Edomi den MQTT Subscribe Server (LBS19001052) installieren
      • Logikseite mit dem Baustein erstellen
      • IP-Adresse des ioBrokers eintragen
      • Start/Stop auf 1 oder auf System KO 2 (Systemstart) setzen
      • beide Filter leer lassen
      • E8, E9 und E10 auf 0 setzen, E13 leer lassen, E12 auf gewünschten Loglevel konfigurieren
    • Unter Edomi (interne/knx) Variablen für die Temperatur Sensoren anlegen
    • Projekt aktivieren
    • Im ioBroker unter Objekte owfs.0/wires/ werden hoffentlich Temperatur Sensoren aufgeführt
      • ganz rechts auf das Schraubenschlüssel Symbol klicken
      • Im Fenster Einstellung für "owfs.0.wires.Sensor1_fasttemp" (z. B.) das Kästchen "aktiviert" anklicken und daneben folgendes eintragen
        ENTWEDER
        edomi/set/internal/1430
        > für interne Variablen
        ODER !!!
        edomi/set/knx/4-7-30
        -> für die KNX Gruppenadresse 4/7/30 (von mir ungetestet)
      • damit wird die Edomi interne Variable 1430 bzw. die Gruppenadresse 4/7/30 auf den Wert des Temperatur Sensors gesetzt.
      • Unter Publish das Kästchen "aktiviert" anklicken
      • unten speichern anklicken
      • In der Übersicht ist das Schraubenschlüssel Symbol nicht mehr weiß sondern blau.
    • Jetzt die eingestellten 5 Minuten (Das Poll-Interval des owfs) warten und auf dem Edomi beobachten wie die Temperatur Werte ins Edomi geschrieben werden. Funktioniert hier auf jeden Fall so!
    Das ist jetzt kurz zusammengeschrieben, sollte aber zum gewünschten Ergebnis führen.

    Das hier ist nur durch Hilfe von ThorstenGehrig und hartwigm entstanden. Vielen Dank an die beiden!
    Ich hab es nur niedergeschrieben als Doku für mich und für andere.
    Zuletzt geändert von Lapheus; 22.10.2019, 00:22. Grund: Stichworte und Danksagung hinzugefügt
    Gruß
    Lapheus

    #2
    Tolle Anleitung, danke. Bin am mqtt server auch schon mal gescheitert.
    Aber nur als zwischenfrage: iobroker kann doch direkt nach knx schreiben, somit wäre es eine Ebene weniger?

    Kommentar


      #3
      Hi
      @lapheus: gute Anleitung!
      @givemeone:wenn man den Knx Bus mit den ganzen Temperaturen füllen will... oder falls man keinen EDOMI hat: geht sicherlich.
      MQTT ist aber durchaus strategisch sinnvoll - und man lernt was.

      gruss
      thorsten

      Kommentar


        #4
        Zitat von givemeone Beitrag anzeigen
        Tolle Anleitung, danke. Bin am mqtt server auch schon mal gescheitert.
        Aber nur als zwischenfrage: iobroker kann doch direkt nach knx schreiben, somit wäre es eine Ebene weniger?
        vielleicht will ers aber nicht am Bus haben, weil dann der ganze Traffic heftiger ist und so bleiben die vielen Werte nur in der Visu

        Kommentar


          #5

          Danke nochmals für die Anleitung.
          Aber irgendwas scheint noch zu fehlen.
          Ich erhalte in Edomi die Temperaturwerte im Baustein LBS19001052, aber
          das iKO wird nicht aktualisiert.
          Fernzugriff muss lt. Anleitung nicht erlaubt werden, oder? Hatte aber auch das mal versucht!
          Anbei ein Screenshot. Kann mir jemand weiterhelfen?
          Eine Ausgangsbox muss da ja nicht verbunden werden, oder?

          tmp.jpg

          sG Joe

          Kommentar


            #6
            Der Screenshot ist ein wenig sparsam. Ein bischen mehr Kontext wäre hilfreich, z.B. ein Screenshot des Subscribe Servers.
            Welcher LBS ist das im Screenshot?

            Kommentar


              #7
              Sorry, ich dachte, die Angaben sind vollständig und ausreichend.
              Danke jedoch vielmals für die Rückmeldung.
              Es war der im Text erwähnte LBS19001052.
              Ich habe den Grund gefunden und im Thread zum LBS gepostet.
              https://knx-user-forum.de/forum/proj...00#post1418400

              Hier in kurzform: Mein MySQL scheint nicht unter "localhost" erreichbar zu sein, sondern nur unter "127.0.0.1". localhost ist jedoch im LBS hardcodiert.

              sG
              Joe

              Kommentar


                #8
                Zitat von givemeone Beitrag anzeigen
                Aber nur als zwischenfrage: iobroker kann doch direkt nach knx schreiben, somit wäre es eine Ebene weniger?
                Richtig.
                Mein Ziel war es die Temperaturwerte direkt in Edomi zu bekommen. Ich verwende die Temperaturen nur intern in Logiken und in der Visu, brauch Sie also nicht auf dem KNX-Bus. In der Beschreibung oben habe ich nur aufgenommen, das man es auch auf KNX Gruppenadressen schicken kann, mehr der Vollständigkeit halber. Mit der Beschreibung oben würde auch Edomi die Werte auf den KNX Bus senden, nicht der ioBroker.
                Gruß
                Lapheus

                Kommentar


                  #9
                  Zitat von givemeone Beitrag anzeigen
                  Hier in kurzform: Mein MySQL scheint nicht unter "localhost" erreichbar zu sein, sondern nur unter "127.0.0.1". localhost ist jedoch im LBS hardcodiert.
                  Wie im anderen Thread geschrieben:
                  Bei Problemen mit localhost(ipv6) und 127.0.0.1(ipv4) scheint etwas mit der lokalen Netzwerkkommunikation nicht zu passen. Eventuell IPv6 wegkonfiguriert?
                  Gruß
                  Lapheus

                  Kommentar


                    #10
                    Zitat von Lapheus Beitrag anzeigen
                    Mit der Beschreibung oben würde auch Edomi die Werte auf den KNX Bus senden, nicht der ioBroker.
                    Das habe ich übrigens zwischenzeitlich getestet und funktioniert wunderbar! (Nur als Ergänzung, da Du oben geschrieben hast, dass Du es nicht getestet hast.).
                    Danke für die Anleitung!!

                    Kommentar


                      #11
                      Hallo zusammen,

                      leider funktioniert diese Anbindung des MQTT-Clients aus dem iobroker nicht zuverlässig.
                      Ab und an hört der iobroker MQTT-Client unvermittelt auf die Toppics weiter zu senden.
                      Geht man nun hin und löscht die Einstellungen im MQTT-Cliet auf dem iobroker und erstellt sie danach wieder funktioniert es für kurze Zeit wieder.

                      Kann das hier jemand bestätigen außer hartwigm, von dem weis ich das er genau den gleichen Effekt hat.
                      Gruß
                      Lapheus

                      Kommentar


                        #12
                        Bei mir klappt aber ohne iobroker auch nicht stabil, so alle 2-3 Tage muss der rpi neu gebootet werden. Habe das über einen watchdog gelöst. Immer wenn 3 Minuten kein Wert ankommt, wird automatisch rebootet. So klappt es recht zuverlässig...

                        Kommentar


                          #13
                          Moin zusammen,
                          ich betreibe ein originales Raspbian auf einem alten Raspberry 2 mit I2C 1-Wire Adapter.
                          Das einzige was darauf installiert wurde ist OWFS.
                          Per cronjob wird 1x pro Minute ein Python-Script gestartet, welches die Werte zum MQTT Server sendet.

                          Läuft bei mir seit ? Jahren (damals, als der Raspberry 2 neu war) ohne Neustart Zwang. Das Ding wurde höchstens mal neu gestartet, wenn Stromausfall war.

                          Bei Interesse stelle ich gerne das Python Script bereit.

                          Grüße
                          Markus

                          Kommentar


                            #14
                            kctnetworx : Das hört sich gut... ich komme endlich bald dazu, einen kleinen weiteren Teil meines 1.64-edomi-Installation auf 2.02 umzuziehen: 1-wire.

                            Architektonisch finde ich meine bisherige Lösung, den OWFS per edomi-LBS auszulesen, okay, aber nicht ganz richtig - sei sie auch wirklich seit Jahren stabil und zuverlässig (danke, André!).

                            Es erscheint mir viel logischer, den Server mit OWFS die Daten selber per MQTT publizieren zu lassen - genau so, wie Du es offenbar machst. MQTT sehe ich als etablierte und einzige Austauschlösung jedwerder Daten heterogener Systeme bei mir im LAN. Dazu werden sich auch diverse ESP8266, etc gesellen ( z.B. ph-wert Pool, Zisternen-Pegel,...). Edomi kann dann abholen und ohne erforderliche Installation zu LBS, die ich gerne so weit wie möglich reduziere (außer für MQTT, solange noch nicht nativ in edomi). Den oben beschriebene Weg über ioBrocker finde ich persönlich architektonisch unglücklich - 2 Broker in Reihe - und möchte ihn nicht gehen.

                            Daher: Ja, ich habe Interesse an Deinem Script und freue ich, wenn Du es mir zukommen lässt oder noch besser hier einfach in einem Beitrag teilst.

                            Frage dazu:
                            * Liefert das Script immer automatisch alle vorhanden/verfügbaren Daten aus in eine sinnvolle MQTT-Struktur, z.B. 1wire/<ID>/temperature, etc? Oder muss man die gewünschten ID konfigurieren.
                            * Kann das Script auch mit TLS und User/PW auf MQTT publizieren? Auch wenn es LAN und damit hoffentlich sicher ist: Da an den Temperaturen wohl möglich Logiken mit Wirkung hängen, mag ich die Daten nicht unverschlüsselt durchleiten.

                            Ich habe beine Python-Erfahrung: Muss ich dafür etwas auf dem Server istallieren oder kann das Pyhton-Script wie ein bash-Script von Hause aus ausgeführt werden?
                            Nachtrag: Vermutlich muss ich das Paket python3 installieren - für ubuntu per sudo apt-get install python3 Ist bei mir schon da. Braucht es auch irgend eine MQTT-Bibliothek? python-paho-mqtt?
                            @all: Wenn jemand anderes derlei auch schon erfolgreich nutzt: Ich freue mich über jedes Scipt für diesen Zweck...

                            VG,
                            Carsten
                            Zuletzt geändert von saegefisch; 03.08.2020, 10:45.

                            Kommentar


                              #15
                              Der Anfang steht schon mal als funktionierender Draft, die Magie über alle 1-wire-Sensoren und Werte mir fehlt noch...
                              Code:
                              #!/usr/bin/env python
                              
                              import paho.mqtt.client as mqtt
                              import datetime
                              
                              # The callback for when the client receives a CONNACK response from the server.
                              def on_connect(client, userdata, flags, rc):
                              print("Connected with result code "+str(rc))
                              
                              # === Publisher ===
                              # Open with TLS + user/PW
                              client = mqtt.Client()
                              client.on_connect = on_connect
                              client.tls_set('/etc/ssl/cacert.pem')
                              client.username_pw_set(username="DEIN_USER", password="DEIN_PW")
                              client.connect("MOSQUITTO-SERVER", 8883, 60)
                              
                              # Workload
                              client.publish("1wire/4711/temperature", "11.1")
                              client.publish("1wire/4712/temperature", "22.2")
                              
                              # >>> loop ueber alle 1wire-Sensoren ... am besten aus cache <<<<<<<<<<<< hier fehlt noch die Magie... :)
                              # >>> Einplanung per cronjob jede Minute
                              
                              # TS as publisher-alive-indicator for subscribers
                              client.publish("1wire/ts_utc", str(datetime.datetime.utcnow()).split('.')[0])
                              
                              client.disconnect()

                              Kommentar

                              Lädt...
                              X