Raspi zero w mit Python und MQTT -> Versionskollision?
Verfasst: Donnerstag 1. August 2024, 16:58
Hallo zusammen!
Ich habe eine Spielstandanzeige mit MQTT in Python programmiert.
Ein gekauftes HF-Modul mit dem RFM69CW erfordert die Programmierung mit Python. Desweiteren die SPI sowie GPIOs.
All das hat schon mal funktioniert und lief lange Zeit problemlos.
Bis eines Tages folgender Fehler auftritt:
pi@rpi-zero-w:~/Spielstandsanzeige $ python3 SA_Anzeige_0.4.3.py
/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py:10: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
gpio.setup(LAT,gpio.OUT) # setup gpio no. 18 (GPIO5) to output
/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py:114: DeprecationWarning: Callback API version 1 is deprecated, update to latest version
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)
home/rcpulse/fs20/61439/1 b'0'
Traceback (most recent call last):
File "/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py", line 118, in <module>
client.loop_forever()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 2297, in loop_forever
rc = self._loop(timeout)
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1686, in _loop
rc = self.loop_read()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 2100, in loop_read
rc = self._packet_read()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3142, in _packet_read
rc = self._packet_handle()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3808, in _packet_handle
return self._handle_publish()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 4145, in _handle_publish
self._handle_on_message(message)
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 4501, in _handle_on_message
on_message(self, self._userdata, message)
File "/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py", line 59, in on_message
hauscode=[int(temp) for temp in re.findall(r'-?\d+\.?\d*',msg.topic)]
NameError: name 're' is not defined
Damit bricht das Programm ab.
Ich habe schon viel Zeit mit der Fehlersuche und im Internet verbracht. Bisher erfolglos.
Hat jemand eine Idee?
Besten Dank im Voraus!
Mit freundlichem Gruß
Visionflier
P.S.: Ich bin leider in Python nicht wirklich bewandert. Ich war lange Zeit Hardwareentwickler.
Meine Systemvoraussetzungen:
- Raspi zero w mit Funkhardwaremodul 866MHz
- Softwareausschnitt:
</>#!/usr/bin/env python
import paho.mqtt.client as mqtt
import RPi.GPIO as gpio
import spidev
import time, os
.
.
.
def on_message(client, userdata, msg):
print(msg.topic," ",str(msg.payload))
hauscode=[int(temp) for temp in re.findall(r'-?\d+\.?\d*',msg.topic)]
global near # reset score value of "near"
global far # reset score value of "far"
global starttime, endtime
pos_hauscode=msg.topic.find('61439')
hauscode=msg.topic[pos_hauscode:pos_hauscode+5]
hauscode_wert=int(hauscode)
pos_adresse=msg.topic.find('/1')
adresse=msg.topic[pos_adresse+1:pos_adresse+4]
adresse_wert=int(adresse)
switch= int(msg.payload)
print(hauscode_wert,adresse_wert,int(msg.payload))
if hauscode_wert == 61439:
.
.
.
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("home/rcpulse/#", 0)
client.loop_forever()
</>
Ich habe eine Spielstandanzeige mit MQTT in Python programmiert.
Ein gekauftes HF-Modul mit dem RFM69CW erfordert die Programmierung mit Python. Desweiteren die SPI sowie GPIOs.
All das hat schon mal funktioniert und lief lange Zeit problemlos.
Bis eines Tages folgender Fehler auftritt:
pi@rpi-zero-w:~/Spielstandsanzeige $ python3 SA_Anzeige_0.4.3.py
/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py:10: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
gpio.setup(LAT,gpio.OUT) # setup gpio no. 18 (GPIO5) to output
/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py:114: DeprecationWarning: Callback API version 1 is deprecated, update to latest version
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)
home/rcpulse/fs20/61439/1 b'0'
Traceback (most recent call last):
File "/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py", line 118, in <module>
client.loop_forever()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 2297, in loop_forever
rc = self._loop(timeout)
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 1686, in _loop
rc = self.loop_read()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 2100, in loop_read
rc = self._packet_read()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3142, in _packet_read
rc = self._packet_handle()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 3808, in _packet_handle
return self._handle_publish()
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 4145, in _handle_publish
self._handle_on_message(message)
File "/home/pi/.local/lib/python3.9/site-packages/paho/mqtt/client.py", line 4501, in _handle_on_message
on_message(self, self._userdata, message)
File "/home/pi/Spielstandsanzeige/SA_Anzeige_0.4.3.py", line 59, in on_message
hauscode=[int(temp) for temp in re.findall(r'-?\d+\.?\d*',msg.topic)]
NameError: name 're' is not defined
Damit bricht das Programm ab.
Ich habe schon viel Zeit mit der Fehlersuche und im Internet verbracht. Bisher erfolglos.
Hat jemand eine Idee?
Besten Dank im Voraus!
Mit freundlichem Gruß
Visionflier
P.S.: Ich bin leider in Python nicht wirklich bewandert. Ich war lange Zeit Hardwareentwickler.
Meine Systemvoraussetzungen:
- Raspi zero w mit Funkhardwaremodul 866MHz
- Softwareausschnitt:
</>#!/usr/bin/env python
import paho.mqtt.client as mqtt
import RPi.GPIO as gpio
import spidev
import time, os
.
.
.
def on_message(client, userdata, msg):
print(msg.topic," ",str(msg.payload))
hauscode=[int(temp) for temp in re.findall(r'-?\d+\.?\d*',msg.topic)]
global near # reset score value of "near"
global far # reset score value of "far"
global starttime, endtime
pos_hauscode=msg.topic.find('61439')
hauscode=msg.topic[pos_hauscode:pos_hauscode+5]
hauscode_wert=int(hauscode)
pos_adresse=msg.topic.find('/1')
adresse=msg.topic[pos_adresse+1:pos_adresse+4]
adresse_wert=int(adresse)
switch= int(msg.payload)
print(hauscode_wert,adresse_wert,int(msg.payload))
if hauscode_wert == 61439:
.
.
.
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("home/rcpulse/#", 0)
client.loop_forever()
</>