Eine LED an einem D1 Mini über Home Assistant schalten, ich bekomme es nicht hin!

Reinhard_33

New member
Hallo,
ich versuche jetzt schon ewig mit Hilfe von chatgpt mal eine LED an einem D1 Mini zu schalten.
Als ersten Einstieg sozusagen. Es hatte schon mal teilweise funktioniert, aber ich mußte das
System neu installieren und jetzt scheitert es daran, das Mosquitto die Verbindung ablehnt.
Mit dem MQQT Explorer kann ich mich mit den Zugangsdaten verbinden, aber die Verbindung vom
ESP8266 wird abgelehnt:
Code:
>>> %Run -c $EDITOR_CONTENT
Verbindung zu WLAN...
WLAN verbunden: ('192.168.178.96', '255.255.255.0', '192.168.178.1', '192.168.178.1')
Fehler beim Verbinden mit dem Broker: 5
>>>

Das ist das Mikropythonprogramm auf dem D1 Mini:
Python:
from umqtt.simple import MQTTClient
import network
import time

# Konfiguration
MQTT_BROKER = "192.168.178.71"
CLIENT_ID = "ESP8266_Test_Client"
TOPIC = "test/topic"
USER = "moskitouser"
PASSWORD = "mücke24"

# WLAN-Verbindung herstellen
SSID = "FRITZT"
PASSWORD_WIFI = "561500xxxxxxxx"

def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(SSID, PASSWORD_WIFI)
    while not wlan.isconnected():
        print("Verbindung zu WLAN...")
        time.sleep(1)
    print("WLAN verbunden:", wlan.ifconfig())

connect_wifi()

# MQTT verbinden
try:
    client = MQTTClient(CLIENT_ID, MQTT_BROKER, user=USER, password=PASSWORD)
    client.connect()
    print("Mit MQTT-Broker verbunden")
except Exception as e:
    print("Fehler beim Verbinden mit dem Broker:", e)
    client = None

if client:
    # Testnachricht senden
    try:
        client.publish(TOPIC, "Testnachricht vom ESP8266")
        print(f"Nachricht an {TOPIC} gesendet.")
    except Exception as e:
        print("Fehler beim Senden der Nachricht:", e)
    finally:
        client.disconnect()
        print("Verbindung getrennt")

Das Programm hatte vor der Neuinstallation funktioniert, jetzt aber nicht mehr.
Hat jemand eine Idee?

Gruß Reinhard

Edit: Die fehlermeldung habe ich erst mal wegbekommen, er verbindet sich jetzt. Ich habe diese Zeile:
Code:
client = MQTTClient(CLIENT_ID, MQTT_BROKER, user=USER, password=PASSWORD)
Durch diese ersetzt:
Code:
client = MQTTClient(CLIENT_ID, MQTT_BROKER, user=b'moskitouser', password=b'mücke24')
 
Zuletzt bearbeitet:
user=b'moskitouser', password=b'mücke24'
Wie bist Du denn auf das b davor gekommen? Da es nicht in Anführungsstrichen steht müsste es für eine Variable stehen, diese scheint nicht definiert zu sein, je nachdem wie diese Programmiersprache funktioniert (mit genau der kenne ich mich nicht aus) würde ich es für möglich halten, dass Du keine Fehlermeldung mehr bekommst, weil es jetzt derartig stirbt, dass es nichts mehr von sich geben kann.
 
Ich habe es auf dieser Seite gefunden, die 10 Antwort. Nach dem Ändern der Zeile war die Fehlermeldug weg.
 
Zuletzt bearbeitet von einem Moderator:
Verstehe - allerdings wird "Link auf Website" anderen nicht helfen, wenn die Seite mal weg ist / bearbeitet wird, zudem sind Links auf kommerzielle Webseiten laut Nutzungsbedingungen hier nicht erlaubt :)

Das b davor dient in Python also dazu, user und password die bislang als string vorliegen in bytes zu konvertieren, https://mpython.readthedocs.io/en/v2.2.1/library/mPython/umqtt.simple.html erklärt das mit:
All data related to MQTT messages are encoded as bytes. This includes the message content and topic name (even if the MQTT specification states that the topic name is UTF-8 encoded). The reason is:binary data (bytes) is received via a network socket.

Okay, also die Verbindung klappt jetzt. Sofern ich die Doku richtig interpretiere:
Code:
MQTTClient.publish(topic, msg, retain=False, qos=0)
topic 和 msg Byte type
müsste topic allerdings ebenfalls noch mit b versehen werden - also sofern Du an der Stelle noch hängst?
 
Ja, die Verbindung klappt erst mal. In deine letzte Codezeile hat sich wohl ein asiatisches Schriftzeichen eingeschlichen?
 
In deine letzte Codezeile hat sich wohl ein asiatisches Schriftzeichen eingeschlichen?
Das ist original von der Doku kopiert, da steht das auch in der englischen Übersetzung zusätzlich so drin :)

Die wesentliche Punkt ist allerdings, auch Topic wird als byte angegeben, deshalb mit b davor. So interpretiere ich das jedenfalls.
 
Das wäre der Part für die eingebaute LED
YAML:
  # interne LED
light:
  - platform: status_led
    id: onboard_led
    internal: True
    pin:
      number: D4
      # nach Bedarf
      inverted: true
 
Kennst du EspHome? Da brauchst du nur konfigurieren und es spricht ganz ohne mqtt mit HA.

Ich habe noch nichts mit ESP Home gemacht, kenne es aber. Mir geht es nicht speziell um das Schalten einer LED, ich möchte erst mal den Einstieg in Home Assistant hinbekommen und das dann weiter ausbauen. Für die Anwendung, an der ich zur Zeit tüftle, würde es weit bessere Lösungen geben, aber mich faszinieren die unendlichen Möglichkeiten von Home Assistant.
Ich wohne hier auf einen uralten, ehemaligen Bauernhof, da gibt es Anwendungen ohne Ende.

Vielen Dank für die Antworten!

Gruß Reinhard
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
5.881
Beiträge
57.472
Mitglieder
5.818
Neuestes Mitglied
DefaultStandart
Zurück
Oben