Verständnisfrage: State Machine

Begonnen von Bastel-Frank, 02 November 2016, 11:01:00

Vorheriges Thema - Nächstes Thema

Bastel-Frank

Hallo zusammen,

ich habe bzgl. der State Machine eine Frage:
Ich habe den Bewegungsmelder (HM-Sen-MDIR-WM55) mit dem Schaltaktor für Markenschalter (HM-LC-Sw1PBU-FM) gepeeret. Solange eine Bewegung registriert wird, soll die Beleuchtung an sein.
Ich habe dabei die State Machine geändert, dass nur der on- und off-Status genutzt wird. Weiterhin habe ich im Bewegungsmelder das minInterval=15 Sekunden und im Markenschalter "shOnTime=20" Sekunden eingestellt. Ich hätte jetzt erwartet, dass der Markenschalter von off auf on wechselt, sobald eine Bewegung festgestellt wird, anschließend die shOnTime abläuft und dann der Schalter wieder auf off geht. Dieses funktioniert leider nicht: Der Markenschalter reagiert zwar auf die erste Bewegung und geht an, schalten dann aber zunächst aus, bis dann wieder eine nächste Bewegung festgestellt wird.
Erst wenn ich die State Machine in der Form ändere, dass vom on-Status nach der shOnTime wieder auf on-gestellt wird (also ohne auf off zu gehen), funktioniert das ganze.

Wie ist das zu erklären?

Viele Grüße
Frank

sumsum

Hallo Frank,

Im FHEM-Einsteiger http://fhem.de/Heimautomatisierung-mit-fhem.pdf ist die State Machine recht gut erklärt.
Es gibt Default-Übergänge (von welchem State automatisch nach Zeitablauf in den nächsten State übergegangen wird ). Sollte jetzt ein Trigger kommen, kann man definieren in welchen nächsten State gesprungen werden soll.

Dein Fall ist hier am Ende erläutert. http://www.fhemwiki.de/wiki/HM-Sec-MDIR_Funk-Bewegungsmelder_innen

Die Lampe geht alleine, also ohne eine neue Bewegung, nach Ablauf von shOnTime aus.
Sollte ein neuer Trigger kommen (Bewegung) dann definiert
set Lampe regSet shSwJtOn on Bewegungsmelder
folgendes: Sollte die Lampe An sein, dann springe bei Trigger zurück zum State On. Dadurch wird die Zeit  shOnTime neu gestartet.

Der Bewegungsmelder sendet nichts bei keiner Bewegung.

Gruss

Ulf

Pfriemler

#2
Zusätzlich sollte man wissen, dass der HM-Bewegungsmelder nicht so feingranuliert sendet. Im Auslieferungszustand sendet nicht jede erkannte Bewegung, sondern gönnt sich nach einer Zustandsänderung keine Bewegung > Bewegung erkannt 240 Sekunden Sendepause. Läuft der Aktor kürzer, geht er erst einmal aus, bevor das nächste Telegramm kommt.
Zweite Falle: Der Bewegungsmelder sendet normalerweise nur bei erkannter Bewegung, also nach den 240 Sekunden. Man kann ihn auch so einstellen, dass er zwischendurch Bewegung registriert (captInInterval) und das eben nach der Sendewartezeit von 240 Sekunden nachreicht. Dann geht das Licht nach vier Minuten wieder an, obwohl schon gar keiner mehr im Raum ist ...
Die Abläufe sollten einem bewusst sein, bevor man die Statemachine möglicherweise unnötig manipuliert...

Das minInterval hast Du ja schon angepasst, gut. Dein Licht bleibt jetzt nur an, wenn er in den 5 Sekunden zwischen minInterval und shOnTime eine Bewegung registriert. Sonst setze mal captInInterval auf on und schaue dann nochmal.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Gernott

Hallo

Ich hänge mich hier mal an, weil ich dieselbe Konfiguration mit einem Dimmer laufen habe und noch mit einem weiteren Phänomen bei der Verlängerung der Beleuchtungszeit kämpfe.
Mein Dimmer schaltet ein, wenn der BM anschlägt und die Helligkeit unter 60 ist (es ist dunkel). Die Verlängerung der Laufzeit über den BM per "shSwJtOn on" scheint aber nach meinen Beobachtungen nicht zu funktionieren, wenn durch das noch eingeschaltete Licht die Helligkeit nun größer als 60 ist.
Kann man das Verhalten noch per Register korrigieren, so daß eine wiederholte Bewegungsmeldung die Zeit im Aktor unabhängig vom Helligkeitswert verlängert?

Hier die aktuellen Register:
shActionTypeDim jmpToTarget
shCtDlyOff ltLo
shCtDlyOn ltLo
shCtOff ltLo
shCtOn ltLo
shCtRampOff ltLo
shCtRampOn ltLo
shCtValHi 100
shCtValLo 60
shDimElsActionType off
shDimElsJtDlyOff rampOff
shDimElsJtDlyOn rampOn
shDimElsJtOff dlyOn
shDimElsJtOn dlyOff
shDimElsJtRampOff off
shDimElsJtRampOn on
shDimElsOffTimeMd absolut
shDimElsOnTimeMd absolut
shDimJtDlyOff dlyOn
shDimJtDlyOn rampOn
shDimJtOff dlyOn
shDimJtOn on
shDimJtRampOff dlyOn
shDimJtRampOn on
shDimMaxLvl 100 %
shDimMinLvl 0 %
shDimStep 5 %
shMultiExec off
shOffDly 0 s
shOffDlyBlink on
shOffDlyNewTime 0.4 s
shOffDlyOldTime 0.4 s
shOffDlyStep 5 %
shOffLevel 0 %
shOffTime unused
shOffTimeMode absolut
shOnDly 0 s
shOnDlyMode setToOff
shOnLevel oldLevel
shOnLvlPrio high
shOnMinLevel 10 %
shOnTime 480 s
shOnTimeMode absolut
shRampOffTime 0.5 s
shRampOnTime 0.5 s
shRampSstep 5 %


Gruß
G.

frank

shCtOn ltLo
hiermit legst du fest, welche bedingung erfüllt werden muss, damit im zustand on ein short trigger eine aktion auslöst. zur zeit: kleiner als low, also kleiner 60.

mit get regList kannst du alle optionen sehen, die hier erlaubt sind.

wahrscheinlich funktioniert geLo (gösser und gleich low).
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

sumsum

Leider weiss ich nicht welche Lichtstärke der Wert 60 bedeutet. Das Beispiel von @frank würde "nur" für Werte >= 60 eine Aktion auslösen. Sollte der Wert aber darunter sein, dann nicht. Sollte bei "on" immer ausgelöst werden sollen, dann
könntest Du shCtValHi auf das Maximum und shCtOn auf ltHi (less than High) setzten.

Gernott

Hallo frank, sumsum

Das war's, vielen Dank für die hilfreichen Hinweise. Die Funktion vieler Register erschließt sich mir trotz der fhem-Anleitung nicht vollständig. Wo wäre ich nur ohne das Forum?

Viele Grüße
G.