Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist

Begonnen von chq, 08 März 2019, 09:07:22

Vorheriges Thema - Nächstes Thema

Benni

Kannst auch gleich filemove statt fileimport nehmen, damit wird nach Import die Datei vom Filesystem entfernt.

gb#

betateilchen

Zitat von: rudolfkoenig am 08 März 2019, 09:21:17
Grobe Skizze einer Idee:
- holiday Datei ersetzen: "echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday" (braucht das unter Linux uebliche gnu date)

Dann ist aber nächstes Jahr zum gleichen Datum wieder arbeitsfrei, wenn man nicht daran denkt, "übermorgen" das holiday file wieder zu leeren.

Eine Lösung, mit der AnalyzePerlCommand() das $we flexibler ermitteln würde, fände ich besser. Muss jetzt zum Kochclub, vielleicht fällt mir während des Schnippelns was dazu ein :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Die einfache Lösung mit dem Import war mir auch im Kopf, aber die habe ich mir nicht getraut zu sagen. Der Gedanke - dass Daten, die in einer DB stehen, dadurch aktualisiert werden, dass ich ich einen File erzeuge und den importiere - ist mir irgendwie etwas schräg. Ich würde irgendwie versuchen die Daten in der DB direkt zu schreiben.
Aber manchmal zählt ja nach Außen erstmal das Ergebnis  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

NewRasPi

#18
Hallo Ihr Spezialisten
muss es so aufwändig sein?
Ich habe es mit einem einfachen Dummy gelöst.
define WeckerAktivDummy dummy
und
webCmd on:off
das es etwas schöner aussieht noch:
attr WeckerAktivDummy devStateIcon on:general_an_fuer_zeit@orange off:general_aus_fuer_zeit@grey
und dann im eigentlichen DOIF Wecker die Abfrage
.... and [WeckerAktivDummy] eq "on" ....
Damit sehe und schalte ich jetzt am Tag vor dem freien ob mein Wecker mich nicht wieder mal an einem freien Tag unnötig wecken wird.
Natürlich macht die holiday Datei die festen Feiertage automatisch. 
Viel Spass und schöne Grüße
NewRasPi
Raspberry Pi 2 Mod B + Raspberry Pi 3 + Raspberry Pi4; HM Lan Adapter; 8 Kanal Relaiskarte; ca. 15x 1wire Temperatur Sensor DS18B20; 10x HC-SR501 Bewegungsmelder; 9x HM Rauchmelder HM-Sec-SD; HM Funk Fenstersensoren; HM Strommess-Zwischenstecker;

Byte09

Ist so sicher auch machbar , die Anforderung war aber die , die vorhandene variable $twe zu  nutzen , um wohl eine Vielzahl von doifs nicht ändern zu müssen.

Gruss Byte09

Gesendet von meinem SM-G900F mit Tapatalk

Papaloewe

Zitat von: Otto123 am 10 März 2019, 11:43:47
Die einfache Lösung mit dem Import war mir auch im Kopf, aber die habe ich mir nicht getraut zu sagen. Der Gedanke - dass Daten, die in einer DB stehen, dadurch aktualisiert werden, dass ich ich einen File erzeuge und den importiere - ist mir irgendwie etwas schräg.

Recht hast du, aber schräg ist ja auch eigentlich schon direkt in eine Textdatei zu schreiben, weil es das Holiday Device selbst nicht unterstützt.
Dafür war es natürlich auch nie gedacht, das ist schon klar. Alles so ein wenig "Von hinten durch die Brust ins Auge!"

Vielleicht hat Betateilchen beim Kochen ja noch eine wunderbare Idee.

betateilchen

Zitat von: Otto123 am 10 März 2019, 11:43:47
Der Gedanke - dass Daten, die in einer DB stehen, dadurch aktualisiert werden, dass ich ich einen File erzeuge und den importiere - ist mir irgendwie etwas schräg. Ich würde irgendwie versuchen die Daten in der DB direkt zu schreiben.

Das ist auch völlig schräg und völlig überflüssig.

Zitat von: Papaloewe am 10 März 2019, 17:05:49
Vielleicht hat Betateilchen beim Kochen ja noch eine wunderbare Idee.

Naja, ein bisschen was ist mir schon dazu eingefallen.

Wenn man anstatt dem Rumgehampel mit Systembefehlen und anschließendem Import in die Datenbank einfach die von FHEM bereitgestellten Mechanismen verwenden würde, kann man sich das Leben sehr viel einfacher machen.

FHEM hat eine interne Funktion FileWrite() die genau dafür geschaffen wurde, dass der Anwender bei der Erstellung einer Datei nicht mehr darüber nachdenken muss, ob er mit einer Konfigurationsdatei oder einer -datenbank arbeitet. FileWrite schreibt die holiday-Datei automatisch an die richtige Stelle


{ FileWrite('./FHEM/tomorrow.holiday', ' hier kommt der Zeilentext hin, der in der holiday Datei stehen soll') }


Was mir aber noch viel besser als Lösung gefallen würde:

define tomorrow holiday

und das holiday Modul legt anhand des Schlüsselwortes "tomorrow" ein temporäres device (ähnlich eines einmal auszuführenden at) an, das spätestens übermorgen automatisch wieder verschwindet.

Muss bei der nächsten Bahnfahrt mal in mich gehen und schauen, was mir dazu einfällt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

#22
Moin,

ich habe mit Udos Hinweis noch ein Variante mit Filewrite gemacht. Könnte ja Papalöwe mal testen.
defmod nty_MorgenUrlaub notify MorgenUrlaub:(set|del) {\
    my $hdev='urlaub';;\
    my $hfile='./FHEM/'.$hdev.'.holiday';;\
    my $morgen = `date --date=tomorrow +%m-%d`;;\
    chomp($morgen);;\
    if ($EVENT eq "set") {\
        FileWrite($hfile, '1 '.$morgen.' Urlaub ') ;;\
        fhem("defmod deltomorrow at +48:00:00 set MorgenUrlaub del")\
    };;\
    if ($EVENT eq "del") {\
        FileWrite($hfile, '#')\
    };;\
    fhem("set $hdev reload;;set MorgenUrlaub _$EVENT")\
  }
Nach zwei Tagen wird die "Morgen ist Urlaub Einrichtung" auch wieder durch ein at gelöscht. Ob das jetzt so die richtige Idee ist weiß ich nicht. Mir fiel erstmal nichts besseres ein. Das defmod ist auch nicht ganz unkritisch, ich wollte halt, dass man morgen auch nochmal "verlängern" kann.  ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

chq

Zitat von: NewRasPi am 10 März 2019, 12:22:54
Hallo Ihr Spezialisten
muss es so aufwändig sein?

Ja, wenn z.B. abends "Aktionen" ablaufen, die sich darauf beziehen, ob morgen ein Feiertag/Wochenende/freier Tag ist, oder nicht.

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Papaloewe

Zitat... Könnte ja Papalöwe mal testen.

Getestet und läuft wie erwartet auch mit configdb  ;)
Vielen Dank.

chq

Ich muss doch auch nochmal was fragen. Otto, ich habe Deinen Code von hier genommen (https://forum.fhem.de/index.php/topic,98268.msg916202.html#msg916202) und holiday2we kommasepariert um urlaub ergänzt. Wenn ich unter holiday2we auf urlaub klicke, komme ich auf das neue erstellte Holidaydevice.

Für den heutigen Tag steht bei mir unter dem Tab "Everything -> holiday" Folgendes:

<bisherige Holidaydatei> none
urlaub Urlaub

Das ist auch richtig so, weil ich gestern über einen Klick auf den Dummy definiert hatte, dass heute ein Urlaubstag sein soll.

Leider hat das die Hausautomation nicht interessiert; sprich sie hat sich so verhalten, wie wenn ein gewöhnlicher Arbeitstag wäre.

Woran kann das liegen?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

Otto123

was sagt denn {$we} in der FHEM Kommandozeile?
gib mal ein list urlaub
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

chq

1

Internals:
   FUUID      5c824ecf-f33f-b9fb-6f3c-713861a9a7fee280
   HOLIDAYFILE ./FHEM/urlaub.holiday
   NAME       urlaub
   NR         81
   READONLY   0
   STATE      Urlaub
   TRIGGERTIME 1552518002.04766
   TYPE       holiday
   READINGS:
     2019-03-13 00:00:02   state           Urlaub
     2019-03-13 00:00:02   tomorrow        none
     2019-03-13 00:00:02   yesterday       none
Attributes:
   comment    Dieses Device wird benötigt, um folgende Funktionalität gewährleisten zu können: "Morgen frei?"

Hierfür benötigte Devices in Summe: Dummy, Notify, Holiday


Das passt eigentlich, oder? Ich denke, dass Du denkst, das der Beweis hiermit erbracht ist, dass es eigentlich so passt. Liege ich da richtig?  :D

Gruß Chris

Edit: Hab grad nochmal einen Test gemacht:

DOELSEIF ([10:45|AT]) ()

Das hat eben ausgelöst, trotz gestern für heute definiertem Urlaubstag.  :(

Wenn ich das ,urlaub aus holiday2we entferne, ergibt {$we} 0.
Wenn ich das ,urlaub wieder der holiday2we hinzufüge, ergibt {$we} 1.
So einfach wie möglich, so kompliziert wie nötig

Otto123

aus meiner Sicht ist das ok und passt. Warum das DOIF auslöst weiß ich nicht.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz