Error bestimmen und beheben

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Benutzeravatar
Ernst Haft
User
Beiträge: 7
Registriert: Samstag 19. März 2022, 15:02

Hallo,

gemäß eines Tutorials versuche ich einen Raspberry Pi Pico mit Node-RED kommunizieren zu lassen.
Python gibt mir aber folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "<stdin>", line 56, in <module>
  File "/lib/umqtt/simple.py", line 123, in publish
OSError: [Errno 107] ENOTCONN
Was heißt das?
Mein gesamter Code lautet wie folgt:

Code: Alles auswählen

import network, time, machine, ledled
from secrets import *
from umqtt.simple import MQTTClient

rp2.country("DE")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, PASSWORD)
while not wlan.isconnected() and wlan.status() >= 0:
    ledled.obled(1, 0.5)
    time.sleep(1)
    print('wait ...')
ledled.obled(2, 0.1)
print('Connected to Wifi!')

mqtt_server = 'broker.hivemq.com'
client_id = 'board1'
topic_pub_temp = b'test'

# Temperatur-Sensor
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)

# Temperatur lesen
def temperature():
    temperature_value = sensor_temp.read_u16() * conversion_factor 
    temperature_Celcius = 27 - (temperature_value - 0.706)/0.00172169/ 8
    time.sleep(2)
    return temperature_Celcius

def mqtt_connect():
    client = MQTTClient(client_id, mqtt_server, keepalive=3600)
    try:
        client.connect()
    except Exception as es:
        print(es)
    print('Connected to %s MQTT Broker'%(mqtt_server))
    return client

def reconnect():
   print('Failed to connect to the MQTT Broker. Reconnecting...')
   time.sleep(5)
   machine.reset()

try:
    client = mqtt_connect()
    time.sleep(2)
except OSError as e:
    reconnect()

while True:
    client.publish(topic_pub_temp, str(temperature))
    time.sleep(5.0)
Die entsprechende Zeile des Modul (Zeile 123) lautet:

Code: Alles auswählen

self.sock.write(pkt, i + 1)
Außerdem gibt mir das Programm als Exception in Zeile 36 "-2" als Output - Warum?

Viele Grüße und Danke an alle Antwortenden,
euer Ernst :)
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Verbindung zum MQTT Broker klappt nicht. Dein Code ignoriert das aber, und tut so, als ob alles ok waere (ausser eben dieser print-Ausgabe). Und dann gibt's halt Folgefehler, weil man auf einen nicht-verbundenen Socket nicht schreiben kann.

Warum die Verbindung nicht zustande kommt, kann viele Ursachen haben. Musst du rausfinden.
Antworten