Hauptmenü

Holiday-Datei

Begonnen von Superposchi, 08 Januar 2023, 21:32:54

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: Superposchi am 10 Januar 2023, 08:53:33
Es geht um den Ausdruck nach dem in der Bedingung gesucht wird. Ist der Falsch oder Unvollständig greift die Bedingung ja nicht.
Wenn im STATE "Heilige Drei Könige, Jahreswechsel, Weihnachtszeit" drin steht und ich lediglich nach "Heilige Drei Könige" suche würde das DOIF ja nicht anschlagen
Ah, entschuldige bitte, war mir bisher nicht klar, dass es unter diesem Thread-Titel um DOIF geht.

Nach meinem (eher sehr begrenzten) Verständnis der Modulsyntax (die im übrigen sehr ausführlich in der DE-comamndref erläutert ist), dürfte ein einfaches "=" nicht passen, das ist eigentlich immer eine Zuweisung. Vielleicht klappt es mit "=~"...?
Falls du da nicht mit der Doku weiterkommst, solltest du entweder den Thread-Titel ändern und den Thread verschieben, oder einen neuen Thread aufmachen ;) .

Zitat von: Superposchi am 10 Januar 2023, 08:53:33
Also den Begriff Kleinteile verstehe ich in dem Zusammenhang nicht.
"Kleinteilig" meint: Du willst irgendeinen Zweig nur ausführen, wenn ein bestimmter Tag (1/365 bzw 1/366) im Jahr ist. Was ist an diesem einen Tag speziell?
Vermutlich hast du eher eine Liste mit Tagen, die du gleich behandeln willst... Dann wäre die Logik anders zu gestalten und am Ende wahrscheinlich übersichtlicher wie bei einer "irgendwo verstreuten" Sammlung von Schnippseln für einzelne Tage ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Superposchi

Nicht zwangsläufig um DOIF, aber irgendwo muss der Inhalt ja ausgewertet werden sonst macht das Modul generell wenig Sinn. Ich bevorzuge aber inzwischen DOIF weil es umfangreicher ist und mehr Möglichkeiten bietet.

Das = war ein Schnellschuss, meistens nutze ich ein eq.
Es ging aber grundsätzlich darum, dass ein = oder eq ja den exakten Suchbegriff finden muss. Wenn in der holiday aber mehrere kommagetrennte Texte für einen Tag kommen können würde die Bedingung ja nicht greifen. Ich kenne ja im Vorfeld nicht den kompletten String sondern nur den Namen des "(Feier)tags".

Ursprünglich ging es um eine Sonderprogrammierung der HUE-Elemente an den Weihnachtsfeiertagen. Da hatte mit Betateilchen mit Nachdruck das Holiday-Modul ans Herz gelegt.
Aktuell habe ich es einfach mit einem Datumsabgleich gelöst, also ist $md der xyz.

Damian

DOIF ([myholidaydevice:state] =~ "der gesuchte Feiertag") (...)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JoWiemann

Hm,

irgendwie komme ich nicht mehr so gaaanz mit.

Zunächst wird nach dem holyday Modul gefragt und wie es funktioniert
Dann, wie werden bewegliche Feiertage abgebildet
Dann, wie kann ich einen String in einem String suchen
Zwischendurch immer mal wieder, wie mache ich das mit DOIF

Aber. Was ist der der Use Case oder Neudeutsch, die User Story?

Also, was möchtest Du umsetzen und was sind Deine Akzeptanzkriterien für eine skizzierte Lösung?

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

betateilchen

Zitat von: JoWiemann am 10 Januar 2023, 13:35:59
irgendwie komme ich nicht mehr so gaaanz mit.

Aus dem gleichen Grund sitze ich schon lange auf dem Sofa, genieße mein Popcorn und beobachte das Ganz hier lachend.

Zitat von: JoWiemann am 10 Januar 2023, 13:35:59
Zunächst wird nach dem holyday Modul gefragt und wie es funktioniert
Dann, wie werden bewegliche Feiertage abgebildet
Dann, wie kann ich einen String in einem String suchen
Zwischendurch immer mal wieder, wie mache ich das mit DOIF

Das ist bei diesem Fragesteller nicht unüblich...
Irgendwann gibt man als Helfer einfach auf.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

Steht eigentlich im Post direkt über deinem im letzten Absatz.

Ursprünglich ging es um die "Sonder"-Programmierung meiner Hue-Devices an den Feiertagen und die Frage wie man dies in einem DOIF umsetzen kann.
Daraufhin kam von Betateilchen der Hinweis dies mit dem Holiday-Modul zu machen. Da dieses Modul für mich bis Dato unbekannt war habe ich es alternativ erstmal mit der $md Funktion des DOIF selbst gelöst.
Da ich aber Neugierig bin und stets dazu lernen möchte, habe ich mir das Holiday-Modul jetzt angesehen, woraus sich nach und nach diese Fragen ergeben haben.

Eigentlich typisch wenn man etwas Neues dazulernen, oder?

Betateilchen ist ja leider sofort angepisst wenn nicht alles so läuft wie er sich das vorstellt. Das andere Menschen auch anders denken ist für ihn halt unvorstellbar.

betateilchen

Zitat von: Superposchi am 10 Januar 2023, 18:50:19
Betateilchen ist ja leider sofort angepisst wenn nicht alles so läuft wie er sich das vorstellt.

Bei so einem Schwachsinn hilft nichtmal mehr Popcorn...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

JoWiemann

Zitat von: Superposchi am 10 Januar 2023, 18:50:19
Steht eigentlich im Post direkt über deinem im letzten Absatz.

Ursprünglich ging es um die "Sonder"-Programmierung meiner Hue-Devices an den Feiertagen und die Frage wie man dies in einem DOIF umsetzen kann.

Ok, dann mal ganz von Vorne. Was verstehst Du unter "Sonder"-Programmierung.

Vielleicht mal an einem meiner User Stories:

Ich möchte meine alten FS20 FHT80b durch Homematik IP HmIP-STHD Thermostate ersetzen. Da durch die FHT FS20 ST3 Funksteckdosen mit integriertem on-for-timer und off-for-timer gesteuert werden und diese Funktion aus Sicherheitsgründen weiter genutzt werden muss, sind die HmIP-STHD entsprechend in Fhem einzubinden.
Akzeptanzkriterien sind:
- alle Funktionen der alten FHT20b werden abgebildet
- die Möglichkeit der Nutzung eines Anwesenheits- und einen Abwesenheit-Profil ist gegeben
- die manuelle Veränderung der Zieltemperatur ist zeitlich begrenzt
- die Konfiguration für die Standardzieltemperatur und die zeitliche Begrenzung ist über FhemWeb möglich
- die Profile werden in der CCU3 konfiguriert

Das ist jetzt wirklich nur rudimentär und soll verdeutlichen, wie geholfen aber auch dabei gelernt werden kann.

Zum Schluss der Code eines notifiy, wie er aus dieser Anforderung entstanden. Ob dieser Optimal ist lässt sich trefflich diskutieren. Dies ist nur ein Teil, da auch noch ein Dummy Device dazu gehört und das Umschalten des Heizprofils bei verlassen des Hauses.

Grüße Jörg


