Hallo FHEMler,
ich bin hier kurz vor dem Verzweifeln.
Ich habe mir eine kleine "Schaltuhr" für die Weihnachtsbeleuchtung geschrieben.
Jetzt möchte ich diese bei Bedarf aktivieren bzw. am 6. Januar wieder deaktivieren.
Dies hätte ich versucht über einen Dummy zu lösen, aber da bekomme ich keine Schaltflächen angezeigt, diese hätte ich aber gerne.
Kann mir da jemand von Euch weiterhelfen?
Oder ist dies so gar nicht möglich?
Bin für jede Hilfe dankbar.
Gruß
Dirk
Wie sieht Deine Schaltuhr aus? Poste mal den Code.
Wenn du dir die Schaltuhr mit eine at gebastelt hast, dann definier dir doch einfach ein zweites at, das einmalig am 6. Januar 2017 ausgeführt wird und dir dein Schaltuhr-at mittels set inactive deaktiviert andere devices kennen u.U. statt set inactive auch das Attribut disable, mit dem es dann deaktiviert werden kann. Ggf. ist danach auch noch ein save erforderlich.
Für deinen Dummy das
attr webCmd on:off
Grüße Marcel
Hallo Zusammen,
mein Code schaut folgendermassen aus:
define Deko_Garage CUL_HM 371494
attr Deko_Garage IODev HMLAN1
attr Deko_Garage IOgrp vccu
attr Deko_Garage autoReadReg 5_readMissing
attr Deko_Garage expert 2_full
attr Deko_Garage firmware 2.5
attr Deko_Garage fp_Grundriss 36,1227,1,,
attr Deko_Garage model HM-LC-SW1-FM
attr Deko_Garage peerIDs 00000000,
attr Deko_Garage room Weihnachten
attr Deko_Garage serialNr MEQ0274756
attr Deko_Garage subType switch
attr Deko_Garage webCmd statusRequest:on:off
define FileLog_Deko_Garage FileLog ./log/Deko_Garage-%Y.log Deko_Garage
attr FileLog_Deko_Garage logtype text
attr FileLog_Deko_Garage room CUL_HM
#define Deko_Garage_an_abend at *{sunset_abs()} set Deko_Garage on
#define Deko_Garage_aus_abend at *00:00:00 set Deko_Garage off
#define Deko_Garage_aus_morgen at *{sunrise_abs()} set Deko_Garage off
#define Deko_Garage_an_morgen at *06:00:00 set Deko_Garage on
define Weihnachten_an_abend at *{sunset_abs()} set Weihnachtsbeleuchtung,Deko_Garage on
attr Weihnachten_an_abend room Weihnachten
define Weihnachten_aus_abend at *00:00:00 set Weihnachtsbeleuchtung,Deko_Garage off\
attr Weihnachten_aus_abend room Weihnachten
define Weihnachten_aus_morgen at *{sunrise_abs()} set Weihnachtsbeleuchtung,Deko_Garage off
attr Weihnachten_aus_morgen room Weihnachten
define Weihnachten_an_morgen at *06:00:00 set Weihnachtsbeleuchtung,Deko_Garage on
attr Weihnachten_an_morgen room Weihnachten
define Weihnachten_KiZi_an_abend at *{sunset_abs()} set Fenster_KiZi_OG on
attr Weihnachten_KiZi_an_abend room Weihnachten
define Weihnachten_KiZi_aus_abend at *21:00:00 set Fenster_KiZi_OG off
attr Weihnachten_KiZi_aus_abend room Weihnachten
define Weihnachten_KiZi_aus_morgen at *{sunrise_abs()} set Fenster_KiZi_OG off
attr Weihnachten_KiZi_aus_morgen room Weihnachten
define Weihnachten_KiZi_an_morgen at *06:00:00 set Fenster_KiZi_OG on
attr Weihnachten_KiZi_an_morgen room Weihnachten
define Wochenende_KiZi_OG WeekdayTimer Weihnachten_KiZi_an_morgen Sa,So|6:00|inactive
attr Wochenende_KiZi_OG disable 0
attr Wochenende_KiZi_OG room Weihnachten
define Woche_KiZi_OG WeekdayTimer Weihnachten_KiZi_an_morgen Mo,Di,Mi,Do,Fr|6:00|active
attr Woche_KiZi_OG room Weihnachten
Mit DOIF würde es nach dem morgigen Update etwa so aussehen
define DOIF Weihnachten ([({sunset_abs()}] or [06:00]) and [?$SELF:P_einaus,"off"] eq "on")
((set Weihnachtsbeleuchtung,Deko_Garage on))
DOELSEIF (([{sunrise_abs()}] or [00:00]) and [?$SELF:P_einaus,"off"] eq "on")
((set Weihnachtsbeleuchtung,Deko_Garage off))
DOELSEIF ([$SELF:P_einaus,"off"] eq "off")
((set Weihnachtsbeleuchtung,Deko_Garage off))
und die Attribute
attr Weihnachten readingList P_einaus
attr Weihnachten setList P_einaus:on,off
attr Weihnachten webCmd P_einaus
alternativ mit Radiobutton
attr Weihnachten setList P_einaus:uzsuSelectRadio,on,off
$SELF steht für den Namen des DOIF
P_einaus ist ein Reading im DOIF, das den Dummy erspart und die Funktion des Ein/Aus-Schalters übernimmt
Mit readingList, setList,webCmd wird der Button/Auswahlliste beschrieben.
Wenn der Button auf on steht wird zu den genannten Zeiten ein und aus geschaltet.
Wenn der Button auf off geht, wird einmal ausgeschaltet.
Das ? bewirkt, das die Aktualisierung des Button auf "on" nicht auslöst.
Fürs KiZi würd's ähnlich aussehen
Alle betreffenden at und dummys entfallen.
Siehe auch http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung
und http://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung
Zitat von: Benni am 26 November 2016, 20:16:32
... ein zweites at, das einmalig am 6. Januar 2017 ausgeführt wird und dir dein Schaltuhr-at mittels set inactive deaktiviert ...
Ich habe das bei mir jetzt mal umgesetzt und zwar so, dass es jedes Jahr automatisch wieder funktioniert.
Dazu habe ich mir als erstes mal eine Funktion in meiner
99_myUtils.pm angelegt, die mir einen define-String für das spätere automatisierte Anlegen des
at erzeugt:
sub getXMasOverAt()
{
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
$Jahr+=1901;
return "defmod atXMasOver at $Jahr-01-06T00:15:00 {fhem \"set dmXMas off;;}";
}
Die Funktion erzeugt (heute im Jahr 2016) folgenden String:
Zitat
defmod atXMasOver at 2017-01-06T00:15:00 {fhem "set dmXMas off;; fhem ".getXMasOverAt();;}
Die Jahreszahl wird dynamisch, ausgehend vom aktuellen Jahr erzeugt = Aktuelles Jahr+1
Das
at wird also am 6.1. des Folgejahres ausgeführt und Setzt den
dummy dmXMas auf
offDen von der Sub zurückgegebenen String kann ich in der Perl-Ebene direkt an die
fhem-Funktion übergeben:
{fhem getXMasOverAt();}
Damit wird mir dann direkt das
at angelegt, bzw. angepasst.
So! Weiter gehts:
Der
dummy, der später vom
at ausgeschaltet wird, sieht wie folgt aus:
Zitat
Internals:
CFGFN
NAME dmXMas
NR 8319
STATE on
TYPE dummy
Readings:
2016-11-27 21:45:40 state on
Attributes:
DbLogExclude .*
room 99.50_Seasons
setList on off
Jetzt gibt es noch ein
notify (nyXMas), das auf das Setzen des
dummy (
on/
off) reagiert. Der DEF des
notify ist komplett Perl und sieht wie folgt aus:
dmXMas:.* {
my $atState='active';
$atState='inactive' if($EVTPART0 eq "off");
fhem "set atWeihnachtsbeleuchtung.* $atState";
fhem getXMasOverAt();
fhem "attr atXMasOver room ".AttrVal($NAME,'room','hidden');
fhem "set atXMasOver $atState";
}
Wird nun der
dummy auf
on gesetzt, werden zum Einen alle meine
at, die zur Weihnachtsbeleuchtungs-Steuerung dienen auf
active gesetzt (die beginnen bei mir im Namen alle mit
atWeihnachtsbeleuchtung)
Wird der
dummy auf
off gesetzt werden alle meine Weihnachts-
at auf inactive gesetzt.
Zum Anderen wird aber auch das
at für's Folgejahr erzeugt (das at, das den
dummy am 6.1. des nächsten Jahres wieder auf off setzt). Das
at wird je nachdem ebenfalls noch aktiviert oder deaktiviert und im selben Raum platziert, wie der
dummy.
Die Erzeugung des
at (
atXMasOver) geschieht natürlich auch beim
off setzen des
dummy. Das spielt aber keine Rolle, da es ja auch auf
inactive gestellt wird. Genau genommen wäre auch das nicht nötig, denn wenn es auslösen würde, wenn eh schon alles auf inactive ist, passiert ja auch nichts weiter.
Das War's!
Nun können alle meine
at für die Weihnachtsbeleuchtung bequem mit dem
dummy eingeschaltet werden (
set dmXMas on) und werden dann am 6.1. des Folgejahres durch das beim Einschalten erzeugte
at wieder durch setzen des
dummy auf off ausgeschaltet.
Hallo Benni, Hallo Ellert,
wenn ich deinen Code verwenden will, Ellert, dann bekomme ich die folgende Fehlermeldung:
ZitatUnknown module Weihnachten
wenn ich "Weihnachten" und DOIF umdrehe bekomme ich folgende Meldung:
ZitatWeihnachten DOIF: no right bracket: ({sunset_abs()}
Da habe ich einfach keine Erfahrung, was die Fehlersuche bzw. das debugging angeht.
Wenn ich deinen Code verwenden will,Benni, dann habe ich schon mal das Problem, dasi ich nicht genau weiß, was ich wie in die 99_myUtils.pm schreiben muss.
Ich habe zwar deinen Code dort rein Kopiert und gesichert, jedoch bin ich mir nicht sicher, ob das so funktioniert.
Wenn ich dann den Zitat{fhem getXMasOverAt();}
ausführen will bekomme ich diese Fehlermeldung:
ZitatUnknown command {fhem, try help.Unknown command }, try help.
Da stehe ich zur Zeit komplett auf dem Schlauch
In die 99_myUtils.pm müssen nur die folgenden Zeilen eingetragen werden:
sub getXMasOverAt()
{
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
$Jahr+=1901;
return "defmod atXMasOver at $Jahr-01-06T00:15:00 {fhem \"set dmXMas off;;}";
}
Zum Testen kannst du die sub anschließend auch einfach mal über die Kommandozeile im FHEMWEB aufrufen, dann aber so:
{getXMasOverAt}
Als Ergebnis sollte folgendes angezeigt werden:
defmod atXMasOver at 2017-01-06T00:15:00 {fhem "set dmXMas off;;}
Wenn du Hilfe zum Anlegen/Bearbeiten der 99_myUtils.pm brauchst, wirf mal einen Blick ins Wiki: http://www.fhemwiki.de/wiki/99_myUtils_anlegen
so müsste es gehen..
(([{sunset_abs()}] or [06:00]) and [?$SELF:P_einaus,"off"] eq "on")
((set Weihnachtsbeleuchtung,Deko_Garage on))
DOELSEIF (([{sunrise_abs()}] or [00:00]) and [?$SELF:P_einaus,"off"] eq "on")
((set Weihnachtsbeleuchtung,Deko_Garage off))
DOELSEIF ([$SELF:P_einaus,"off"] eq "off")
((set Weihnachtsbeleuchtung,Deko_Garage off))
Hallo Benni,
Danke für die prompte Antwort!
Also das mit der 99_myUtils klappt jetzt.
Wenn ich Dich richtig verstanden Habe muss ich mir jetzt noch ein Notify schreiben?
Das will ich gleich mal versuchen.
Hallo Kumue,
Danke, das mit dem Code hat geklappt.
Jedoch nimmt FHEM die Attribute nicht :o
Da bekomme ich auch dauernd eine Fehlermeldung, dass das mit dem readList nich in Ordnung ist.
Ich teste momentan beide Codes auf meinem Testsystem, nicht das ich mir mein produktives FHEm zerstöre...
Zitat von: Da_Erdinga am 01 Dezember 2016, 21:57:27
Jedoch nimmt FHEM die Attribute nicht :o
Mit den neusten Möglichkeiten von DOIF habe ich mich noch nicht befasst, aber ich konnte die Attribute problemlos setzen.
Die neueste DOIF-Version hast Du installiert ?
Mein letztes Update liegt ein paar Tage zurück, aber FHEM ist in der Versioon 5.7 installiert.
Edit:
Hab nochmal geupdatet, jetzt wurden die Attribute tadellos übernommen.
Danke