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
Mit dem Attribute disableCond. Siehe CommandRef
Ü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
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?
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")