Hi,
angeregt durch diesen Beitrag im Beschattungsthread wollte ich mal mit einem "How I did it" beginnen...
Das Beispiel soll zeigen, wie man einen State-Shifter realisiert, also z.B. mit einem Schalter durch 4 Lampen durchschaltet, wobei bei jedem click die nächste Lampe an geht. Konzeptionell zeigt das, wie man von einem Zustand in den nächsten wechseln kann und die Zustände werden durch eine 1 auf einem "ToggleState"-Item weitergeschaltet.
Grundidee: Bei einer 1 auf "NextState" wird im Autoblind ein State angesprungen, der einen Zustandsübergang repräsentiert. Dieser setzt einen "ShifterState" auf den nächsten Zustand und "NextState" wieder auf 0. Diese 0 führt dazu, das der nächste Zustand eigentlich angesprungen wird und all die set_* ausführt, die eigentlich geschaltet werden sollen.
Hoffe, es hilft jemandem,
Gruß, Waldemar
angeregt durch diesen Beitrag im Beschattungsthread wollte ich mal mit einem "How I did it" beginnen...
Das Beispiel soll zeigen, wie man einen State-Shifter realisiert, also z.B. mit einem Schalter durch 4 Lampen durchschaltet, wobei bei jedem click die nächste Lampe an geht. Konzeptionell zeigt das, wie man von einem Zustand in den nächsten wechseln kann und die Zustände werden durch eine 1 auf einem "ToggleState"-Item weitergeschaltet.
Grundidee: Bei einer 1 auf "NextState" wird im Autoblind ein State angesprungen, der einen Zustandsübergang repräsentiert. Dieser setzt einen "ShifterState" auf den nächsten Zustand und "NextState" wieder auf 0. Diese 0 führt dazu, das der nächste Zustand eigentlich angesprungen wird und all die set_* ausführt, die eigentlich geschaltet werden sollen.
Hoffe, es hilft jemandem,
Gruß, Waldemar
Code:
[Test] [[Decke]] #wird vom Shifter geschaltet [[Spuele]] #wird vom Shifter geschaltet [[Innen]] #wird vom Shifter geschaltet [[Aussen]] #wird vom Shifter geschaltet [[NextState]] name = Input für Shifter, bei 1 geht es zum nächsten State type = bool visu_acl = rw knx_dpt = 1 knx_cache = 5/0/27 knx_send = 5/0/27 [[AutoBlind]] [[[State]]] [[[[ShifterState]]]] type = num name = Speichert den Shifter-State cache = True [[[[active]]]] type = bool value = True [[[[stateId]]]] type = str cache = True visu_acl = ro [[[[stateName]]]] type = str cache = True visu_acl = ro [[[Rules]]] autoblind_plugin = active item_active = Test.AutoBlind.State.active item_state_id = Test.AutoBlind.State.stateId item_state_name = Test.AutoBlind.State.stateName type = bool item_State = Test.AutoBlind.State.ShifterState item_Next = Test.NextState item_Decke = Test.Decke item_Aussen = Test.Aussen item_Innen = Test.Innen item_Spuele = Test.Spuele eval_trigger = Test.NextState [[[[Aus]]]] name = Ausgeschaltet type = foo set_Decke = value:0 set_Aussen = value:0 set_Innen = value:0 set_Spuele = value:0 [[[[[enter]]]]] value_State = 0 value_NextState = False [[[[AusSpuele]]]] name = Übergang Ausgeschaltet->Spuele type = foo set_NextState = value:0 set_State = value:1 [[[[[enter]]]]] value_State = 0 value_NextState = True [[[[Spuele]]]] name = Spuele type = foo set_Decke = value:0 set_Aussen = value:0 set_Innen = value:0 set_Spuele = value:1 [[[[[enter]]]]] value_State = 1 value_NextState = False [[[[SpueleAussen]]]] name = Übergang Spuele->Aussen type = foo set_NextState = value:0 set_State = value:2 [[[[[enter]]]]] value_State = 1 value_NextState = True [[[[Aussen]]]] name = Aussen type = foo set_Decke = value:0 set_Aussen = value:1 set_Innen = value:0 set_Spuele = value:0 [[[[[enter]]]]] value_State = 2 value_NextState = False [[[[AussenInnen]]]] name = Übergang Aussen->Innen type = foo set_NextState = value:0 set_State = value:3 [[[[[enter]]]]] value_State = 2 value_NextState = True [[[[Innen]]]] name = Innen type = foo set_Decke = value:0 set_Aussen = value:0 set_Innen = value:1 set_Spuele = value:0 [[[[[enter]]]]] value_State = 3 value_NextState = False [[[[InnenDecke]]]] name = Übergang Innen->Decke type = foo set_NextState = value:0 set_State = value:4 [[[[[enter]]]]] value_State = 3 value_NextState = True [[[[Decke]]]] name = Decke type = foo set_Decke = value:1 set_Aussen = value:0 set_Innen = value:0 set_Spuele = value:0 [[[[[enter]]]]] value_State = 4 value_NextState = False [[[[DeckeAus]]]] name = Übergang Decke->Ausgeschaltet type = foo set_NextState = value:0 set_State = value:0 [[[[[enter]]]]] value_State = 4 value_NextState = True
Kommentar