Leistungsprognose für Wechselrichter

Begonnen von ch.eick, 18 Januar 2021, 08:35:46

Vorheriges Thema - Nächstes Thema

DS_Starter

Hallo zusammen,

es gibt eine neue Version 1.3.0.
Ab dieser Version ist es nun möglich die mit graphicHeaderOwnspec angezeigten Readingwerte zu formatieren, EInheiten zu manipulieren etc.
Dazu gibt es das Attr graphicHeaderOwnspecValForm: 


graphicHeaderOwnspecValForm
Die mit dem Attribut graphicHeaderOwnspec anzuzeigenden Readings können mit sprintf und anderen Perl Operationen manipuliert werden.
Es stehen zwei grundsätzliche, miteinander nicht kombinierbare Möglichkeiten der Notation zur Verfügung.
Die Angabe der Notationen erfolgt grundsätzlich innerhalb von zwei geschweiften Klammern {...}.

Notation 1:
Eine einfache Formatierung von Readings des eigenen Devices mit sprintf erfolgt wie in Zeile 'Current_AutarkyRate' bzw. 'Current_GridConsumption' angegeben.
Andere Perl Operationen sind mit () zu klammern. Die jeweiligen Readingswerte und Einheiten stehen über die Variablen $VALUE und $UNIT zur Verfügung.
Readings anderer Devices werden durch die Angabe '<Device>.<Reading>' spezifiziert.

    {    
    'Current_AutarkyRate'    => "%.1f %%",
    'Current_GridConsumption'    => "%.2f $UNIT",
    'SMA_Energymeter.Cover_RealPower'    => q/($VALUE)." W"/,
    'SMA_Energymeter.L2_Cover_RealPower'    => "($VALUE).' W'",
    'SMA_Energymeter.L1_Cover_RealPower'    => '(sprintf "%.2f", ($VALUE / 1000))." kW"',
    }    


Notation 2:
Die Manipulation von Readingwerten und Einheiten erfolgt über Perl If ... else Strukturen.
Der Struktur stehen Device, Reading, Readingwert und Einheit mit den Variablen $DEVICE, $READING, $VALUE und $UNIT zur Verfügung.
Bei Änderung der Variablen werden die neuen Werte entsprechend in die Anzeige übernommen.

    {    
       if ($READING eq 'Current_AutarkyRate') {
          $VALUE = sprintf "%.1f", $VALUE;
          $UNIT = "%";
       }
       elsif ($READING eq 'Current_GridConsumption') {
          ...
       }
    }    


Die Version wird morgen früh ausgerollt. Wer sie schon heute Abend einsetzen möchte kann sie sich aus meinem contrib laden (Neustart nicht vergessen).

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

SouzA

Zitat von: DS_Starter am 27 November 2023, 17:14:18Hallo SouzA,

Das Reading AllPVforecastsToEvent wird im Device nicht mehr dargestellt (Readings sparen), aber dieser Event wird nach wie vor erzeugt.
Du kannst diese Events wie beschrieben loggen und verarbeiten.

Im Anhang ein Beispiel. Die Kurve "initiale PV Vorhersage" resultiert aus den AllPVforecastsToEvent Werten.

LG,
Heiko

Hi,
vielen Dank für die Antwort.

Genau das Ding wollte ich ja nachbauen... Hab aber die Readings dazu im Device nicht gefunden!  ::)

Aber dann werd ich die ja in der Datenbank finden.

Thx und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

DS_Starter

Wenn ich daran denke werde ich dieses Feature morgen im Wiki beschreiben.
Das ist ein bisschen zu "versteckt".
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

caldir65

Zitat von: DS_Starter am 27 November 2023, 17:08:43Hallo CHristoph,

1. du nimmst im FTUI ein HTML-Widget und holst dir die Grafik über:
                get ... html <Option>
  in dein FTUI. Ich glaube irgendwer hat das hier schon so gemacht. Name ist mir entfallen.


Hallo Heiko,

ich nehme an, Du meinst ein fhem-weblinkdevice damit.
Leider ist es damit nicht einfach möglich, diesen Link dann in fuip anzuzeigen.

       <div class="cell">
         <div data-type="smaportalspg" data-device="wl.SolarForecast" data-get="state"></div> 
      </div>
bekomme ich nur eine Zeile "smaportalspg" angezeigt. Nehme ich das Widget für Weblink, dann bekomme ich zwar was angezeigt, aber das ist viel zu groß skaliert, und läßt sich auch nicht verkleinern Du darfst diesen Dateianhang nicht ansehen. 

Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 64GB SSD, Lubuntu 22.04LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.

DS_Starter

Hallo Christoph,

ja ich meinte ein Widget für ein weblink Device.
Du musst dann vorher auch ein weblink Device erstellen.

Dieser Code (ist in der Hilfe zu "get ... html" beschrieben) erstellt dir ein weblink Device:

defmod wl.SolCast weblink htmlCode { FHEM::SolarForecast::pageAsHtml ('SolCast', '-', 'forecast_noHead_noCons') }
attr wl.SolCast room Energie

Die Namen sind natürlich zu ersetzen. In dem Device kannst du auch die Größe ändern.
Vllt. klappt es so für dich.

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

caldir65

Moin,
Ich habe ein Weblinkdevice erstellt mit dem oben beschriebenen Ergebnis in Fuip, siehe Screenshot
Man könnte sagen, es funktioniert, aber ...
Im Fhemweb ist die Darstellung ok

Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 64GB SSD, Lubuntu 22.04LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.

DS_Starter

Moin Christoph,

bei FUIP/FTUI bin ich raus. Das benutze ich nicht.
Wenn das weblink Device im FHEMWEB ordentlich funktioniert passt das.

Bezüglich Einbindung ins FTUI/FUIP würde ich dich an Wissendere in den entsprechenden Unterforen verweisen wollen.  :) 

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

stefanru

Hi Christoph,

ich hatte das auch mal probiert und hatte dazu das widget_smaportalspg.js angepasst.
Ich habe es mir kopiert und ein widget_forecast.js erstellt das ein html reading aufnehmen kann.

Der Aufruf im tabletUI ist dann:
<div class="cell">
<div data-type="forecast" data-device="Forecast" data-get="state" data-html="flow_noHead_noCons" class="center"></div> 
</div>

Der Code für das widget_forecast.js ist:

"use strict";

function depends_forecast (){
    var deps = [];

var userCSS = $('head').find("[href$='css/fhem-tablet-ui.css']");

if (userCSS.length)
userCSS.before('<link rel="stylesheet" href="'+ ftui.config.basedir + 'css/ftui_smaportalspg.css" type="text/css" />')
else
$('head').append('<link rel="stylesheet" href="'+ ftui.config.basedir + 'css/ftui_smaportalspg.css" type="text/css" />');

    return deps;
};

var Modul_forecast = function () {

    function init_attr(elem) {
        elem.initData('get', 'parentState');
elem.initData('html', elem.data('html'));
        elem.initData('max-update', 2);

        me.addReading(elem, 'get');
    }

    //usage of "function init()" from Modul_widget()

    function update(dev, par) {

        me.elements.filterDeviceReading('get', dev, par)
            .each(function (index) {
                var elem = $(this);
                var value = elem.getReading('get').val;
                //console.log('smaportalspg:',value);
                if (ftui.isValid(value)) {
                    var dNow = new Date();

                    var lUpdate = elem.data('lastUpdate') || null;
                    var lMaxUpdate = parseInt(elem.data('max-update'));
                    if (isNaN(lMaxUpdate) || (lMaxUpdate < 1))
                        lMaxUpdate = 10;

                    //console.log('smaportalspg update time stamp diff : ', dNow - lUpdate, '   param maxUPdate :' + lMaxUpdate + '    : ' + $(this).data('max-update') );
                    lUpdate = (((dNow - lUpdate) / 1000) > lMaxUpdate) ? null : lUpdate;
                    if (lUpdate === null) {
                        //console.log('smaportalspg DO update' );
                        elem.data('lastUpdate', dNow);

                        var cmd = [ 'get', elem.data('device'), "html " + elem.data('html') ].join(' ');
                        ftui.log('forecast update', dev, ' - ', cmd);
                       
                        ftui.sendFhemCommand(cmd)
                            .done(function (data, dev) {
                            //console.log('received update for dynamic html : ', $(this) );
                            elem.html(data);
                        });
                    }
                }
            });
    }

    // public
    // inherit all public members from base class
    var me = $.extend(new Modul_widget(), {
        //override or own public members
        widgetname: 'forecast',
        init_attr: init_attr,
        update: update,
    });

    return me;
};

Ich hoffe das hilft dir weiter.

Gruß,
Stefan

caldir65

Hallo Stefan,

leider will das bei mir auch nicht so recht, im FUIP-Log steht
to load plugin "forecast" for area "html"
00000008 2023-11-29T09:38:58.524Z 1 base.init initWidgets - Done
00000009 2023-11-29T09:38:58.524Z 1 base.poll Event: initWidgetsDone
00000010 2023-11-29T09:38:58.525Z 1 base.init initPage (html): in 36ms
00000011 2023-11-29T09:39:31.795Z 1 base.poll Event: visibilitychange
00000012 2023-11-29T09:41:21.019Z 1 base.poll Event: visibilitychange
00000013 2023-11-29T09:41:23.635Z 1 base.poll Event: beforeunload
00000014 2023-11-29T09:41:23.635Z 1 base.poll DISCONNECTED home
00000015 2023-11-29T09:41:23.709Z 1 base.poll Event: visibilitychange
Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 64GB SSD, Lubuntu 22.04LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.

stefanru

#3339
Hmm,

also ich benutze das in ftui V2, nicht V3, da habe ich es nicht probiert.

Ich hänge dir mal das js, das original smaportal css und ein Beispiel html an wie es bei mir läuft.

Mein Forcast device in FHEM heißt Forecast musst du mit deinem Namen ersetzen.
Du musst auch prüfen dass deine js Files in den richtigen Verzeichnissen liegen.

So sieht das bei mir dann aus:
Links das original smapartol.js und rechts das mit dem HTML.
Bei mir habe ich das html für nur die Flow Anzeige verwendet.

P.S.: Das ganze ist ja nur ein angepasstes smaportal.js, sollte also wenn smaportal geht auch gehen solange das Device and das data-html stimmt.
Es sollte im FTUI log soetwas erscheinen wenn der html Aufruf durchgeführt wird:
ftui.log('forecast update', dev, ' - ', cmd);

Du darfst diesen Dateianhang nicht ansehen.

Gruß,
Stefan


caldir65

Moin Stefan,
FUIP greift letztlich auch auf FTUI2 zurück, hat sich aber weiter verselbstständigt.
Ich werde mir später einmal weiter anschauen ...

Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 64GB SSD, Lubuntu 22.04LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.

stefanru

Ja, schau mal rein.
Würde mich wundern wenn es nicht geht wenn das
widget_smaportalspg.js funktioniert.

Die Änderung ist minimal.
Einmal das es ein html als eingabe nimmt:
elem.initData('html', elem.data('html'));

also du musst data-html= liefern beim Aufruf.

Und dann im Ausführen das es das html verwendet.
var cmd = [ 'get', elem.data('device'), "html " + elem.data('html') ].join(' ');

Im prinzip ist das alles was sich gegenüber dem smaportal widget geändert hat.

Gruß,
Stefan

DS_Starter

#3342
Nabend zusammen,

ich habe soeben eine Weiterentwicklung eingecheckt.
Im Attr graphicHeaderOwnspec kann man nun ebenfalls Set-Kommandos und Attribute anderer Devices abbilden und verwenden.
Dadurch kann man sich SolarForecast relativ einfach zur zentralen Steuerungszentrale für PV/Batterie-Anlage ausbauen. Bei mir verwende ich die Funktionalität u.A. um das SoC-Limit mal eben am Tablet hochzusetzen wenn ich der Meinung bin eine höhere Reserve bei Netzausfall haben zu wollen.

Ich vergaß ... liegt auch im contrib wer es eilig hat. ;)
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

stefanru

Hi Heiko,

danke für die Weiterentwicklungen, alles wirklich top!

Ich habe mal für das Tablet UI / FTUI das "smaportal" Widget umgebaut um es mit dem neuen Forcastmodul mit der html Möglichkeit zu betreiben.
Das Widget heißt "forecast".
Das js File nach /js und das css File nach /css.

Im Anhang ist das js File und das dazu passende css.
 * Usage Example:
 *
 *   <li data-row="1" data-col="1" data-sizey="3" data-sizex="4">
 *   <header>PV Forecast</header>
 *         <div class="cell">
 *            <div data-type="forecast" data-device="ForecastDevice" data-get="state" data-html="both"></div>
 *         </div>
 *   </li>

Gruß,
Stefan

DS_Starter

Nabend Stefan,

super Sache.
Mit Javascript habe ich es echt nicht so.  ;)

Ich bin nur noch recht unsicher wie ich die Files zur Verfügung stelle. Die ursprünglichen Files hatte ich mal ins Github gestellt.
Aber ich möchte eigentlich FHEM Universum bleiben. Vllt. lege ich die Dateien ins contrib mit entsprechenden Link im Wiki.
Mal schauen ...

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter