moin @GMeier ! ööhhmm, könntest du noch mal kurz näher beschreiben, was du eigentlich machst und vorhast?! Ich verstehe es so: Du möchtest die Datenpunkte wie in poll_list.py für die 222-F auf MQTT bekommen, richtig? Du benutzt dazu aber nicht einfach die poll_list.py in das olsplitter Verzeichnis kopiert mit dem optolinkvs_splitter, sondern hast versucht, mit Teilen aus dem Programm dein eigenes zu basteln, und das funktioniert nicht? Wenn ich das richtig verstanden habe, frage ich mich zuerst, warum du das Programm zerpflücken willst. Es funktioniert doch eigentlich gut. Oder ist es für den zero ohne 2 zu viel? ok, das hier pllen = inbuff[1] if len(inbuff) >= pllen + 3: data = inbuff[7:pllen + 2] return data ist in deinem Kontext um eine Byteposition schief. schau mal hier: da ist noch die 06 ('VS2_ACK)' vor und pllen wäre bei dir 41h=65 Bytes. Da kann man ewig drauf warten, und das and inbuff[0] == 0x41 aus dem if davor wird wahrscheinlich auch nie eintreten. Es hat also nix mit Timing zu tun. Ich benutze ja das receive_vs2telegr() zum Empfang von Master (vom Viconnect) und Slave Telegrammen gleichermassen. Dir ist da der Kommentar "# ab hier Master Request und Slave Response identischer Aufbau ..." durch die Lappen gegangen. ps. bei sowas hilft immer ein print() wenn der zero das noch hergibt 😉 inbuff += ser.read_all() print(utils.bbbstr(inbuff)) # oder vlt auch print(inbuff.hex()) if len(inbuff) >= 4 and inbuff[0] == 0x41: ... damit hättest du es sofort gesehen. pps: das eine oder andre hast du natürlich schöner gelöst als es in meinem Code ist. Vielleicht sollte ich da mal drüber gehen - der Splitter war mein zweites Python Projekt, und von daher... Aber selbst ein 2er Pi ist damit masslos unterfordert (~2% CPU Last), und so hatte ich da nie eine Notwendigkeit gesehn...
... Mehr anzeigen