gemu2015 Fortgeschrittener

  • Mitglied seit 31. Dezember 2018
Beiträge
252
Erhaltene Reaktionen
87
Punkte
1.352
Profil-Aufrufe
750
  • Hallo Gerhard,

    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


    Gruß

    Burkhard

    • Hallo Burkhard,


      OK der ebus_dval sollte signed sein, es werden wohl kaum unsigned 32 bit Werte vorkommen bei denen bit 31 gesetzt ist.

      also statt

      uint32_t ebus_dval=99;

      int32_t ebus_dval=99;


      werde ich aber erst im April bei Tasmota einstellen bin nämlich jetzt mehrere Wochen offline.


      in meinem git habe ich das jetzt geändert.


      du bist wohl ausser mir der einzige der bisher den EBUS decoder verwendet.


      Gruß


      Gerhard

    • 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

      Hier die Zeilen:

      1,71fe5018xxxxxxuuUU@1000,TagNK,kW,DayNK,3

      1,71fe5018xxxxxxxxxxuuUU@1,TagVK,kW,DayVK,0

      1,71fe5018xxxxxxxxxxxxxxuuUU@1000,ErtragNk,W,SolarNk,3

      1,71fe5018xxxxxxxxxxxxxxxxxxuuUU@1,ErtragVk,W,SolarVk,0

      1,71fe5018xxxxxxxxxxxxxxxxxxxxxxuuUU@0.001,ErtragVk1000,W,SolarVk1000,0

      1,=m 15+16+14 @1,Gesamtertrag,kW,SolarCurr,3

      1,=m 12+13 @1,Tagesertrag,kW,DaySolarCurr,3


      Oder kann ich irgendwie aus dem Tlg 5018 in einer Definitionszeile mehrere Variablen zuweisen :

      z.B: 1,71fe5018xxxxxxuuUU|uuUU,DayVK,DayNK,3 (Zuweisung Rohwerte ohne Anzeige)


      Nochmal; Super Arbeit


      Gruß

      Burkhard

  • Halo Gerhard,


    habe hier einen neuen Zähler hinzugefügt. Vielleicht willst du den ja deinem Modul hinzufügen.


    D0 Zähler SML auslesen mit Tasmota


    Danke für deine Mühe!


    Viele Grüße

    Tobias