Neues Modul 98_alarmclock ein Fhem Wecker

Begonnen von FlorianZ, 18 Dezember 2016, 19:03:23

Vorheriges Thema - Nächstes Thema

sasquuatch

ich war ja am anfang mehr als skeptisch mit dem modul, muss aber inzwischen sagen top arbeit, ich bin begeistert.

einziges was mir nicht gefällt, ist dass der prealarm in sek ist und nicht in minuten, ansonsten finde ich es toll und wünsche mir so was einfaches würde es für die presence steuerung geben. ich vermute da könnte es inzwischen was geben, ich kenne es nur noch nicht, so wie mit alarmclock

Weswegen ich aber hier schreibe ist, ich habe ein problem ein dummy mit DOIF zu programmieren, dass mir arlamclock aus der Zeit des dummy eingestellt wird.

mein Dummy:
define WeckerNeuWerktageDummy dummy
attr WeckerNeuWerktageDummy alias Neuer Wecker Werktage stellen
attr WeckerNeuWerktageDummy devStateIcon Aus:general_aus@red
attr WeckerNeuWerktageDummy genericDeviceType switch
attr WeckerNeuWerktageDummy group Wecker Neu
attr WeckerNeuWerktageDummy room Wecker
attr WeckerNeuWerktageDummy setList state:Aus,05:00,05:15,05:30,05:45,06:00,06:15,06:20,06:25,06:30,06:35,06:40,06:45,06:50,06:55,07:00,07:05,07:10,07:15,07:20,07:25,07:30,07:45,08:00,08:15,08:30,08:45,09:00,09:15,09:30,09:35,09:40,09:45,09:50,09:55,10:00,10:15,10:20,10:25,10:30,10:35,10:40,10:45,10:50,10:55,11:00,11:05,11:10,11:15,11:20,11:25,11:30,11:35,11:40,11:45,11:50,11:55,12:00,12:05,12:10,12:15,12:20,12:25,12:30,12:45,12:50,12:55,13:00,13:05,13:10,13:15,13:30,13:45,14:00,14:15,14:30,14:45,14:50,14:55,15:00,15:05,15:10,15:15,15:20,15:25,15:30,15:35,15:40,15:45,15:55,16:00,16:05,16:10,16:15,16:20,16:25,16:30,16:35,16:40,16:45,16:50,16:55,17:00,17:05,17:10,17:15,17:30,17:45,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:20,20:30,20:45,21:00,21:15,21:25,21:30,21:35,21:40,21:45,21:50,21:55,22:00,22:15,22:30,22:45,23:00,23:15,23:30,23:45,00:00,00:15,00:30,00:45,01:00,01:15,01:30,01:45,02:00,02:15,02:30,02:45,03:00,03:15,03:30,03:45,04:00,04:15,04:30,04:45
attr WeckerNeuWerktageDummy webCmd state:Aus


mein DOIF:
define AlarmclockDOIF DOIF ([WeckerNeuWerktageDummy:"Aus"]) (set WeckerWerktageAlarmclock AlarmOff Weekdays)\
DOELSEIF\
([WeckerNeuWerktageDummy:"05:00|05:15|05:30|05:45|06:00|06:15|06:20|06:25|06:30|06:35|06:40|06:45|06:50|06:55|07:00|07:05|07:10|07:15|07:20|07:25|07:30|07:45|08:00|08:15|08:30|08:45|09:00|09:15|09:30|09:35|09:40|09:45|09:50|09:55|10:00|10:15|10:20|10:25|10:30|10:35|10:40|10:45|10:50|10:55|11:00|11:05|11:10|11:15|11:20|11:25|11:30|11:35|11:40|11:45|11:50|11:55|12:00|12:05|12:10|12:15|12:20|12:25|12:30|12:45|12:50|12:55|13:00|13:05|13:10|13:15|13:30|13:45|14:00|14:15|14:30|14:45|14:50|14:55|15:00|15:05|15:10|15:15|15:20|15:25|15:30|15:35|15:40|15:45|15:55|16:00|16:05|16:10|16:15|16:20|16:25|16:30|16:35|16:40|16:45|16:50|16:55|17:00|17:05|17:10|17:15|17:30|17:45|18:00|18:15|18:30|18:45|19:00|19:15|19:30|19:45|20:00|20:15|20:20|20:30|20:45|21:00|21:15|21:25|21:30|21:35|21:40|21:45|21:50|21:55|22:00|22:15|22:30|22:45|23:00|23:15|23:30|23:45|00:00|00:15|00:30|00:45|01:00|01:15|01:30|01:45|02:00|02:15|02:30|02:45|03:00|03:15|03:30|03:45|04:00|04:15|04:30|04:45"]) \
(set WeckerWerktageAlarmclock AlarmTime_Weekdays '.ReadingsVal('WeckerNeuWerktageDummy','state','0'))\

attr AlarmclockDOIF group alarmclock
attr AlarmclockDOIF room Wecker


Mein Problem dabei ist dieser Befehl
set WeckerWerktageAlarmclock AlarmTime_Weekdays '.ReadingsVal('WeckerNeuWerktageDummy','state,'0')
Gebe ich diesen Befehl in die Kommandozeile von FHEM, dann kommt folgende Fehlermeldung
Please Set AlarmTime_Weekdays HH:MM

