FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: matt_577 am 23 Januar 2024, 11:05:30

Titel: AT if isday treibt mich in den Wahnsinn
Beitrag von: matt_577 am 23 Januar 2024, 11:05:30
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
Titel: Aw: AT if isday treibt mich in den Wahnsinn
Beitrag von: frober am 23 Januar 2024, 11:13:03
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.
Titel: Aw: AT if isday treibt mich in den Wahnsinn
Beitrag von: betateilchen am 23 Januar 2024, 11:20:09
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" ?


Titel: Aw: AT if isday treibt mich in den Wahnsinn
Beitrag von: matt_577 am 23 Januar 2024, 11:39:15
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

Titel: Aw: AT if isday treibt mich in den Wahnsinn
Beitrag von: frober am 23 Januar 2024, 13:11:03
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() } }
Titel: Aw: AT if isday treibt mich in den Wahnsinn
Beitrag von: betateilchen am 23 Januar 2024, 17:54:30
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));


Wo Du den Code platziert hast und wie er letztlich aufgerufen wird, wissen wir leider immer noch nicht.
Titel: Aw: AT if isday treibt mich in den Wahnsinn
Beitrag von: matt_577 am 23 Januar 2024, 21:14:35
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
Titel: Aw: AT if isday treibt mich in den Wahnsinn
Beitrag von: betateilchen am 23 Januar 2024, 22:47:27
Zitat von: matt_577 am 23 Januar 2024, 21:14:35Die Vorgehensweise ein notify als "Batch zu nutzen"

au weia...