NEWS
[Gelöst] MQTT-Verbindung via Python script
-
@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 …
-
Tada, es funktioniert!
Ich danke Dir!
War ein holpriger Weg aber es läuft...Habe beide Punkte auskommentiert.
P.S. Ich bin die Ruhe in Person...
Mfg
Tom