TT_HM_Badezimmer.* {
   unless($EVTPART0 eq "hmstate:") {
     # return undef;
   }

   my $Bez = "act_TT_HM_Badezimmer";
   my $llev = 3;
 
   my $tt_hm_m_temp = ReadingsNum("TT_HM_Badezimmer", "measured-temp", 0, 1);
   my $tt_hm_d_temp = ReadingsNum("TT_HM_Badezimmer", "desired-temp", 10, 1);
   Log3 $Bez, $llev, "$NAME: $EVENT - mTemp: $tt_hm_m_temp <-> dTemp: $tt_hm_d_temp";

   my $FHB = ReadingsVal("FK_HM_Badezimmer", "hmstate", "open");
   my $THB = ReadingsVal("TK_HM_Badezimmer", "hmstate", "open");
   my $hst = ReadingsVal("HZ_ST_Badezimmer", "state", "");
   my $at_hst = ReadingsVal("at_HZ_ST_Bad", "state", "inactive");
   my $des_temp = ReadingsVal("cfg_TT_HM", "desired-temps-badezimmer", "17.0 19.0 21.0 22.0 22.5");
   my $des_chg  = ReadingsVal("cfg_TT_HM", "chg-badezimmer", "off");
   my $des_dur  = ReadingsVal("cfg_TT_HM", "duration-badezimmer", 30);
   my $hm = sprintf("%02d:%02d", $hour, $min);

   unless($des_temp =~ m/$tt_hm_d_temp/ ) {
      if ($des_chg eq "off") {
         Log3 $Bez, $llev, $NAME . ": desired temp: manuell verändert";
         fhem("set cfg_TT_HM chg-badezimmer on");
         my $Zeit_Stop = strftime("%H:%M",localtime(time() + ($des_dur * 60)));
         fhem("delete tme_TT_HM_Bad", 1);
         fhem('defmod tme_TT_HM_Bad at ' . $Zeit_Stop . ' {fhem("set TT_HM_Badezimmer auto");; fhem("set cfg_TT_HM chg-badezimmer off");; Log3 "' . $Bez . '", "' . $llev . '", "' . $NAME . ': desired temp: manuell zu auto";;}');
         fhem("attr tme_TT_HM_Bad room Badezimmer");
         fhem("set HZ_ST_Badezimmer on-for-timer 512");
      }   
   } else {
      fhem("set cfg_TT_HM chg-badezimmer off") if($des_chg eq "on");
   }

   if((round($tt_hm_m_temp, 0) < round($tt_hm_d_temp, 0)) && left($at_hst,4) ne "Next"){
      if($FHB ne "open" && $THB ne "open") {
        fhem("set at_HZ_ST_Bad active");
        fhem("set HZ_ST_Badezimmer on-for-timer 512");
        Log3 $Bez, $llev, $NAME . ": Termostat: Heizung ein";
      }
   } elsif((round($tt_hm_m_temp, 0) >= round($tt_hm_d_temp, 0)) && left($at_hst,4) eq "Next"){
      fhem("set at_HZ_ST_Bad inactive");
      fhem("set HZ_ST_Badezimmer off-for-timer");
      Log3 $Bez, $llev, $NAME . ": Termostat: Heizung aus";
   }
}

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Puschel74

#23
Zitat von: Superposchi am 09 Januar 2023, 23:37:51
Ich habe mir gerade das de_social File angesehen.
Wenn ich z.b. den 6. Jan auslesen lasse, wird Heilige Drei Tage, Jahreswechsel, Weihnachtszeit ausgegeben.

Wenn ich auf heilige drei Könige prüfen lasse muss ich das dann mit .* angeben?
Steht der Feiertagsname immer als erstes oder kann er auch mitten drin stehen? Dann müsste ja zusätzlich ein .* davor geschrieben werden.

Also müsste die Bedingung im DOIF so aussehen:
... DOIF [de_social] = ".*Heilige drei Könige.*" ...
Am 06.01. kann es nur Heilige 3 Könige geben - keine Weihnachtszeit und keinen Jahreswechsel.

Das zugehörige .holiday-Device (es kann durchaus mehrere geben) ist Tagesabhängig.
Es gib ein tomorrow, ein today und ein yersterday-Reading das man abfragen und auf das man prüfen kann.
Mir persönlich ist es in 48 Jahren noch nicht untergekommen das Weihnachten und Silvester und Heilige 3 Könige am selben Tag gewesen wären.
Also erschliesst sich mir der Sinn nicht ganz nach der Suche nach einem String im Reading eines Holiday-Devices.

Wie aber schon erwähnt wurde kann man gerne x-beliebige holiday-Devices anlegen und dann je nach Device auf ReadingsVal tomorrow oder today oder auch yesterday triggern und sich

- Erinnerungen an Geburtstage (hab ich als geburtstag.holiday) schicken,
- Erinnerung an Verlobungs- und Hochzeitstag (hab ich als schatz.holiday) schicken,
- beliebige Tage die einem wichtig sind (kann man als irgendwas.holiday benennen) schicken,
- und die übrigen Feiertage kann man doch locker in die vorhandenen .holiday unterbringen und dann
-- auf das Reading tomorrow im Device meinWeihnachten.holiday (so man diese Datei angelegt hat) schauen und die beliebigen Lampen danach schalten.
-- auf das Reading today im Device meinSilvester.holiday schauen und die Raketen passend um 23:59:59 starten.
Oder was auch immer man machen will ...
Und ja, die holiday-Dateien lassen sich doch glatt über FHEM bearbeiten  ;)

@Jörg
Langsam und gemütlich so wie eine lecker Havanna Cohiba
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Puschel74

