Dann bleiben ja nur 2 Varianten als Möglichkeit, "alt" und "neu".
Noch ne' Frage zur Frequenz- Verarbeitung:
Steckt da im Modul eine Sicherheitsabfrage drin?
Also, "verarbeite nur die aktuellen Watt, wenn die Frequenz vorhanden ist"??
Vielen Dank
Dann bleiben ja nur 2 Varianten als Möglichkeit, "alt" und "neu".
Das Problem ist, dass das Solax Modul für Bezug von Anfang an schon falsch war. Deshalb habe ich auch nie EVU Werte bekommen.
Ich stimme zu, dass der zweite WR zur Anpassung des Moduls keine Beachtung finden sollte und auch die Dongles spielen hier wahrscheinlich keine Rolle.openWB hat geschrieben: ↑Di Dez 07, 2021 5:53 am Lasst zunächst den zweiten WR bitte mal Weg, ich glaube der verwirrt nur und ist für die Funktion unerheblich.
@peete
Wenn ich dich richtig verstanden hab brauchen wir schlicht 2 Varianten, die derzeitige Auselsung und die mit den anderen Registern, korrekt?
Wäre es auch damit getan wenn die extra Dongle nicht genutzt würden?
Das könnte auch eine Erklärung für den Fehler sein.derNeueDet hat geschrieben: ↑Di Dez 07, 2021 9:30 am Fällt das Modul auf die Nase, wenn hier das falsche Frequenz Register abgefragt wird und deshalb kommen dann keine Leistungswerte an?
VG
Det
Ja vermute ich auch:derNeueDet hat geschrieben: ↑Di Dez 07, 2021 9:30 am Fällt das Modul auf die Nase, wenn hier das falsche Frequenz Register abgefragt wird und deshalb kommen dann keine Leistungswerte an?
VG
Det
Code: Alles auswählen
#!/usr/bin/python
import sys
# import os
# import time
# import getopt
# import socket
# import struct
# import binascii
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.factory import ClientDecoder
def unsigned32(result, addr):
low = result.registers[addr]
high = result.registers[addr + 1]
val = low +( high << 16)
return val
def unsigned16 (result, addr):
return result.registers[addr]
def signed16(result, addr):
val = result.registers[addr]
if val > 32767:
val -= 65535
return val
def signed32(result, addr):
val = unsigned32(result, addr)
if val > 2147483647:
val -= 4294967295
return val
ipaddress = str(sys.argv[1])
client = ModbusTcpClient(ipaddress, port=502)
resp=client.read_input_registers(0, 114)
value = signed32(resp, 70)
# for SolaX negative means get power from grid
value = -value
f = open('/var/www/html/openWB/ramdisk/wattbezug', 'w')
f.write(str(value))
f.close()
frequenz = unsigned16(resp,7) / 100
print (frequenz)
f = open('/var/www/html/openWB/ramdisk/evuhz', 'w')
f.write(str(frequenz))
f.close()
consumed = unsigned32(resp,74) / 100
print (consumed)
f = open('/var/www/html/openWB/ramdisk/bezugkwh', 'w')
f.write(str(consumed))
f.close()
einspeisung = unsigned32(resp,72) / 100
f = open('/var/www/html/openWB/ramdisk/einspeisungkwh', 'w')
f.write(str(einspeisung))
f.close()
Code: Alles auswählen
frequenz = unsigned16(resp,7) / 100
print (frequenz)
f = open('/var/www/html/openWB/ramdisk/evuhz', 'w')
f.write(str(frequenz))
f.close()
consumed = unsigned32(resp,74) / 100
print (consumed)
f = open('/var/www/html/openWB/ramdisk/bezugkwh', 'w')
f.write(str(consumed))
f.close()
einspeisung = unsigned32(resp,72) / 100
f = open('/var/www/html/openWB/ramdisk/einspeisungkwh', 'w')
f.write(str(einspeisung))
f.close()
Sofort wieder 0 Watt.derNeueDet hat geschrieben: ↑Di Dez 07, 2021 11:11 am Nimm mal nur den Block frequenz raus und die anderen beiden bitte drin lassen.
Code: Alles auswählen
ipaddress = str(sys.argv[1])
client = ModbusTcpClient(ipaddress, port=502)
resp=client.read_input_registers(0, 114)
value = signed32(resp, 70)
# for SolaX negative means get power from grid
value = -value
f = open('/var/www/html/openWB/ramdisk/wattbezug', 'w')
f.write(str(value))
f.close()
Verstehe ich es richtig, dass jetzt die aktuellen Watt gelesen werden, aber dafür keine Zählerstände und Frequenz mehr?Peete hat geschrieben: ↑Di Dez 07, 2021 11:15 amSofort wieder 0 Watt.derNeueDet hat geschrieben: ↑Di Dez 07, 2021 11:11 am Nimm mal nur den Block frequenz raus und die anderen beiden bitte drin lassen.
Wenn nur das drin ist nach den Definitionen, geht es.Code: Alles auswählen
ipaddress = str(sys.argv[1]) client = ModbusTcpClient(ipaddress, port=502) resp=client.read_input_registers(0, 114) value = signed32(resp, 70) # for SolaX negative means get power from grid value = -value f = open('/var/www/html/openWB/ramdisk/wattbezug', 'w') f.write(str(value)) f.close()