Seite 3 von 3

Re: SolarviewAnbindung funktioniert nicht

Verfasst: Di Feb 22, 2022 9:17 pm
von derNeueDet
@ LutzB: schau dir mal den Code an den Lena mal eingebaut hat vor allem das Command.

Das war mal anders als es jetzt drin ist. Das Vommand kann ja jetzt per Frontend eingegeben werden. 00*.

Realisiert war es mal als "-1:00*" wenn ich mich richtig erinnere. Wo ist das -1: geblieben?

Evtl. Hängt es damit zusammen.ich bin gerade am Handy und kann es nicht vergleichen.

VG
Det

Re: SolarviewAnbindung funktioniert nicht

Verfasst: Di Feb 22, 2022 9:38 pm
von yankee
LutzB hat geschrieben: Di Feb 22, 2022 8:38 pm Gibt es irgendwelche Infos, welcher Zeichensatz verwendet wird?
In der Dokumentation steht:
Die Antwort sieht dann folgendermassen aus (feste Länge und zusätzlich durch
Komma getrennt):
{01,09,09,2019,10,43,0001.6,00146,004974,00067931,01835,382,005.8,000,000.0,000,000.0,000,000.0,238,008.8,0
00,000.0,000,000.0,38},ö
{ } sind Anfang und Endzeichen
ö ist die Checksumme, (ein Byte, unsigned, overflow) stellt die Summe dar aller Zeichen inklusive
„{„ und „}“.
Da die der Meinung sind, dass die checksumme ein einzelnes Byte ist und das einzelne Byte ein "ö" ist, ist es schonmal nicht Unicode. Das einzige was einigermaßen mittelmäßig sinnvollerweise noch bleibt ist iso-8859-15.

Edit: Natürlich kann die Checksumme jede beliebige Zahl sein und die Idee das als Zeichen zu dekodieren finde ich unintuitiv, denn die Zahl repräsentiert nunmal nicht notwendigerweise ein Zeichen. Allerdings wenn man in Python `decode("iso-8859-15")` verwendet, dann dekodiert Python alles. Intuitiver wäre je nach Blickwinkel das letzte Byte schon vor dem Dekodieren abzuschneiden:

Code: Alles auswählen

s.recv(1024)[:-1].decode("iso-8859-15")

Re: SolarviewAnbindung funktioniert nicht

Verfasst: Mi Feb 23, 2022 5:35 am
von LutzB
@derNeueDet: Die Stable verwendet noch ein Shell Skript. Das lässt sich nur schwer vergleichen.

@yankee: Ja, wenn man das letzte Byte abschneidet, sollte es passen, war ja auch mein erster Gedanke dazu.

Re: SolarviewAnbindung funktioniert nicht

Verfasst: Mi Feb 23, 2022 7:24 am
von LutzB
So hat es hier mit den Beispieldaten aus dem Quellcode funktioniert:

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.

Bitte testen!

Re: SolarviewAnbindung funktioniert nicht

Verfasst: Mi Feb 23, 2022 7:46 am
von derNeueDet
Ah, so weit hab ich gar nicht zurück geschaut. Jetzt hab ich auch kapiert, wo das mit dem veränderten Command her kommt.
Das war mal ein Shell Ausdruck, der mehr oder weniger 1:1 in den Python Code übernommen wurde.
Dann hat die Python Implementierung vermutlich noch nie funktioniert.

VG
Det

Re: SolarviewAnbindung funktioniert nicht

Verfasst: Mi Feb 23, 2022 9:34 am
von derNeueDet
Evtl. Mal mit den Benutzern hier abgleichen.

viewtopic.php?t=497&start=10#p56025

VG
Det

Re: SolarviewAnbindung funktioniert nicht

Verfasst: Mo Mai 30, 2022 5:14 am
von openwb-user
Ich bin der Autor der ursprünglichen Implementierung der SolarView-Anbindung (Shell-Skript) und stolpere gerade zufällig über diesen Thread. An der Python-Implementierung war ich nicht beteiligt. Gibt es Fortschritte? Besteht das Problem noch?

Als Alternative steht übrigens inzwischen auch die Anbindung von SolarView über MQTT zur Verfügung.

- Christian