Hi,
ich hätte gerne ein Macro (getMaxHeute) getriggert und zwar alle 1 Minute und nur dann, wenn es hell ist.
Mein bisheriger Ansatz sieht wie folgt aus:
+*00:01:00
{
if ( isday() ) {
trigger getMaxHeute;
}
}
Das Macro selbst läuft gut und liefert mir die gewünschten Daten. Es muss also am "if" liegen.
isDay() ist ja schon ein Workaround, denn eigentlich hätte ich lieber "p_Microconverter" auf "presence" abgefragt.
Aber nix will klappen :-\
Hatte den Code schon auf " IF ( ::day() ) " und in sämtlichen Varianten, aber es passiert nix.
Die Wahrscheinlichkeit ist groß, das ich den Wald vor lauter Bäumen nicht sehe und erbitte deshalb die Hilfe eines Sehenden!
Danke und
Gruß aus Oberfranken
matt
Schreibe es mal als eine Zeile in der Dev., aus meiner Erfahrung macht die Einrückung Probleme.
Wenn es dann funktioniert kannst du mir der Formatierung spielen.
Zitat von: frober am 23 Januar 2024, 11:13:03Wenn es dann funktioniert kannst du mir der Formatierung spielen.
Es wird nicht funktionieren, egal, wie es formatiert wird.
+*00:01:00 { if ( isday() ) { trigger getMaxHeute; } }
Das was da in der inneren geschweiften Klammer steht "trigger getMaxHeute" ist halt schlichtweg kein korrekter perl Code. Dazu sollte es auch Fehlermeldungen im Log geben, wenn versucht wird, das auszuführen.
Du versuchst, einen FHEM Befehl wie eine perl Funktion einzusetzen. Das kann nicht funktionieren.
Einen FHEM Befehl würde man so einbauen:
+*00:01:00 { if ( isday() ) { fhem('trigger getMaxHeute') } }
Aber "trigger" wird auch das hier
Zitat von: matt_577 am 23 Januar 2024, 11:05:30ich hätte gerne ein Macro (getMaxHeute) getriggert
nicht erfüllen und wieder zu Fehlermeldungen führen.
"trigger" dient lediglich dazu, die notify loop für ein event auszulösen, indem man den event manuell erzeugt.
https://commandref.fhem.de/#trigger
Was meinst Du mit "Macro" ?
Was ist "getMaxHeute" ?
Danke Betateilichen,
das hat mir sehr geholfen!
Zitat+*00:01:00 { if ( isday() ) { fhem('trigger getMaxHeute') } }
Mit " fehm () " hatte ich es auch schon probiert, allerdings ohne die einfachen Hochkommas.
ZitatWas meinst Du mit "Macro" ?
Was ist "getMaxHeute" ?
Damit meine ich eine Abfolge von Befehlen! Quasi ein Batch!
Meines sieht (ungefähr) so aus:
getMaxHeute {
fhem("get DeyeSun Heute");
fhem("get DeyeSun Jetzt");
fhem("get DeyeSun Total");
my $oldMaxHeute = (ReadingsVal("DeyeSun","MaxHeute",0));
my $MaxHeute = (ReadingsVal("DeyeSun","Heute",0));
my $maxWatt = (ReadingsVal("DeyeSun","MaxWatt",0));;
my $WattNow = (ReadingsVal("DeyeSun","Jetzt",0));;
if ($WattNow > $maxWatt){
fhem ("setreading DeyeSun MaxWatt $WattNow");
}
if ($oldMaxHeute <= $MaxHeute){
fhem ("setreading DeyeSun MaxHeute $MaxHeute ");
}
if(($hour==0) && ($min==0)){
my $oldMaxHeute = (ReadingsVal("DeyeSun","MaxHeute",0));
fhem("setreading DeyeSun Max_Vortag $oldMaxHeute");
fhem("setreading DeyeSun MaxHeute 0");
fhem("setreading DeyeSun MaxWatt 0" );
}
}
Danke noch mal und
Gruß aus Oberfranken
matt
Das Thema zu schließen ist nicht der richtige Weg. So bekommen andere hilfesuchende User falsche Infos!
Besser ist es im ersten Post ein [gelöst] vor den Betreff zu setzen.
Dein 'Makro' gehört als Sub in die myUtils (sofern noch nicht geschehen).
https://wiki.fhem.de/wiki/99_myUtils_anlegen (https://wiki.fhem.de/wiki/99_myUtils_anlegen)
Dann wird es entsprechend als Sub auch aufgerufen.
+*00:01:00 { if ( isday() ) { getMaxHeute() } }
Noch zwei generelle Hinweise zu Deinem perl code:
Zitat von: matt_577 am 23 Januar 2024, 11:39:15Meines sieht (ungefähr) so aus:
my $oldMaxHeute = (ReadingsVal("DeyeSun","MaxHeute",0));
my $MaxHeute = (ReadingsVal("DeyeSun","Heute",0));
my $maxWatt = (ReadingsVal("DeyeSun","MaxWatt",0));;
my $WattNow = (ReadingsVal("DeyeSun","Jetzt",0));;
my $oldMaxHeute = (ReadingsVal("DeyeSun","MaxHeute",0));
- Die gesamten Klammern um die Aufrufe von ReadingsVal() in den Wertzuweisungen sind völlig sinnfrei und überflüssig.
- Die zweite Definition von $oldMaxHeute dürfte vermutlich zu einer perl Warning in Deinem Logfile führen, sofern "use strict;" und "use warnings;" definiert sind.
Wo Du den Code platziert hast und wie er letztlich aufgerufen wird, wissen wir leider immer noch nicht.
Guten Abend,
ZitatWo Du den Code platziert hast und wie er letztlich aufgerufen wird, wissen wir leider immer noch nicht.
getMaxHeute ist ein notify. Die Vorgehensweise ein notify als "Batch zu nutzen" hab ich mir bei den Resident-Macros abgeschaut.
Den Hinweis, das ganze in eine Funktion zu übertragen werd ich mal in Betracht ziehen, wenn isday() wieder 1 ist. Danke auch dafür!
Danke für den Tip mit den Klammern! (Das rührt von einer (früheren) Berechnung) und
Gruß aus Oberfranken
matt
Zitat von: matt_577 am 23 Januar 2024, 21:14:35Die Vorgehensweise ein notify als "Batch zu nutzen"
au weia...