ich bekomme bei der Verwendung von revpimodio2 immer folgende Meldung:
dmesg:
[ 1504.249543] piControl: Invalid Ioctl from python3
Wenn das Programm läuft kommt ständig folgendes:
/usr/lib/python3/dist-packages/revpimodio2/helper.py:477: RuntimeWarning: cycle time of 50 ms exceeded on lock
RuntimeWarning
ich habe den Parameter Cycletime ausgelesen und der ist bei 20ms. Ich habe die Zykluszeit auf 100ms eingestellt aber die Fehlermeldungen kommen weiterhin.
Hat jemand eine Idee?
Hier mein Programm, es liest zyklisch die IOs aus und pusht bei Änderungen die Daten in ein MQTT topic:
Code: Select all
import revpimodio2
import time
import paho.mqtt.client as mqtt
import json
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
firstcycle = True
mqttClient = mqtt.Client()
mqttClient.on_connect = on_connect
mqttClient.username_pw_set("mqtt","pierburg")
mqttClient.connect("localhost", 1883, 0)
# RevPiModIO Instantiieren
rpi = revpimodio2.RevPiModIO(autorefresh=False,monitoring=True)
rpi.cycletime = 100
rpi.autorefresh_all()
# Strg+C automatisch verarbeiten
rpi.handlesignalend()
# prepare list of inputs of all connected devices
myinputs = dict()
for name in rpi.device:
if rpi.device[str(name)].position == 0:
continue
allinputs = rpi.device[str(name)].get_inputs()
for thisinput in allinputs:
myinputs[str(thisinput)] = 0
# cycle loop function
def cycleprg(zyklustools):
global firstcycle
# iterate through all inputs and check if value has changed
# if it has changed or this is the first cycle mqtt publish it
for k, v in myinputs.items():
valChanged = False;
if rpi.io[k].value != v:
myinputs[k] = rpi.io[k].value
valChanged = True
if (valChanged == True) or (firstcycle == True):
mqttClient.publish("revpi/inputs/"+k,myinputs[k], qos=0,retain=True)
firstcycle = False
time.sleep(1)
rpi.cycleloop(cycleprg)