Notify einmalige Ausführung vom Suchmuster

Begonnen von TomLee, 06 Juli 2020, 09:05:23

Vorheriges Thema - Nächstes Thema

TomLee

Moin,

kann man das Suchmuster eines notify auf einmalige Ausführung in einem Zeitraum beschränken wie es bei DOIF mit repeatsame möglich ist, mir fehlt der Weitblick sollte man das mit Perl irgendwie umgesetzt bekommen ?

MQTT2_Cube:action:.*
{if (($EVTPART1 eq 'wakeup') && ($hour =~ m,[5..8],)){fhem"saysonos |Temple| Guten Morgen ... . Die Außentemperatur beträgt zur Zeit [HF_Aussensensor_Vorderhaus:temperaturegerundet] °"};}


Gruß

Thomas

Otto123

Moin Thomas,

ZitatdisabledAfterTrigger <sekunden>
deaktiviert die Ausführung für <sekunden> nach dem das notify ausgelöst wurde.
und disabledForIntervals willst Du nicht nutzen?


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

TomLee

#2
 ;D könnte man wirklich drüber nachdenken.

Abgesehen davon das ich den Cube idR. gar nicht nutze (bis auf das wakeup  ;D) wär die Bedienung von TV und Jupiter um diese Zeit nicht nötig, aber vlt. doch einmal die von  Sonos.


MQTT2_Cube:action:.*
{if (($EVTPART1 eq 'wakeup') && ($hour =~ m,[5..8],)){fhem"saysonos |Temple| Guten Morgen ... Die Außentemperatur beträgt zur Zeit [HF_Aussensensor_Vorderhaus:temperaturegerundet] °"};
if (($EVTPART1 eq 'rotate_right') && (ReadingsVal($NAME,'to_side','') eq '0')){fhem"set TV_Wohnzimmer channelUp"};
if (($EVTPART1 eq 'rotate_left') && (ReadingsVal($NAME,'to_side','') eq '0')){fhem"set TV_Wohnzimmer channelDown"};
if (($EVTPART1 eq 'tap') && (ReadingsVal($NAME,'to_side','') eq '0')){ReadingsVal('TV_Wohnzimmer','state','') eq  'off' ? fhem"set MQTT2_IR_OG_Wohnzimmer power" : ReadingsVal('TV_Wohnzimmer','mute','') eq  'off' ? fhem"set TV_Wohnzimmer mute on" : fhem"set TV_Wohnzimmer mute off"};

if (($EVTPART1 eq 'rotate_right') && (ReadingsVal($NAME,'to_side','') eq '3')){fhem"set Sonos_Wohnzimmer Volume {([Sonos_Wohnzimmer:Volume]+3)}"};
if (($EVTPART1 eq 'rotate_left') && (ReadingsVal($NAME,'to_side','') eq '3')){fhem"set Sonos_Wohnzimmer Volume {([Sonos_Wohnzimmer:Volume]-3)}"};
if (($EVTPART1 eq 'tap') && (ReadingsVal($NAME,'to_side','') eq '3')){ReadingsVal('Sonos_Wohnzimmer','state','STOPPED') eq  'PLAYING' ? fhem"set Sonos_Wohnzimmer Pause" : fhem"set Sonos_Wohnzimmer Play"};

if (($EVTPART1 eq 'rotate_right') && (ReadingsVal($NAME,'to_side','') eq '4')){fhem"set MQTT2_Mi_Wecklicht hue {([MQTT2_Mi_Wecklicht:hue]-15)}"};
if (($EVTPART1 eq 'rotate_left') && (ReadingsVal($NAME,'to_side','') eq '4')){fhem"set MQTT2_Mi_Wecklicht hue {([MQTT2_Mi_Wecklicht:hue]+15)}"};
if (($EVTPART1 eq 'tap') && (ReadingsVal($NAME,'to_side','') eq '4')){fhem"set MQTT2_Mi_Wecklicht toggle"};
}


Jetzt kommt mir beim schreiben das vermutlich ein zusätzliches notify eine Lösung wäre.

TomLee

#3
disabledForIntervals weniger mein ich jetzt.

disabledAfterTrigger schon, allerdings dann in einem zusätzlichen notify

Hab mir ein Konstrukt ausgedacht welches mir über die Kommandozeile die korrekte Zeit in Sekunden zurückgibt, wenn jeden Tag erneut ab 5 Uhr einmal neu getriggert werden darf, jeder Kenner der richtigen Funktionen vermutlich aber die Hände über dem Kopf zusammenschlägt.

{(3600*(24-($hour)+5)-($min)*60)}

Wie muß ich, wenn das Konstrukt nicht ganz daneben ist

attr not_MQTT2_Cube_action_wakeup disabledAfterTrigger {(3600*(24-($hour)+5)-($min)*60)}

anpassen das nicht

{(3600*(24-($hour)+5)-($min)*60)}

im Attribut landet, habs schon mit verschiedenen Klammersetzungen versucht ?

Für einen Hieb in die richtige Richtung mit welchen Zeit-Funktion ich mich beschäftigen sollte wenn das Konstrukt total daneben ist wär ich dankbar.

So sieht bisher das zusätzliche notify aus:

defmod not_MQTT2_Cube_action_wakeup notify MQTT2_Cube:action:.* {if (($EVTPART1 eq 'wakeup') && ($hour =~ m,[5..8],)){fhem"saysonos |Temple| Guten Morgen ... Die Außentemperatur beträgt zur Zeit [HF_Aussensensor_Vorderhaus:temperaturegerundet]°;;attr not_MQTT2_Cube_action_wakeup disabledAfterTrigger {(3600*(24-($hour)+5)-($min)*60)}"};;}
attr not_MQTT2_Cube_action_wakeup disabledAfterTrigger {(3600*(24-($hour)+5)-($min)*60)}
attr not_MQTT2_Cube_action_wakeup group Cube
attr not_MQTT2_Cube_action_wakeup room Wohnzimmer



Otto123

mmh, da war der Wunsch wohl Vater des Gedanken
ZitatdisabledAfterTrigger <sekunden>
deaktiviert die Ausführung für <sekunden> nach dem das notify ausgelöst wurde.
da steht nicht {Perlausdruck} ich gehe davon aus, da gehen wirklich nur Zahlen.
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

TomLee

Nee, nee.

ich schreibe das was

{(3600*(24-($hour)+5)-($min)*60)}

in der Kommandozeile zürückgbt in das Attribut, kein Perl-Ausdruck in disabledAfterTrigger.

Das, was

{(3600*(24-($hour)+5)-($min)*60)}

zurückgibt, stimmt von der Syntax her vorne und hinten nicht ist mir schon klar, gibt aber in der Kommandozeile zurück was ich will.

Otto123

Also falls ich Dich richtig verstehe:
{my $ts=3600*(24-($hour)+5)-($min)*60;;fhem("attr not_MQTT2_Cube_action_wakeup disabledAfterTrigger $ts")}
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

TomLee

Ja, so werden die Sekunden ins Attribut geschrieben. Danke.

Das Bier war heute Abend aber so gut das ich gerade nicht mehr verstehe, warum der endende Wert jetzt nicht mehr 5 Uhr ergibt, komm ich aber noch drauf.  ;D

TomLee

#8
Alles gut. :P

Denkfehler

{FmtTime(20040)}

ergibt 06:34:00, also in 6 Stunden 34 Minuten, nicht 6 Uhr 34 Minuten  ;D


edit:

achso und merkwürdigerweise müssen es +4 statt +5 sein

{(3600*(24-($hour)+4)-($min)*60)}

Beta-User

Vielleicht noch ein interessanter Link aus meiner persönlichen Linkliste: https://forum.fhem.de/index.php/topic,76123.msg683725.html#msg683725

Sollte man doch kombinieren können mit disabledForIntervals, was hier dann drei "Etappen" ergäbe: 0-5 Uhr, 8-24 Uhr und ("heute schon gemeldet" ? 5:8)-8 Uhr?
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

TomLee

Sollte man doch kombinieren können mit disabledForIntervals

Ja, ein notify wär mir auch lieber, hab eigentlich schon drei.

list -r MQTT2_Cube_.*  :

define not_MQTT2_Cube_action notify MQTT2_Cube:action:.*\
{if (($EVTPART1 eq 'rotate_right') && (ReadingsVal($NAME,'to_side','') eq '0')) {fhem"set TV_Wohnzimmer channelUp"};;\
if (($EVTPART1 eq 'rotate_left') && (ReadingsVal($NAME,'to_side','') eq '0')){fhem"set TV_Wohnzimmer channelDown"};;\
if (($EVTPART1 eq 'tap') && (ReadingsVal($NAME,'to_side','') eq '0')){ReadingsVal('TV_Wohnzimmer','state','') eq  'off' ? fhem"set MQTT2_IR_OG_Wohnzimmer power" : ReadingsVal('TV_Wohnzimmer','mute','') eq  'off' ? fhem"set TV_Wohnzimmer mute on" : fhem"set TV_Wohnzimmer mute off"};;\
\
if (($EVTPART1 eq 'rotate_right') && (ReadingsVal($NAME,'to_side','') eq '1')) {fhem"set TV_Wohnzimmer volumeUp"};;\
if (($EVTPART1 eq 'rotate_left') && (ReadingsVal($NAME,'to_side','') eq '1')){fhem"set TV_Wohnzimmer volumeDown"};;\
if (($EVTPART1 eq 'tap') && (ReadingsVal($NAME,'to_side','') eq '1')){ReadingsVal('TV_Wohnzimmer','state','') eq  'off' ? fhem"MQTT2_IR_OG_Wohnzimmer power" : ReadingsVal('TV_Wohnzimmer','mute','') eq  'off' ? fhem"set TV_Wohnzimmer mute on" : fhem"set TV_Wohnzimmer mute off"};;\
\
\
if (($EVTPART1 eq 'rotate_right') && (ReadingsVal($NAME,'to_side','') eq '3')){fhem"set Sonos_Wohnzimmer Volume {([Sonos_Wohnzimmer:Volume]+3)}"};;\
if (($EVTPART1 eq 'rotate_left') && (ReadingsVal($NAME,'to_side','') eq '3')){fhem"set Sonos_Wohnzimmer Volume {([Sonos_Wohnzimmer:Volume]-3)}"};;\
if (($EVTPART1 eq 'tap') && (ReadingsVal($NAME,'to_side','') eq '3')){ReadingsVal('Sonos_Wohnzimmer','state','STOPPED') eq  'PLAYING' ? fhem"set Sonos_Wohnzimmer Pause" : fhem"set Sonos_Wohnzimmer Play"};;\
\
if (($EVTPART1 eq 'rotate_right') && (ReadingsVal($NAME,'to_side','') eq '4')){fhem"set MQTT2_Mi_Wecklicht hue {([MQTT2_Mi_Wecklicht:hue]-15)}"};;\
if (($EVTPART1 eq 'rotate_left') && (ReadingsVal($NAME,'to_side','') eq '4')){fhem"set MQTT2_Mi_Wecklicht hue {([MQTT2_Mi_Wecklicht:hue]+15)}"};;\
if (($EVTPART1 eq 'tap') && (ReadingsVal($NAME,'to_side','') eq '4')){fhem"set MQTT2_Mi_Wecklicht toggle"};;\
}
attr not_MQTT2_Cube_action group Cube
attr not_MQTT2_Cube_action room Wohnzimmer

define not_MQTT2_Cube_action_wakeup notify MQTT2_Cube:action:.* {if (($EVTPART1 eq 'wakeup') && ($hour =~ m,[5..8],)){my $ts=3600*(24-($hour)+4)-($min)*60;;fhem"saysonos |Temple| Guten Morgen  ... Die Außentemperatur beträgt zur Zeit [HF_Aussensensor_Vorderhaus:temperaturegerundet]°;;attr not_MQTT2_Cube_action_wakeup disabledAfterTrigger $ts"};;}
attr not_MQTT2_Cube_action_wakeup disabledAfterTrigger 79200
attr not_MQTT2_Cube_action_wakeup group Cube
attr not_MQTT2_Cube_action_wakeup room Wohnzimmer

define not_MQTT2_Cube_to_side notify MQTT2_Cube:to_side:.* \
{if ($EVTPART1 eq '0'){fhem"saysonos Teefau Programm"};;\
if ($EVTPART1 eq '1'){fhem"saysonos Teevau Lautstaerke"};;\
if ($EVTPART1 eq '2'){fhem"saysonos Licht"};;\
if ($EVTPART1 eq '3'){fhem"saysonos Sonos"};;\
if ($EVTPART1 eq '4'){fhem"saysonos Jupiter"};;\
}
attr not_MQTT2_Cube_to_side group Cube
attr not_MQTT2_Cube_to_side room Wohnzimmer

setstate not_MQTT2_Cube_action 2020-07-07 09:09:30
setstate not_MQTT2_Cube_action 2020-07-06 22:50:20 state active

setstate not_MQTT2_Cube_action_wakeup 2020-07-07 06:00:26
setstate not_MQTT2_Cube_action_wakeup 2020-07-06 22:53:24 state active

setstate not_MQTT2_Cube_to_side 2020-07-06 23:18:11
setstate not_MQTT2_Cube_to_side 2020-07-06 22:50:20 state active


not_MQTT2_Cube_to_side und not_MQTT2_Cube_action ginge zu kombinieren, wie ich es bis jetzt glaube verstanden zu haben, aber noch nicht getestet.

not_MQTT2_Cube_action_wakeup aber doch nicht !?
Wenn in der Zeit von 5-8 getriggert wird wär das komplette notify disabled, also keine Funktion mehr irgendwas zu bedienen, sehe nicht auf was du aus bist.

TomLee

Zitatdefine not_MQTT2_Cube_action_wakeup notify MQTT2_Cube:action:.* {if (($EVTPART1 eq 'wakeup') && ($hour =~ m,[6..22],)){my $ts=3600*(24-($hour)+4)-($min)*60;;fhem"saysonos |Temple| Guten Morgen  ... Die Außentemperatur beträgt zur Zeit [HF_Aussensensor_Vorderhaus:temperaturegerundet]°;;attr not_MQTT2_Cube_action_wakeup disabledAfterTrigger $ts"};;}

Warum kann ich im Ausführungsteil kein $name verwenden, weil ich im if bin ?

Otto123

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

TomLee

Nee, nee.

$NAME ist der Name von dem Gerät welches das Event erzeugt oder steh ich jetzt auf dem Schlauch ?

MadMax-FHEM

#14
Zitat von: TomLee am 07 Juli 2020, 11:40:37
Nee, nee.

$NAME ist der Name von dem Gerät welches das Event erzeugt oder steh ich jetzt auf dem Schlauch ?

Nein stimmt schon: also $NAME im notify ist der NAME des "feuernden" Devices ;)

EDIT: wenn ein passendes/gut gewähltes Namensschema zugrunde liegt kann man aber evtl. von "feuerndem Device" auf das "gewünschte Device" kommen... :)

EDIT: wobei ich zugegebenermassen nicht komplett gelesen habe ;) Sorry für's "Einmischen" 8)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)