NEWS
Liste mit "SVerweis"
-
Moin zusammen!
So langsam beginne ich Blockly zu lieben.
Jetzt würde ich gerne in einer Liste den Minimalsten Wert heraussuchen (das klappt schon) und mir dann das zum Wert gehörende Objekt ausgeben lassen. Quasi wie ein SVERWEIS in Excel. Geht das irgendwie? Aktuell sieht es so aus: -
@dan11hh sagte in Liste mit "SVerweis":
Jetzt würde ich gerne in einer Liste den Minimalsten Wert heraussuchen (das klappt schon) und mir dann das zum Wert gehörende Objekt ausgeben lassen. Quasi wie ein SVERWEIS in Excel. Geht das irgendwie? Aktuell sieht es so aus:
in js würde das warscheinlich gehen. In Blockly ist meiner Meinung nach ein anderer Ansatz sinnvoll:
Wichtig ist das du den Selektor für deine Watchdog Zellen sauber setzt. Wenn du mal das JS von deinem Blockly postest kann auch der sauber gefüllt werden.
A.
-
@asgothian
Alternative (quick & dirty) ohne Selektor:
-
@codierknecht hab ich auch drüber nachgedacht. Macht aber in der Situation wo die DP's vom OP einer so schönen Regelmässigkeit folgen weniger sinn. Warum 13 DP's einzeln per gui heraussuchen wenn man das mit einem Aufruf "automatisch" machen kann
Dabei dann gleich auch noch was über den Selektor gelernt. Win Win
A.
-
@asgothian
Wenn es wirklich alle DP aus dem Kanal sind, geht das mit diesem Selektor.
Hat der Kanal noch weitere DP, die hier nicht zu berücksichtigen sind, müsste man mit 'ner Aufzählung arbeiten.Kleiner Schnitzer in Deiner Schleife:
Gesetzt den Fall, die Werte wären[20, 30, 10]
, würde zuerst die 20 in minval wandern, da minval im ersten Durchlauf noch -99999999 wäre.
Im zweiten Durchlauf würde die 30 genommen, da 20 < 30 ist.
Im dritten Durchlauf würde dasif
schiefgehen, da 30 nicht kleiner als 10 ist. -
@codierknecht sagte in Liste mit "SVerweis":
@asgothian
Wenn es wirklich alle DP aus dem Kanal sind, geht das mit diesem Selektor.
Hat der Kanal noch weitere DP, die hier nicht zu berücksichtigen sind, müsste man mit 'ner Aufzählung arbeiten.das Hängt davon ab ob es ein eindeutiges Muster gibt die DP's zu identifizieren. Sie müssen nicht aus dem gleichen Kanal kommen.
wenn ich davon ausgehe das die Benennung ein Teil der State-Struktur ist könnten die dp's heissen:
adaptername.0.watchdog_1.data.zelle_01
.....zelle_15
In dem fall könnte der Selektor sein
state[state.id=adaptername.0.watchdog.data.zelle_*]
Kleiner Schnitzer in Deiner Schleife:
Gesetzt den Fall, die Werte wären[20, 30, 10]
, würde zuerst die 20 in minval wandern, da minval im ersten Durchlauf noch -99999999 wäre.
Im zweiten Durchlauf würde die 30 genommen, da 20 < 30 ist.
Im dritten Durchlauf würde dasif
schiefgehen, da 30 nicht kleiner als 10 ist.korrekt, das war falsch. Wird oben korrigiert.
war mal eben zusammen geklöppelt
A.
-
@asgothian sagte in Liste mit "SVerweis":
war mal eben zusammen geklöppelt
Ach, machst Du das auch so?
-
@codierknecht sagte in Liste mit "SVerweis":
@asgothian sagte in Liste mit "SVerweis":
war mal eben zusammen geklöppelt
Ach, machst Du das auch so?
Am Wochenende immer
-
@asgothian @Codierknecht
1000 Dank für Eure Hilfe! Was ist / macht denn die ID? Ich steige da leider noch nicht ganz durch...Nochmals Danke für die Hilfe!
Das JS sieht so aus:
var Intervall, AkkuMin; AkkuMin = [getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_01").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_02").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_03").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_04").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_05").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_06").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_07").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_08").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_09").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_10").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_11").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_12").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_13").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_14").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_15").val, getState("mqtt.1.BMS_Watchdog_1.Data.Zelle_16").val]; console.log(AkkuMin); console.log(Math.round((Math.min.apply(null, AkkuMin))*1000)/1000);
-
Die "ID" enthält z.B.
mqtt.1.BMS_Watchdog_1.Data.Zelle_01
usw.
Es hilft ja nicht, eine Liste nur aus den Werten zu bauen, da dann der Bezug zum Objekt fehlt.
Die Liste muss also das komplette Objekt ansprechen können. Hat man dann in der Liste einen Wert gefunden der kleiner als der letzte ist, merkt man sich den Wert und die ID des DP.
Damit kann man dann jederzeit wieder auf das Objekt zugreifen und dort lesen was man so braucht. -
@dan11hh bei dem JS sollte der selektor den folgenden Text beinhalten:
state[state.mqtt.1.BMS_Watchdog_1.Data.Zelle_*]
A.
-
@dan11hh sagte: Das JS sieht so aus:
Dann versuche es mal so (triggert jede volle Stunde):
Zum Test lass erst einmal den Trigger weg.