BW Ferien für AutoShutter Control, wegen isWE

Begonnen von D3ltorohd, 19 Mai 2024, 11:10:39

Vorheriges Thema - Nächstes Thema

TomLee

Ok. Passt ja dann.

Wo drückt nun der Schuh ?
Hast du die Funktion in der Datei ergänzt und sie mal mit meinem gezeigten Beispiel für die Befehlszeile aufgerufen ?
Wird die BW_Ferien.holiday erstellt ?
Dein Calendar-Device heißt doch BW_Ferien ?

Warum kommt dazu keine Rückmeldung ?

D3ltorohd

#16
Zitat von: TomLee am 19 Mai 2024, 17:31:28
ZitatDort kopiere ich einfach den Code von oben rein ?

Ja.

Nein. Hast du nicht das Wiki gelesen ?

Denkfehler von mir, hast Du die Datei auch als 99_myUtils.pm gespeichert ?
Was steht im Logfile nachdem du ein
"ls -l ./FHEM/*myUtils.pm" in der Befehlszeile ausführst ?



Danach kannst in der Befehlszeile oben in FHEM dann so testen:
{myCalendar2Holiday("BW_Ferien","Pfingstferien")}
In opt/fhem/FHEM sollte dann eine BW_Ferien.holiday zu finden sein.

Genau, so gemacht wie du geschrieben hast. Datei wurde erstellt und folgendes steht drin.

# Created by myCalendar2Holiday on 22.05.24, 18:52
# get BW_Ferien events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=10,from=-10d,to=100d filter:field(summary)=~"Pfingstferien"
4 2024-05-21 2024-05-31 Pfingstferien (11d)

Indem Fall soweit erst mal funktionsfähig richtig ? Reagiert denn FHEM jetzt auf die BW.Ferien.holiday Datei ? Oder muss ich da noch irgendwo was machen ? Muss ich das jetzt jedes mal von Hand ausführen, damit dort was hinein geschrieben wird ?

Jetzt sollte er aber alle Ferien finden, die der Calender hat, dann müsste ich beim Summary was ändern, nur was mit Ferien oder so ähnlich. Des weiteren würde ich das gerne in die bw.holiday schreiben lassen, da ich diese schon habe und auch als Device funktioniert.
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

TomLee

ZitatIndem Fall soweit erst mal funktionsfähig richtig ?

Ja.

ZitatReagiert denn FHEM jetzt auf die BW.Ferien.holiday Datei ?

Hab deine Beiträge nur überflogen (und nur darum kann ich dir jetzt antworten), du machst doch jetzt schon Jahre deswegen rum ?
Ist dir nicht in Erinnerung das im global-Device im Attribut holiday2we diese holiday-Definition jetzt ergänzt gehört ?
Dann sollte mit ASC alles passen ?
Hab ich bis jetzt so verstanden, genutzt hab ich das bisher noch nie.

ZitatMuss ich das jetzt jedes mal von Hand ausführen, damit dort was hinein geschrieben wird ?

Wie oft änderst Du denn was am Kalender ?
Man könnte die Funktion mit einer at-Defintion in regelmäßigen aufrufen ?

ZitatJetzt sollte er aber alle Ferien finden, die der Calender hat, dann müsste ich beim Summary was ändern, nur was mit Ferien oder so ähnlich. Des weiteren würde ich das gerne in die bw.holiday schreiben lassen, da ich diese schon habe und auch als Device funktioniert.

Da weiß ich gerade nicht was und wo ich dazu was sagen soll, hab mich mit dem Thema nie tiefer beschäftigt, da muss ich noch einige Tage drüber schlafen.

TomLee

#18
ZitatDes weiteren würde ich das gerne in die bw.holiday schreiben lassen, da ich diese schon habe und auch als Device funktioniert.

Hallo,

zwei eine Fragen dazu. Pflegst du in deiner bw.holiday weitere Termine oder hat die einfach nur den Inhalt wie sie FHEM bereitstellt ?
Und warum die Feiertage nicht gleich im Kalender eintragen ?


D3ltorohd

Zitat von: TomLee am 26 Mai 2024, 14:03:08
ZitatDes weiteren würde ich das gerne in die bw.holiday schreiben lassen, da ich diese schon habe und auch als Device funktioniert.

Hallo,

zwei eine Fragen dazu. Pflegst du in deiner bw.holiday weitere Termine oder hat die einfach nur den Inhalt wie sie FHEM bereitstellt ?
Und warum die Feiertage nicht gleich im Kalender eintragen ?



Also ich habe die genutzt um händisch dort die Ferien ein zu tragen. Dann klappt es auch. Mit der anderen hab ich es noch nicht versucht. Hätte halt gern, das er jetzt die Daten aus dem Kalender nun mit in die bw.holiday einträgt. Aber das raff ich nicht.

Naja, wenn ich das Calendar Device nutze, kann ASC damit nichts anfangen, oder das System an sich. Damit reagiert isWE nicht.
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

TomLee

ZitatNaja, wenn ich das Calendar Device nutze, kann ASC damit nichts anfangen, oder das System an sich. Damit reagiert isWE nicht.

Mit der BW.Ferien.holiday-Datei i.V.m. einer holiday-Definition die in dem Attribut holiday2we eingetragen ist, sollte das doch jetzt klappen ? ? ?

ZitatHätte halt gern, das er jetzt die Daten aus dem Kalender nun mit in die bw.holiday einträgt.

Dazu hab ich (Programmierlaie) mir was überlegt.
Wenn Du die Funktion wie unten rot hervorgehoben anpasst und im dritten Parameter des Funktionsaufruf von myCalendar2Holiday einen Namen einträgst der den Namen einer der mit FHEM ausgelieferten holiday-Dateien matcht, bspw. {myCalendar2Holiday("BW_Ferien","Pfingstferien","bw")} dann werden die Daten aus dem Kalender und aus der /opt/fhem/FHEM/holiday/bw.holiday nach /opt/fhem/FHEM/bw.holiday geschrieben. Sonst verhält sich die Funktion wie immer (hoff ich  ;D ).
Damit hättest meinem Verständnis nach deine automatisierte Ergänzung der bw.holiday. Händisch ergänzen in der Datei ist dann aber nicht mehr, der Inhalt ist beim nächsten Aufruf der Funktion mit drittem Parameter der matcht weg.

Ein erfahrener (FHEM)-Programmierer mag das anders lösen (Pfadangaben wurden schon kritisiert), es tut aber zumindest so wie ich es mir vorgestellt hatte und soll nur einen von vielen Lösungswegen darstellen:

Zitatsub myCalendar2Holiday {
  my $calname    = shift // return;
  my $regexp    = shift // return;
  my $targetname = shift // $calname;
  my $field      = shift // "summary";
  my $limit      = shift // 10;
  my $from      = shift // q{-10d};
  my $to        = shift // q{100d};

  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) =  localtime(gettimeofday());
  my $getstring = $calname . ' events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=' . "${limit},from=${from},to=$to filter:field($field)=~\"$regexp\"";
  my @holidaysraw = split m{\n}xms, CommandGet( undef, $getstring );

  my @holidays;
  my @singledays;

  for my $holiday (@holidaysraw) {
    my @tokens = split (" ",$holiday);

    my $endsecond = $tokens[2]-1;
    my @end_arr = localtime($endsecond);


    $tokens[2] = strftime "%Y-%m-%d", localtime($endsecond);

    my $severalDays = $tokens[2] eq $tokens[1] ? 0 : 1;
    $holiday = join(' ', @tokens);
    if (!$severalDays) {
      $tokens
  • = 1;
      splice @tokens, 2, 1;
      $holiday = join(' ', @tokens);
      push (@singledays, $holiday);
    } else {
      push (@holidays, $holiday);
    }
  }
  push @holidays, @singledays;
  unshift (@holidays, "# get $getstring");
  my $today = strftime "%d.%m.%y, %H:%M", localtime(time);
  unshift (@holidays, "# Created by myCalendar2Holiday on $today");
 
 
  my @hfn = glob("/opt/fhem/FHEM/holiday/*.holiday");
  my @mhfn = map { substr($_, 23) } @hfn;
 
  for my $mtn (@mhfn) {
  if ($mtn =~ /$targetname\.holiday/) {
  my ($error, @content) = FileRead("./FHEM/holiday/$mtn");
  push @holidays, @content;
  FileWrite("./FHEM/${targetname}.holiday",@holidays);
  }
  else
  {
  FileWrite("./FHEM/${targetname}.holiday",@holidays);
  }

  }


Beta-User

Zitat von: D3ltorohd am 26 Mai 2024, 14:58:13Hätte halt gern, das er jetzt die Daten aus dem Kalender nun mit in die bw.holiday einträgt. Aber das raff ich nicht.
Das macht es m.E. auch schlichtweg schwieriger!

Was ist das eigentliche Problem mit einem weiteren holiday-Device für diesen Zweck? Oder alternativ, falls auch die "anderen" Daten aus demselben Calendar-Device kommen könnten: Die regex einfach anpassen, dass alle betreffenden Infos extrahiert werden? Kannst ja "ferien" mit "Urlaub" ergänzen oä.....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

juergen012

was ist damit?
ASC_Time_Up_WE_Holiday - Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet). (default: 08:00) ACHTUNG!!! in Verbindung mit Brightness für ASC_Up muss die Uhrzeit kleiner sein wie die Uhrzeit aus ASC_Time_Up_Late !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
Fhem unter Proxmox

D3ltorohd

Also ich werd jetzt einfach die Datei erstellen lassen und füge die noch mal als Holiday mit dazu. Nur hab ich grad ein Problem. Wenn ich den Command fürs Erstellen eintippe, steht folgendes in der erstellten Datei.

  GNU nano 7.2                                                                                      Schulferien.holiday                                                                                               
# Created by myCalendar2Holiday on 29.05.24, 19:21
# get Schulferien events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=10,from=-10d,to=100d filter:field(summary)=~"ferien"
Please define 1970-01-01 first

Das steht in der utils drin.

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

sub myCalendar2Holiday {
  my $calname    = shift // return;
  my $regexp    = shift // return;
  my $targetname = shift // $calname;
  my $field      = shift // "summary";
  my $limit      = shift // 10;
  my $from      = shift // q{-10d};
  my $to        = shift // q{150d};

  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) =  localtime(gettimeofday());
  my $getstring = $calname . ' events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=' . "${limit},from=${from},to=$to filter:field($field)=~\"$regexp\"";
  my @holidaysraw = split m{\n}xms, CommandGet( undef, $getstring );

  my @holidays;
  my @singledays;

  for my $holiday (@holidaysraw) {
    my @tokens = split (" ",$holiday);

    my $endsecond = $tokens[2]-1;
    my @end_arr = localtime($endsecond);


    $tokens[2] = strftime "%Y-%m-%d", localtime($endsecond);

    my $severalDays = $tokens[2] eq $tokens[1] ? 0 : 1;
    $holiday = join(' ', @tokens);
    if (!$severalDays) {
      $tokens[0] = 1;
      splice @tokens, 2, 1;
      $holiday = join(' ', @tokens);
      push (@singledays, $holiday);
    } else {
      push (@holidays, $holiday);
    }
  }
  push @holidays, @singledays;
  unshift (@holidays, "# get $getstring");
  my $today = strftime "%d.%m.%y, %H:%M", localtime(time);
  unshift (@holidays, "# Created by myCalendar2Holiday on $today");
  FileWrite("./FHEM/holiday/${targetname}.holiday",@holidays);
}

1;

Als Command gebe ich

{myCalendar2Holiday("Schulferien","ferien")}
Sollte doch die vorhandene Datei einfach überschreiben oder ?
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

Beta-User

Dein neuer Calendar heißt "Schulferien"?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

D3ltorohd

#25
Das sollte die neue Holiday Datei werden. Schulferien.holiday. Mein Calendar heißt nach wie vor BW_Ferien.

EDIT:

Jetzt hab ichs verstanden. Ich wollte immer eine Datei mit Namens Schulferien.holiday. Damit ich daraus ein Holiday Device machen kann. Denn wenn ich define BW_Ferien holiday mache, motzt FHEM das es das schon gibt. Es gibt aber nur meinen Calendar mit diesem Name.

Ich hab jetzt in der Utils ${targetname} rausgelöscht und Schulferien geschrieben. In dem Command muss ja der Calendar mit angegeben werden und so wird auch die Datei erstellt.

Jetzt scheint es zu klappen so wie ich das will. Muss nur noch das Holiday Device erstellen.
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

Beta-User

Zitat von: D3ltorohd am 29 Mai 2024, 19:51:02Das sollte die neue Holiday Datei werden. Schulferien.holiday. Mein Calendar heißt nach wie vor BW_Ferien.
...dann solltest du deinen Funktionsaufruf entsprechend anpassen, ist doch logisch, oder?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

D3ltorohd

Vor lauter hin und her, total durcheinander gekommen. Er braucht ja dort nen Calendar den es gibt um dort zu schauen.

So sieht nun mein Holiday Device aus.

Du darfst diesen Dateianhang nicht ansehen.

Das muss noch ins global oder ? Aber wie setze ich das da mit rein ?

Kann ich irgendwo testen ob jetzt isWE gesetzt ist ?
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1

Beta-User

Total neu: Screenshots sind unerwünscht....

Und wie viele Attribute hat global?

Die Hilfe zu isWe() dürfte in der commandref zu finden sein.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

D3ltorohd

#29
Zitat von: Beta-User am 29 Mai 2024, 20:33:21Und wie viele Attribute hat global?
Wie meinst du das ? Ich hab hier von FHEM absolut keine Ahnung und ich komm auch irgendwie gar nicht klar mit dem FHEM. Tu mir da total schwer.

Auf jeden Fall hab ich jetzt mal das Holiday Device und den Command das er dort die Ferien aus dem calendar rein schreibt. Den Command sende ich jetzt per ioBroker zu fhem, dann klappt das auch schon mal.

Das (11d) hinter Pfingstferien stört nicht ?
Base : Intel NUC Debian 9, FHEM aktuell || Zigbee (Coordinator FW Z-Stack 1.2 default Koenkk) || MaxCUL (culfw V 1.67 nanoCUL868) || SIGNALduino 433MHz (V 3.3.2.1-rc8 ) || Shelly s1