Darstellung Sonnenbatterie

Begonnen von dennis_n, 11 März 2021, 10:33:34

Vorheriges Thema - Nächstes Thema

octek0815

Moin,

test gerade euere neuen Versionen.
Was muss ich als Parameter außer "calc-bat-remain-time" noch angeben damit bei der Batterie nich 0.0h steht.

Grüße
Olli

docolli

#211
Servus!

du musst battmax (=Kapazität deiner Batterie) angeben. Bitte in der gleichen Grundeinheit wie die Leistungen. In deinem Fall in Wh.
Dann sollte es passen. Wenn nicht, bitte pvvis Definition hier reinstellen.

Grüße,
Olli

octek0815

Ist so angegeben...


<ftui-pvvis
[feed]="Energie_PV_WR1:urPVEinspeisungAktuellInWatt"
[produce]="Energie_PV_WR1:urP_PV"
[receive]="Energie_PV_WR1:urStrombezugAktuellInWatt"
[soc]="Energie_PV_WR1:Storage_0_Controller_StateOfCharge_Relative"
[charge-discharge]="Energie_PV_WR1:urP_Akku_reverse"
[pv-prod-tdy]="Energie_PV_Erzeugung:Tag"
[home-consume-tdy]="Energie_Stromgesamtverbrauch:Tag"
[grid-feed-tdy]="Energie_Stromeinspeisung:Tag"
[grid-consume-tdy]="Energie_Strombezug:Tag"
has-no-wallbox
do-not-show-zero
calc-bat-remain-time
batmax="11059"
pvmax="19050"
sun-icon="sun"
unit-soc="%"
unit-value="W"
unit-sum="kWh"
grid-icon="pylon2"
width="49vh"
class="size-3">
</ftui-pvvis>

docolli

Sollte so von der Definition her passen. Muss was im Code sein. Ich kann es nachstellen, sehe aber den Grund noch nicht.
Melde mich später nochmals!

octek0815

Zitat von: docolli am 20 November 2022, 12:36:46
Sollte so von der Definition her passen. Muss was im Code sein. Ich kann es nachstellen, sehe aber den Grund noch nicht.
Melde mich später nochmals!

Alles klar, danke!

docolli

#215
Tippfehler Deinerseits! ;D

battmax, nicht batmax...

@yersinia: Vielleicht sollten wir den Namen battmax nochmals überdenken.

octek0815

Zitat von: docolli am 20 November 2022, 13:43:17
Tippfehler Deinerseits! ;D

battmax, nicht batmax...

Oh ja, hast recht, sorry dafür.
Aber sollte dann der Parameter "calc-bat-remain-time" nicht auch dann in "calc-batt-remain-time" umbenannt werden, damit das einheitlich wird?

LG

docolli

Yep. Siehe mein Edit im vorigen Post. Müssen wir wirklich einheitlich gestalten.
Danke!

octek0815

#218
Zitat von: docolli am 20 November 2022, 13:50:27
Yep. Siehe mein Edit im vorigen Post. Müssen wir wirklich einheitlich gestalten.
Danke!

Ich möchte nochmal ein Lob hier aussprechen, eine super Arbeit die Ihr hier leistet!

Danke dafür.

LG
Olli

octek0815

Könnte noch die Möglichkeit eingebaut werden, die Tagessummen für PV und Hausverbrauch auch mit drei Nachkommastellen wie bei Netz-Bezug und Netz-Einspeisung einzustellen?
Funktioniert irgendwie nicht mit | fix(3)

docolli

#220
Die Zahl der Nachkommastellen ist aktuell fix im Code hinterlegt.
Brauchst du die Werte wirklich bis auf Wh genau?  ::)

Bei Einspeisung/Bezug habe ich mich für 3 Stellen entschieden, da man im Sommer/Winter ja wirklich nur wenige Wattstunden haben kann. Bei den anderen ist 1 Nachkommastelle 100Wh. So genau muss man erstmal aufsummieren können. ;D

@yersinia: Ich habe mir mal den Code für die label component angesehen und bemerkt, dass dort noch value beim Aufruf benutzt wird.

