Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenübertragung MQTT

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

    #46
    Kleiner Nachtrag: Die Geschichte mit den drei Batterien klappt natürlich. Mit meiner Erfahrung würde ich aber heute hingehen und ehr 5 oder 6 Batterien nehmen und dann mit einem Festspannungsregler versehen. Einige Sensoren benötigen etwas mehr als die 3.3V und wenn man dann die Spannung auf 4V festlegt funktioniert beides (sowohl der EPS als auch der 5V PIR Sensor z.B.).

    Kommentar


      #47
      Geb auch kurz meinen Senf dazu.. ich hab hier schon 5 x DS18B20 am testen... funktionieren sehr gut..
      Abweichung bei 3 Stück waren ca. 0,1-0,2 Grad bei einem Sensor... hab jetzt noch 3 Stück wasserdicht bestellt..
      die sollten auch die Tage kommen.. Anbindung sehr einfach.. ich nutz allerdings den ESP 201, weil der schon
      Pinanschlüsse hat.. dafür kostet der auch unglaublich teurere 2,70€

      Gruß Martin
      Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

      Kommentar


        #48
        Hallo,

        ich muss da noch mal einsteigen da es so ziemlich der einzige Thread zum Thema MQTT ist.

        Ich habe jetzt einen Automower mit Robonect. Was ich schon hinbekommen habe:
        - IOBroker läuft auf meinem Odroid-Server (mit Dietpi) im Keller
        - Automower sendet erste MQTT-Daten
        - die kommen in IO-Broker auch an
        - wie bekomme ich die MQTT-Daten in den EibPC? Eigentlich möchte ich da die Steuerung realisieren - damit kenne ich mich zumindest ein wenig aus (IO-Broker ist Neuland)

        Ich habe schon im Robonect-Forum nachgefragt - aber leider keine Antwort bekommen.

        https://forum.robonect.de/viewtopic....t=143&start=10

        Ich bin kein Programmierer und kämpfe mich mit Anleitungen meist so irgendwie durch :-) So wie ich das lese bekommt ihr die Daten rein und könnt auch MQTT-Befehle senden (damit ich dem Automower sagen kann: mäh jetzt los oder irgendwann mal: Achtung Regen, fahr in die Station).

        Vielen Dank wenn ihr mir verratet wie ihr die Verbindung macht.


        Gruß Ralf

        Kommentar


          #49
          Hallo Ralf,
          bekanntlich führen hier viele Wege nach Rom... Ich habe mir einen Raspi genommen (auf dem auch noch diverse andere Anwendungen in dem Bereich laufen) und habe da mittels zwei kleinen Python Skipten die Anbindung zwischen MQTT und den EibPC Realisiert. Das läuft bei mir jetzt recht stabil, allerdings vermeide ich es Texte über MQTT zu schicken (also nur nummerische Werte). Dennoch klappt das auch mit Robonect (welcher ich auch nutze).

          Wie sieht es also nun im EibPC aus... Ich schicke ein Kommando mit
          Code:
          if cycle (60,00) and gbw_BrunnenAutom then sendudp(5005u16,192.168.xx.yy,$GPIO16_1/input/69$)....
          an mein Python Skript. Die IP Adresse ist die, auf der das Skript läuft, nicht die IP des MQTT Brokers.

          Daten im EibPC von dem Python Skript zu empfangen geht grundsätzlich so:
          Code:
          Mqtt udpPort=0u16
          udpIP=0u32
          Data1=$$
          Mqtt=event(readudp(udpPort,udpIP,Data1))
          - damit empfängst du alles. Jetzt musst du aber noch die Payload (also z.B. der eigentlich Temperaturwert) vom Rest des empfangenen Strings trennen:
          Code:
          PosSep Data1Length PosSep=find(Data1,$:$,0u16)
          Data1Length=size(Data1)
          MsgHead
          MsgPayload
          PayloadData
          PayloadTxt MsgHead=split(Data1,0u16,PosSep-1u16)
          MsgPayload=split(Data1,PosSep+1u16,Data1Length-1u16)
          PayloadData=convert(MsgPayload,0f32)
          PayloadTxt= convert(MsgPayload,$$)
          und jetzt bis du in der Lage die empangenen Daten im EibPC auf ein einen Text zu prüfen:
          Code:
          if(MsgHead==$WRL/Abluft/humi$) then WRL_AbluftInnenHumi=PayloadData endif
          Soweit zum Hexenwerk auf der EibPC Seite.

          Das Python Script von MQTT zum EibPC sieht so aus:
          Code:
          import paho.mqtt.client as mqtt
          import sys
          import socket
          EibPC_IP='192.168.xx.xx'
          EibPC_Port=4806
          s_udp_sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
          
          # 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))
              # Subscribing in on_connect() means that if we lose the connection and
              # reconnect then subscriptions will be renewed.
          
              client.subscribe("#")
          
          # The callback for when a PUBLISH message is received from the server.
          def on_message(client, userdata, msg):
              print(msg.topic+" "+str(msg.payload))
              s_udp_sock.sendto((msg.topic+":"+str(msg.payload)),( EibPC_IP,EibPC_Port))
          client = mqtt.Client()
          client.on_connect = on_connect
          client.on_message = on_message
          client.connect("127.0.0.1", 1883, 60)
          
          
          # Blocking call that processes network traffic, dispatches callbacks and
          # handles reconnecting.
          # Other loop*() functions are available that give a threaded interface and a
          # manual interface.
          
          rc = 0
          while rc == 0:
              rc = client.loop_forever()
              sys.exit(0)

          Und dann noch das Script welches vom EibPC an MQTT schickt:
          Code:
          import re
          import time
          import socket
          import paho.mqtt.client as mqtt
          
          def on_connect(client, userdata, flags, rc):
              print("Connected with result code " + str(rc))
          client = mqtt.Client()
          client.on_connect = on_connect
          client.connect("localhost", 1883, 60)
          
          client.loop_start()
          client.publish("ServerToMqtt", "ONLINE")
          Quelle='' # Adresse des eigenen Rechners
          Port=5005
          e_udp_sock = socket.socket( socket.AF_INET,  socket.SOCK_DGRAM ) #s.o.
          e_udp_sock.bind( (Quelle,Port) )    #Im IP-Adresse und Port verkn. 
          
          strg="/"
          def empfange():
              while 1:
              lastTopic = ""
              searching = True
              data, addr = e_udp_sock.recvfrom( 1024 )
              clean_data=data[:-1]
                  while searching:
                          topic = ""
          #                print("IN:",clean_data)
                          strPos= clean_data.find(strg)
                          if strPos>=1:
          #                    print("Pos>1")
                              topic = lastTopic + clean_data[0:strPos+1]
                              lastTopic=topic
                              clean_data = clean_data[strPos+1:len(clean_data)+1]
                          else:
          #                    print("OUT")
          
                              searching = False
          #                    print (lastTopic)
          #                    print (clean_data)
                              client.publish(lastTopic,clean_data)
          #        else:
          #            client.publish("Fail/","Sep.not.found")
          #    else:
          #        print("Nothing")
          empfange()
          Diese beiden Skripte brauchen dann nur die entsprechenden IP Adressen und Ports des Brokers / EibPCs.

          Ich bin auch kein Programmierer, aber ich habe es so hinbekommen das es einigermaßen läuft ;-)
          Hoffe das es dir hilft.

          LG

          Kommentar


            #50
            Nachtrag: Zum steuern finde ich den EibPC immer noch sehr gut (z.B. die verschiedenen Modi des Rasenmähers anwählen) aber die Visualisierung der Daten mache ich mit Grafana. Dazu musst du nur einen kleine Datenbank (influxdb) auf dem Pi laufen lassen und dann kannst du die Daten perfekt darstellen:
            Bildschirmfoto 2019-11-01 um 10.57.55.png

            Kommentar


              #51
              Hallo,

              super, vielen Dank.

              Werde ich mir in den dunklen Wintermonaten vornehmen - Mähsaison ist ja sowieso beendet.

              Schickere Grafiken würde ich mit IO-Broker versuchen - der läuft zumindest schon mal.

              Gruß Ralf

              Kommentar

              Lädt...
              X