Hallo noisfloor,
ich nutze das print(). Dieses gibt die Zeichen nicht gleich aus. Will man in einer Schleife jeweis ein '*' ausgeben, so wird die Ausgabe erst nach den Newline gemacht. Deswegen muss man
dafür benutzen.
Hier ist der Code für das MQTT, wobei ich davon ausgehe, das dieses auch ohne MQTT ein Problem sein kann (das ist leider nur ein Auschnitt):
Code: Alles auswählen
def _mqttOnMessage (self, client, userdata, message):
msg = str(message.payload.decode("utf-8"))
data = json.loads (msg)
if 'rawData' in data:
dm = data['rawData']
s_time = time.strftime("%d.%m.%Y %H:%M:%S", time.localtime())
for key in dm.keys ():
for idx in range (0, len (self._prop_cfg)):
if key == self._prop_cfg[idx]['IDX']:
if None == self._prop_cfg[idx]['strFunc']:
s = str (dm[key])
else:
s = self._prop_cfg[idx]['strFunc'] (dm[key])
print ('%s : %s : %s' %(s_time, self._prop_cfg[idx]['Name'], s))
break
elif 'type' in data:
# received ACK from an action
s_time = time.strftime("%d.%m.%Y %H:%M:%S", time.localtime())
print ('%s : %s' %(s_time, data['type']))
else:
raise ExceptionMqtt ('have no rawData!\n%s\n' %(msg))
def _mqttOnConnect (self, client, userdata, flags, rc):
print ('Connected to MQTT Broker: ' + self._mqtt_brocker_adr)
client.subscribe (self._mqtt_topic + self._device_uuid)
def _mqttOnDisconnect (self, packet, exc=None):
print ('Disconnect MQTT Broker')
def mqtt (self, deviceName = None):
if None != deviceName:
self._setDevice (deviceName)
self.refreshData ()
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 1000)}'
# configure MQTT client
client = mqtt.Client (client_id)
client.on_connect = self._mqttOnConnect
client.on_message = self._mqttOnMessage
client.on_disconnect = self._mqttOnDisconnect
client.tls_set (ca_certs=self._mqtt_tls_ca_cert,
certfile=self._mqtt_tls_client_cert,
keyfile=self._mqtt_tls_client_key,
cert_reqs=ssl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLSv1_2,
ciphers=None)
client.tls_insecure_set (True)
# MQTT connect
client.connect (self._mqtt_brocker_adr, self._mqtt_port)
client.loop_forever()