ESP8266 mit 18B20 Sensor, Temp. per MQTT weiterleiten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MatthiasW
User
Beiträge: 2
Registriert: Sonntag 12. März 2023, 06:48

Guten Morgen,
ich habe einen ESP8266 (Node MCU und D1 Mini) verschaltet und schicke die Temperaturdaten per MQTT an einen Server (MQTT Broker). Micropython ist auf dem ESP installiert, das Python Programm mit Thonny funktioniert gut:

Code: Alles auswählen

import machine, onewire, ds18x20, time

# Verbindung zu Wlan
import network
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
sta_if.scan()                             # Scan for available access points
sta_if.connect("Schneider2G", "XXXXX") # Connect to an AP
sta_if.isconnected()                      # Check for successful connection


# Verbindung zu MQTT Server
from umqtt.simple import MQTTClient
CLIENT_NAME = 'esp_1'
BROKER_ADDR = '192.168.59.67'
PORT = '1883'
mqttc = MQTTClient(CLIENT_NAME, BROKER_ADDR, keepalive=60)

# zum testen
# from machine import Pin 
# Pin(2, Pin.OUT).value(0) # led aus, 0 schaltet ein

mqttc.connect()

# zum testen
from machine import Pin 
Pin(2, Pin.OUT).value(0) # 1 led aus, 0 schaltet ein

TOPIC = 'home/temp/azi'

ds_pin = machine.Pin(4)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
#print('Found DS devices: ', roms)

while True:
  ds_sensor.convert_temp()
  time.sleep_ms(750)
  for rom in roms:
    #print(rom)
    temp = ds_sensor.read_temp(rom)
    mqttc.publish(TOPIC, ''+str("%2.2f"%temp))
    print('Die Temperatur im Arbeitszimmer: ', temp)
    #print (str("%2.2f"%temp))
  time.sleep(60) # ca. alle 60 Sekunden

Wenn ich das ESP Board vom Rechner mit Thonny trenne, das Board mit Strom versorge dann funktioniert es nicht mehr. Genauer: Die Anmeldung im Wlan funktioniert, das verbinden zum MQTT Broker gelingt nicht. (die led nach "mqttc.connect()" leuchtet nicht auf). Vor dem "mqttc.connect()" geht die led an.
Ich bin kein Profi, habe aber versucht die Lösung selber zu finden. Ich habe den gleichen Aufbau mit einem anderen Board (D1 Mini) und einem anderen Sensor (dht22) versucht - gleiches Ergebnis. Einer Fehlermeldung würde mir vielleicht helfen, aber wie komme ich die Meldung? Im log am MQTT Broker habe ich keine Fehlermeldung gefunden.

Jetzt weiss ich nicht mehr weiter. Hat jemand eine Idee?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ganze Programm ist wenig bis gar nicht robust. Du schreibst sta_if.is_connected() als ob das sichergestellt würde dadurch. Wird es nicht. Das gibt nur zurück, ob das akut der Fall ist. Es kann viele Gründe geben, warum dem nicht so ist. Oder sich das über die Zeit auch ändert. Dein Code muss also damit klarkommen, dass er die Verbindung wieder aufbaut, und wenn das passiert ist, wieder die MQTT-Verbindung ebenfalls aufbaut.

Warum das jetzt immer dann passiert, wenn’s nicht am Rechner hängt - keine Ahnung. Andere Position, Zufall, etc. dazu braucht man einen Einblick ins System, zb via extra USB seriellen Kabel.
MatthiasW
User
Beiträge: 2
Registriert: Sonntag 12. März 2023, 06:48

Hallo Deets, danke für die Antwort. Die Netzwerkverbindung klappt immer. Die Verbindung zum MQTT Broer klappt immer wenn ich den Code in Thonny am PC ausführen lasse. Die Verbindung zum MQTT Broker klappt nie wenn ich den Code auf dem ESP ausführen lassen. Das ist alles recht stabil - leider auch wenn es nicht klappt :-)
Viellcht kannst du mir hier helfen:
mqttc = MQTTClient(CLIENT_NAME, BROKER_ADDR, keepalive=60)
In dieser Zeile würde ich gerne noch Benutzer und Passwort übergeben - finde aber den richtigen Syntax nicht. Weisst du das vielleicht?
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ist keine Frage der Syntax, das ist eine Frage der API. Was sagt denn die Dokumentation dazu?

Und was soll denn bitte ''+str("%2.2f"%temp)!? Auf was für Drogen muss man sein um so etwas zu schreiben? 🤡 Und damit meine ich jetzt nicht mal das man den ``%``-Operator für so etwas schon sehr lange nicht mehr verwendet, sondern f-Zeichenkettenliterale.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten