Ferienhaus Kalender Dummy steuern

Begonnen von Starsurfer, 19 November 2021, 09:13:32

Vorheriges Thema - Nächstes Thema

Starsurfer

Moin,
ich habe ein Kalender für unser Ferienhaus angelegt, damit möchte ich einen Dummy steuern. Der Dummy soll nur anzeigen, ob das Ferienhaus belegt ist.

List Kalender:
Internals:
   DEF        ical url https://calendar.google.com/calendar/ical/XXXXXXXXXXXXXXXXXXXXX%40import.calendar.google.com/public/basic.ics 2600
   FUUID      618e8606-f33f-ae29-0140-1afc252464f9e08e
   NAME       FerienhausKalender
   NOTIFYDEV  global
   NR         364
   NTFY_ORDER 50-FerienhausKalender
   STATE      triggered
   TYPE       Calendar
   READINGS:
     2021-11-19 08:43:03   calname         https://www.traum-ferienwohnungen.de/ical/xxxxxxxxxxxxxxxxxx/47267.ics?provider=1
     2021-11-19 08:43:03   lastUpdate      2021-11-19 08:43:02
     2021-11-19 08:43:03   nextUpdate      2021-11-19 09:26:22
     2021-11-19 08:43:03   nextWakeup      2021-11-19 09:26:22
     2021-11-19 08:43:03   state           triggered
Attributes:
   DbLogExclude .*
   hideLaterThan 30d
   hideOlderThan 1d
   onCreateEvent { $e->{alarm}= $e->{start}-86400 }
   room       FEWO


Ein
get FerienhausKalender events format:custom="$A $T1-$T2"

ergibt:
17.11.2021 00:00 18.11.2021 00:00-28.11.2021 00:00
26.11.2021 00:00 27.11.2021 00:00-29.11.2021 00:00
01.12.2021 00:00 02.12.2021 00:00-11.12.2021 00:00
13.12.2021 00:00 14.12.2021 00:00-24.12.2021 00:00


Jetzt würde ich gerne ein DOIF anlegen, welches prüft, ob ein Termin für den heutigen Tag im Kalender steht und wenn ja, dann setzte den Dummy FWEO auf belegt, wenn nicht, dann Dummy Fewo auf unbelegt.

In den Beispielen, die ich bisher gefunden habe, wird immer ein bestimmter Betreff benötigt, um einen Dummy zu steuern. Der Betreff ist aber immer unterschiedlich und ich kann ihn nicht beeinflussen, da der Kalender von unserem Ferienhaus Portal zur Verfügung gestellt wird.

Wenn ich jetzt ein DOIF anlege mit folgendem Inhalt, funktioniert das dann so, wie ich mir das denke?
defmod FEWO_CHECK DOIF (defined fhem('get FerienhausKalender events limit:when=today'))\
(set FEWO Belegt)\
DOELSE\
(set FEWO Unbelegt)


FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Beta-User

...falls du auf dummy verzichten magst und stattdessen eine .holiday und ein holiday-Device verwenden könntest, wäre evtl. in https://forum.fhem.de/index.php/topic,85759.msg1167954.html#msg1167954 eine Lösungsmöglichkeit für das Problem zu finden.
Als regex müßte dann ein ".*" passen, wenn die summary beliebig ist.
Weiterer Vorteil: Du siehst die summary als state (zumindest, wenn ich das richtig im Kopf habe).
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

Otto123

Hi,

das funktioniert ohne dummy oder weitere Devices direkt im Calendardevice mit einem userReadings. Die Frage ist, wie es genau angezeigt werden soll: aktuell? Mit Vorlauf?
Ich habe ein Beispiel für die Abfalltonne, das lässt sich dafür abwandeln / vereinfachen.



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

Ein Calendar-device + ein dummy-device + ein DOIF-device.

Mal schauen, ob jemandem eine noch kompliziertere Lösung für eine so einfache Aufgabe einfällt.
Ich mach mal Popcorn.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

yersinia

#4
[OT]
Zitat von: betateilchen am 19 November 2021, 10:20:44Mal schauen, ob jemandem eine noch kompliziertere Lösung für eine so einfache Aufgabe einfällt.
Ich mach mal Popcorn.
Per cronjob und wget die Ical-abholen, das Ganze mit python parsen und in JSON konvertieren sowie lokal abspeichern und dann per MQTT client (via cronjob) an den FHEM MQTT2 Server senden; dort dann per notify drauf reagieren und einen Dummy befüllen, der ein DOIF auslöst?  :o ;D
Ich meine, man könnte noch eine datenbank zwischenhängen - was einfaches wie PostgreSQL oder CouchDB.
[/OT]
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Zitat von: yersinia am 19 November 2021, 10:27:10
[OT]Per cronjob und wget die Ical-abholen, das Ganze mit python parsen und in JSON konvertieren sowie lokal abspeichern und dann per MQTT client (via cronjob) an den FHEM MQTT2 Server senden; dort dann per notify drauf reagieren und einen Dummy befüllen, der ein DOIF auslöst?  :o ;D
[/OT]
Bitte dabei aber noch MQTT2_SERVER durch einen externen MQTT-Server ersetzen, (00_)MQTT+dummy+MQTT_BRIDGE verwenden, und dann das JSON durch expandJSON auspacken lassen :P
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

juergen012

#6
Hallo, ich mache das mit 2 notify:

defmod SwitchActorOn notify Google_privat:start:.* {my $reading="$EVTPART0";; my $uid= "$EVTPART1";; my $actor= fhem("get Google_privat summary $uid 1");; if(defined $actor) { fhem("set $actor on") }}
attr SwitchActorOn DbLogExclude .*
attr SwitchActorOn room Hilfsprogramme


defmod SwitchActorOff notify Google_privat:end:.* {my $reading="$EVTPART0";; my $uid= "$EVTPART1";; my $actor= fhem("get Google_privat summary $uid 1");; if(defined $actor) { fhem("set $actor off") }}
attr SwitchActorOff DbLogExclude .*
attr SwitchActorOff room Hilfsprogramme


wenn im  Google Kalender im Titel zb. Belegt eingetragen ist, wird der dummy  Belegt zu den eingetragenen Zeiten ein- und ausgeschaltet..
Gruß
Jürgen K.
Fhem unter Proxmox

Beta-User

Zitat von: juergen012 am 19 November 2021, 10:59:42
Hallo, ich mache das mit 2 notify:
Spielverderber....

Dafür muss man nicht kreativ sein, das steht doch so schon in der commandref...

Wobei man sich fragt, für was das mit "$reading" gut sein soll... "$uid" als Variable kann ich zu Anschaungszwecken noch nachvollziehen, aber die Kurzfassung wäre dann z.B.:
defmod SwitchActorOn notify Google_privat:start:.* { my $actor = fhem("get Google_privat summary $EVTPART1 1") // return;; fhem("set $actor on") }
Anmerkung zu "// return": Das ist der Perl-defined-or-Operator und eine Kurzschreibweise für "if !defined ..."
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

juergen012

Fhem unter Proxmox

Starsurfer

#9
Hm hab ich wieder zu kompliziert gedacht?

@Beta-User, bei deinem Beispiel muss in summary das DEVICE stehen, verstehe ich das richtig?
Zitat aus Device specific help:
ZitatStell Dir einen Kalender vor, dessen Zusammenfassungen (Betreff, Titel) die Namen von Devices in Deiner FHEM-Installation sind. Du willst nun die entsprechenden Devices an- und ausschalten, wenn das Kalender-Ereignis beginnt bzw. endet.
Denn das wäre ein Problem, wenn wir das Ferienhaus für uns selber blocken ist summary leer, das kann ich auch nicht ändern. Ansonsten besteht der Betreff immer aus den ersten Buchstaben von Vornamen und Nachnamen der Mieter.

get FerienhausKalender events format:custom="4 $T1 $t2 $S ($D)"
4 18.11.2021 00:00 1638054000 GH (10d)
4 27.11.2021 00:00 1638140400  (48h)
4 02.12.2021 00:00 1639177200 HG (9d)
4 14.12.2021 00:00 1640300400 HG (10d)


Holidays schaue ich mir mal an.
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Beta-User

Zitat von: Starsurfer am 19 November 2021, 12:00:07
@Beta-User, bei deinem Beispiel muss in summary das DEVICE stehen, verstehe ich das richtig?
Es ist das Beispiel aus der commandref, aber sonst: korrekt.

Zitat
Zitat aus Device specific help:Denn das wäre ein Problem, wenn wir das Ferienhaus für uns selber blocken ist summary leer, das kann ich auch nicht ändern. Ansonsten besteht der Betreff immer aus den ersten Buchstaben von Vornamen und Nachnamen der Mieter.
Dann kannst du ja mit etwas Perl den Fall "leer" abfangen und z.B. "$actor = 'wir selbst' if !$actor;;" da reinknödeln...

Ansonsten viel Spaß mit den Anregungen hier :) .
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

