Frage: Notify mit Zeitraum Abfrage?

Begonnen von vga, 28 Februar 2016, 23:10:27

Vorheriges Thema - Nächstes Thema

vga

Hi zusammen,

folgendes möchte ich Umsetzen:

Ein Bewegungsmelder schaltet ein Licht-Dimmer. Soweit kein Problem.
Nun möchte ich abhängig von der aktuellen Zeit, das Dimm-Level unterschiedlich einstellen:
Zwischen 22-06 Uhr soll das Licht mit 20% Dimm-Level angeht.
Ansonsten mit 75%.

Also habe ich mir erstmal ein einfachen notify angelegt:
define n_MS_Licht notify MS:basicSet:.ff set Licht dim 50

funktioniert soweit gut.
Nun habe ich die Details des notify geöffnet und den DEF editiert:
MS:basicSet:.ff {
my $hm = sprintf("%02d:%02d", $hour, $min);
  if ( $hm gt "22:00" && $hm lt "06:00") {
   fhem('set Licht dim 25');
   }else {
   fhem('set Licht dim 75');
   }
}


Funktioniert, nicht!  :-\

Hat jemand eine Idee zu Syntaxfehler, oder doch ganz falsche Herangehensweise?
Wäre für jede Unterstützung dankbar, auch wenn es einen anderen oder "einfacheren" Ansatz gibt.

Habe woanders in einem DOIF schon mal so etwas gesehen:
[07:00-16:00]
Lässt sich so vielleicht auch ein Zeitraum definieren?

marvin78

ZitatWäre für jede Unterstützung dankbar, auch wenn es einen anderen oder "einfacheren" Ansatz gibt.

Wir wären auch dankbar, wenn du uns alle Infos zur Unterstützung geben würdest (was genau funktioniert nicht?).

Ein Tipp: größer als 22 und kleiner als 6 kannn eine Zahl oder Uhrzeit nicht sein.

vga

Hm, was soll ich noch sagen?
Das erste "einfache" notify funktioniert, wenn ich die erwähnte Änderung ergänze, löst das notify nichtmehr aus, ich sehe dann nichts im Event-Monitor.

Vielleicht sollte ich meine Frage auch anders stellen:

Bezüglich meines Vorhabens habe ich eine google/fhemwiki/commref/forum-suche gestartet.
Den beiden letzten erwähnten "script-snippets" waren das Ergebnis meiner Suche, von denen ich dachte, sie wären dafür geeignet.

Da ich noch recht neu in fhem bin und kaum Erfahrung mit den etwas komplexeren Anweisungen in fhem habe, ist meine Frage vielleicht besser so formuliert:
Wäre diesser Ansatzt richtig, und wenn ja, wäre das auch syntaktisch richtig formuliert?

Das mit der Zeit ist logisch, wie könnte man diesen "zeitraum" denn dann in einer fhem-Anweisung definieren und eingrenzen?

marvin78

Ein wenig nachdenken und dann und durch oder ersetzen (&& -> ||).

Ein wenig mit den Grundlagen Beschäftigen ist nicht verkehrt (FHEM, Perl und Logik). Das empfehle ich dir und lege es dir ans Herz.

CoolTux

Da ich genau das vor kurzem erst angewendet habe, auch ein Tip von mir. Es scheinen bei Dir ja die Stunden zu reichen. Also ist ein prüfen auf eine zuvor gefüllte Variable namens $hour ganz gut. Wenn Du dann noch mathematische Operatoren statt string Vergleiche verwendest kommst Du Deinem Ziel näher.


Grüße
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

marvin78

Aber $hour muss man sich auch erst einmal mit einem Wert belegen (so wie $hm). In einer sub in der myUtils steht das nicht automatisch zur Verfügung. Der Tipp, Grundlagen von Perl zu lernen ist deshalb hier der richtige. Der Vergleich hier ist schon ok (wenn auch so nicht notwendig). Nur das UND ist falsch.

rudolfkoenig

#6
Oder nochmal explizit zu sagen, der Vergleich ist falsch, weil du annimmst, dass FHEM/perl weiss, dass du eine Uhrzeit meinst, und implizit modulo 24 rechnet. Oder Umgangssprache versteht. Richtig waere
Zitat$hm gt "22:00" || $hm lt "06:00"

Alternative 1:
define n_MS_Licht notify MS:basicSet:.ff set Licht dim {($hms gt "22:00" || $hms lt "06:00" ? 25 : 75)}


Alternative 2:
define n_MS_Licht_Tag notify MS:basicSet:.ff set Licht dim 75
attr n_MS_Licht_Tag disabledForIntervals 22:00-24:00 00:00-06:00
define n_MS_Licht_Nacht notify MS:basicSet:.ff set Licht dim 25
attr n_MS_Licht_Nacht disabledForIntervals 06:00-22:00

vga

Danke, der falsche Operator ist natürlich peinlich. :-[
Ich habe das snippet kopiert, dabei habe ich den beim anpassen übersehen.

ZitatEin wenig mit den Grundlagen Beschäftigen ist nicht verkehrt (FHEM, Perl und Logik)
Der Hinweis von dir, marvin78, ist natürlich notwendig, aber hilfreich war das nicht wirklich.

Obwohl ich mir die Lektüren zu fhem schon durchgelesen habe, ist es so, dass man bezüglich mancher Aufgabenstellung vielleicht nicht gerade selbst den richtigen Ansatz findet und auf dem Schlauch steht, gerade als Einsteiger.
Nur vom lesen wird man kein Profi wie du es vielleicht einer bist und kann sich nicht gleich alles aus dem Ärmel schütteln.

Also dachte ich mir, da ich mir bezüglich so einer Anweisung nicht ganz im klaren über den Aufbau war, meine Suche die mir wichtigen Punkte nicht vollständig beantwortete und ein Forum doch eigentlich für etwas mehr als nur ein Doku-Verweis zu gebrauchen ist, hier ein wenig Unterstützung zu erhalten.  ???
Wenn ich da falsch liege, korrigiert mich bitte.

ZitatAlternative 1:
define n_MS_Licht notify MS:basicSet:.ff set Licht dim {($hms gt "22:00" || $hms lt "06:00" ? 25 : 75)}


Alternative 2:
define n_MS_Licht_Tag notify MS:basicSet:.ff set Licht dim 75
attr n_MS_Licht_Tag disabledForIntervals 22:00-24:00 00:00-06:00
define n_MS_Licht_Nacht notify MS:basicSet:.ff set Licht dim 25
attr n_MS_Licht_Nacht disabledForIntervals 06:00-22:00

Vielen Dank für deine Unterstützung Rudolf und den sehr interessanten Ansatz in alternative 2. Das hilft mir sehr und werde das heute Abend direkt ausprobieren! ;)

marvin78

Zitat von: vga am 29 Februar 2016, 12:22:05

Der Hinweis von dir, marvin78, ist natürlich notwendig, aber hilfreich war das nicht wirklich.


Der Hinweis ist sogar sehr hilfreich. Genau dann, wenn du ihm folgst.

vga

ich bin da halt eher pragmatisch veranlagt, daher akzeptiere ich das nun auch so.

Aber wenn ich mir bei solchen Fragen jetzt jedes Mal ein "lies die doku" oder ähnlich anhören muss, ist das echt Schade.
(Wofür ein Forum dann überhaupt, wenn sich nach dem Prinzip doch jede  Frage auch mit der Doku und entsprechendem Grundlagenkenntnis beantworten lässt?)

War die Frage denn so grundlegend?

marvin78

Nur wenn man merkt, dass jemand etwas kopiert hat, ohne sich das danach richtig anzuschauen und zu verstehen. Hättest du das getan, wäre die die fehlende Logik ja sicher aufgefallen.

Und nein, man kann tatsächlich nicht jede Frage mit der Doku beantworten. Ein Hinweis auf die Doku mit den richtigen Stichworten ist im Übrigen jedoch immer hilfreich.

BTW: ich habe dir oben sogar die Lösung genannt und hilfreiche Tipps dazu gelegt. Es kommt leider immer häufiger vor, dass sich die Leute über Hilfe beschweren. Warum das so ist, ist mir schleierhaft. Ein Hinweis auf die möglichen Lösungen deines Problems steht schon in der ersten Antwort dieses Threads. Es gibt jedoch immer mehrere. Und wenig selbst denken hilft sehr.

vga

OK, ich will mich hiermit dann wirklich aufrichtig bei dir dafür entschuldigen, marvin78.
Eure Hilfe ist mir viel Wert!
Mit einem trockenen Verweis zur Doku fühlt man sich halt gleich etwas abserviert, obwohl scheinbar gerechtfertigt.
So entsteht vielleicht auch dieses "unbeabsichtigte beschweren über Hilfe".

Ich kann schon nachvollziehen, dass es euch eben auch nervt, immer wieder auf die Grundlagen aufmerksam zu machen.
Aber manchmal sieht man den Wald vor lauter Bäumen nicht und denkt es stimmt doch alles! Da kann man solch einen Leichtsinnsfehler auch mal übersehen.

Dein Tipp ist demnach nicht weniger Wert. Auch dafür natürlich Danke!
Die Tipps kann ich leider erst heute Abend testen.




marvin78

Das verstehst du völlig falsch. Es nervt nicht, dass man auf die Grundlagen hinweisen muss, sondern dass die Leute die Hilfe ablehnen, sobald es nicht eine konkrete Lösung zum konkreten Problem ist, sondern "nur" ein Hinweis auf den Lösungsweg, aber selbst oft nicht mal in der Lage sind, ihr Problem "konkret" zu beschreiben. Damit nehme ich nicht unbedingt Bezug auf diesen Thread.

vga

...ich kann nur für mich sprechen
und wertvolle "Hinweise zur Lösung" sehen in meinen Augen so aus:
ZitatEin Tipp: größer als 22 und kleiner als 6 kannn eine Zahl oder Uhrzeit nicht sein.
und weniger so:
ZitatDer Tipp, Grundlagen von Perl zu lernen ist deshalb hier der richtige.

Wie gesagt, auf letzteres bin ich wohl zu sehr angesprungen und habe dadurch den ersten aus den Augen verloren.
Dafür nochmal Entschuldigung.

marvin78

Beide Tipps sind sinnvoll. Der zweite, nachhaltig gesehen, sogar deutlich mehr, als der erste. Dass du nicht vollständig liest und/oder priorisierst, ist dann wohl ein Teil deines Problems. Damit bin ich hier aber auch raus. Es wird langweilig.

vga

oh man,da lass ich mich jetzt auch nichmehr drauf ein.
Größter Teil des ganzen Problems ist wohl einfach deine egozentrische Art und Weise damit umzugehen; Entschuldigungen kannst du offensichtlich auch nicht annehmen, sonst wäre das schon gegessen.
...ich bin auch weg.