FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: martin99 am 12 Mai 2018, 11:35:50

Titel: Abwesenheitssimulation mit Abfrage IF
Beitrag von: martin99 am 12 Mai 2018, 11:35:50
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
Titel: Antw:Abwesenheitssimulation mit Abfrage IF
Beitrag von: amenomade am 12 Mai 2018, 11:42:05
Mit dem Attribute disableCond. Siehe CommandRef
Titel: Antw:Abwesenheitssimulation mit Abfrage IF
Beitrag von: amenomade am 12 Mai 2018, 11:46:49
Ü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

Titel: Antw:Abwesenheitssimulation mit Abfrage IF
Beitrag von: martin99 am 16 Mai 2018, 14:43:59
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?
Titel: Antw:Abwesenheitssimulation mit Abfrage IF
Beitrag von: amenomade am 16 Mai 2018, 22:48:49
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")