Seite 1 von 1
switch-case Funktion mit Blockly
Verfasst: 25. Mai 2026 19:45
von Tallman
Hallo,
ich möchte einen Hue-Taster auswerten und switch-case ist übersichtlicher als es mit verschachtelten If zu machen.
Die KI meinte es gibt die Funktion auch in Blockly, aber ich finde es nicht. Kann mir da mal jemand auf die Sprünge helfen
Danke Talli
Re: switch-case Funktion mit Blockly
Verfasst: 25. Mai 2026 20:47
von Harka
Moin,
nein. Ist mir zumindestens bei OH noch nicht über den Weg gelaufen. Ich löse das bei unserem Doppeltaster über
If-Else-If-Else
Screenshot 2026-05-25 203552.png
Re: switch-case Funktion mit Blockly
Verfasst: 26. Mai 2026 17:40
von Tallman
Danke Harka, da hat die KI mich mal wieder angelogen

Re: switch-case Funktion mit Blockly
Verfasst: 26. Mai 2026 20:10
von Harka
Gern. Sei mit solchen Aussagen aber vorsichtig. "Mutter" vergisst nichts und hat ja hier auch nicht ganz unrecht.
Beim ioBroker hat man einen solchen Block ergänzt. Vermisst habe ich es bisher nicht und eine Bibliothek mit dieser Funktion selber bauen wird imho auch nicht gehen (Zahnrad?).
Re: switch-case Funktion mit Blockly
Verfasst: 26. Mai 2026 20:50
von peter-pan
Du schreibst, dass du alles in Textdateien hast.
Hier noch ein Beipiel einer State Machine mittels DSL-Rule:
Code: Alles auswählen
rule "miniswitch_snzb01_01"
when
Channel 'mqtt:topic:danny:snzb0101:click' triggered //eckig
then
var GenericItem itZiel
val strReceivedEvent = String::format("%1$-6s", receivedEvent)
switch(receivedEvent) {
case "single" : itZiel = LidlLedLamp_01
case "double" : itZiel = Be2709w_01
case "long" : itZiel = zbminil2_01_state
default : {
logWarn("miniswitch_snzb01_01","Da ist was schief gegangen! Unbekanntes Event {} empfangen!", strReceivedEvent)
return;
}
}
var strLocation = getLocation(itZiel).label // Location Label ermitteln
val strOnOff = if(itZiel.state != ON) "ein" else "aus" // künftiger Zustand
val strItLabel = String::format("%1$-17s", itZiel.label)
logInfo("miniswitch_snzb01_01", "{} - {} {}geschaltet: {}", strReceivedEvent, strItLabel, String::format("%1$3s", strOnOff ), strLocation)
itZiel.sendCommand(if(itZiel.state != ON) ON else OFF)
end
Der "Log" könnte dann so aussehen:
Code: Alles auswählen
2026-05-26 20:47:11.439 [INFO ] [re.model.script.miniswitch_snzb01_01] - single - Birne Lidl LED 01 eingeschaltet: Zimmer York
2026-05-26 20:48:38.925 [INFO ] [re.model.script.miniswitch_snzb01_01] - single - Birne Lidl LED 01 ausgeschaltet: Zimmer York
Re: switch-case Funktion mit Blockly
Verfasst: 27. Mai 2026 17:09
von Tallman
@peter-pan: Wie es in DSL geht weiß ich.
Da es immer mal wieder Diskussionen wegen DSL gibt, versuche ich neue Regeln in einer "moderneren" Sprache zu erstellen. Aber irgendwie geht es im der gewohnten DSL am "einfachsten" und schnellsten.

Re: switch-case Funktion mit Blockly
Verfasst: 28. Mai 2026 23:38
von peter-pan
...tja, was soll ich da sagen. Nicht alles was neu(er) und vermeintlich modern(er) ist, muss auch zwingend besser sein. Mir reicht VSC als Code-Editor (mit OH-Erweiterung) und die Syntax von DSL.
Aber vielleicht entwickelt jemand im (internationalen) Forum mal einen entsprechenden Code-Block.
In IOBroker scheint es so was schon zu geben.
