Benachrichtigungen
Alles löschen

EM24 auslesen

6 Beiträge
2 Benutzer
1 Reactions
1,894 Ansichten
(@muellerarmack)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 146
Themenstarter  

Ich hoffe, dass dieser Thread hier richtig aufgehangen ist. Kennt jm. Sourcen für das Auslesen des EM24 über TCP/IP.

 

Gerne über Python. 

 

Bietet das EM24 keine Webdienst-Endpoint.


   
Zitat
(@muellerarmack)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 146
Themenstarter  

Oder wäre es wirklich so einfach:

 

 

from pymodbus.client.sync import ModbusTcpClient

SERVER_IP = '192.168.178.61'
SERVER_PORT = 502
ADDRESS_START  = 37
#ADDRESS_LENGTH = 10
DEVICE_ID = 228

var_Power = 5000

client = ModbusTcpClient(host=SERVER_IP, port=SERVER_PORT)
rq = client.write_ / read_

print rq
client.close()

   
AntwortZitat
profantus
(@profantus)
Mitglied Wiki-Moderatoren
Beigetreten: Vor 3 Jahren
Beiträge: 1198
 

EM24 redet Modbus. Bei Victron gibt es eine Registerliste. Die kannst du dir runterladen.

Von Carlo Gavazzi gibt es ein Tool UCS7 nennt sich das. Damit kannst du den EM24 auch auslesen. Bin mir aber nicht sicher ob das Tool auch Modbus TCP kann oder nur RTU.

Damit kannst du auch eine Mitschnitt machen und dir die Register ansehen.

Wenn du ein Raspi mit Venus OS hast klappt das alles schon automatisch. Damit kannst du dann auch mit Node Red die Daten selbst weiter verarbeiten oder die Daten via MQTT irgendwo hin schicken.

HOWTO Wechselrichter Dimensionierung


   
AntwortZitat
(@muellerarmack)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 146
Themenstarter  

Danke, ich wollte nicht gleich mit Kanonen auf Spatzen schießen, erst mal mit einfachen Bordmittel selbst testen. Was ich an dem obigen (kopierten 😉 Schnippsel nicht verstehe ist die Startadresse von 37.

Laut:

file:///home/stefan/Downloads/EM24.Ethernet.Protocol.Rev.1.2.pdf

S.5 sehe ich Modicon-Adressen 30.000 und mehr. Wenn ich bspw. "nur" die kumulierte Momentanleistung haben möchte, würde ich die 300041 nehmen. Ist das korrekt.

Dann wäre das Snippet oben echt simpel.

 


   
AntwortZitat
(@muellerarmack)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 146
Themenstarter  

Ok, das war doch einfacher als gedacht. Im Folgenden ein Snipet um die kumulierte Leistung aus dem EM24 rauszuholen (Quick & Dirty, also bitte keine Kritik an meine Coding-Fähigkeiten)

from pymodbus.client import ModbusTcpClient

SERVER_IP = '10.1.1.50'
SERVER_PORT = 502
ADDRESS_START = 1
# ADDRESS_LENGTH = 10
DEVICE_ID = 228


client = ModbusTcpClient(host=SERVER_IP, port=SERVER_PORT)
val = client.connect()
if not val:
print("***** Connection error **********")

rq = client.read_input_registers(address=0x28)


print(rq.registers)
client.close()

Natürlich nicht vergessen die Bib zu installieren


   
AntwortZitat
(@muellerarmack)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 146
Themenstarter  

Jetzt bräuchte ich doch noch mal fachkundigen rat. Ich habe folgenden Funktion in python:

def auslesen():
    global momentanleistung, programmStatus, SERVER_IP, SERVER_PORT
    versuche = 5
    for i in range(versuche):
        try:
            client = ModbusTcpClient(host=SERVER_IP, port=SERVER_PORT)
            request = client.read_holding_registers(40, 2)
            momentanleistung = request.registers[0] /10
            client.close()

        except:
            # Fehler bei Auslesung der Sensoren
            if i < versuche - 1:
                continue
            else:
                programmStatus = 0

        break

 

Die Werte stimmen auch, allerdings erhalte ich unsinnige Ergebnisse, vermutlich einen Überlauf, wenn ich einspeise

und das EM24 negative Werte ausgibt. Übe den iobroker bekomme ich problemlos die negativen Werte ausgespuckt über

das gleiche Register, ich vermute also, dass ich request.registers[0] vor der Variablenübername in momentanleistung noch dekodieren

muss, die Frage ist nur wie? Ich finde leider auch mit Tante google keine Hinweise dazu. Hat jm. einen klugen Rat? Danke

 

Ich hatte ähnliche Probleme im ioBroker, hat ein bissel Recherche bedurft, um die korrekten Einstellungen zu bekommen, folgndes habe ich

genutzt:

Allerdings ist schon komisch das im Handbuch zum EM42 das Register 40 als INT32 ausgewiesen ist, damit bekomme ich aber nur Datenmüll. Ich gehe mal davon aus, dass Vorzeichen behafteter 16 BIT dem 32BIT entspricht.


   
AntwortZitat
Teilen: