NEWS
Datenpunkte addieren und dann multiplizieren in vis
-
Hi,
wie kann ich verschiedene Datenpunkte addieren und das Ergebnis dann mit einem weiteren Datenpunkt multiplizieren?
Hintergrund ist folgender: Strompreisberechnung
Ich habe die Datenpunkte:
monatlicher Grundpreis
Preis pro Kw/h
Verbrauchte kw/hIch müsste also rechnen:
Verbrauchte kw/h + Preis pro Kw/h = XXX
XXX + monatlicher Grundpreis = ErgebnisKann mir jemand dazu einen Tipp geben?
Btw.. Oder halt als Script
-
@hagst Hi, falls ich dein Problem richtig verstehe wäre die einfachste Lösung eine Berechnung direkt in VIS.
Das würde in deinem Fall folgendermaßen gehen:
1. Nimm in VIS ein HTML Widget und Packe in den HTML Teil:
{x:accuweather.0.Current.RelativeHumidity;y:accuweather.0.Current.Temperature;z:accuweather.0.Current.Temperature;parseFloat(x)+y*z}}
x=Grundpreis
y=Preis Pro kWh
z=Verbrauchte kWhDarin musst du dann die Datenpunkte für x,y und z anpassen die bei mir mit accuweather anfangen.
LG CrunkFX
-
@hagst sagte: Ich müsste also rechnen:
Verbrauchte kw/h + Preis pro Kw/h = XXX
XXX + monatlicher Grundpreis = ErgebnisNein, so:
Ergebnis = Grundpreis + Arbeitspreis * kWh -
@crunkfx sagte:
{x:accuweather.0.Current.RelativeHumidity;y:accuweather.0.Current.Temperature;z:accuweather.0.Current.Temperature;(parseFloat(x) + parseFloat(y))*parseFloat(z)}
Falsche Klammer und parseFloat() sollte man bei der Multiplikation nicht benötigen, da in dem Fall Javascript eine implizite Typwandlung macht.
parseFloat(x)+y*z}
-
@paul53 sagte in Datenpunkte addieren und dann multiplizieren in vis:
parseFloat(x)+y*z}
Danke hab´s angepasst!
-
müssen denn Arbeitspreis und Grundpreis Variablen sein. Reicht da nicht ein fixer Wert?
-
@homoran sagte: Reicht da nicht ein fixer Wert?
Nur eine gewisse Zeit (bis zur nächsten Preiserhöhung).
-
Hmmm, als Ergebnis wird mir eine 0 angezeigt.
Hier jetzt mal mit den richtigen Daten:
{x:0_userdata.0.Strompreisberechnung.Monatlicher_Grundpreis;y:0_userdata.0.Strompreisberechnung.Strompreis_pro_KW;z:javascript.0.ShellyVerbrauch.SHEM-3#C45BBE6BD432#1.Total.dieser_monat;parseFloat(x)+y*z}
Btw. Ich hab das ganze zwischenzeitlich anders gelöst mit zwei Scripten, aber dennoch interessiert es mich, wie ich es in VIs lösen könnte.
Script eins:
const idTH = 'javascript.0.ShellyVerbrauch.SHEM-3#C45BBE6BD432#1.Total.heute'; const idKW = '0_userdata.0.Strompreisberechnung.Strompreis_pro_KW'; const idSumme = 'javascript.0.monatlicher-Strompreis-ohne-Grundpreis'; var TH = getState(idTH).val; var KW = getState(idKW).val; if(!existsState(idSumme)) createState(idSumme, TH * KW, {type: 'number', unit: '€'}); function summe() { setState(idSumme, TH * KW, true); } on(idTH, function(dp) { TH = dp.state.val; summe(); }); on(idKW, function(dp) { KW = dp.state.val; summe(); });
und dann noch das zweite
const idHT = 'javascript.0.monatlicher-Strompreis-ohne-Grundpreis'; const idNT = '0_userdata.0.Strompreisberechnung.Monatlicher_Grundpreis'; const idSumme = 'javascript.0.monatlicher-Strompreis-inkl-Grundpreis'; var HT = getState(idHT).val; var NT = getState(idNT).val; if(!existsState(idSumme)) createState(idSumme, HT + NT, {type: 'number', unit: '€'}); function summe() { setState(idSumme, HT + NT, true); } on(idHT, function(dp) { HT = dp.state.val; summe(); }); on(idNT, function(dp) { NT = dp.state.val; summe(); });
Ist zwar bestimmt sehr umständlich, aber des Ergebnis ist richtig
-
es gab mal ein problem mit # in der datenpunkt-id - weiß nicht, ob das gefixt wurde - versuch das ganze mal mit einem anderen dp, ob es dann funktioniert
-
@liv-in-sky sagte in Datenpunkte addieren und dann multiplizieren in vis:
es gab mal ein problem mit # in der datenpunkt-id - weiß nicht, ob das gefixt wurde - versuch das ganze mal mit einem anderen dp, ob es dann funktioniert
Jepp, daran hat es gelegen. Wenn ich einen anderen Datenpunkt ohne # im Name probiere, wird der Wert auch richtig ausgegeben. So, und wie kann ich das Problem lösen, hast Du eine Ahnung?
-
@hagst Eine Möglichkeit wäre es mit dem Alias Adapter einen Alias für den Shelly Anzulegen der den Wert spiegelt. Dann ohne #
-
-
So, mit dem Alias hat es geklappt, auch wenn die Kommastelle arg verrutscht ist und ich diesen Monat schon 12120.1325 € bezahlen muss
Ich glaube, das mit meinen beiden Scrips ist dann doch einfacher. -
was sollte den rauskommen - hat sich die vis verechnet ?
-
funktioniert ohne probleme, wenn die dp vom type number sind und die einzelnen werte mit Number(..) umschrieben sind (oder parseFloat)
{wert1:0_userdata.0.CONTROL-OWN.AAATEST.aObject; wert2:0_userdata.0.CONTROL-OWN.AAATEST.TestZahl2; wert3:0_userdata.0.CONTROL-OWN.AAATEST.TestZahlPx;(Number(wert1)+Number(wert2))*Number(wert3)}