eisman

Hi,

meiner ist so

Kalendereintrag fhem Test on

im Calender attr forceEvents 1

cal.Wohnung.Google:start:.* {
my $reading = "$EVTPART0";
my $uid     = "$EVTPART1";
my $actor   = fhem("get cal.Wohnung.Google summary $uid");
my @Dev     = (split(' ', $actor));
if($Dev[0] eq "fhem") {
fhem("set $Dev[1] $Dev[2] $Dev[3];");
}
}


mfg
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Beta-User

...das mit "$reading" ist immer wieder lustig, und es würde mich auch interessieren, was bei diesem konkreten "summary" denn nach deiner Ansicht in "$Dev[3]" zu finden ist (ok, Fangfrage, es macht dann Sinn, wenn man anders strukturierte summarys hat... - aber dann würde ich eher ein shift auf das array machen und den Rest wieder mit "join q{ }, @Dev;" zusammensetzen.)

Hier noch eine 0/1-dummy-Lösung, dieses Mal für "start" und "end":
define n_BW_Ferien_start_end notify Familienkalender:changed:.*start|Familienkalender:changed:.*end {
  my $UID = $EVTPART1;;
  my $cmd = $EVTPART2;;
  my $MYACTOR = fhem('get Familienkalender events format:custom="$S" filter:uid=="'.$UID.'" limit:count=1') ;;
  $cmd = $cmd eq 'start' ? 1 : 0;;
  CommandSet(undef, "BW_Ferientag $cmd") if ($MYACTOR =~ /ferien/);;
}

PS: Falls das jetzt jemand mit den commandref-Beispielen vergleicht oder meint, man könne die regexp kürzer fassen - ja, geht, aber damit ist dann NOTIFYDEV weg...
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

Starsurfer

Also ich finde die ganzen Beispiele ja ganz nett und hilfreich, aber sie haben größtenteils nichts mit meiner Frage zu tun oder ich bin einfach zu blöd das zu verstehen...

Trotzdem danke für die vielen Beispiele.
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Beta-User

#14
Meine Güte...

define n_FEWO notify FerienhausKalender:changed:.*start|FerienhausKalender:changed:.*end {
  my $cmd = $EVTPART2;;
  my $MYACTOR = fhem('get FerienhausKalender events format:custom="$S" filter:uid=="'.$EVTPART1.'" limit:count=1') ;;
  $cmd = $cmd eq 'start' ? 'Belegt' : 'Unbelegt';;
  fhem("set FEWO $cmd");;
}

Edit: Da da ja sowieso nur die "passenden" Termine drin sind, kann man sich den Mittelteil auch ganz schenken - Ungetestet:
define n_FEWO notify FerienhausKalender:changed:.*start|FerienhausKalender:changed:.*end {
  fhem("set FEWO " . $EVTPART2 eq 'start' ? 'Belegt' : 'Unbelegt');;
}
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