Ok, ich versuche mal mein Glück mit wireshark - ist schon eine Zeitlang her...
Der PR 1846 ist von mir , ich habe deine Anpassung in "meinem" EnergyMeter-Modul direkt übernommen. Das werde ich zurücknehmen und später entsprechend anpassen.
Ok, ich versuche mal mein Glück mit wireshark - ist schon eine Zeitlang her...
Der PR 1846 ist von mir , ich habe deine Anpassung in "meinem" EnergyMeter-Modul direkt übernommen. Das werde ich zurücknehmen und später entsprechend anpassen.
Mit NodeRed habe ich mich erst aufgrund deines Beitrags mal beschäftigt
Ja, ich habe 1 x SHM2 und 2 x EM im Netzwerk. In jedem Datenpaket steckt die Seriennummer des Senders drin, darüber erfolgt die Unterscheidung.Becker hat geschrieben: ↑Mi Dez 22, 2021 9:30 am Du kannst einen Debug direkt an UDP Ausgang ("SMA EM") packen und schauen was da raus kommt jede Sekunde:
download/file.php?id=9086&mode=view
Hast du denn Home Manager + Energy Meter bei dir?
Da wüsste ich nicht welche Gruppe + Port dann welches Gerät ist.
Hier ist der Flow:
viewtopic.php?p=51576#p51576
Code: Alles auswählen
import base64
import socket
import struct
ipbind = '0.0.0.0'
MCAST_GRP = '239.12.255.254'
MCAST_PORT = 9522
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4s4s", socket.inet_aton(MCAST_GRP), socket.inet_aton(ipbind))
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
def parse(packet: bytes):
packet_pos = 0
while packet_pos < len(packet):
channel, key, type, tarif = struct.unpack(">BBBB", packet[packet_pos : packet_pos + 4])
print(f"received: ({channel},{key},{type},{tarif})")
packet_pos += 4 + type
def chunkstring(string, length):
return (string[0+i:length+i] for i in range(0, len(string), length))
while True:
buffer = sock.recv(1024)
if buffer[0:4] == b"SMA\0":
print("-----")
for s in chunkstring(base64.b64encode(buffer).decode('utf-8'), 77):
print(s)
print(".....")
Hab den fix nochmal umgebaut, so daß er ins Multicast-Paket schaut und die Protocol-ID abfragt.