weiß jemand was ich falsch mache?

FlorianZ

Hallo

Die Meldung von alarmclock sagt, dass das Zeitformat nicht stimmt.
Lass doch mal testweise die Ausgabe deines Doif in einen Dummy schreiben, um
zu sehen was da ankommt.

Gruß Florian

choenig

Hi,

mir erschliesst sich nicht, was folgendes tun soll:


set WeckerWerktageAlarmclock AlarmTime_Weekdays '.ReadingsVal('WeckerNeuWerktageDummy','state,'0')


Wozu ist das '. vor dem ReadingsVal?

Aber auf jeden Fall solltest Du es innerhalb des DOIFs so schreiben können:


(set WeckerWerktageAlarmclock AlarmTime_Weekdays [WeckerNeuWerktageDummy:state])


Und das ":state" kannst Du vermutlich auch noch weglassen.

LG
Christian

CoolTux


set WeckerWerktageAlarmclock AlarmTime_Weekdays '.ReadingsVal('WeckerNeuWerktageDummy','state,'0')


Das kann so nicht funktionen.
Wenn dann

set WeckerWerktageAlarmclock AlarmTime_Weekdays [WeckerNeuWerktageDummy]

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

sasquuatch

danke, jetzt habe ich es endlich.

es geht übrigens beides, sowohl:
set WeckerWerktageAlarmclock AlarmTime_Weekdays [WeckerNeuWerktageDummy]

als auch
(set WeckerWerktageAlarmclock AlarmTime_Weekdays [WeckerNeuWerktageDummy:state])

allerdings muss ich mir nochmal was überlegen, den wenn ich die zeit einmal im dummy gesetzt habe und setze eine neue, gibt es keine veränderung druch das DOIF. ich muss also erst auf Aus gehen und dann eine neue Zeit eingeben, damit die zeit im Alarmclock geändert wird.

choenig

Hi,

das sind jetzt natürlich DOIF-spezifische Probleme, nicht mehr alarmclock-spezifische :).

Ein do always sollte das Problem im DOIF lösen.

LG
Christian

sasquuatch

Oh, dass wollte ich jetzt damit nicht sagen, dass es am Clockalarm liegt, dachte ist klar das es am DOIF liegt.

Und "do always" ist mir ganz neu, danke dafür, damit geht's super [emoji106]


Gesendet von iPhone mit Tapatalk

gloob

#142
Kann man die Alarmclock eigentlich automatisch nach dem Ausführen von "AlarmRoutine" auf "Off" schalten




Edit: natürlich gibt es das:
MaxAlarmDurationInSec = 1
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Borkk

Probleme nach mehrmaligen disable/enable.

Ich nutze das Modul für meine werktägliche Weckroutine und es arbeitet wunderbar. Da ich oft auf Dienstreise bin und dann die Routine nicht benötige, habe ich das Modul mit meiner Anwesenheitserkennung verknüpft. Also ganz simpel, bin ich da = Set wecker disable 0 und bin ich nicht da = set wecker disable 1. Das hat auch ein paar Wochen funktioniert. Bis auf einmal morgens die Routine nicht los lief. Im Modul war der State noch auf disabled. Und er lies sich auch nicht verändern. Ich habe den Befehl zum enablen direkt über Set... eingegeben ohne Erfolg. Ich habe sogar in der fhem.cfg die Zeile mit dem Disable Befehl gelöscht auch ohne Erfolg. Natürlich habe ich immer gespeichert und fhem neu gestartet. Das Modul lies sich ums verrecken nicht mehr enablen. Schließlich habe ich es gelöscht und neu angelegt, seit dem funktioniert es wieder. Die Verknüpfung mit der Anwesenheit habe ich jedoch raus genommen.

Durch die Verknüpfung wurde das Modul mehrmals täglich ein/aus geschaltet. evtl. ist das so nicht vorgesehen und ist nach dem x mal in einen Fehler gelaufen. Ich kann nur schätzen wie oft das Modul ein/aus geschaltet wurde. ich denke mal der Fehler trat nach 15 -20 x hin und her schaltet auf.

Es scheint ja auch ein eigener "Disable" zu sein, da er ja nicht wie z.B. bei einem Notify als attr... gesetzt wird sondern direkt über Set ...

Ich hoffe ich konnte das Problem halbwegs darstellen. Mehr Infos oder log habe ich nicht. 
 
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

sasquuatch

Du könntest statt disable ein DOIF programmieren. bei Abwesenheit wir die Zeit gelöscht und wenn du da bist, wird die Weckzeit wieder eingetragen. Du könntest sogar ein Dummy mit Urzeiten anlegen, je nachdem welche dort steht, wird vom DOIF diese Zeit in deinem Wecker eingetragen


Gesendet von iPhone mit Tapatalk

FlorianZ

Hallo Borkk,

Es gibt in alarmclock genau für deinen Anwendungsfall das Attribut PresenceDevice.
Ein extra DOIF usw. wird nicht benötigt. Der Alarm löst nur bei Anwesenheit aus.

Zitat
   ⦁    PresenceDevice
        Name eines presence device.
        Es gibt 3 Möglichkeiten:
                 1. PresenceDevice des Typs PRESENCE
                 attr <name> PresenceDevice <devicename>
                 Alarmclock storniert den anstehenden Alarm, wenn state den Wert absent besitzt.
                 2. Auf state eines Device. Bsp. Dummy als PresenceDevice
                 attr <name> PresenceDevice <devicename>:<value>
                 <value> stellt hierbei den Wert für "absent" dar und steht im Reading state.
                  Bsp.: attr <name> PresenceDevice Mein_Presence_Dummy:absent
                  Alarmclock storniert den anstehenden Alarm,wenn der state des Dummy den Wert absent besitzt.
                 3. Auf ein Reading eines Device.
                 attr <name> PresenceDevice <devicename>:<readingname>: <value>
                 <value> stellt den Wert für "absent" dar und steht im Reading <readingname>.
                  Bsp.: attr <name> PresenceDevice Mein_Presence_Dummy:Bewohner1: Abwesend
        Getrennt durch | (pipe) können mehrere PresenceDevice angegeben werden.
   ⦁   PresenceCheck
        1 aktiviert
        0 deaktiviert

Gruß
Florian




Borkk

#146
Hallo Florian,

in der Tat habe ich das mit dem Presence Attribut auch schon gesehen und ich werde es mir mal anschauen. Es war halt schon einfach in mein an/abwesenheits script musste ich nur eine Zeile einfügen. :-)

Es bleibt aber trotzdem die Frage, warum das Modul nach n mal dis-/enable schalten, komplett stirbt.

Danke für die schnelle Hilfe.
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

Borkk

Hallo Florian,

Nochmal ne blöde Frage. Der Presence Status wechselt ja nach einer Zeit von ,,absent" in ,,gone". Wie reagiert alarmclock darauf. Schalter das Modul dann wieder scharf weil <value> nicht mehr ,,absent" ist?
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

FlorianZ

Hallo Borkk,

Du kannst mehrere Devices oder Readings angeben, bei denen der Alarm storniert werden soll.

attr <name> PresenceDevice MeinPresenceStatus:absent|MeinPresenceStatus:gone


Wenn state von MeinPresenceStatus absent oder gone ist, wird der Alarm storniert.

Warum das Modul bei dir nach dis-/enable stirbt, kann ich jetzt so ohne Log nicht nachvollziehen.
Ich werde das am We bei mir versuchen nachzustellen.

Gruß
Florian

aeronaut

Hi Florian, ich schau mir gerade dein Modul an und habe ein paar Fragen zu meinen spezifischen Anforderungen:

1. Es müssen mehrere Dinge vor einem Alarm abgearbeitet werden, z.B. 15 Minuten vorher die Badheizung eingeschaltet und 5 Minuten vorher das Aufwachlicht eingeschaltet werden, ggf. noch etwas drittes. So wie ich das sehe, gibt es mit PreAlarmRoutine nur einen einzigen Trigger, oder übersehe ich etwas?

2. Zur Kontrolle der eingestellten Weckzeit möchte ich in FTUI einen Text ausgeben, in etwa "Wecker klingelt in 1 Tag, 3 Stunden und 45 Minuten", in Abhängigkeit von Werktag/Wochenende/Holiday. Das müsste ich mir aus den Readings manuell basteln?

lg
aeronaut