Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils

Begonnen von bicmac, 23 Dezember 2020, 10:56:22

Vorheriges Thema - Nächstes Thema

bicmac

Hallo,
ich habe folgendes Scenario was ich mir aus einem Internetblog quasi kopiert habe.

Ich habe einen google Kalender in dem ich diverse Events eintrage. Nun sollen gewisse dummys im FHEM bei den EVENTS geschalten werden.
Irgendwie funktioniert das ganze aber nicht, da scheinbar der notofy das nicht aauber übergibt. Ich bekomme im Log folgende Meldungen:

2020.12.23 10:43:00 3: get Kalender_Google_FHEMSSTEUERUNG events limit:count=1 format:custom="$S" filter:uid=="7g7g4rah79kohoa8u200j7k2oagooglecom" : POOLFILTER
2020.12.23 10:43:00 1: ERROR evaluating my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{ KalenderAktion($EVTPART0, $EVTPART1) }: Can't locate object method "true" via package "POOLFILTER" (perhaps you forgot to load "POOLFILTER"?) at ./FHEM/99_MyUtils.pm line 38.

2020.12.23 10:43:00 3: notify_Kalender_Google_FHEMSSTEUERUNG return value: Can't locate object method "true" via package "POOLFILTER" (perhaps you forgot to load "POOLFILTER"?) at ./FHEM/99_MyUtils.pm line 38.

Hat ggf jemand eine Idee warum er das EVTPart0 und EVTPART1 nicht in der MyUtils auswerten kann?

hier enoch ein list der Devices bzw meine 99_MyUtils.


nternals:
   CFGFN     
   DEF        Kalender_Google_FHEMSSTEUERUNG:(start|end):.* { KalenderAktion($EVTPART0, $EVTPART1) }
   FUUID      5fe30e6c-f33f-34fb-c2b3-ca6599d9692fe74d
   NAME       notify_Kalender_Google_FHEMSSTEUERUNG
   NR         621
   NTFY_ORDER 50-Kalender_Google_FHEMSSTEUERUNG_notify_1
   REGEXP     Kalender_Google_FHEMSSTEUERUNG:(start|end):.*
   STATE      2020-12-23 10:43:00
   TRIGGERTIME 1608716580.01071
   TYPE       notify
   Helper:
     DBLOG:
       state:
         DBLogging:
           TIME       1608715884.6819
           VALUE      active
   READINGS:
     2020-12-23 10:32:48   state           active
Attributes:
   DbLogExclude .*
   alias      notify_Kalender_Google_FHEMSSTEUERUNG
   room       ,SYSTEM->LOGIK->NOTIFY



package main;
use strict;
use warnings;
use POSIX;
sub
MyUtils_Initialize($$)
{
my ($hash) = @_;
}

#
# Kalenderfunktion zur zeitgesteuerten Schaltung von Devices
#
sub
KalenderAktion($$)
{
   my ($KalenderEreignis, $KalenderUids) = @_;
   my @uids=split(/;/,$KalenderUids);
   my $aktion;
   my @DeviceList = ("POOLFILTER","BESUCH"); #Einträge im Kalender
   my @DeviceNames = ("pool.steuerung.timer.dummy", "duGast"); #?~\bersetzung zum Device

   if($KalenderEreignis eq "start:") { $aktion = "on" } else { $aktion = "off" }

   #falls mehrere Termine gleichzeitig starten, diese nun durchlaufen
   foreach my $uid (@uids)
   {
      #Summary auslesen und prüfen, ob es sich um ein Device handelt
      #my $Device = fhem("get Kalender_Google_FHEMSSTEUERUNG summary $uid");
      my $Device = fhem("get Kalender_Google_FHEMSSTEUERUNG events limit:count=1 format:custom=\"\$S\" filter:uid==\"$uid\"");

      #falls das Device existiert, so wie es im Kalender steht kann die Schaltung direkt erfolgen
      if( defined($defs{$Device}) )
      {  fhem("set $Device $aktion"); }
      else
      {
         #wenn ein entsprechendes Device gefunden wird
         if (true { /$Device/ } @DeviceList)
         { fhem("set $DeviceNames[ first_index { /$Device/ } @DeviceList ] $aktion"); }
      }
   }
}

1;


Otto123

Hi,

zum Ersten der Hinweis: Übergib nicht $EVTPART sondern den kompletten $EVENT! $EVTPART ist uU problematisch.

Zum Zweiten: Die Fehlermeldung liegt primär an diesem Ausdruck if (true { /$Device/ } @DeviceList)den versteh ich nicht. :-[ Ich kenne dieses Konstrukt in Perl nicht.
Dein finaler FHEM Befehl:
Ich kenne auch die function first_index  nicht.
Ich denke auch nicht, dass Du Dein Array @Devicelist an den FHEM Befehl so übergeben kannst.

Du solltest die Perl Befehle einzeln testen, bevor Du es komplett zusammenpackst.

Das Beispiel aus der Doku zum Calendar "Schalte Aktoren an und aus" wolltest Du nicht einfach nachbauen? Das macht doch genau das was Du willst? Das kannst Du auch in die myUtils umsetzen.
https://fhem.de/commandref_DE.html#Calendar

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

rudolfkoenig

Zusaetzlich(!) wuerde mich interessieren, woher die Hypothese kommt, dass notify was nicht uebergeben wuerde.
Aus der Fehlermeldungen kann ich das nicht ableiten.

MadMax-FHEM

#3
Drum ist das erste was ich in der Sub mache: Logausgabe was "rein kommt"... ;)

Ebenso Logausgaben aller Variablen/Werte die ich "zusammenbastle" oder auslese...

Und wenn es dann funktioniert kann man die ja wieder auskommentieren...

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)

bicmac

danke euch, werd es mal einzeln nachstellen und mit Logausgaben versehen. Denke auch ich werd es direkt im Notify abhandeln und nicht in die S99_MyUtils auslagern. Sehe irgendwie darin momentan keinen Vorteil.

MadMax-FHEM

Wo denkst du liegt der Unterschied zu direkt im notify?

Ich sehe keinen Vorteil das direkt im notify zu machen...
...ich (persönlich) finde eine "Auslagerung" in myUtils deutlich "übersichtlicher"...
(und ich kann am "Programm schrauben" ohne ständug die fhem.cfg zu ändern)

Viel Erfolg, 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)

Otto123

Noch zu der ursprünglichen Aussage: "notify übergibt nicht ..." (was wahrscheinlich nicht stimmt) noch die Hilfestellung mit fürs Loggen. Das haben wir auch extra mal im Wiki zusammengetragen:
https://wiki.fhem.de/wiki/Notify

Und ich hatte hier auch mal ein paar Aktionen direkt aus dem Kalender umgesetzt.
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

Zitat von: Otto123 am 23 Dezember 2020, 11:09:35
Ich kenne auch die function first_index  nicht.

Das ist eine perl Standardfunktion aus dem Bereich array-Verarbeitung.

Man kann das schon alles so ähnlich machen wie vom TE per copy&paste versucht. Man sollte das aber nur so machen, wenn man auch versteht, was man da tut und vor allem, wenn man versteht, was der zusammenkopierte Code tut.

Das Problem ist doch hier gar nicht, dass $EVTPARTx nicht übergeben wird, sondern dass versucht wird, mit Methoden zu arbeiten, die es in dem Anwendungsfall schlichtweg nicht gibt. Steht doch auch eindeutig in der Fehlermeldung.

return value: Can't locate object method "true" via package "POOLFILTER" (perhaps you forgot to load "POOLFILTER"?)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!