Zitat von: betateilchen am 10 Januar 2023, 18:53:14
Bei so einem Schwachsinn hilft nichtmal mehr Popcorn...
Ich kann Whiskey und Zigarren anbieten
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Superposchi

@JoWiemann
Sonderprogrammierung bedeutet halt anders als üblich.
Beispielsweise ging die Weihnachtsbaumbeleuchtung mit Sonnenuntergang an. Davon abweichend am 1. und 2. Weihnachtstag aber schon fest um 10 Uhr.
Das Thema ist aber gelöst und braucht gar nicht weiter vertieft werden.

@Puschel74
Dann solltest du mal mit get den 6.1. im de_social testen wenn du davon so überzeugt bist. Desweoteren habe ich nicht Weihnachten und Silvester geschrieben, sondern Weihnachtszeit und Jahreswechsel. Einträge die für diverseste Daten in der de_social ausgegeben werden. Bei beiden an ca. 20 verschiedenen Tagen.
Die nächste Frage bezieht sich darauf was in dem Fall in der Bedingung als Vergleich eingetragen werden muss. Ist in meinen Augen ganz legitim, ansonsten müsste ich für jedes Datum das ich irgendwann mal in irgendeinem Device abfragen will den get im Holiday-Device prüfen.

Und um all das zu lernen stelle ich die Rückfragen weil das meine Art ist zu lernen.

Puschel74

Ich verwende die de_social.holiday nicht aber hab ich jetzt getestet.

Und ja, du hast recht, die de_social.holiday liefert mit get 01-06 Heilige Drei Könige, Jahreswechsel, Weihnachtszeit zurück.
Das ändert aber nichts daran das man eigene .holiday nehmen darf und dann in diesen eintragen kann was man möchte ... und darauf auch beliebig triggern kann.

Meine benutzte bw.holiday liefert mit get 01-06 nur Heilige Drei Könige zurück.
Dennoch benutze ich auch meine eigenen .holiday Dateien.

Du brauchst im holiday-Device nicht mit get umzurühren - das Device liefert dir im Reading tomorrow den morgigen "Feiertag" (von dir! definiert), im Reading today den heutigen "Feiertag" (von dir! definiert) und im Reading yesterday darfst du auch gern noch deine HUE-Lampen entsprechend schalten.

Fazit: Du darfst soviele .holiday anlegen wie du magst, du darfst auf soviele Ereignisse in diesen .holiday triggern wie du willst, und du darfst soviele Lampen unterschiedlich schalten wie du willst.
Du darfst das ganze aber auch in deinem DOIF mit deiner eigenen Programmierung lösen.
Das ist das schöne an FHEM - fühl dich frei und mach was du willst.

Ich werf noch ne Runde Cohiba rein und ... viel Spaß
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Superposchi

Das habe ich dank der Antworten auch alles inzwischen gelernt und hoffentlich verstanden.
Muss ich mal schauen wie ich es am Ende genau mache.

Aber was zur Hölle ist Cohiba? 😄

Superposchi

Das einzige was mich eventuell noch interessiert ist die Frage ob man das Device irgendwie umbenennen kann?
Habe es mit rename probiert, aber dann findet er das holiday-file nicht mehr. Und wenn ich dies auch umbenennen würde es ja nicht mehr bei einem Update aktualisiert. Also besteht da eine Möglichkeit?

Puschel74

#29
Zitat von: Superposchi am 10 Januar 2023, 23:07:02

Aber was zur Hölle ist Cohiba? 😄

Google hilft dir sicher weiter

Zitat von: Superposchi am 10 Januar 2023, 23:12:06
Das einzige was mich eventuell noch interessiert ist die Frage ob man das Device irgendwie umbenennen kann?
Habe es mit rename probiert, aber dann findet er das holiday-file nicht mehr. Und wenn ich dies auch umbenennen würde es ja nicht mehr bei einem Update aktualisiert. Also besteht da eine Möglichkeit?
Du kannst jedes Device in einen dir beliebigen Namen umbenennen - und dieses Device gehört dann dir allein.
Es wird durch ein update von FHEM nie wieder aktualisiert weil ... es gehört ja dir.

Nein, ich versuche das jetzt nicht in meinem Testsystem weil ... ich zu faul dafür bin.
... GN8 und viel Spaß mit FHEM
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.