[gelöst] Subaufruf aus Notify heraus will nicht klappen

Begonnen von Jupedi, 16 Mai 2021, 19:49:55

Vorheriges Thema - Nächstes Thema

Jupedi

Hallo,

das Notify soll ein Sub aufrufen und einige Attribute übergeben.
HM_Strommesser:.* {aktErtrag(ReadingsNum("HM_Strommesser","1.POWER",""), ReadingsNum("d_Strom_Pufferwerte","Maximale_Leistung_W",""), ReadingsNum("HM_Strommesser","Zaehlerstand_Solar_kWh",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Tagesbeginn_00Uhr",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Monatsbeginn_00Uhr",""))}

Ich habe es statt mit dem Trigger "HM_Strommesser:.*" auch schon nur mit "HM_Strommesser" versucht, ändert aber nichts.

Der HM_Strommesser ist ein HM-ES-TX-WM mit Infrarot.

Ich denke es liegt am Notify und nicht am Sub selbst.

2021.05.16 19:15:23 3: n_akt_Ertrag_Strom return value: Unknown command {aktErtrag(ReadingsNum("HM_Strommesser","1.POWER",""),, try help.

Der Logeintrag hilft mir gerade auch nicht weiter, "Unknown command" sagt mir in dem Zusammenhang nichts, es wird ja nur das Sub "aktErtrag" aufgerufen.

Das Sub berechnet nur ein paar Tages- und Monatswerte und weist sie zum Teil Systemvariablen der CCU zu.

sub aktErtrag

{

# alle Variablen u. Arrays der Teilsubs

my @Wert = @_;

my $Ertrag_heute;

my $Ertrag_Monat;


### Beginn Teil akt. Leistung und max. Leistung

if ($Wert[0] < 80)
{
   fhem("setreading d_Strom Solar_aktuelle_Leistung_W 0");
   fhem("set d_ccu var Solar_akt_power 0");
}
else
{
   fhem("setreading d_Strom Solar_aktuelle_Leistung_W $Wert[0]");
   fhem("set d_ccu var Solar_akt_power $Wert[0]");
}


if ($Wert[0] > $Wert[1])
{
   fhem("setreading d_Strom Maximale_Leistung_W $Wert[0]");
   fhem("set d_ccu var Solar_max_power $Wert[0]");
}


### Beginn Teil Ertrag heute

$Ertrag_heute = $Wert[2] - $Wert[3];


{

fhem ("setreading d_Strom Solar_Ertrag_heute_kWh $Ertrag_heute");

fhem ("set d_ccu var Solar_Ertrag_heute $Ertrag_heute");

}



### Beginn Teil Ertrag akt. Monat


$Ertrag_Monat = $Wert[2] - $Wert[4];


{

fhem ("setreading d_Strom Solar_Ertrag_diesen_Monat_kWh $Ertrag_Monat");

fhem ("set d_ccu var Solar_Ertrag_dieser_Monat $Ertrag_Monat");

}

}


# Ende Script aktErtrag


zur Vollständigkeit noch das List vom HM_Strommesser

Internals:
   DEF        REQ0109846
   FUUID      5f0c44b7-f33f-0821-ff48-fae97965f21ed3f8
   IODev      d_ccu
   NAME       HM_Strommesser
   NR         260
   STATE      Leistung: 65.0 W
   TYPE       HMCCUDEV
   ccuaddr    REQ0109846
   ccudevstate active
   ccuif      BidCos-RF
   ccuname    HM-ES-TX-WM REQ0109846
   ccutype    HM-ES-TX-WM
   channels   2
   firmware   1.0
   statevals  devstate
   READINGS:
     2021-02-11 10:47:46   0.LOWBAT        false
     2021-05-16 19:45:00   1.ENERGY_COUNTER 27733.9
     2021-05-16 17:01:22   1.GAS_ENERGY_COUNTER 0.0
     2021-05-16 17:01:22   1.GAS_POWER     0.0
     2021-05-16 19:45:00   1.POWER         65.0
     2021-05-16 17:00:55   IODev           d_ccu
     2020-07-13 13:55:12   R-LOCAL_RESET_DISABLE 0
     2021-05-16 19:45:00   Zaehlerstand_Solar_kWh 27.7
     2021-05-16 17:01:22   activity        alive
     2021-05-16 17:01:22   battery         ok
     2020-10-01 21:42:11   hmstate         unreachable
   hmccu:
     devspec    REQ0109846
     dp:
       0.AES_KEY:
         OVAL       1
         VAL        1
       0.CONFIG_PENDING:
         OVAL       false
         VAL        false
       0.DEVICE_IN_BOOTLOADER:
         OVAL       false
         VAL        false
       0.LOWBAT:
         OSVAL      ok
         OVAL       false
         SVAL       ok
         VAL        false
       0.RSSI_DEVICE:
         OVAL       1
         VAL        1
       0.RSSI_PEER:
         OVAL       197
         VAL        197
       0.STICKY_UNREACH:
         OVAL       false
         VAL        false
       0.UNREACH:
         OSVAL      alive
         OVAL       false
         SVAL       alive
         VAL        false
       0.UPDATE_PENDING:
         OVAL       false
         VAL        false
       1.BOOT:
         OVAL       0
         VAL        0
       1.ENERGY_COUNTER:
         OSVAL      27731.2
         OVAL       27731.200000
         SVAL       27733.9
         VAL        27733.900000
       1.GAS_ENERGY_COUNTER:
         OSVAL      0.0
         OVAL       0.000000
         SVAL       0.0
         VAL        0.000000
       1.GAS_POWER:
         OSVAL      0.0
         OVAL       0.000000
         SVAL       0.0
         VAL        0.000000
       1.POWER:
         OSVAL      72.0
         OVAL       72.000000
         SVAL       65.0
         VAL        65.000000
Attributes:
   IODev      d_ccu
   alias      HM_Strommesser
   ccureadingfilter (ENERGY_COUNTER|POWER)
   ccureadings 1
   event-min-interval 600
   event-on-change-reading .*
   event-on-update-reading 1.POWER
   room       HomeMatic,Strom
   stateFormat Leistung: 1.POWER W
   stripnumber 1
   userReadings Zaehlerstand_Solar_kWh none { (int(ReadingsVal("HM_Strommesser","1.ENERGY_COUNTER",0)/100))/10; }



Ich denke ich sehe grad den Wald vor Bäumen nicht.  :-[

(nur zur Info, Statistics habe ich bewusst nicht verwendet)
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Otto123

Hi,
ZitatDer Logeintrag hilft mir gerade auch nicht weiter, "Unknown command" sagt mir in dem Zusammenhang nichts, es wird ja nur das Sub "aktErtrag" aufgerufen.
Nach dem ersten Blick würde ich sagen, er findet Deine sub nicht! Wo steht die denn?

Funktioniert denn der Aufruf aus der FHEM Kommandozeile?
{aktErtrag(ReadingsNum("HM_Strommesser","1.POWER",""), ReadingsNum("d_Strom_Pufferwerte","Maximale_Leistung_W",""), ReadingsNum("HM_Strommesser","Zaehlerstand_Solar_kWh",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Tagesbeginn_00Uhr",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Monatsbeginn_00Uhr",""))}
Zu weiteren Fehlersuche: https://wiki.fhem.de/wiki/Notify

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

Setze mal die erste geschweifte Klammer in die gleiche  Zeile wie den Namen der Funktion

sub aktErtrag {
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Jupedi

merci für die "Spätschicht"  :D

@Otto123 Ausführungsteil

{aktErtrag(ReadingsNum("HM_Strommesser","1.POWER",""), ReadingsNum("d_Strom_Pufferwerte","Maximale_Leistung_W",""), ReadingsNum("HM_Strommesser","Zaehlerstand_Solar_kWh",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Tagesbeginn_00Uhr",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Monatsbeginn_00Uhr",""))}

funktioniert. Readings und ihre Zeiten ändern sich.

@betateilchen Werde ich morgen probieren, jetzt im Dunklen passiert von Seiten des Strommessers nix.

Ich habe das Script zusammen mit anderen, welche funktionieren, in einer Datei namens "99_myownUtils.pm" untergebracht.
Diese Teile haben andere Trigger, meist doif.

Ich habe das mal so angefangen, um mein persönliches Zeug von kopierten Sachen in der "99_myUtils.pm" zu trennen, um dort nix zu zerschießen.

Ich hänge den vollständigen Quelltext noch mal an, da ich doch mit einigen Sachen hantiere, die ich nicht vollständig durchsteige.
Ich probiere hier immer wieder Sachen aus, welche ich mir aus einer alten Perl-Schwarte angeeignet habe.

Die anderen Subs in der Datei funktionieren alle.

package main;
use strict;
use warnings;
use POSIX;


sub myownUtils_Initialize($$$$$$$$$)
{
   my ($hash) = @_;
}


#----------------------------------------
# 1. sub Maehzeiten
# 2. sub spieldauer
# 3. sub Strom_gestern (mit Vorschub der Vortageswerte und Subaufruf Wochentage)
# 4. sub aktErtrag
# 5. sub Ertrag_letzter_Monat
# 6. sub Wochentage
#----------------------------------------





#----------------------------------------
# 1. Beginn Script Maehzeiten

# Trigger/ hier fehlen noch die Namen der jeweils ausloesenden doifs/notifys


sub Maehzeiten


{


# definiert das Array "@akkMZ" und weist die Werte des notify dem Array zu

my @akkMZ = @_;



#Macht Funktion $wday und die anderen globalen Funktionen im Sub verfügbar

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);



#initialisiert das Array

my @Wochentagsdif;



#Berechnen der heutigen Zeitdifferenz

if ($wday == 0)
{
   $Wochentagsdif[0] = $akkMZ[0] - $akkMZ[6];
}
else
{       
   $Wochentagsdif[$wday] = $akkMZ[$wday] - $akkMZ[($wday - 1)];
}



# Rückgabe der Tagesmaehzeiten (Differenzstunden) an das entsprechende Dummy



my $Tag = "Tag_".$wday;

{
   fhem("setreading Maehzeit_taeglich_dummy $Tag $Wochentagsdif[$wday]");
}







#Schreiben der Logdatei
#
#
#öffnet das zu schreibende Logfile


my $erfolg=open(OUTFILE, ">>/opt/fhem/log/Maehzeiten2020.log");

#überprüft die erfolgreiche Öffnung des Logfiles

if(!$erfolg)
{
print "Kann file nicht öffnen\n";
exit 1;
}



my @wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");

#Berechnung der Datum- und Zeitstempeldaten, bzw. erzwingt zweistellige Anzeige

my $jahreszahl = 1900+$year;

my $monat = 1+$mon;

$monat = substr("00".$monat, -2, 2);

my $tag = substr("00".$mday, -2, 2);

my $stunde = substr("00".$hour, -2, 2);

my $minuten = substr("00".$min, -2, 2);

my $sekunden = substr("00".$sec, -2, 2);


# eigentlicher Schreibbefehl


print OUTFILE "$jahreszahl"."-"."$monat"."-"."$tag"."_"."$stunde".":"."$minuten".":"."$sekunden"." "."Maehzeit_taeglich_dummy"." "."$wochentage[$wday]".":"." "."$Wochentagsdif[$wday]\n";


close OUTFILE;


# Ende schreiben Log



}

# Ende Maehzeiten Sub




# -------------------------------------------------------------




# 2.  Spieldauer Balken VU+

# Trigger

sub spieldauer

{

   my $Wert;

   if ( $_[1] == 0 )

   {
       
       $Wert = 0;


   }

   else

   {

       $Wert = ($_[1]-$_[0])/$_[1];

   }


   {

   fhem ("setreading SATReceiver spieldauer_prozent $Wert");

   }

}


# Ende Spieldauerbalken VU+





#--------------------------------------------------------------




# 3. Beginn neues Stromscript Strom_gestern

# Trigger doif_Strom_gestern


sub Strom_gestern


{


#Macht Funktion $wday und die anderen globalen Funktionen im Sub verfügbar

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);




my @Strom = @_;

my $Ertrag_gestern;

my $tag;

my $Tag;

my $Nr;

my $Tg;

my $Readingname;



# Ruft das Unterprogramm zum Schreiben der Wochentagsüberschriften auf

Wochentage();


# (Vortageswerte)
# Schiebt die Tagesstromwerte der Neo Solar Seite eine Position weiter


$Tg = 6;

for($Nr = 3 ; $Nr <= 8 ; $Nr ++)

{

   $Strom[$Nr] = $Strom[$Nr + 1];
   
   $Readingname = "Solar_Ertrag_".$Tg;

   fhem ("set d_ccu var $Readingname $Strom[$Nr]");

   $Tg --;
   
}





# Berechnung des gestrigen Ertrags



$Ertrag_gestern = $Strom[0] - $Strom[1];
 

# Rückgabe des gestrigen Ertrags an dummy d_Strom

fhem("setreading d_Strom Solar_Ertrag_gestern_kWh $Ertrag_gestern");


# Rückgabe des Tagesendwertes an dummy d_Strom ins Reading des akt. Tages

# formatiert den Tag zweistellig


   $tag = sprintf("%01u",$wday);


# formatiert das userreading   

$Tag = "Ertrag_kWh_Tag_".$tag;

{
# hier ändert sich der Reading Name dynamisch
fhem ("setreading d_Strom $Tag $Ertrag_gestern");
# Wird ein zweites mal in ein Reading mit immer gleichen Namen geschrieben
fhem ("setreading d_Strom Solar_Ertrag_gestern_kWh $Ertrag_gestern");         
fhem ("setreading d_Strom_Pufferwerte  Stand_Tagesbeginn_00Uhr $Strom[0]");
fhem ("set d_ccu var Solar_Ertrag_gestern $Ertrag_gestern");

}


# Überprüfung ob ein neuer Maximalwert vorliegt

if($Ertrag_gestern > $Strom[2])
   {
   fhem ("setreading d_Strom Maximaler_Ertrag_Tag_kWh $Ertrag_gestern");
   fhem ("set d_ccu var Solar_Ertrag_max_Tag $Ertrag_gestern");
   }


}


# Ende Strom_gestern




#-------------------------------------------------------------------



# 4. Beginn Script Stromertrag_heute_Monat


sub aktErtrag

{



# alle Variablen u. Arrays der Teilsubs


my @Wert = @_;

#-----------------------------------------------------------------
# nur eingefügt, um zu sehen, was wirklich übergeben wird
{
   fhem("setreading d_Strom T0 $Wert[0]");
   fhem("setreading d_Strom T1 $Wert[1]");
   fhem("setreading d_Strom T2 $Wert[2]");
   fhem("setreading d_Strom T3 $Wert[3]");
   fhem("setreading d_Strom T4 $Wert[4]");

}
#-----------------------------------------------------------------

my $Ertrag_heute;

my $Ertrag_Monat;




### Beginn Teilsub akt. Leistung und max. Leistung

if ($Wert[0] < 80)
{
   fhem("setreading d_Strom Solar_aktuelle_Leistung_W 0");
   fhem("set d_ccu var Solar_akt_power 0");
}
else
{
   fhem("setreading d_Strom Solar_aktuelle_Leistung_W $Wert[0]");
   fhem("set d_ccu var Solar_akt_power $Wert[0]");
}



if ($Wert[0] > $Wert[1])
{
   fhem("setreading d_Strom Maximale_Leistung_W $Wert[0]");
   fhem("set d_ccu var Solar_max_power $Wert[0]");
}




### Beginn Teilsub Ertrag heute

$Ertrag_heute = $Wert[2] - $Wert[3];


{

fhem ("setreading d_Strom Solar_Ertrag_heute_kWh $Ertrag_heute");

fhem ("set d_ccu var Solar_Ertrag_heute $Ertrag_heute");

}



### Beginn Teilsub Ertrag akt. Monat


$Ertrag_Monat = $Wert[2] - $Wert[4];



{

fhem ("setreading d_Strom Solar_Ertrag_diesen_Monat_kWh $Ertrag_Monat");

fhem ("set d_ccu var Solar_Ertrag_dieser_Monat $Ertrag_Monat");

}



}


# Ende Script aktErtrag


#-------------------------------------------------------------------



# 5 .Ertrag letzter Monat



sub Ertrag_letzter_Monat

{
my $Monatswert;

my @Werte = @_;

$Monatswert = $Werte[0] - $Werte[1];




{

fhem ("setreading d_Strom Solar_Ertrag_Vormonat_kWh $Monatswert");

fhem ("set d_ccu var Solar_Ertrag_letzter_Monat $Monatswert");

fhem ("setreading d_Strom_Pufferwerte Stand_Monatsbeginn_00Uhr $Werte[0]");

}



if($Monatswert > $Werte[2])
   {
   fhem ("setreading d_Strom Maximaler_Ertrag_Monat_kWh $Monatswert");
   fhem ("set d_ccu var Solar_Ertrag_max_Monat $Monatswert");
   }




}



# Ende Ertrag letzter Monat



#-------------------------------------------------------------------


# 6. Beginn Script Wochentage

# Trigger aus sub Strom_gestern heraus

#Script schreibt mir den aktuellen Wochentag ganz nach rechts und die letzten
#sechs Tage links daneben



sub Wochentage

{


# Variablen und Arrays

#Macht Funktion $wday und die anderen globalen Funktionen im Sub verfügbar

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

my @Wt = ("So.","Mo.","Di.","Mi.","Do.","Fr.","Sa.");

my $n = $wday;

my $m;

my $WtNr;

my $Readingname;



# "for" Schleife wird von 0 bis -6 durchlaufen für die Tage der vergangenen Woche

for ($m=0;$m <=6;$m ++)

    {

    # $n wird jeweils um eins erhöht, weil trigger bereits um 23:55 ausgelöst und der Folgetag gebraucht wird

    if ($n+1-$m >=0) 

       {
       
       $WtNr = $n + 1 - $m;

       if ($WtNr > 6)

          {

          $WtNr = 0;

          }

       $Readingname = "SysVar_WtNr_".$m;
       
       fhem("set d_ccu var $Readingname $Wt[$WtNr]");

       }


    else

       {
       
       $WtNr = $n + 1 + 7 - $m;

       $Readingname = "SysVar_WtNr_".$m;
       
       fhem("set d_ccu var $Readingname $Wt[$WtNr]");

       }


    }


return;

}

#Ende Script Wochentage

#-------------------------------------------------------------------




1;



Morgen ist auch noch ein Tag




Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Otto123

#4
Moin,

wird denn die sub in dem notify ausgeführt und "nur" ein Fehler geloggt?

Das eventuelle "Problem" an deiner sub: Du gibst "irgendeinen" einen Wert zurück: den Wert Deiner letzten Berechnung. Besser wäre es einen definierten Wert zurück zu geben.
return q{};
Nur die Vermutung von Einem der auch nicht besonders gut in Perl ist ;)

Ansonsten fällt mir noch ein: Damit > HM_Strommesser:.*  < triggerst Du auf jeden Event des Gerätes. Ich habe keine HMCCU Geräte - aber bei CUL_HM Geräten ist das quasi ein no go, da treten so viele Events auf. Es wäre besser Du suchst Dir den Event aus, der wirklich den Schreibvorgang auslösen soll!
Schau Dir das im Eventmonitor an, dort kannst Du die Zeile auswählen und ein notify mit dem Trigger erzeugen lassen. Ich würde so tippen
HM_Strommesser:1.POWER:.*

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

Jupedi

return q{};
hab ich mal gemacht, hat nichts geändert.

HM_Strommesser:1.POWER:.*
Hatte ich auch schon mal so. Da ich meinen Kenntnissen nicht ganz traue, wollte ich erst mal so viele Events wie möglich.
Es werden auch alle 2 Minuten Logeinträge generiert. Ich dachte reduzieren kann ich immer noch, wenn es läuft.

Ich geh alles später noch mal durch und würde mich dann , vielleicht mit mehr Hinweisen, noch mal melden.
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Otto123

#6
Zitatwollte ich erst mal so viele Events wie möglich.
mMn völlig falsche Herangehensweise. Eventmonitor auf, schauen was passiert, Events möglichst reduzieren. Den einen Event, den man für die Funktion braucht auswählen, notify anlegen lassen und dann weitermachen.

In Deiner sub und Deinem Aufruf sehe ich nicht wirklich den Fehler der diese Nachricht auslöst. Kann es sein Du hast noch in einer anderen myUtils eine sub mit gleichem Namen?
Kannst Du / hast Du / den cmdalias grep definiert? (https://wiki.fhem.de/wiki/Cmdalias)
Dann mal einfach nach der sub suchen:
grep aktErtrag
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

jhohmann

Wenn im Notify direkt Perl-Code ausgeführt werden soll, würde ich vermuten, dass dir am Ende vor der geschweiften Klammer ein ; fehlt.
AlsoHM_Strommesser:.* {aktErtrag(ReadingsNum("HM_Strommesser","1.POWER",""), ReadingsNum("d_Strom_Pufferwerte","Maximale_Leistung_W",""), ReadingsNum("HM_Strommesser","Zaehlerstand_Solar_kWh",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Tagesbeginn_00Uhr",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Monatsbeginn_00Uhr",""));}
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

Otto123

Zitat von: jhohmann am 17 Mai 2021, 12:30:52
Wenn im Notify direkt Perl-Code ausgeführt werden soll, würde ich vermuten, dass dir am Ende vor der geschweiften Klammer ein ; fehlt.
Das ist kein Problem ;)
ZitatSimple Statements
The only kind of simple statement is an expression evaluated for its side-effects. Every simple statement must be terminated with a semicolon, unless it is the final statement in a block, in which case the semicolon is optional. But put the semicolon in anyway if the block takes up more than one line, because you may eventually add another line. Note that there are operators like eval {}, sub {}, and do {} that look like compound statements, but aren't--they're just TERMs in an expression--and thus need an explicit termination when used as the last item in a statement.
Quelle https://perldoc.perl.org/perlsyn
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

Jupedi

Also:

@jhohmann: Das Semicolon wars leider nicht, ändert nix.

@Otto123: Der Eventmonitor bringt ca. alle drei Minuten die beiden Events.
Events (Filter: HM_Strom.*)   FHEM log   

2021-05-17 19:16:12 HMCCUDEV HM_Strommesser 1.ENERGY_COUNTER: 44827.2
2021-05-17 19:16:12 HMCCUDEV HM_Strommesser 1.POWER: 290.0


Ich habe es bereits früher mit folgendem Trigger versucht. HM_Strommesser:1.POWER:.*

Ich mache das jetzt noch mal und werde auch den Namen des Scripts (auch im Notify) ändern.
(xxxyyyzzz wird es ja wohl nicht nocheinmal geben. Ich drück mich grad noch mal um den "cmdalias"herum, damit habe ich noch nie gearbeitet.)

Danach werde ich aus dem Script alles entfernen bis auf den "Testteil" , der nichts anderes macht als die übergebenen Atribute wieder zurückzuschreiben.
#-----------------------------------------------------------------
# nur eingefügt, um zu sehen, was wirklich übergeben wird
{
   fhem("setreading d_Strom T0 $Wert[0]");
   fhem("setreading d_Strom T1 $Wert[1]");
   fhem("setreading d_Strom T2 $Wert[2]");
   fhem("setreading d_Strom T3 $Wert[3]");
   fhem("setreading d_Strom T4 $Wert[4]");

}
#-----------------------------------------------------------------


Mal schauen, ob das aufschlussreich ist.
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Jupedi

#10
Folgendes gemacht:

Trigger geändert
HM_Strommesser:1.POWER:.*
Namensänderung:
xxxyyyzzz

nur noch Minimalscript

sub xxxyyyzzz

{

# alle Variablen u. Arrays der Teilsubs

my @Wert = @_;

#-----------------------------------------------------------------
# nur eingefügt, um zu sehen, was wirklich übergeben wird
{
   fhem("setreading d_Strom T0 $Wert[0]");
   fhem("setreading d_Strom T1 $Wert[1]");
   fhem("setreading d_Strom T2 $Wert[2]");
   fhem("setreading d_Strom T3 $Wert[3]");
   fhem("setreading d_Strom T4 $Wert[4]");

}

}


Alles erfolglos  :(

Der reine Ausführungsteil des notifys funktioniert. Die Werte werden dann ins Dummy "d_Strom" geschrieben.
{xxxyyyzzz(ReadingsNum("HM_Strommesser","1.POWER",""), ReadingsNum("d_Strom","Maximale_Leistung_W",""), ReadingsNum("HM_Strommesser","Zaehlerstand_Solar_kWh",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Tagesbeginn_00Uhr",""), ReadingsNum("d_Strom_Pufferwerte","Stand_Monatsbeginn_00Uhr",""))}



Das ebenfalls in der Datei "99_myownUtils.pm" enthaltene Script Spieldauer funktioniert gleichzeitig einwandfrei.


# 2.  Spieldauer Balken VU+

# Trigger

sub spieldauer

{

   my $Wert;

   if ( $_[1] == 0 )

   {
       
       $Wert = 0;


   }

   else

   {

       $Wert = ($_[1]-$_[0])/$_[1];

   }


   {

   fhem ("setreading SATReceiver spieldauer_prozent $Wert");

   }

}


# Ende Spieldauerbalken VU+


Ausgelöst von diesem Notify:
SATReceiver {spieldauer(ReadingsNum("SATReceiver","eventremaining",""),ReadingsNum("SATReceiver","eventduration",""))}

So langsam gehen mir die Ideen aus.  :(


Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Jupedi

update:

es liegt definitiv am Notify.
Habe im Moment das Notify deaktiviert und durch ein at ersetzt, welches jede Minute triggert.
Damit geht es.
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

Jupedi

Nachdem es mit dem "at" ging, das "notify" gelöscht und neu definiert.

neu:
HM_Strommesser:1.POWER.* {aktErtragPower(ReadingsNum("HM_Strommesser","1.POWER",""), ReadingsNum("d_Strom","Maximale_Leistung_W",""),ReadingsNum("HM_Strommesser","Zaehlerstand_Solar_kWh",""),ReadingsNum("d_Strom_Pufferwerte","Stand_Tagesbeginn_00Uhr",""),ReadingsNum("d_Strom_Pufferwerte","Stand_Monatsbeginn_00Uhr",""))}

Jetzt geht es , juhu!!!
Keine Ahnung was das Problem war.
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO

jhohmann

Ich wollte auch schon anregen, mal ein list vom gesamten Notify zu schicken und nicht nur die eine Zeile.
Aber wenn es nun gelöscht und neu angelegt ist, wird man die eigentliche Ursache nicht mehr finden.
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

Jupedi

List war gleich im ersten Post. Aber wie gesagt, es rennt! Dank euch!!!
Raspberry 3, CUL Eigenbau(nano,cc1101),
Jeelink
Mediola/Neo Fernbedienung, NET-IO230B, Intertechno Zeug,, itach, Fritzbox7490 (m-net Fw).
  Homematic: HM CCU2, PROCRPC, Thermostate,  Wassermelder aus Fensterkontakten, usw.
Home Entertainment: VU+, SamsungTV, YamahaAVR, OPPO