habe noch eine "Funktionsverbesserung" in der Funktion SML_Decode gefunden.
Aufgefallen ist mir, dass bei negativen Kollektortemperaturen, keine Dekodierung auf signed Integer funktioniert.
Der Pfad ist
Die Variable val muss vom Typ int16_t sein und nicht uint16_t , sonst wird aus dem negativen Wert ein riesiger positiver Wert, wenn das höchste bit gelöscht wird. Das Problem trat beim WOlf-Telegramm 5017 bei der Kollektortemperatur auf. Die Temperatur vom Solarspeicher wird wohl nie negativ, deshalb kann man dort den 16-Bit-Wert unsigned lassen.
Hier der Auszug aus der xsn_53_sml.ino:
else if (*mp=='s' && *(mp+1)=='s' && *(mp+2)=='S' && *(mp+3)=='S') { int16_t val = *cp|(*(cp+1)<<8); mbus_dval=val; ebus_dval=val; mp+=4; cp+=2;
Vielleicht kannst Du das in die offizielle Version übernehmen
Ich denke schon,dass es noch mehr Leute gibt, die das nutzen, Allerdings fältt das ja kaum auf. Die Variablen könnten generell intxx sein. Ich finde Deine Arbeit sehr gut, Mir gefällt Tasmota für meine Zwecke besser als EBUSD von John.
Solange man passiv liest, ist das einfacher. kann man eigentlich das Script zum Dekodieren nehmen, ohne die Variable anzuzeigen? Mein Gesamt-Solarertrag bei Wolf ist in drei Werten im Telegramm (Vorkommawert*1000 + Vorkommawert + Nachkommawert. Angezeigt und per mqqt gesendet werden müssten nur der Gesamt- und Tagesertrag