Wir sollten den Code für "onAttributeChanged" daher folgendermaßen umbauen, hier mal als Beispiel für das ein case statement:


  onAttributeChanged(name, value) {
    switch (name) {
    case 'car-temp':
      this.shadowRoot.getElementById("pvvis-car-temp-val-txt").style.display = "unset";
      this.shadowRoot.getElementById("pvvis-car-temp-val-txt").innerHTML = value + '<tspan class="pvvis-txt-unit">&deg;C</tspan>';
    break;
.....

        case 'grid-feed-tdy':
                this.powerVals(value, "pvvis-grid-out-today-txt", "&DoubleLongLeftArrow;&nbsp;&sum;&nbsp;");
        break;
    case 'grid-consume-tdy':
                this.powerVals(value, "pvvis-grid-in-today-txt", "&DoubleLongRightArrow;&nbsp;&sum;&nbsp;");
    break;
    case 'home-consume-tdy':
    if(!this.hasNoWallbox) {
      this.shadowRoot.getElementById("home-consume-txt").setAttribute("y", "130");
    }
    this.powerVals(value, "pvvis-home-consumedtoday-txt", "&sum;&nbsp;");
    break;
    case 'produce':
    this.calcProduce();
    this.calcSunOpacity();
    break;
    case 'pv-forecast':
                this.powerVals(value, "pvvis-pv-forecast-txt", "&UpperRightArrow;&nbsp;");
    break;
    case 'pv-prod-tdy':
                this.powerVals(value, "pvvis-pv-producedtoday-txt", "&sum;&nbsp;");
    break;
.....


Überall, wo this.carTemp im ersten case Verwendung findet, muss man einfach value verwenden. Dann klappt es auch mit der Formatierung.
Vermutlich wäre es auch besser in jedem case das value in der aufgerufenen Funktion zu übergeben anstatt in der Funktion per this.xxx darauf zuzugreifen. Ich bin aber beileibe kein Javascript Experte. ;)


docolli

#221
Das sollte so wirklich klappen. Siehe Bild, das sind zwei pvvis Definitionen nebeneinander mit unterschiedlichen fix()-Werten in den pipes. Geht sogar bei der Auto-Temperatur  8)


  onAttributeChanged(name, value) {
    switch (name) {
    case 'car-soc':
          this.shadowRoot.getElementById("pvvis-car-bat-val-txt").style.display = "unset";
      this.colorCar();
    break;
    case 'car-temp':
      this.shadowRoot.getElementById("pvvis-car-temp-val-txt").style.display = "unset";
      this.shadowRoot.getElementById("pvvis-car-temp-val-txt").innerHTML = value + '<tspan class="pvvis-txt-unit">&deg;C</tspan>';
    break;
    case 'charge':
      this.flowValue(value, "pv-bat");
      this.socValue();
      this.calcProduce();
      this.colorBat();
    break;
    case 'charge-discharge':
            // one reading - negative when discharge; positive when charge
            if(value < 0) {
               this.discharge = Math.abs(value);
               this.charge = 0;
            } else if(value > 0) {
               this.charge = value;
               this.discharge = 0;
            } else {
               this.charge = 0;
               this.discharge = 0;
            }
    break;
    case 'discharge':
        this.flowValue(value, "bat-home");
    this.socValue();
    this.colorBat();
    this.calcHouseConsume();
    break;
    case 'feed':
        this.flowValue(value, "pv-grid");
    this.calcProduce();
            this.colorGrid();
    break;
        case 'feed-receive':
            // one reading - negative when consume; positive when feed
            if(value > 0) {
               this.feed = value;
               this.receive = 0;
            } else if(value < 0) {
               this.receive = Math.abs(value);
               this.feed = 0;
            } else {
               this.feed = 0;
               this.receive = 0;
            }
        break;
    case 'grid-charge':
        this.flowValue(value, "grid-bat");
            this.socValue();
            this.calcProduce();
            this.colorBat();
    break;
        case 'grid-feed-tdy':
                this.powerVals(value, "pvvis-grid-out-today-txt", "&DoubleLongLeftArrow;&nbsp;&sum;&nbsp;");
        break;
    case 'grid-consume-tdy':
                this.powerVals(value, "pvvis-grid-in-today-txt", "&DoubleLongRightArrow;&nbsp;&sum;&nbsp;");
    break;
    case 'home-consume-tdy':
    if(!this.hasNoWallbox) {
      this.shadowRoot.getElementById("home-consume-txt").setAttribute("y", "130");
    }
    this.powerVals(value, "pvvis-home-consumedtoday-txt", "&sum;&nbsp;");
    break;
    case 'produce':
    this.calcProduce();
    this.calcSunOpacity();
    break;
    case 'pv-forecast':
                this.powerVals(value, "pvvis-pv-forecast-txt", "&UpperRightArrow;&nbsp;");
    break;
    case 'pv-prod-tdy':
                this.powerVals(value, "pvvis-pv-producedtoday-txt", "&sum;&nbsp;");
    break;
    case 'receive':
        this.flowValue(value, "grid-home");
    this.colorGrid();
    this.calcHouseConsume();
    break;
    case 'soc':
        this.socValue();
    this.colorBat();
    break;
    case 'wb-feed':
    this.flowValue(value, "home-car");
    this.colorCar();
    break;
    }
  }


