Abwesenheitssimulation mit Abfrage IF

Begonnen von martin99, 12 Mai 2018, 11:35:50

Vorheriges Thema - Nächstes Thema

martin99

Hallo,
man kann mit:
define homestatus dummy
attr homestatus setlist homestatus 1 2
define licht_an at *22:00:00 {if (Value("homestatus")==2) {fhem ("set licht_on")}}


wenn homestatus auf 2 gesetzt ist das Licht (licht_on) um 22 Uhr einschalten!

Wie kann ich die Abfrage von homestatus aber in dieser Zeile mit dem RandomTimer richtig einbauen?
define Zufall_licht_an RandomTimer *{sunset_abs()} licht_on *{sunset_abs(5*3600)} 600

Vielen Dank für eure Hilfe

amenomade

Mit dem Attribute disableCond. Siehe CommandRef
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Übrigens @igami, der jetzt der Maintainer ist: ich hatte das schon erwähnt, CommandRef sollte m.A. korrigiert werden:
https://forum.fhem.de/index.php/topic,74047.msg657408.html#msg657408

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

martin99

Auch nach allem ausprobieren klappt es leider immer noch nicht.

define isVerreist1 dummy
attr isVerreist1 webCmd ja:nein

define Diele_Licht MQTT_DEVICE
attr Diele_Licht IODev myBroker
attr Diele_Licht devStateIcon ON:ON OFF:OFF
attr Diele_Licht publishSet ON OFF cmnd/Diele_Licht/POWER
attr Diele_Licht stateFormat {(ReadingsVal("Vorratsraum_Licht","state","nF") =~ m/(ON|on)/i)  ? "on" : "off" }
attr Diele_Licht subscribeReading_power stat/Diele_Licht/POWER
attr Diele_Licht subscribeReading_state tele/Diele_Licht/TELEMETRY
attr Diele_Licht webCmd ON:OFF

define Zufall_Diele_Licht RandomTimer *{sunset_abs()} Diele_Licht *{sunset_abs(2*3600)} 300
attr Zufall_Diele_Licht disableCond (!isVerreist1())
attr Zufall_Diele_Licht switchmode 400/600


Egal ob isVerreist als ja oder nein gesetzt ist immer geht das Licht in der Diele an!

Ist der Code falsch? Ich habe was gelesen von einer 99_Utils. Muss ich die auch haben und anpassen?

amenomade

ZitatIst der Code falsch?
Ja klar. Und Du hast bestimmt auch eine Meldung in der Log:
ERROR evaluating {!isVerreist()}: Undefined subroutine oder etwas in der Art.

Wenn Du eine Routine aufrufst, muss die Routine existieren... Ein dummy mit gleichem Name wie die aufgerufene Routine hilft gar nicht.

Aber es gibt andere Beispiele in CommandRef. Man muss nur lesen.
ZitatTo set the Randomtimer out of work, you can specify in the disableCond attibute a condition in perlcode that must evaluate to true. The Condition must be put into round brackets. The best way is to define a function in 99_utils.
Examples

        attr   ZufallsTimerZ         disableCond      (!isVerreist()) ====> das ist der Aufruf einer Routine
        attr   ZufallsTimerZ         disableCond      (Value("presenceDummy") ne "present") ====> das ist die Bewertung eines Dummy
       

In deinem Fall wäre das 2. Beispiel besser. Etwas wie:
disableCond      (Value("isVerreist1") ne "ja")
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus