FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: holle75 am 26 April 2018, 11:32:29

Titel: weekdays ohne Zeitangabe /attr weekdays Bug??? siehe Ende
Beitrag von: holle75 am 26 April 2018, 11:32:29
Hallo Ihr, ich habe vor ein paar Tagen versucht meine Beregnung zu pimpen .... ich möchte auch noch die Wochentage auswählen können. Es funktioniert alles, nur die Erweiterung  [?BeregnungTage] die über einen Dummy definiert wird, wird ignoriert (die Beregnung läuft immer, auch wenn der entsprechende Tag nicht ausgewählt ist).

der Dummy enthält die Tage (entsprechend Auswahl) -> Mo,Di,Mi,Do,Fr,Sa,So

ich konnte kein Beispiel finden, wo der Wochentag OHNE Zeitangabe genutzt wird und habe es so probiert.

Was wäre die richtige Syntax?

fhem.cfg
define BeregnungTage dummy
attr BeregnungTage group Beregnung
attr BeregnungTage room Beregnung
attr BeregnungTage setList state:multiple-strict,Mo,Di,Mi,Do,Fr,Sa,So
attr BeregnungTage sortby 6
attr BeregnungTage webCmd state

define BeregnungDOIF_NachSonne DOIF ([?BeregnungTage] and [?BeregnungNach] eq "Elevation" and [?Wetterstation:statRain_yearHour24:d] < 1 and [?Wetterstation:statRain_yearHour48:d] < 5 and ["BeregnungDOIF_NachSonneElevation:cmd_1"] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) \
DOELSEIF ([?BeregnungTage] and [?BeregnungNach] eq "Zeit" and [?Wetterstation:statRain_yearHour24:d] < 1 and [?Wetterstation:statRain_yearHour48:d] < 5 and [[BeregnungNach:Uhrzeit]] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) \
DOELSE
attr BeregnungDOIF_NachSonne group Beregnung
attr BeregnungDOIF_NachSonne weekdays Mo,Di,Mi,Do,Fr,Sa,So


Danke und Grüße
H.
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: Ellert am 26 April 2018, 12:14:36
[?Dummy] =~ "Mo|Di| usw. für alle Tage"
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: holle75 am 26 April 2018, 12:32:16
Hallo Ellert und Danke, ignoriere ich so denn nicht die "weekdays"-Funktionalität von DOIF und gehe den herkömmlichen Weg? ... oder wie muß ich das

attr DOIF weekdays

verstehen?
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: nils_ am 26 April 2018, 12:57:42
Zitat aus der commandref
ZitatAnstatt 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


so? (mit dem klammern bin ich mir bei DOIF auch immer unsicher)

and [[BeregnungNach:Uhrzeit]|[BeregnungTage ]] and
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: Ellert am 26 April 2018, 13:10:57
Zitat von: holle75 am 26 April 2018, 12:32:16
Hallo Ellert und Danke, ignoriere ich so denn nicht die "weekdays"-Funktionalität von DOIF und gehe den herkömmlichen Weg? ... oder wie muß ich das

attr DOIF weekdays

verstehen?
Du wolltest doch " Wochentag OHNE Zeitangabe", funktioniert es denn nicht? Ich verstehe deinen Einwand nicht.
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: holle75 am 26 April 2018, 14:50:55
@Nils ... Mmh guter Ansatz, hatte ich so probiert: [[BeregnungTage]] ... Ohne der Uhrzeitangabe in der Tagesabfrage ... dann gibts einen Syntax Error.... und mit der Kombi [[BeregnungNach:Uhrzeit]|[BeregnungTage]] würde der DOELSEIF -Fall gehen aber der DOIF-Fall nicht.

@Ellert ... Werde es probieren .... dachte nur, daß durch das attr weekdays eine "Sonderfunktionalität" bzgl Wochentage sowieso schon eingebaut ist. Sprich, ich nicht eine "logische Abfrage" starten muß. Verstehe nicht, wieso es eine Uhrzeit braucht um den Wochentag abzufragen. Oder ich habe die commandref nicht richtig verstanden.
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: nils_ am 26 April 2018, 15:31:21
dann mach doch für den DOIF-Fall
[0:00-23:59|[BeregnungTage ]]
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: holle75 am 26 April 2018, 15:56:32
Auch ne Möglichkeit. Aber wie du schon so schön in deiner Signatur schreibst ...... ich versuche einfach den "saubersten Weg" zu finden.

ich verstehe nicht, wieso es eine Zeitangabe in der Tagesabfrage braucht... resp. warum eine solche Einschränkung?
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: Ellert am 26 April 2018, 17:35:10
Zitat von: holle75 am 26 April 2018, 14:50:55
Oder ich habe die commandref nicht richtig verstanden.
Wie vestehst Du diesen Satz aus der Commandref?
ZitatHinter der Zeitangabe kann ein oder mehrere Wochentage getrennt mit einem Pipezeichen | angegeben werden.
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: holle75 am 26 April 2018, 19:53:14
Hinter der ZEITANGABE kann ein oder mehrere Wochentage getrennt mit einem Pipezeichen | angegeben werden. Die Syntax lautet:

[<time>|012345678]

dafür gibt es viele Beispiele.

Es gibt kein Beispiel für einen Wochentag OHNE Zeitangabe nach diesem Muster.

Naheliegend (für mich) war eine Syntax a la  [Tagdummy] (plus dem attr weekdays)... das funktioniert nur wie gelernt nicht. [[Tagdummy]] fabriziert Syntax Fehler.

soviel zu meinem Verständnis der commandref. Deinen Vorschlag hatte ich vorher nirgendwo gefunden, aber vielen Dank und werde ich probieren.

.... auch wenn ich nicht verstehe, wieso das DOIF dann nicht irgendeinen Tag aus der Zeichenkette nimmt und der Fall immer wahr ist weil

Garage soll beim langen Tastendruck öffnen, hier: wenn das Wort "Long"  im Status vorkommt

define di_garage DOIF ([remotecontrol] =~ "Long") (set garage on)


Aber ich lerne gerne dazu.
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: Ellert am 26 April 2018, 20:04:30
Es geht eben nur hinter einer Zeitangabe, so wie beschrieben. Wenn keine Zeitangabe vorhanden ist, kann nichts dahinter geschrieben werden, also ist es nicht erlaubt, bzw. kann nicht erwartet werden, dass es funktioniert, also gibt es auch keine Beispiele. Es gibt aber andere Methoden, wie aufgezeigt.

=~ ist ein Match-Operator
| steht für "oder" in der Regexp

siehe https://perldoc.perl.org/perlre.html
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: holle75 am 26 April 2018, 20:16:20
=~ ist ein Match-Operator
| steht für "oder" in der Regexp


aber dann ist es doch immer wahr wenn auch nur ein Tag im Dummy steht?

zB

TagDummy state ist gesetzt auf -> Mo,Mi,So
DOIF ([?TagDummy] =~ "Mo|Di|Mi|Do|Fr|Sa|So"  and ...... usw)

dann wäre auch Dienstag ein match und wahr weil auch "Mo" im Dummy steht? Irgendwie -> Schlauch stehend.
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: Ellert am 26 April 2018, 22:10:46
Ja stimmt, ich bin fälschlich davon ausgegangen, dass im Dummy der aktuelle Wochentag steht.
Dann könntest Du auf $wday matchen, bin mir aber nicht sicher, ob nur Ziffern drin stehen, evtl. könntest Du auch die Funktion strftime nehmen um Abkürzungen zu erzeugen, s. http://search.cpan.org/~dexter/POSIX-strftime-GNU-0.02/lib/POSIX/strftime/GNU.pm mit %a zur Wochentagabkürzung
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: holle75 am 26 April 2018, 22:15:37
jetzt bin ich erleichtert ;) ...

werde erstmal Nils Ansatz versuchen (schön einfach) und falls das nicht funktioniert, mich in deine doch recht tiefergehenden links einlesen.

Danke fürs Mitdenken!
Titel: Antw:weekdays ohne Zeitangabe
Beitrag von: holle75 am 27 April 2018, 09:47:17
Nach dem ersten Versuchstag funktioniert es mit

fhem.cfg
define BeregnungTage dummy
attr BeregnungTage group Beregnung
attr BeregnungTage room Beregnung
attr BeregnungTage setList state:multiple-strict,Mo,Di,Mi,Do,Fr,Sa,So
attr BeregnungTage sortby 6
attr BeregnungTage webCmd state

define BeregnungDOIF_NachSonne DOIF ([?00:00-23:59|[BeregnungTage]] and [?BeregnungNach] eq "Elevation" and [?Wetterstation:statRain_yearHour24:d] < 1 and [?Wetterstation:statRain_yearHour48:d] < 5 and ["BeregnungDOIF_NachSonneElevation:cmd_1"] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) \
DOELSEIF ([?00:00-23:59|[BeregnungTage]] and [?BeregnungNach] eq "Zeit" and [?Wetterstation:statRain_yearHour24:d] < 1 and [?Wetterstation:statRain_yearHour48:d] < 5 and [[BeregnungNach:Uhrzeit]] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) \
DOELSE
attr BeregnungDOIF_NachSonne group Beregnung


Nach längerem probieren ist mir aufgefallen, dass es mit dem attr

attr BeregnungDOIF_NachSonne weekdays Mo,Di,Mi,Do,Fr,Sa,So

NICHT funktioniert. Hatte das DOIF bis auf ([9:30|Fr]) (Ausführungsteil) runtergebrochen und er wollte einfach nicht.

Zufall?
Titel: Antw:weekdays ohne Zeitangabe /attr weekdays Bug??? siehe Ende
Beitrag von: Sascha_F am 05 Oktober 2019, 10:51:39
Der Post ist jetzt schon sehr alt, aber musst Du bei "attr weekdays" nicht mit dem Sonntag beginnen?

Habe es bei mir wie folgt definiert:

So,Mo,Di,Mi,Do,Fr,Sa,WochenendeUrlaub,Arbeitstage

Ich denke, in Deinem Beispiel müsste "Fr" Donnerstag entsprechen - daher hat das DOIF am Freitrag nicht ausgelöst.

Viele Grüße
Sascha
Titel: Antw:weekdays ohne Zeitangabe /attr weekdays Bug??? siehe Ende
Beitrag von: Damian am 05 Oktober 2019, 10:56:44
Die deutschen, wie auch die englischen Kürzel, brauchen nicht mehr definiert zu werden, sie werden automatisch erkannt.