Code: Alles auswählen
def request(command: str):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(solarview_timeout)
s.connect((solarview_hostname, solarview_port))
s.sendall(command.encode("ascii"))
response = s.recv(1024)
if Debug != 0:
DebugLog("Raw response: "+str(response))
message = response[:-2]
checksum = int.from_bytes(response[-1:], "big", signed=False)
calculated_checksum = int(sum(message)) % 256
DebugLog("message: " + str(message))
DebugLog("checksum: " + str(checksum) + " calculated: " + str(calculated_checksum))
except Exception as e:
DebugLog("Error: request to SolarView failed. return-code: %s, host: %s, port: %s, timeout: %s, command: %s"
% (str(e), str(solarview_hostname), str(solarview_port), str(solarview_timeout), str(command)))
traceback.print_exc()
exit(1)
#
# Format: {WR,Tag,Monat,Jahr,Stunde,Minute,KDY,KMT,KYR,KT0,PAC,UDC,IDC,UDCB,IDCB,UDCC,IDCC,UDCD,IDCD,UL1,IL1,UL2,IL2,UL3,IL3,TKK},Checksum
# Beispiel: {01,09,09,2019,08,18,0000.0,00082,002617,00018691,00104,451,000.2,000,000.0,000,000.0,000,000.0,226,000.4,000,000.0,000,000.0,00},▒
#
# Bedeutung (siehe SolarView-Dokumentation):
# KDY= Tagesertrag (kWh)
# KMT= Monatsertrag (kWh)
# KYR= Jahresertrag (kWh)
# KT0= Gesamtertrag (kWh)
# PAC= Generatorleistung in W
# UDC, UDCB, UDCC, UDCD= Generator-Spannungen in Volt pro MPP-Tracker
# IDC, IDCB, IDCC, IDCD= Generator-Ströme in Ampere pro MPP-Tracker
# UL1, IL1= Netzspannung, Netzstrom Phase 1
# UL2, IL2= Netzspannung, Netzstrom Phase 2
# UL3, IL3= Netzspannung, Netzstrom Phase 3
# TKK= Temperatur Wechselrichter
# Geschweifte Klammern entfernen
values = message.decode("ascii")[1:-1].split(",")
Achtung: die Zeile nach den Beispieldaten wurde auch angepasst, da jetzt die Antwort in der Variable "message" gespeichert wurde!
Zusätzlich wird jetzt auch die Prüfsumme berechnet, jedoch noch nicht ausgewertet. Wenn das so passt, könnte dort eine Prüfung mit rein.