FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: seule3008 am 02 Dezember 2017, 18:38:48

Titel: HM-LC-Sw1-DR Zeitschaltung
Beitrag von: seule3008 am 02 Dezember 2017, 18:38:48
Hallo alle zusammen,

Ich habe 2 von den Homematik Stromstoßschaltern verbaut und stehe auf dem Schlauch. Der 1. Schalter soll jeden 2.Tag um 6 Uhr einschalten und um 7 wieder aus. Zudem soll er bei kurzem Tasterdruck 1 Stunde einschalten und bei lang gedrücktem Taster für 4 Stunden einschalten. Kann man so etwas in einem DOIF realisieren?  Ich bin mir nicht sicher ob man bei diesem Schalter die länge der Tasterbetätigung erkennen kann. Ich habe dazu nichts finden können.


Der 2. Schalter soll jeden Tag um 22:00 ausschalten. Das habe ich hin bekommen aber kann man auch einstellen, dass er, wenn er nach 22:00 nochmal eingeschaltet wird, immer nur für eine Stunde einschaltet. Aber dann ab 06:00 wieder ohne Zeitlimit bis er dann um 22:00 wieder Automatisch abgeschaltet wird?


Vielen Dank schonmal für eure Mühe

Grüße

Christian Seul
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: seule3008 am 03 Dezember 2017, 11:44:33
Hallo


Für ein Problem habe ich die Lösung gefunden. Und zwar kann man kurzen und langen Tastendruck direkt in den Aktor schreiben. Dank diesem sehr gut beschriebenen Wiki Eintrag https://wiki.fhem.de/wiki/HomeMatic_Register_programmieren (https://wiki.fhem.de/wiki/HomeMatic_Register_programmieren) ging das problemlos.

Was ich aber noch nicht gefunden habe ist das das DOIF jeden 2. Tag um Uhrzeit x schaltet. Jede 2. oder besser gesagt alle 2 Stunden geht aber bei Tagen nicht. In der Fhem Referenz habe ich folgendes gefunden

Zeitangaben nach Zeitraster ausgerichtet alle X Stunden   back

Format: [+[h]:MM] mit: h sind Stundenangaben zwischen 2 und 23 und MM Minuten zwischen 00 und 59

Anwendungsbeispiel: Es soll immer fünf Minuten nach einer vollen Stunde alle 2 Stunden eine Pumpe eingeschaltet werden, die Schaltzeiten sind 00:05, 02:05, 04:05 usw.

define di_gong DOIF ([+[2]:05]) (set pump on-for-timer 300)
attr di_gong do always

Wochentagsteuerung   back

Hinter der Zeitangabe kann ein oder mehrere Wochentage getrennt mit einem Pipezeichen | angegeben werden. Die Syntax lautet:

[<time>|012345678] 0-8 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we) und 8 für Arbeitstage (entspricht !$we)

alternativ mit Buchstaben-Kürzeln:

[<time>|So Mo Di Mi Do Fr Sa WE AT] WE entspricht der Ziffer 7 und AT der Ziffer 8

Mit Hilfe des Attributes weekdays können beliebige Wochentagbezeichnungen definiert werden. Die Syntax lautet:

weekdays <Bezeichnung für Sonntag>,<Bezeichnung für Montag>,...,<Bezeichnung für Wochenende>,<Bezeichnung für Arbeitstage>

Beispiel: di_mydoif attr weekdays Son,Mon,Die,Mit,Don,Fre,Sam,Wochenende,Arbeitstag

Anwendungsbeispiel: Radio soll am Wochenende und an Feiertagen um 08:30 Uhr eingeschaltet und um 09:30 Uhr ausgeschaltet werden. Am Montag und Mittwoch soll das Radio um 06:30 Uhr eingeschaltet und um 07:30 Uhr ausgeschaltet werden. Hier mit englischen Bezeichnern:

define di_radio DOIF ([06:30|Mo We] or [08:30|WE]) (set radio on) DOELSEIF ([07:30|Mo We] or [09:30|WE]) (set radio off)

attr di_radio weekdays Su,Mo,Tu,We,Th,Fr,Sa,WE,WD

Bemerkung: Es ist unerheblich wie die definierten Wochenttagbezeichner beim Timer angegeben werden. Sie können mit beliebigen Trennzeichen oder ohne Trennzeichen direkt aneinander angegeben werden.

Anstatt einer direkten Wochentagangabe, kann ein Status oder Reading in eckigen Klammern angegeben werden. Dieser muss zum Triggerzeitpunkt mit der gewünschten Angabe für Wochentage, wie oben definiert, belegt sein.

Anwendungsbeispiel: Der Wochentag soll über einen Dummy bestimmt werden.

define dummy myweekday
set myweekday monday wednesday thursday weekend

define di_radio DOIF ([06:30|[myweekday]]) (set radio on) DOELSEIF ([07:30|[myweekday]]) (set radio off)

attr di_radio weekdays sunday,monday,thuesday,wednesday,thursday,friday,saturday,weekend,workdays


da steht das mit den Stunden super erklärt aber mit den Tagen komme ich nicht weiter. Hat da jemand eine Idee??

Grüße
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: Damian am 03 Dezember 2017, 15:39:06
https://forum.fhem.de/index.php/topic,44777.0.html
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: Damian am 03 Dezember 2017, 15:52:41
Zitat von: Damian am 03 Dezember 2017, 15:39:06
https://forum.fhem.de/index.php/topic,44777.0.html

Alternativ zum Lösungsvorschlag von @Pimpinella:

([22:00] and (time % 172800) < 86400) (set bla ...)

klappt im Gegensatz zu meinem Lösungsvorschlag mit $yday auch am 1. Tag des Jahres.
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: seule3008 am 03 Dezember 2017, 23:55:18
Vielen dank Damian,

Kannst du mir nur zum Verständnis die Programmzeile mal kurz und knapp erklären, dass ich verstehe was da passiert und ich es verstehe? Wie bestimme ich denn den start Tag? Muss ich dabei attr do always setzen das das bis zum St. Nimmerleins Tag durchläuft?

Grüße

Christian
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: Damian am 04 Dezember 2017, 09:40:53
time ist eine Funktion, die Sekunden seit dem "Unix-Urknall 1970" zählt.
Zwei Tage entspricht 172800 Sekunden.
Das Prozentzeichen ist Modulo-Operator (aus der Grundschule: Rest einer Division)
Wenn der Rest der Division kleiner als 86400 ist, dann ist es eine ungerade Tag-Nummer, sonst eine gerade Tag-Nummer
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: seule3008 am 04 Dezember 2017, 10:01:07
Danke so in etwa hatte ich mir das auch zusammengereimt. Das würde heißen, wenn ich < in > ändere kann ich von Ungerade auf Gerade wechseln oder? Und der erste Tag ist immer der wo das erste mal ein Kommando von DOIF kommt? Er hat heute Morgen ausgelöst aber der Timer im DOIF steht jetzt auf Morgen früh. Prüft das DOIF Morgen dann nochmal vor der Auslösung ob der Sekundenwert < oder> ist?

attr do always habe ich gesetzt sonst würde die Aktion nur einmal ablaufen sehe ich das richtig?

Grüße und Danke für deine Geduld ich bin ein absoluter Anfänger was Programmieren angeht.

Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: Damian am 04 Dezember 2017, 10:26:27
Der Timer löst jeden Tag aus, es wird zu diesem Zeitpunkt nur geprüft, ob die Bedingung wahr ist oder nicht, wenn sie wahr ist, dann wird das dazugehörige Kommando ausgeführt, sonst nicht. Gerade Tag-Nummer wäre dann >= und do always ist wichtig, da die Definition nur einen Zustand hat.
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: seule3008 am 04 Dezember 2017, 11:04:19
Eine Frage hätte ich da noch, wieso muss an das > ein = dran und an das < nicht? Es kann doch in beiden Fällen exakt auf 86400 aus kommen, oder sehe ich das falsch?

Grüße
Titel: Antw:HM-LC-Sw1-DR Zeitschaltung
Beitrag von: Damian am 04 Dezember 2017, 11:22:39
Zitat von: seule3008 am 04 Dezember 2017, 11:04:19
Eine Frage hätte ich da noch, wieso muss an das > ein = dran und an das < nicht? Es kann doch in beiden Fällen exakt auf 86400 aus kommen, oder sehe ich das falsch?

Grüße

Es geht hier um eine Sekunde. Das Gegenteil von < ist >=

Ansonsten kannst du gerne ausrechnen ob < oder <= richtig ist für ungerade Tage.