yersinia

#222
Danke docolli für die ganze Vorarbeit und Recherche - ich habe eigtl alles an Code so übernommen. Und in diesem Zuge auch battmax zu batmax sowie battstep zu batstep umbenannt; das folgt eher der Battery Abkürzung.
Weiterhin habe ich die toFixed() aus der Übergabe im Zuge der Umstellung auf value rausgenommen. Die Nachkommstellen usw sollen via reading/pipe kommen, das soll und kann der user selbst entscheiden.

Neue Version anhängend.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

docolli

#223
Danke, hab ich gerne gemacht! Ich wäre auch auf "bat" anstatt "batt" gegangen, das wollte ich aber Dir überlassen. Sind wir uns also einig. 8)

Bin schon am testen, dabei fälllt mir noch folgendes auf.

1) Hier muss noch mehr mit "value" ersetzt werden (habe ich hier schon gemacht):


    case 'charge-discharge':
            // one reading - negative when discharge; positive when charge
            if(value < 0) {
               this.discharge = Math.abs(value);
               this.charge = 0;
            } else if(value > 0) {
           this.charge = value;
               this.discharge = 0;
            } else {
               this.charge = 0;
               this.discharge = 0;
            }
    break;



        case 'feed-receive':
            // one reading - negative when consume; positive when feed
            if(this.value > 0) {
           this.feed = value;
               this.receive = 0;
            } else if(value < 0) {
           this.receive = Math.abs(value);
               this.feed = 0;
            } else {
               this.feed = 0;
               this.receive = 0;
            }
        break;


2) Hier muss noch eine Zeile rein, damit der Wagen (pvvis-car-fill-bottom) beim Laden auch grün wird.


  colorCar() {
    if(this.carSoc >= 0) {
        this.shadowRoot.getElementById("pvvis-car-bat-val-txt").innerHTML = this.carSoc.toFixed();
        if(this.unitCarSoc) { this.shadowRoot.getElementById("pvvis-car-bat-val-txt").innerHTML += '<tspan class="pvvis-txt-unit-car">' + this.unitCarSoc + '</tspan>'; }
    this.shadowRoot.getElementById("pvvis-car-fill-bottom").style.display = 'unset';
    this.shadowRoot.getElementById("pvvis-car-fill-bottom").setAttribute("y", ("" + (95 - this.carSoc*0.95) + "%"));
        this.shadowRoot.getElementById("pvvis-car-fill-bottom").style.fill = 'var(--pvvis-color-green, #090)';
        this.shadowRoot.getElementById("pvvis-car-fill-top").style.fill = 'var(--pvvis-color-green, #090)';
    this.shadowRoot.getElementById("pvvis-car-fill-top").classList.add("pvvis-batcar-blink");
    }
    if((this.carSoc > -1) && (this.wbFeed <= 0)) {
    this.shadowRoot.getElementById("pvvis-car-fill-bottom").style.fill = 'var(--pvvis-color-yellow, yellow)';
        this.shadowRoot.getElementById("pvvis-car-fill-top").style.fill = 'var(--pvvis-color-grey, grey)';
    this.shadowRoot.getElementById("pvvis-car-fill-top").classList.remove("pvvis-batcar-blink");
    }
    if((this.carSoc < 0) && (this.wbFeed > 0)) {
    this.shadowRoot.getElementById("pvvis-car-fill-top").style.fill = 'var(--pvvis-color-green, #090)';
    }
  }

yersinia

#224
Zitat von: docolli am 20 November 2022, 21:09:15Danke, hab ich gerne gemacht! Ich wäre auch auf "bat" anstatt "batt" gegangen, das wollte ich aber Dir überlassen. Sind wir uns also einig. 8)
8)

Zitat von: docolli am 20 November 2022, 21:09:15Bin schon am testen, dabei fälllt mir noch folgendes auf.
Das hab ich glatt übersehen, neue Version hängt dann an. Ich lass value für den numerischen Vergleich aber vorher noch in float umwandeln, sicher ist sicher.

Zitat von: docolli am 20 November 2022, 21:09:152) Hier muss noch eine Zeile rein, damit der Wagen (pvvis-car-fill-bottom) beim Laden auch grün wird.
Das müsste aus der css via #pvvis-car-fill-bottom schon kommen.
#pvvis-car-fill-bottom {
  fill: var(--pvvis-color-green, #090);
  display: none;
}
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl