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
-
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
-
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
@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} -
@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?
-
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 :-)
-
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
-
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?
-
@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?
-
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 ?
-
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.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)}
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden