Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist

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

Vorheriges Thema - Nächstes Thema

chq

Hallo,

ich mache an vielen Stellen Gebrauch von $twe.

Toll wäre es, wenn ich per Tastendruck (am Liebsten im Rahmen eines DOIFs) den nächsten Tag als "Wochenende/Feiertag" definieren könnte.
Wenn z.B. jmd. krank wird, soll er einfach dafür sorgen können, dass die Automatismen, die sonst am Wochenende vorherrschen auch am nächsten Tag anzutreffen sind.

Hat das evtl. schon Einer von Euch gemacht und kann mir helfen?

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

rudolfkoenig

Grobe Skizze einer Idee:
- eine urlaub holday Instanz definieren, sie zu holiday2we hinzufuegen
- dummy mit Knopf definieren, eine notify darauf ersetzt die holiday Datei, und liest sie neu ein mit "set urlaub refresh"
- holiday Datei ersetzen: "echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday" (braucht das unter Linux uebliche gnu date)

chq

Das ist für mich als Laie leider zu schwierig. Da ich etwas ganz Einfaches erreichen möchte, gehe ich (noch ::) ) davon aus, dass es auch leicht umzusetzen ist.

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

Byte09

#3
Zitat von: chq am 08 März 2019, 09:38:22
Das ist für mich als Laie leider zu schwierig. Da ich etwas ganz Einfaches erreichen möchte, gehe ich (noch ::) ) davon aus, dass es auch leicht umzusetzen ist.

Gruß Chris

eine andere möglichkeit wirst du wohl nicht haben , wenn du mit der $twe arbeiten möchtest.

es ist nicht kompliziert und geht wie von rudolf angedeutet.

habe es eben mal gebaut , mit der holidayinstanz 'FREE'.

im Grunde musst du es nur abschreiben , oder für dummy und notify ( oder DOIF ) umbauen. Ich habe es mit Mswitch umgesetzt.

gruss Byte09

rudolfkoenig

Statt { system("cmd") } empfehle ich "cmd", weil es kuerzer ist, und FHEM nicht blockiert.

Christoph Morrison

#5
Zitat von: rudolfkoenig am 08 März 2019, 09:21:17
Grobe Skizze einer Idee:
- eine urlaub holday Instanz definieren, sie zu holiday2we hinzufuegen
- dummy mit Knopf definieren, eine notify darauf ersetzt die holiday Datei, und liest sie neu ein mit "set urlaub refresh"
- holiday Datei ersetzen: "echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday" (braucht das unter Linux uebliche gnu date)

- Und dann noch ein Reload auf das holiday-Device damit die neuen Daten auch eingelesen werden?

Yeah, man sollte auch alles lesen ... müsste allerdings set urlaub reload heißen, nicht refresh.

Otto123

#6
Hab es mal gebaut, für copy and paste:
Die Symbole sind nur Beispielhaft und sollen bloß das Feedback beim Tastendruck geben.

zunächst das Attribute in global setzen oder wenn vorhanden mit Komma getrennt ergänzen!
attr global holiday2we urlaub
Der Zweite Teil für die Raw Def

defmod nty_MorgenUrlaub notify MorgenUrlaub:(set|del) {\
    if ($EVENT eq "set") {qx(echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday)};;\
    if ($EVENT eq "del") {qx(echo " " > FHEM/urlaub.holiday)};;\
fhem("set urlaub reload;;set MorgenUrlaub _$EVENT")\
}
attr nty_MorgenUrlaub room Test

defmod MorgenUrlaub dummy
attr MorgenUrlaub devStateIcon _del:system_fhem:set _set:RPi:del
attr MorgenUrlaub room Test
attr MorgenUrlaub webCmd del:set
set MorgenUrlaub del

defmod urlaub holiday
attr urlaub room Test


@Rudi: Dein Einwand funktioniert nicht, weil "cmd" die Pipe nicht unterstütz! Die Datei bleibt dann leer  :-[

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

chq

Zitat von: Otto123 am 08 März 2019, 10:33:46zunächst das Attribute in global setzen oder wenn vorhanden mit Komma getrennt ergänzen!

Wenn ich bereits ein Holidaydevice namens "bwFeiertageUrlaub" habe und dieses auch bereits unter global -> attr -> holiday2we eingetragen ist, sollte ich dann sinnvollerweise auch dieses Holidaydevice für mein Vorhaben verwenden, sprich ich kann diesen Schritt überspringen?

Zitat von: Otto123 am 08 März 2019, 10:33:46Der Zweite Teil für die Raw Def

Bzgl. "Raw Def" hab ich zwar das hier (https://wiki.fhem.de/wiki/Import_von_Code_Snippets) gefunden, kann dies aber nicht in Einklang mit dem von Dir angegebenen Code bringen. Von wo aus muss ich denn in diese Raw Def springen, um den Code dann dort einzutragen? Müsste ich mir hierfür zuerst ein Notify erstellen?

Wäre im Hinblick darauf, dass mein Holidaydevice ja "bwFeiertageUrlaub" heisst, das dann der richtige Code für mein Vorhaben? Ich habe lediglich "urlaub" durch "bwFeiertageUrlaub" ersetzt.

defmod nty_MorgenUrlaub notify MorgenUrlaub:(set|del) {\
    if ($EVENT eq "set") {qx(echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/bwFeiertageUrlaub.holiday)};;\
    if ($EVENT eq "del") {qx(echo " " > FHEM/bwFeiertageUrlaub.holiday)};;\
fhem("set bwFeiertageUrlaub reload;;set MorgenUrlaub _$EVENT")\
}


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

Damian

#8
Zitat von: chq am 08 März 2019, 09:07:22
Hallo,

ich mache an vielen Stellen Gebrauch von $twe.

Toll wäre es, wenn ich per Tastendruck (am Liebsten im Rahmen eines DOIFs) den nächsten Tag als "Wochenende/Feiertag" definieren könnte.
Wenn z.B. jmd. krank wird, soll er einfach dafür sorgen können, dass die Automatismen, die sonst am Wochenende vorherrschen auch am nächsten Tag anzutreffen sind.

Hat das evtl. schon Einer von Euch gemacht und kann mir helfen?

Gruß Chris

Du kannst es auch einfach beim DOIF über eine indirekte Wochentagangabe realisieren.

Wenn du eine Zeit für Wochenende definiert hast z. B. DOIF ([10:00|7])..., dann kannst du statt der 7 einen Dummy oder ein Reading angeben, welches du entsprechend ändern kannst

z. b.

DOIF ([10:00|[Wochentag]])...

mit set Wochentag 7 wird nur am Wochenende geschaltet

mit set Wochentag 78 wird am Wochenende und an Arbeitstagen geschaltet, also immer


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

#9
ZitatWenn ich bereits ein Holidaydevice namens "bwFeiertageUrlaub" habe und dieses auch bereits unter global -> attr -> holiday2we eingetragen ist, sollte ich dann sinnvollerweise auch dieses Holidaydevice für mein Vorhaben verwenden, sprich ich kann diesen Schritt überspringen?
Nein!
Die Idee beruht darauf einen zweiten holiday2we anzulegen, der beliebig modifiziert wird. Die Datei wird von dem notify überschrieben! Also probiere dein notify besser nicht!

Ich hab es doch so geschrieben? Wenn vorhanden mit Komma ergänzen.
attr global holiday2we bwFeiertageUrlaub,urlaub

Du kannst irgendeine Raw Def aufmachen, unter irgendeinem Gerät von mir aus unter global.
Den Inhalt im Fenster markieren und löschen, anschließend meinen Code hinkopieren und dann unten execute drücken.

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

rudolfkoenig

Zitat@Rudi: Dein Einwand funktioniert nicht, weil "cmd" die Pipe nicht unterstütz! Die Datei bleibt dann leer
Kann nicht nachvollziehen:
- erstens wollte ich kein pipe
- zweitens wird "" auch mit system implementiert, es wird nur '>> $currlogfile 2>&1 &' angehaengt
- drittens funktioniert Folgendes (gerade getestet):fhem> ":> FHEM/urlaub.holiday"
fhem> define urlaub holiday
fhem> define n notify n "echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday";;set urlaub reload
fhem> trigger n n
fhem> l urlaub
Internals:
   FUUID      5c824b35-f33f-c296-74dd-9c8de5e9e201dd75
   HOLIDAYFILE ./FHEM/urlaub.holiday
   NAME       urlaub
   NR         6
   READONLY   0
   STATE      none
   TRIGGERTIME 1552086002.53953
   TYPE       holiday
   READINGS:
     2019-03-08 12:03:44   state           none
     2019-03-08 12:03:44   tomorrow        Urlaub
     2019-03-08 12:03:44   yesterday       none
Attributes:




Papaloewe

@Otto123
Wie muss das Ganze denn aussehen, damit es auch mit der holiday-Datei innerhalb von configdb funktioniert?

Otto123

#12
hat denn die Einbindung einer Holiday Datei irgendetwas mit configdb zu tun? configdb ist doch die config.
Wo die drei Definitionen stehen ist doch egal.

Oder wird denn die holiday Datei als solche auch in der configdb abgelegt?
Edit:
Hab was gefunden: https://forum.fhem.de/index.php?topic=86243.15

Sorry, da ich keine configdb habe, kann ich da nicht helfen.  Aber von der Idee her, muss das dann "nur" der Befehl nicht die Datei sondern den Inhalt in der configdb modifiziert werden.  Eventuell gibt es da ganz andere Möglichkeiten?
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

Papaloewe

Ja, genau wie du schon berichtigt hast wird die holiday-Datei in der configdb abgelegt.
Die Textdate im Filesystem kann nach dem einmaligem Import gelöscht werden.

Jedoch erzeugt mit das Notify, bzw. der echo-ommand darin eine neue Textdatei im Dateisystem.

Papaloewe

Habe eine einfache Lösung gefunden:
Im Notify wird einfach zum Schluss jedesmal die Text-holiday-Datei wieder in die configdb importiert.
configdb fileimport /opt/fhem/FHEM/urlaubstag.holiday