Autor Thema: Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist  (Gelesen 47078 mal)

Offline chq

  • Full Member
  • ***
  • Beiträge: 479
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
« Letzte Änderung: 08 März 2019, 09:17:01 von chq »
So einfach wie möglich, so kompliziert wie nötig

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24882
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #1 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)

Offline chq

  • Full Member
  • ***
  • Beiträge: 479
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #2 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
« Letzte Änderung: 08 März 2019, 09:41:15 von chq »
So einfach wie möglich, so kompliziert wie nötig

Byte09

  • Gast
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #3 am: 08 März 2019, 09:58:59 »
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
« Letzte Änderung: 08 März 2019, 10:18:53 von Byte09 »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24882
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #4 am: 08 März 2019, 10:18:44 »
Statt { system("cmd") } empfehle ich "cmd", weil es kuerzer ist, und FHEM nicht blockiert.
Informativ Informativ x 2 Liste anzeigen

Offline Christoph Morrison

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1807
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #5 am: 08 März 2019, 10:32:41 »
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.
« Letzte Änderung: 08 März 2019, 10:40:54 von Christoph Morrison »

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 20152
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #6 am: 08 März 2019, 10:33:46 »
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 urlaubDer 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
« Letzte Änderung: 08 März 2019, 14:54:38 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline chq

  • Full Member
  • ***
  • Beiträge: 479
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #7 am: 08 März 2019, 12:02:01 »
zunä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?

Der 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
« Letzte Änderung: 08 März 2019, 12:03:34 von chq »
So einfach wie möglich, so kompliziert wie nötig

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8995
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #8 am: 08 März 2019, 12:05:20 »
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


« Letzte Änderung: 08 März 2019, 12:10:06 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 20152
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #9 am: 08 März 2019, 12:06:45 »
Zitat
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?
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
« Letzte Änderung: 08 März 2019, 12:11:56 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24882
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #10 am: 08 März 2019, 12:11:23 »
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:




Offline Papaloewe

  • Sr. Member
  • ****
  • Beiträge: 713
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #11 am: 09 März 2019, 19:34:13 »
@Otto123
Wie muss das Ganze denn aussehen, damit es auch mit der holiday-Datei innerhalb von configdb funktioniert?

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 20152
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #12 am: 09 März 2019, 19:39:44 »
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?
« Letzte Änderung: 09 März 2019, 19:46:01 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Papaloewe

  • Sr. Member
  • ****
  • Beiträge: 713
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #13 am: 09 März 2019, 19:54:15 »
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.

Offline Papaloewe

  • Sr. Member
  • ****
  • Beiträge: 713
Antw:Heute per Knopfdruck festlegen, das morgen kein Arbeitstag ist
« Antwort #14 am: 10 März 2019, 09:25:30 »
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