Hallo,
ich bin neu hier und habe SH NG bei mir auf einem raspberry pi laufen --> einfach klasse, was ihr da auf die Beine gestellt habt.
Ich versuche, meinen Wechselrichter ber plugin auszulesen und mir die Daten in SH NG anzeigen zu lassen.
Um der Frage vorzubeugen: Nein, der Kaco Blueplanet Hybid kann kein ModBus. Es handelt sich um ein proprietäres TCP/IP-Protokoll, dass der Wechselrichter spricht und die Daten in einer Win-APP anzeigen kann. Den Datenverkehr habe ich "geknackt" und mir ein python Programm unter Windows (bitte nicht schimpfen, aber ich bin kein "Linux-Kind", Windows war für mich am einfachsten) geschrieben, dass mir die Daten ausliest (das sieht dann so aus, wie im Screenshot zu sehen).
Ich verwende die Scapy-Lib, um den WR per TCP anzupingen und die Daten, die dieser dann auf den Bus packt zu lesen und zu übersetzen.
Nun habe ich versucht, den Code in ein Plugin zu integrieren und scheitere auf voller Linie. Ich mache beim Aufruf der scapy-Befehle irgendetwas falsch. Ich blicke es aber nicht - was auch daran liegen mag, dass ich im Programmieren sehr unerfahren bin :-(
Scapy habe ich installiert und im requirements.txt steht es drin.
Wenn ich das plugin __init__.py um die Funktionsaufrufe, die die scapy-Befehle beinhalten, reduziere, läuft das Plugin sauber durch und ich kann in der Visu statische Werte (irgendwelche Werte, die ich den Variablen zuweise) anzeigen.
Die Ausgabe im Log-Bildschirm sieht so aus ( send_packet_init beinhaltet den "sr1()-Befehl" und dabei klemmt es dann 😥):
2024-05-12 15:14:56 ERROR plugins.ek_kaco.poll_device Method plugins.ek_kaco.poll_device exception: [Errno 1] Die Operation ist nicht erlaubt
> Traceback (most recent call last):
> File "/usr/local/smarthome/lib/scheduler.py", line 690, in _task
> obj()
> File "/usr/local/smarthome/plugins/ek_kaco/__init__.py", line 246, in poll_device
> (response_flag, ack_number, seq_number, window_length, combined_bytes)=self.send_packet_init(self.src_ip, self.src_port, self.dst_ip, self.dst_port, self.tcp_options, self.window_size, self.payload)
> File "/usr/local/smarthome/plugins/ek_kaco/__init__.py", line 568, in send_packet_init
> sr1(tcp_packet, timeout=1, verbose=0)
> File "/home/smarthome/.local/lib/python3.9/site-packages/scapy/sendrecv.py", line 663, in sr1
> ans, _ = sr(*args, **kargs)
> File "/home/smarthome/.local/lib/python3.9/site-packages/scapy/sendrecv.py", line 650, in sr
> s = conf.L3socket(promisc=promisc, filter=filter,
> File "/home/smarthome/.local/lib/python3.9/site-packages/scapy/arch/linux.py", line 484, in __init__
> self.ins = socket.socket(
> File "/usr/lib/python3.9/socket.py", line 232, in __init__
> _socket.socket.__init__(self, family, type, proto, fileno)
> PermissionError: [Errno 1] Die Operation ist nicht erlaubt
Hat jemand einen Rat für mich? 1000 Dank vorab.
grafik.png
ich bin neu hier und habe SH NG bei mir auf einem raspberry pi laufen --> einfach klasse, was ihr da auf die Beine gestellt habt.
Ich versuche, meinen Wechselrichter ber plugin auszulesen und mir die Daten in SH NG anzeigen zu lassen.
Um der Frage vorzubeugen: Nein, der Kaco Blueplanet Hybid kann kein ModBus. Es handelt sich um ein proprietäres TCP/IP-Protokoll, dass der Wechselrichter spricht und die Daten in einer Win-APP anzeigen kann. Den Datenverkehr habe ich "geknackt" und mir ein python Programm unter Windows (bitte nicht schimpfen, aber ich bin kein "Linux-Kind", Windows war für mich am einfachsten) geschrieben, dass mir die Daten ausliest (das sieht dann so aus, wie im Screenshot zu sehen).
Ich verwende die Scapy-Lib, um den WR per TCP anzupingen und die Daten, die dieser dann auf den Bus packt zu lesen und zu übersetzen.
Nun habe ich versucht, den Code in ein Plugin zu integrieren und scheitere auf voller Linie. Ich mache beim Aufruf der scapy-Befehle irgendetwas falsch. Ich blicke es aber nicht - was auch daran liegen mag, dass ich im Programmieren sehr unerfahren bin :-(
Scapy habe ich installiert und im requirements.txt steht es drin.
Wenn ich das plugin __init__.py um die Funktionsaufrufe, die die scapy-Befehle beinhalten, reduziere, läuft das Plugin sauber durch und ich kann in der Visu statische Werte (irgendwelche Werte, die ich den Variablen zuweise) anzeigen.
Die Ausgabe im Log-Bildschirm sieht so aus ( send_packet_init beinhaltet den "sr1()-Befehl" und dabei klemmt es dann 😥):
2024-05-12 15:14:56 ERROR plugins.ek_kaco.poll_device Method plugins.ek_kaco.poll_device exception: [Errno 1] Die Operation ist nicht erlaubt
> Traceback (most recent call last):
> File "/usr/local/smarthome/lib/scheduler.py", line 690, in _task
> obj()
> File "/usr/local/smarthome/plugins/ek_kaco/__init__.py", line 246, in poll_device
> (response_flag, ack_number, seq_number, window_length, combined_bytes)=self.send_packet_init(self.src_ip, self.src_port, self.dst_ip, self.dst_port, self.tcp_options, self.window_size, self.payload)
> File "/usr/local/smarthome/plugins/ek_kaco/__init__.py", line 568, in send_packet_init
> sr1(tcp_packet, timeout=1, verbose=0)
> File "/home/smarthome/.local/lib/python3.9/site-packages/scapy/sendrecv.py", line 663, in sr1
> ans, _ = sr(*args, **kargs)
> File "/home/smarthome/.local/lib/python3.9/site-packages/scapy/sendrecv.py", line 650, in sr
> s = conf.L3socket(promisc=promisc, filter=filter,
> File "/home/smarthome/.local/lib/python3.9/site-packages/scapy/arch/linux.py", line 484, in __init__
> self.ins = socket.socket(
> File "/usr/lib/python3.9/socket.py", line 232, in __init__
> _socket.socket.__init__(self, family, type, proto, fileno)
> PermissionError: [Errno 1] Die Operation ist nicht erlaubt
Hat jemand einen Rat für mich? 1000 Dank vorab.
grafik.png
Kommentar