NEWS
[Gelöst] MQTT-Verbindung via Python script
-
Servus,
ich versuche nun seit Stunden eine Verbindung via MQTT herzustellen, ohne Erfolg.
Was stimmt an meiner Einstellung nicht!?
Dieses Pythonscript soll an meinen Iobroker ausgeben.,
Ich habe es mit mqtt-client versucht
Und mit MQTT Server/Broker
Kann mir jemand weiterhelfen, der sich auskennt?
Mfg
Tom
-
@steinmetz_4 code immer als Text in code-tags!
diese schwarze Briefmarke ist am Handy nicht zu entziffern!@steinmetz_4 sagte in MQTT-Verbindung:
ich versuche nun seit Stunden eine Verbindung via MQTT herzustellen
welche MQTT Topologie nutzst du?
https://www.iobroker.net/#de/adapters/adapterref/iobroker.mqtt/README.mdwer ist ...32?
-
-
@homoran sagte in MQTT-Verbindung:
welche MQTT Topologie nutzst du?
Da denke ich mal, dass es PUSH/SUBSCRIBE-Topologie ist.
Watermeter läuft bereits.
-
-
@steinmetz_4
Wenn der Zero an den ioBroker senden soll, dann ist der ioB der Client.
Der hat eine IP und einen Port, an den der Zero die Daten sendet. Das musst Du dann im Script entsprechend einstellen.
Der Adapter erzeugt dann selbst beim Empfang der Daten die passenden DP. -
@codierknecht sagte in MQTT-Verbindung:
dann ist der ioB der Client.
aber irgendwo muss ein Broker sein.
der ioBroker MQTT Client abonniert dann dort seine Topics -
@homoran sagte in MQTT-Verbindung:
aber irgendwo muss ein Broker sein.
Ich sehe das so, dass das Python-Script sendet - also den Broker spielt.
Aber das ist diese komische "Sprache", die Blöcke über die Einrückung definiert, oder?
Die ist in meiner internen Hirn-Firewall automatisch geblockt -
@codierknecht sagte in MQTT-Verbindung:
@homoran sagte in MQTT-Verbindung:
aber irgendwo muss ein Broker sein.
Ich sehe das so, dass das Python-Script sendet - also den Broker spielt.
Nein, das Skript ist der MQTT-Client, der an den Broker (der ja schon erfolgreich läuft) senden/publish will. Allerdings ist der Server in der Variable falsch hinterlegt. (FQDN / IP-Adresse). Der Port 8883 scheint übereinzustimmen.
@Steinmetz_4 Ist das richtig, dass bereits eine Broker-Instanz läuft? Dann benötigst du keine zweite. Zeig' mal bitte die Einstellungen dieser Instanz.
-
Da bin ich wieder...
Das Python script soll senden (temperatur) an IoBroker MQTT
Ich bin auch schon ein Stück weiter...
das script versucht zu senden, kommt aber nicht durch...!
#!/usr/bin/python3 import sys import paho.mqtt.client as mqtt import ssl # set the variables # Path to the Sensor systempath # 28-01142f7ba71a has to be changed to you sensor path! sensor = '/sys/bus/w1/devices/28-3c01f096929e/w1_slave' broker='FQDN / 192.168.178.185' port=1879 publish_topic="house/pi-ds18b20" clientid='python-mqtt-ds18b20' username='Tom' password='xxxxxxxxxx' insecure=True qos=1 retain_message=True # do the stuff def readTempSensor(sensorName) : f = open(sensorName, 'r') lines = f.readlines() f.close() return lines def readTempLines(sensorName) : lines = readTempSensor(sensorName) while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = readTempSensor(sensorName) temperaturStr = lines[1].find('t=') if temperaturStr != -1 : tempData = lines[1][temperaturStr+2:] tempCelsius = float(tempData) / 1000.0 tempKelvin = 273 + float(tempData) / 1000 tempFahrenheit = float(tempData) / 1000 * 9.0 / 5.0 + 32.0 return [tempCelsius, tempKelvin, tempFahrenheit] #MQTT Connection client=mqtt.Client(clientid) client.username_pw_set(username, password) client.tls_set(cert_reqs=ssl.CERT_NONE) #no client certificate needed client.tls_insecure_set(insecure) client.connect(broker, port) client.loop_start() client.publish("{}/temperature".format(publish_topic),"{:.2f}".format(readTempLines(sensor)[0]),qos,retain_message) client.disconnect() client.loop_stop()
Mfg
-
@steinmetz_4 sagte in MQTT-Verbindung:
Das Python script soll senden (temperatur) an IoBroker MQTT
und der ist als Broker konfiguriert?
und unter der IP@steinmetz_4 sagte in MQTT-Verbindung:
192.168.178.185
zu erreichen?
-
Wen meinst Du?
MQTT Adapter? läuft in IoBroker unter 192.168.178.185 -
@steinmetz_4 sagte in MQTT-Verbindung:
MQTT Adapter
ja, den!
@homoran sagte in MQTT-Verbindung:
der ist als Broker konfiguriert?
als Client nutzt er dir nichts.
-
-
@steinmetz_4 sagte in MQTT-Verbindung:
Ich denke schon.
jepp! dann ist die Frage auch eindeutig geklärt
-
Ich kann Dir nicht mehr sagen.
Wenn ich wüsste was falsch ist, würde ich hier nicht fragen. -
@steinmetz_4 ist das das aktive Skript???
-
Sorry, nein !
ich tüftel an allen Ecken und Enden!#
aktuel:
#!/usr/bin/python3 import sys import paho.mqtt.client as mqtt import ssl # set the variables # Path to the Sensor systempath # 28-01142f7ba71a has to be changed to you sensor path! sensor = '/sys/bus/w1/devices/28-3c01f096929e/w1_slave' broker='192.168.178.185' port=1879 publish_topic="house/pi-ds18b20" clientid='python-mqtt-ds18b20' username='Tom' password='Atomameise' insecure=True qos=1 retain_message=True # do the stuff def readTempSensor(sensorName) : f = open(sensorName, 'r') lines = f.readlines() f.close() return lines def readTempLines(sensorName) : lines = readTempSensor(sensorName) while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = readTempSensor(sensorName) temperaturStr = lines[1].find('t=') if temperaturStr != -1 : tempData = lines[1][temperaturStr+2:] tempCelsius = float(tempData) / 1000.0 tempKelvin = 273 + float(tempData) / 1000 tempFahrenheit = float(tempData) / 1000 * 9.0 / 5.0 + 32.0 return [tempCelsius, tempKelvin, tempFahrenheit] #MQTT Connection client=mqtt.Client(clientid) client.username_pw_set(username, password) client.tls_set(cert_reqs=ssl.CERT_NONE) #no client certificate needed client.tls_insecure_set(insecure) client.connect(broker, port) client.loop_start() client.publish("{}/temperature".format(publish_topic),"{:.2f}".format(readTempLines(sensor)[0]),qos,retain_message) client.disconnect() client.loop_stop()
Mfg
-
@homoran sagte in MQTT-Verbindung:
@steinmetz_4 sagte in MQTT-Verbindung:
Ich denke schon.
jepp! dann ist die Frage auch eindeutig geklärt
Verzeiht
Ich weiß, dass ich nichts weiß (https://de.wikipedia.org/wiki/Ich_weiß,_dass_ich_nichts_weiß)
-
@steinmetz_4
Wenn ich die Fehlermeldung richtig interpretiere, versucht dein Skript eine verschlüsselte Verbindung, die du hier:client.tls_set….
auch so aktivierst. Dein Broker ist aber nicht mit SSL konfiguriert.
Schalte SSL im Skript ab.Und: Du musst ruhiger werden …