NEWS
Summe zweier Leistungen in Diagramm
-
Hallo Leute,
ich bin ganz neu mit iobroker und hatte auch nocht nicht viel Zeit mich im Detail damit zu beschäftigen.
Auf die schnelle ist es mir geglückt mit Echarts einen Plot zu erstellen, der mir die Leistung des Shelly 3em pro und die Leistung der AVM Steckdose anzeigt. Die AVM Steckdose misst die Leistung der Balkon-PV-Anlage, der Shelly den Gesamtstrom.
Da der Shelly-Wert aber den AVM Wert beinhaltet, würde ich gerne zusätzlich noch Shelly+AVM anzeigen lassen. Hat jemand einen Vorschlag, wie das am einfachsten geht?
Danke
F. -
@fenderbender zusammen addieren in einen Datenpunkt(dp) mit alias.. oder willst du nur es im Chart sehen ??
-
@arteck Wie gesagt, ich bin wirklich ganz frisch dabei und wüsste nicht, wo ich starten soll, wenn ich zwei Daten zu einem Datenpunkt(db) zusammenaddieren soll...
Fürs erste würde aber auch der chart alleine reichen. -
@fenderbender sagte: wo ich starten soll, wenn ich zwei Daten zu einem Datenpunkt(db) zusammenaddieren soll...
Per Skript (Javascript- oder Node-Red-Adapter) addieren und das Ergebnis in einen eigenen Datenpunkt unter "0_userdata.0" schreiben.
-
Danke,
jetzt hat es geklappt. Ich glaub, ich hab es 100x genau so gemacht und 99x hat es nicht funktioniertKeine Ahnung, was der springede Punkt war...
So ist der Code, falls mal jemand das gleiche Problem hat:
let cond0 = false; schedule("*/20 */1 * * * *", async function (obj) { _sendToFrontEnd(1718355200404, {trigger: true}); const _cond = true; if (_cond) { const val2_1718354443566 = (await getStateAsync("fritzdect.0.DECT_087610284504.power")).val; const val1_1718354443566 = (await getStateAsync("shelly.0.shellypro3em#34987a45fd1c#1.EM0.TotalActivePower")).val; _sendToFrontEnd(1718354443566, {val: val1_1718354443566 + val2_1718354443566, ack: true}); await setStateAsync("0_userdata.0.sum_power", val1_1718354443566 + val2_1718354443566, true); } else { } });
-
Hallo Leute, könnt ihr mir nochmal helfen?
Ich hab ja das Javaskrtipt von Rules erstellen lassen und ich hab noch weitere Skripts vor. Leider funktionieren die oft nicht und ich weiß nicht warum.
Kann mir dazu noch jemand erklären, was eigentlich in meinem Skript passiert?- Was bedeutet _sendToFrontEnd
- was bedeutet die Zeichenfolge 1718355200404 - das ist ja keine Variable...?
- warum brauchts im setStateAsync am Ende noch ein ,true ?
Wie würde das Skript aussehen, wenn es nicht Rules sondern jemand schreibt, der von java Ahnung hat
Danke und Grüße
-
@fenderbender sagte: was bedeutet die Zeichenfolge 1718355200404
Das ist ein Zeitstempel mit der Uhrzeit "2024.06.14 10:53:20.404".
@fenderbender sagte in Summe zweier Leistungen in Diagramm:
warum brauchts im setStateAsync am Ende noch ein ,true ?
Damit wird der Wert bestätigt (ack = true). Siehe Doku.
@fenderbender sagte in Summe zweier Leistungen in Diagramm:
Wie würde das Skript aussehen, wenn es nicht Rules sondern jemand schreibt, der von java Ahnung hat
const idShelly = 'shelly.0.shellypro3em#34987a45fd1c#1.EM0.TotalActivePower'; const idAVM = 'fritzdect.0.DECT_087610284504.power'; const idSum = '0_userdata.0.sum_power'; on(idShelly, function(dp) { setState(idSum, dp.state.val + getState(idAVM).val, true); });
Javascript ist nicht Java!
-
@paul53
ok, danke schon mal. Sieht schon eher nach etwas aus, das ich evtl bald verstehe
Dieses on(...) ist etwas, das darauf wartet das idShelly einen neuen Wert bekommt oder? Und wenn der Wert da ist, wird die function ausgewertet. Hab ich das erfasst?
Und dp.state.val schreibst du, weil dp der Rückgabewert von der Funktion ist und bedeutet so viel wie Rückgabewert = getState(idShelly).val + getState(idAVM).valDanke nochmal
-
@fenderbender sagte: Hab ich das erfasst?
Ja, on(id, callback) triggert auf Wertänderungen.
Doku zu den Funktionen des Javascript-Adapters.