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 :D

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. :!: