FHEM Forum

FHEM => Automatisierung => Thema gestartet von: bicmac am 23 Dezember 2020, 10:56:22

Titel: Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: bicmac am 23 Dezember 2020, 10:56:22
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;

Titel: Antw:Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: Otto123 am 23 Dezember 2020, 11:09:35
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
Titel: Antw:Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: rudolfkoenig am 23 Dezember 2020, 11:53:05
Zusaetzlich(!) wuerde mich interessieren, woher die Hypothese kommt, dass notify was nicht uebergeben wuerde.
Aus der Fehlermeldungen kann ich das nicht ableiten.
Titel: Antw:Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: MadMax-FHEM am 23 Dezember 2020, 12:22:34
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
Titel: Antw:Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: bicmac am 23 Dezember 2020, 12:32:35
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.
Titel: Antw:Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: MadMax-FHEM am 23 Dezember 2020, 13:08:19
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
Titel: Antw:Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: Otto123 am 23 Dezember 2020, 13:41:35
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  (https://heinz-otto.blogspot.com/2019/01/kalender-in-fhem-auf-bestimmte-termine.html)auch mal ein paar Aktionen direkt aus dem Kalender umgesetzt.
Titel: Antw:Notify übergibt nicht $ETVPART0 und $EVTPART1 an Funktion in 99_MyUtils
Beitrag von: betateilchen am 24 Dezember 2020, 11:08:25
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"?)