NEWS
[Gelöst] MQTT-Verbindung via Python script
-
-
@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 …
-
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