Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
in top mal "c" drücken, dann siehst du zumindest, ob es eine Logikschleife intern oder ein LBS ist.
Du kannst im ersten Widget rechts neben der Hauptansicht sehen, welche KOs wann zuletzt gesetzt wurden.
Wenn es eine Logikschleife gibt, dann sollte es hier eigentlich sichtbar sein, durch welches KO dies ausgelöst wird.
proc_logic.php
Das sieht nach einer Logik-Schleife aus. Hatte ich auch grade erst mit den gleichen Symptomen.
Wie André schon geschrieben hat: Einfach mal nacheinander die Logikseiten deaktivieren. Bzw. wohl am ehesten die, an der du zuletzt gearbeitet hast.
Dann einfach mal schauen welche KOs zu in der Logik setzt, bzw. welche Ausgänge du ggf. mit LBS Eingängen verdrahtet hast.
Irgendwo wird wahrscheinlich durch einen Ausgang ein Eingang immer wieder getriggert.
Der Fehler liegt an meinem eigenen Baustein.
Das ist der erste Baustein mit einem Timer, und vermutlich liegt auch daran der Fehler. Ich sehe ab den Wald vor lauter Bäumen nicht!
Eine Schleife mit einem anderen Baustein kann ich ausschließen. Er reicht den Baustein in eine Logikseite zu nehmen und schon geht die Last bis auf 90%
Der Baustein tut was er soll und funktioniert auch, mit dem Nebeneffekt, dass er massive Last produziert.
Könnt Ihr mir hier sagen warum, wo der Fehler liegt!
Ansonsten müsste ich den Baustein mal umbenennen auf "Lasttester". 2 Stück aktivieren und 100% CPU Last ist gewiß!
Konstruktive Kritik ist ausdrücklich gewünscht!
PHP-Code:
###[DEF]### [name = Anwesenheit Plus 0.2]
[e#1 trigger = BWG durch PM ] [e#2 important = Timeout f�r Anwesend #init=5 ] [e#3 important = Timeout f�r Abwesend #init=120] [e#4 important = Starten #init=1] [e#5 option =Zykluszeit LBS in ms #init=1000]
[a#1 = Status Anwesend] [a#2 = Anwesend seit sec] [a#3 = Abwesend seit sec] [a#4 = An-Abwesenheitszeit #/-] [a#5 = LBS aktiv]
[v#1=] Startzeit [v#2=] Anwesend [v#3=] Akt_status ###[/DEF]### ###[HELP]### Vorlage : Standard - LBS ###[/HELP]### Der Baustein dient dazu um Licht oder Musiksteuerung abhänngig von An - Abwesenheitszeiten zu schalten E1 : Trigger E2 : Timeout in sec . Wenn E1 länger als diese Zeit auf 1 steht wird Anwesenheit A1 geschaltet und der Timer für die Anwesenheit läft E3 : wie E2 für Abwesenheit E4 : Start des LBS default ist 1 E5 : Zykluszeit des LBS
A1 : 0 / 1 unter Berücksichtigung des Timeouts A2 : Anwesenheitsdauer in sec . nach Timeout springt z . B bei einem Timeout von 60 sec von 0 auf 60 nach Ablauf des Timeouts A3 : wie A4 A4 : Vereint A3 / A4 in einem Ausgang += Anwesend seit -= Abwesend seit A5 : Status 0.1 Initiale Version 0.1 a Fehler undefinierte Variable gefixt
0.1 initiale Version 0.2 Umstellung der statischen Variablen auf Interne
###[LBS]### <? function LB_LBSID($id) { if ($E = logic_getInputs($id)) {
Ich habe noch nicht ganz verstanden, was genau der LBS machen soll, aber das
PHP-Code:
logic_setState($id, 1);
bewirkt, dass der LBS so schnell wir möglich wieder aufgerufen wird und zwar solange bis es wieder auf 0 gesetzt wird.
Und bei jedem Aufruf werden offensichtlich einige Ausgänge gesetzt, d.h. letztendlich vielleicht 20x pro Sekunde 5 Ausgänge setzen => >=100 DB Abfragen
Um jetzt sagen zu können, wie man es besser machen könnte, müsste ich allerdings verstehen, was genau der LBS machen soll.
Ziel des Bausteins soll es sein, dass an den Ausgängen
A2: die Zeit in sec anliegen soll, seit wann jemand in dem Raum ist
A3: die Zeit in sec. seit wann keine Bewegung mehr in dem Raum war
Über E2/E3 ist ein Timeout für Anwesenheit/Abwesenheit zu setzen. Mit Überschreiten diese Timeout wird geschaltet.
Zweck:
Ich brauche für das ZU- Abschalten der Musik Raumbezogen die Zeit seit wann jemand im Raum ist bzw. seit wann niemand mehr da ist.
z.B. in meinem Büro nach 240sec wird die Musik angeschaltet, nach 360sec ohne Bewegung geht dies aus.
z.B. Toiletten nach 5sec geht Musik an nach 120sec wieder aus.
logic_setState hatte ich bislang so gesetzt gehabt
Micha, ein interessanter Baustein, den ich so noch nie auf dem Radar hatte, aber in dem Fall brauche ich die Zeitfaktoren. Wobei ich diese nicht Sekundengenau brauche, deswegen auch der Versuch über E[5]
Mit logic_setState($id,1,2,$E[5]['value']); hatte ich auch in den letzten Tagen gearbeitet und konnte da immer nur einmalig das Delay feststellen.
Jeder weitere Durchlauf der Logik ignorierte das Delay und lief damit 'so oft wie möglich'.
Auch wenn ich als 4. Parameter ein true übergebe oder das logic_setState($id,1,2,$E[5]['value']); in jedem Durchlauf erneut setze.
Ich habe dann z.B. im Telegrammgenerator LBS gesehen, dass hier immer getMicrotime gearbeitet wurde, um den nächsten Auslösetermin für den LBS zu ermitteln.
Muss man das so wie im Telegrammgenerator LBS machen? Und für welchen Zweck ist der 4. Parameter in logic_setState?
Das ist ja auch die falsche Reihenfolge. Der dritte Parameter gibt die Zeit in ms an, der vierte ob es nur einmalig oder immer verwendet werden soll.
Wenn man genaue Werte haben möchte, dann kann man das so machen wie im Telegrammgenerator. Wenn das nicht gefordert ist, dann sollte das eigentlich mit dem Intervall des logic-setState() ausreichen.
PHP-Code:
logic_setState($id,1,500,true);
würde also den LBS also ungefähr zweimal pro Sekunde aufrufen. Ich wüsste jetzt keinen Grund warum das nicht funktionieren sollte.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar