NEWS
[gelöst] Werte zählen, die >1 sind
-
Hallo zusammen,
ich bin mal wieder in Blockly am Basteln und mal wieder habe ich ein Brett vorm Kopf.. folgende Frage:
- Es gibt drei Werte A, B und C (alles Zahlen), die sich mehrmals pro Minute ändern.
- Das Script soll zählen, wieviele der drei Werte >1 sind und dementsprechend einen State auf 1, 2 oder 3 setzen.
Beispiele:
- A und C sind >1, also setze den State auf 2 (Wert B ist <1)
- A und B und C sind >1, also setze den State auf 3 (kein Wert ist <1)
- Nur B ist >1, also setze den State auf 1 (Werte A und C sind <1)
Klar kann man das mit zig verschachtelten WENNs machen, aber da muss es doch auch einen einfacheren Weg geben? Ich versuche es die ganze Zeit über Listen (=Array?), finde aber keine Möglichkeit die Werte in der Liste nach Kriterium ">1" zählen zu lassen..
Hat jemand einen Tipp?
Danke und viele Grüße
Christian -
Hallo zusammen,
ich bin mal wieder in Blockly am Basteln und mal wieder habe ich ein Brett vorm Kopf.. folgende Frage:
- Es gibt drei Werte A, B und C (alles Zahlen), die sich mehrmals pro Minute ändern.
- Das Script soll zählen, wieviele der drei Werte >1 sind und dementsprechend einen State auf 1, 2 oder 3 setzen.
Beispiele:
- A und C sind >1, also setze den State auf 2 (Wert B ist <1)
- A und B und C sind >1, also setze den State auf 3 (kein Wert ist <1)
- Nur B ist >1, also setze den State auf 1 (Werte A und C sind <1)
Klar kann man das mit zig verschachtelten WENNs machen, aber da muss es doch auch einen einfacheren Weg geben? Ich versuche es die ganze Zeit über Listen (=Array?), finde aber keine Möglichkeit die Werte in der Liste nach Kriterium ">1" zählen zu lassen..
Hat jemand einen Tipp?
Danke und viele Grüße
Christianfunction test(A, B, C) { A = A > 1 ? 1 : 0; B = B > 1 ? 1 : 0; C = C > 1 ? 1 : 0; return A + B + C; } -
function test(A, B, C) { A = A > 1 ? 1 : 0; B = B > 1 ? 1 : 0; C = C > 1 ? 1 : 0; return A + B + C; }@paul53 Ui, das ging schnell, ganzherzlichen Dank! Leider ist das zu hoch für mich, ich kann leider nur mit Blockly rumklicken :(
(hab oben noch hinzugefügt dass ich in Blockly bastel) -
@paul53 Ui, das ging schnell, ganzherzlichen Dank! Leider ist das zu hoch für mich, ich kann leider nur mit Blockly rumklicken :(
(hab oben noch hinzugefügt dass ich in Blockly bastel) -
@paul53 Ui, das ging schnell, ganzherzlichen Dank! Leider ist das zu hoch für mich, ich kann leider nur mit Blockly rumklicken :(
(hab oben noch hinzugefügt dass ich in Blockly bastel) -
Ich danke Euch allen für die Hilfe. Vielleicht habe ich es zu abstrakt gemacht und komme deswegen nicht weiter. Daher hier kurz der Hintergrund:
Es geht um einen Verbraucher, der mal nur auf einer, mal auf zwei und mal auf drei Phasen Strom zieht. Ein vorgeschalteter Zähler wertet die Ströme je Phase aus und stellt sie als "Strom L1 gegen N" usw. bis L3 jeweils als einen Datenpunkt zur Verfügung. Als Trigger dient eine Änderung der Leistungsabnahme (die hier über alle Phasen gemessen wird. Der Titel des State mit "Leistung L1 gegen N" ist falsch, es müsste eigentlich "Leistung gesamt" heißen).Mir geht es nun darum, herauszufinden, wieviele Phasen benutzt werden. Dieses Ergebnis möchte ich dann in einen State schreiben und damit weiter arbeiten (anderes Script).
Meine Ansätze sehen aus wie folgt:
Hier der Trigger und Aufruf der Funktion:

Hier die Funktion:

Was ich nicht hinbekomme ist, das Ergebnis in einen weiteren State "Phasigkeit" zu schreiben.
Das Script wirft folgende Fehlermeldung aus:
16:27:21.829 error javascript.0 (924) at Object.<anonymous> (script.js.common.Phasigkeit_bestimmen:18:3)Falls es hilft, hier der von Blockly generierte Code:
var L1, L2, L3, Strom_L3, Strom_L1, Strom_L2; // Beschreibe diese Funktion … function Phasencheck(L1, L2, L3) { L1 = Strom_L1 >= 1 ? 1 : 0; L2 = Strom_L2 >= 1 ? 1 : 0; L3 = Strom_L3 >= 1 ? 1 : 0; return L1 + L2 + L3; } on({id: 'modbus.2.inputRegisters.120_W_L1-N', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Strom_L3 = getState("modbus.2.inputRegisters.114_A_L1-N").val; Strom_L3 = getState("modbus.2.inputRegisters.116_A_L2-N").val; Strom_L3 = getState("modbus.2.inputRegisters.118_A_L3-N").val; exec((Phasencheck(0, 0, 0)), function (error, result, stderr) { setState("0_userdata.0.Phasigkeit"/*Phasigkeit*/, (L1 + L2 + L3), true); }); });Danke für Eure Hilfe!
-
Ich danke Euch allen für die Hilfe. Vielleicht habe ich es zu abstrakt gemacht und komme deswegen nicht weiter. Daher hier kurz der Hintergrund:
Es geht um einen Verbraucher, der mal nur auf einer, mal auf zwei und mal auf drei Phasen Strom zieht. Ein vorgeschalteter Zähler wertet die Ströme je Phase aus und stellt sie als "Strom L1 gegen N" usw. bis L3 jeweils als einen Datenpunkt zur Verfügung. Als Trigger dient eine Änderung der Leistungsabnahme (die hier über alle Phasen gemessen wird. Der Titel des State mit "Leistung L1 gegen N" ist falsch, es müsste eigentlich "Leistung gesamt" heißen).Mir geht es nun darum, herauszufinden, wieviele Phasen benutzt werden. Dieses Ergebnis möchte ich dann in einen State schreiben und damit weiter arbeiten (anderes Script).
Meine Ansätze sehen aus wie folgt:
Hier der Trigger und Aufruf der Funktion:

Hier die Funktion:

Was ich nicht hinbekomme ist, das Ergebnis in einen weiteren State "Phasigkeit" zu schreiben.
Das Script wirft folgende Fehlermeldung aus:
16:27:21.829 error javascript.0 (924) at Object.<anonymous> (script.js.common.Phasigkeit_bestimmen:18:3)Falls es hilft, hier der von Blockly generierte Code:
var L1, L2, L3, Strom_L3, Strom_L1, Strom_L2; // Beschreibe diese Funktion … function Phasencheck(L1, L2, L3) { L1 = Strom_L1 >= 1 ? 1 : 0; L2 = Strom_L2 >= 1 ? 1 : 0; L3 = Strom_L3 >= 1 ? 1 : 0; return L1 + L2 + L3; } on({id: 'modbus.2.inputRegisters.120_W_L1-N', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Strom_L3 = getState("modbus.2.inputRegisters.114_A_L1-N").val; Strom_L3 = getState("modbus.2.inputRegisters.116_A_L2-N").val; Strom_L3 = getState("modbus.2.inputRegisters.118_A_L3-N").val; exec((Phasencheck(0, 0, 0)), function (error, result, stderr) { setState("0_userdata.0.Phasigkeit"/*Phasigkeit*/, (L1 + L2 + L3), true); }); });Danke für Eure Hilfe!
@ChristianF
Was soll im Script ein "exec" ? Vorschlag:
-
@ChristianF
Was soll im Script ein "exec" ? Vorschlag:
Herzlichen Dank !!! Kaum macht man's richtig, funktioniert es :)
-
Herzlichen Dank !!! Kaum macht man's richtig, funktioniert es :)
-
@paul53 könntest du das Blocky zu importieren einstellen ?
@paul53 said in [gelöst] Werte zählen, die >1 sind:
@ChristianF
Was soll im Script ein "exec" ? Vorschlag:
-
@paul53 könntest du das Blocky zu importieren einstellen ?
@paul53 said in [gelöst] Werte zählen, die >1 sind:
@ChristianF
Was soll im Script ein "exec" ? Vorschlag:
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

