Subroutine in DOIF mit mehreren Bedingungen

Begonnen von ErzGabriel, 27 März 2021, 13:31:50

Vorheriges Thema - Nächstes Thema

ErzGabriel

Hallo zusammen.
Ich habe mir heute ein Doif erstellt, mit zwei Bedingungen und einer Subroutine die dann durchgeführt werden soll. Der Trigger löst aus aber es kommt nichts ins Log.
Deswegen habe ich ein kleines Problem, ich finde keinen Fehler, das mag an meinen mangelhaften Perlkenntnissen liegen.

Könnte mal bitte ein Fachmann drüber schauen und mir sagen, wo der Fehler ist. Danke.

defmod doif_Pollen_Sauerland DOIF ([Sauerland] eq "on" and [12:15]) (set Telegrambot msg @Vxxx {pollen_sauerland()})
attr doif_Pollen_Sauerland do always
attr doif_Pollen_Sauerland group Vxxx
attr doif_Pollen_Sauerland room Telegram

Otto123

Hi,

dann solltest Du diesen Inhalt posten:
{pollen_sauerland()}

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

Christoph Morrison

Poste bitte ein list von doif_Pollen_Sauerland, ein list von Sauerland und natürlich pollen_sauerland().

ErzGabriel

Hier der List:

Internals:
   CFGFN     
   DEF        ([Sauerland] eq "on" and [12:15]) (set Jxxx msg @Vxxx {pollen_sauerland()})
   FUUID      605f09b8-f33f-18e0-2f1e-f1b81acb60d78594
   MODEL      FHEM
   NAME       doif_Pollen_Sauerland
   NOTIFYDEV  Sauerland,global
   NR         1142
   NTFY_ORDER 50-doif_Pollen_Sauerland
   STATE      cmd_1
   TYPE       DOIF
   VERSION    24095 2021-03-26 21:58:04
   READINGS:
     2021-03-27 12:15:00   cmd             1
     2021-03-27 12:15:00   cmd_event       timer_1
     2021-03-27 12:15:00   cmd_nr          1
     2021-03-27 12:14:36   mode            enabled
     2021-03-27 12:15:00   state           cmd_1
     2021-03-27 12:15:00   timer_01_c01    28.03.2021 12:15:00
   Regex:
     accu:
     cond:
       Sauerland:
         0:
           &STATE     ^Sauerland$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'Sauerland','STATE') eq "on" and ::DOIF_time_once($hash,0,$wday)
   days:
   do:
     0:
       0          set Jxxx msg @Vxxx {pollen_sauerland()}
     1:
   helper:
     DEVFILTER  ^global$|^Sauerland$
     NOTIFYDEV  global|Sauerland
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev   
     timerevent timer_1
     triggerDev
     timerevents:
       timer_1
     timereventsState:
       timer_1
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   internals:
     all         Sauerland:STATE
   interval:
   intervalfunc:
   localtime:
     0          1616926500
   realtime:
     0          12:15:00
   time:
     0          12:15:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1616926500:
       localtime  1616926500
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   group      Vxxx
   room       Telegram


Hier die Subroutine:
sub pollen_sauerland() {
my @Vxxx;
my $msg;
my @plants = ("Birke", "Erle", "Graeser", "Hasel", "Roggen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Pollen_Sauerland","fc2_$plant", "");
if ($pol !~ /white/) {
$msg .= "🌳 "  if ($plant =~ /Birke|Erle/);
$msg .= "🌿 "  if ($plant =~ /Graeser/);
$msg .= "🌾 "  if ($plant =~ /Roggen/);
$msg .= "🌰 "  if ($plant =~ /Hasel/);
$msg .= "$plant: leichte Belastung 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: mittlere Belastung 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: starke Belastung 🔴\n" if ($pol =~ /red/);
}
}
fhem("set Jxxx msg @Vxxx $msg") if ($msg);
}

Otto123

#4
Hi,

entweder rufst Du die sub auf und machst dort einen Return mit der Nachricht ODER du machst die Nachricht in der sub.
Jetzt machst Du eine Mischung!
So wie Deine Sub ist im DOIF einfach
({pollen_sauerland()})

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

ErzGabriel

Ich habe den Device mittlerweile umgebaut:

sub pollen_sauerland() {
my @Vxxx;
my $msg;
my @plants = ("Birke", "Erle", "Graeser", "Hasel", "Roggen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Pollen_Sauerland","fc2_$plant", "");
if ($pol !~ /white/) {
$msg .= "🌳 "  if ($plant =~ /Birke|Erle/);
$msg .= "🌿 "  if ($plant =~ /Graeser/);
$msg .= "🌾 "  if ($plant =~ /Roggen/);
$msg .= "🌰 "  if ($plant =~ /Hasel/);
$msg .= "$plant: leichte Belastung 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: mittlere Belastung 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: starke Belastung 🔴\n" if ($pol =~ /red/);
}
}
fhem("set Jxxx msg @Vxxx $msg") if ($msg);
}


Funktioniert aber auch nicht. Datum springt auf den nächsten Tag aber im Log steht nichts.

Otto123

funktioniert der Aufruf in der Kommanozeile?
{pollen_sauerland()}
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

ErzGabriel

Der Aufruf von:
({pollen_sauerland()})
funktioniert nicht.

Umgebaut auf:
defmod doif_Pollen_Sauerland DOIF ([15:36]) ({pollen_sauerland()})
funktioniert nicht.

Die Grundlage für meinen Aufbau:
defmod doif_Pollen DOIF ([18:00]) ({pollen()})
funktioniert seit zwei Jahren tadellos.

Könnte es dadran liegen, dass ich zwei Subroutinen habe, die fast gleich sind. Habe nur den Namen der Subroutine angepasst.

Otto123

Die Klammern sind Unsinn - die gehören nur zu DOIF!
Aber wenn das in der Kommandozeile nicht funktioniert ist Deine Sub falsch.
{pollen_sauerland()}
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

ErzGabriel

Lasse ich die Klammern weg, kriege ich unbekanntes Kommando zu lesen.

Wie bereits gesagt, funktioniert die Sub seit zwei Jahren bei meinem ersten Pollenversand.

Otto123

Dann gibt es die Sub nicht ::) wo hast Du die hingeschrieben?
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

ErzGabriel

In die 99myUtils.pm, die auch mit der üblichen Zeile
1;
endet.
Die Sub steht vor der Endzeile.

Christoph Morrison

Zeig bitte noch Pollen_Sauerland und Sauerland.

nb an die stumm Mitlesenden: Wenn ihr ein Problem habt, bitte postet gleich im ersten Beitrag alle Devices mit list, die als Trigger dienen oder mit [] (set magic) oder anderweitig abgefragt werden.

ErzGabriel

Pollen_Sauerland
defmod Pollen_Sauerland allergy PLZ
attr Pollen_Sauerland userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex reading15Name reading15Regex reading16Name reading16Regex reading17Name reading17Regex reading18Name reading18Regex reading19Name reading19Regex reading20Name reading20Regex reading21Name reading21Regex reading22Name reading22Regex reading23Name reading23Regex reading24Name reading24Regex reading25Name reading25Regex reading26Name reading26Regex reading27Name reading27Regex reading28Name reading28Regex reading29Name reading29Regex reading30Name reading30Regex reading31Name reading31Regex reading32Name reading32Regex timeout
attr Pollen_Sauerland event-on-change-reading Erle,Hasel,Loewenzahn,Graeser,Linde,Beifuss,Gaensefuss,Mais,Brennessel,Hafer,Roggen,Weizen,Spitzwegerich,Raps,Hopfen,Holunder,Ulme,Pappel,Weide,Birke,Eiche,Esche,Platane,Flieder,Ambrosia,Buche,Rotbuche,Ahorn,Nessel,Kiefer,Tanne,Fichte
attr Pollen_Sauerland group Pollenvorhersage
attr Pollen_Sauerland levelsFormat rc_dot@white,rc_dot@yellow,rc_dot@orange,rc_dot@red
attr Pollen_Sauerland reading01Name Erle
attr Pollen_Sauerland reading01Regex (?s)Erle.*?poll([0-3])
attr Pollen_Sauerland reading02Name Hasel
attr Pollen_Sauerland reading02Regex (?s)Hasel.*?poll([0-3])
attr Pollen_Sauerland reading03Name Loewenzahn
attr Pollen_Sauerland reading03Regex (?s)L.wenzahn.*?poll([0-3])
attr Pollen_Sauerland reading04Name Graeser
attr Pollen_Sauerland reading04Regex (?s)Gr.ser.*?poll([0-3])
attr Pollen_Sauerland reading05Name Linde
attr Pollen_Sauerland reading05Regex (?s)Linde.*?poll([0-3])
attr Pollen_Sauerland reading06Name Beifuss
attr Pollen_Sauerland reading06Regex (?s)Beifu..*?poll([0-3])
attr Pollen_Sauerland reading07Name Gaensefuss
attr Pollen_Sauerland reading07Regex (?s)G.nsefu..*?poll([0-3])
attr Pollen_Sauerland reading08Name Mais
attr Pollen_Sauerland reading08Regex (?s)Mais.*?poll([0-3])
attr Pollen_Sauerland reading09Name Brennessel
attr Pollen_Sauerland reading09Regex (?s)Brennessel.*?poll([0-3])
attr Pollen_Sauerland reading10Name Hafer
attr Pollen_Sauerland reading10Regex (?s)Hafer.*?poll([0-3])
attr Pollen_Sauerland reading11Name Roggen
attr Pollen_Sauerland reading11Regex (?s)Roggen.*?poll([0-3])
attr Pollen_Sauerland reading12Name Weizen
attr Pollen_Sauerland reading12Regex (?s)Weizen.*?poll([0-3])
attr Pollen_Sauerland reading13Name Spitzwegerich
attr Pollen_Sauerland reading13Regex (?s)Spitzwegerich.*?poll([0-3])
attr Pollen_Sauerland reading14Name Raps
attr Pollen_Sauerland reading14Regex (?s)Raps.*?poll([0-3])
attr Pollen_Sauerland reading15Name Hopfen
attr Pollen_Sauerland reading15Regex (?s)Hopfen.*?poll([0-3])
attr Pollen_Sauerland reading16Name Holunder
attr Pollen_Sauerland reading16Regex (?s)Holunder.*?poll([0-3])
attr Pollen_Sauerland reading17Name Ulme
attr Pollen_Sauerland reading17Regex (?s)Ulme.*?poll([0-3])
attr Pollen_Sauerland reading18Name Pappel
attr Pollen_Sauerland reading18Regex (?s)Pappel.*?poll([0-3])
attr Pollen_Sauerland reading19Name Weide
attr Pollen_Sauerland reading19Regex (?s)Weide.*?poll([0-3])
attr Pollen_Sauerland reading20Name Birke
attr Pollen_Sauerland reading20Regex (?s)Birke.*?poll([0-3])
attr Pollen_Sauerland reading21Name Eiche
attr Pollen_Sauerland reading21Regex (?s)Eiche.*?poll([0-3])
attr Pollen_Sauerland reading22Name Esche
attr Pollen_Sauerland reading22Regex (?s)Esche.*?poll([0-3])
attr Pollen_Sauerland reading23Name Platane
attr Pollen_Sauerland reading23Regex (?s)Platane.*?poll([0-3])
attr Pollen_Sauerland reading24Name Flieder
attr Pollen_Sauerland reading24Regex (?s)Flieder.*?poll([0-3])
attr Pollen_Sauerland reading25Name Ambrosia
attr Pollen_Sauerland reading25Regex (?s)Ambrosia.*?poll([0-3])
attr Pollen_Sauerland reading26Name Buche
attr Pollen_Sauerland reading26Regex (?s)Buche.*?poll([0-3])
attr Pollen_Sauerland reading27Name Rotbuche
attr Pollen_Sauerland reading27Regex (?s)Rotbuche.*?poll([0-3])
attr Pollen_Sauerland reading28Name Ahorn
attr Pollen_Sauerland reading28Regex (?s)Ahorn.*?poll([0-3])
attr Pollen_Sauerland reading29Name Nessel
attr Pollen_Sauerland reading29Regex (?s)Nessel.*?poll([0-3])
attr Pollen_Sauerland reading30Name Kiefer
attr Pollen_Sauerland reading30Regex (?s)Kiefer.*?poll([0-3])
attr Pollen_Sauerland reading31Name Tanne
attr Pollen_Sauerland reading31Regex (?s)Tanne.*?poll([0-3])
attr Pollen_Sauerland reading32Name Fichte
attr Pollen_Sauerland reading32Regex (?s)Fichte.*?poll([0-3])
attr Pollen_Sauerland room Wetter
attr Pollen_Sauerland stateFormat fc1_maximum
attr Pollen_Sauerland timeout 10
attr Pollen_Sauerland updateEmpty 1
attr Pollen_Sauerland updateIgnored 1
attr Pollen_Sauerland webCmd update


Sauerland:
defmod Sauerland dummy
attr Sauerland group Vxxx
attr Sauerland room Automatiken
attr Sauerland setList on off

Otto123

Zitat von: ErzGabriel am 27 März 2021, 15:52:30
In die 99myUtils.pm, die auch mit der üblichen Zeile
1;
endet.
Die Sub steht vor der Endzeile.
Ich hab jetzt Angst es geht bis Ostern  :o
Wenn Du den Befehl zum Aufruf der Sub {pollen_sauerland()} in die Kommandozeile wirfst und Du bekommst zurück das es ein unbekannter Befehl ist - dann
Gibt es die Sub nicht in Deiner 99_myUtils.pm -oder
Du hast die 99_myUtils.pm anders als über den eingebauten Editor editiert und kein reload ausgeführt.
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