Hallo Liebe LBS Experten,
habe mir vor einiger Zeit mal einen LBS erstellt, der sämtliche Lichter im Haus, die normalerweise keinen „Dauerbetrieb“ (WC, Keller, Gang,…) haben, nach einer gewissen Zeit - mit Vorwarnung - abschaltet. Während der Vorwarnung ist das Licht „Nachtriggerbar“.
Quasi leicht abgeänderte Treppenhausfunktion (weil kann auch AUS geschaltet werden).
Das Ganze sollte aber Parallel zur normalen KNX Lichtansteuerung laufen.
Edomi bekommt dafür für jedes Licht eine eigene Gruppenadresse um das Licht EIN/AUS schalten zu können. Der EIN/AUS Befehl von den Schaltern kommt als Eingang an den LBS.
Natürlich noch die Schaltzeit und die EIN- und Aus-Zeit der Vorwarnung:
Unbenannt.PNG
Der LBS funktioniert auch tadellos, aber leider erhöht ein laufender LBS meine CPU Auslastung um 80%. Wenn 2 Solche LBS gleichzeitig laufen bin ich natürlich auf 100% ???
Was habe ich da so unschön gemacht, dass das dermaßen auf die CPU Last geht?
Oder können 5 Zyklisch abzuarbeitende If…. Abfragen eine derartige Belastung ergeben?
Ist ein wenig kompliziert gestaltet, da es anscheinend keine „refresh“ Oftion bei Internen Variablen bibt?
Lass mich da jetzt in jerder Richtung belehren ;o)
Vielen Dank und Gruß
Seppl
habe mir vor einiger Zeit mal einen LBS erstellt, der sämtliche Lichter im Haus, die normalerweise keinen „Dauerbetrieb“ (WC, Keller, Gang,…) haben, nach einer gewissen Zeit - mit Vorwarnung - abschaltet. Während der Vorwarnung ist das Licht „Nachtriggerbar“.
Quasi leicht abgeänderte Treppenhausfunktion (weil kann auch AUS geschaltet werden).
Das Ganze sollte aber Parallel zur normalen KNX Lichtansteuerung laufen.
Edomi bekommt dafür für jedes Licht eine eigene Gruppenadresse um das Licht EIN/AUS schalten zu können. Der EIN/AUS Befehl von den Schaltern kommt als Eingang an den LBS.
Natürlich noch die Schaltzeit und die EIN- und Aus-Zeit der Vorwarnung:
Unbenannt.PNG
Der LBS funktioniert auch tadellos, aber leider erhöht ein laufender LBS meine CPU Auslastung um 80%. Wenn 2 Solche LBS gleichzeitig laufen bin ich natürlich auf 100% ???
Was habe ich da so unschön gemacht, dass das dermaßen auf die CPU Last geht?
Oder können 5 Zyklisch abzuarbeitende If…. Abfragen eine derartige Belastung ergeben?
Ist ein wenig kompliziert gestaltet, da es anscheinend keine „refresh“ Oftion bei Internen Variablen bibt?
Lass mich da jetzt in jerder Richtung belehren ;o)
Code:
###[DEF]### [name = Treppenhausautomat mit Vorwarnung (2x) ] [e#1 =Trigger(schalten) ] [e#2 =Schaltzeit (sek) ] [e#3 =Vorw. AUS (sek) ] [e#4 =Vorw. EIN (sek) ] [v#0 =0 ] // [v#1 =0 ] // Zeitpunkt nach Schaltzeit -> AUS [v#2 =0 ] // Zeitpunkt 1. Vorw. AUS -> EIN [v#3 =0 ] // Zeitpunkt 1. Vorw. EIN -> AUS [v#4 =0 ] // Zeitpunkt 2. Vorw. AUS -> EIN [v#5 =0 ] // Zeitpunkt 2. Vorw. EIN -> AUS [v#6 =0 ] // Zeit [v#7 =0 ] // [v#8 =0 ] // [v#9 =0 ] // [v#10 =0 ] // [v#11 =0 ] // AUSGANG 1 [v#12 =0 ] // AUSGANG 1 Schmierer [a#1 =AUS/EIN TH ] [a#2 =Status TH ] ###[/DEF]### ###[HELP]### LBS ist NICHT zwischen Schalter und Autor geschaltet. Arbeitet parallel dazu! ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E=logic_getInputs($id)) { $T=getMicrotime(); setLogicElementVar($id,6,$T); if ($E[1]['value']!=0 && $E[1]['refresh']==1) { setLogicElementVar($id,1,(getMicrotime()+$E[2]['value'])); // Zeitpunkt nach Schaltzeit -> AUS setLogicElementVar($id,2,(getLogicElementVar($id,1)+$E[3]['value'])); setLogicElementVar($id,3,(getLogicElementVar($id,2)+$E[4]['value'])); setLogicElementVar($id,4,(getLogicElementVar($id,3)+$E[3]['value'])); setLogicElementVar($id,5,(getLogicElementVar($id,4)+$E[4]['value'])); setLogicElementStatus($id,1); //LBS "starten" setLogicElementVar($id,11,1); //Ausgang Status setLogicElementVar($id,12,1); //Ausgang Schmierer setLogicLinkAusgang($id,2,1); // Status TH für UM } if ($T>=getLogicElementVar($id,1) && $T<getLogicElementVar($id,2) && getLogicElementVar($id,11)!=0) { setLogicElementVar($id,11,0); //Ausgang Status setLogicLinkAusgang($id,2,0); // Status TH für UM } if ($T>=getLogicElementVar($id,2) && $T<getLogicElementVar($id,3)) { setLogicElementVar($id,11,1); //Ausgang Status } if ($T>=getLogicElementVar($id,3) && $T<getLogicElementVar($id,4)) { setLogicElementVar($id,11,0); //Ausgang Status } if ($T>=getLogicElementVar($id,4) && $T<getLogicElementVar($id,5)) { setLogicElementVar($id,11,1); //Ausgang Status } if ($T>=getLogicElementVar($id,5)) { setLogicElementVar($id,11,0); //Ausgang Status setLogicElementStatus($id,0); //LBS "stoppen" } // Ausgang Status bei Änderung auf Ausgang Schreiben if (getLogicElementVar($id,11)!=getLogicElementVar($id,12)) { setLogicLinkAusgang($id,1,getLogicElementVar($id,11)); } setLogicElementVar($id,12,getLogicElementVar($id,11)); if ($E[1]['value']==0 && $E[1]['refresh']==1) { setLogicElementStatus($id,0); //LBS "stoppen" setLogicLinkAusgang($id,1,0); setLogicLinkAusgang($id,2,0); //Status TH für UM } } } ?> ###[/LBS]###
Seppl
Kommentar