AT if isday treibt mich in den Wahnsinn

Begonnen von matt_577, 23 Januar 2024, 11:05:30

Vorheriges Thema - Nächstes Thema

matt_577

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
Raspberry PI 3 mit HM-MOD-RPI-PCB
HM: 3 x HM-CC-RT-DN, 1 x HM-TC-IT-WM-W-EU, 3 x HM-RC-2-PBU-FM, 1 x HM-LC-Bl1PBU-FM
ZWave: F
NanoCUL433: 3 x Brennenstuhl RCS 1000-N, irgendein Thermostat vom Nachbarn
Shelly: ShellyPlugS, meine neue Liebe!

frober

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.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

betateilchen

#2
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" ?


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

matt_577

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

Raspberry PI 3 mit HM-MOD-RPI-PCB
HM: 3 x HM-CC-RT-DN, 1 x HM-TC-IT-WM-W-EU, 3 x HM-RC-2-PBU-FM, 1 x HM-LC-Bl1PBU-FM
ZWave: F
NanoCUL433: 3 x Brennenstuhl RCS 1000-N, irgendein Thermostat vom Nachbarn
Shelly: ShellyPlugS, meine neue Liebe!

frober

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

Dann wird es entsprechend als Sub auch aufgerufen.
+*00:01:00 { if ( isday() ) { getMaxHeute() } }
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

matt_577

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
Raspberry PI 3 mit HM-MOD-RPI-PCB
HM: 3 x HM-CC-RT-DN, 1 x HM-TC-IT-WM-W-EU, 3 x HM-RC-2-PBU-FM, 1 x HM-LC-Bl1PBU-FM
ZWave: F
NanoCUL433: 3 x Brennenstuhl RCS 1000-N, irgendein Thermostat vom Nachbarn
Shelly: ShellyPlugS, meine neue Liebe!

betateilchen

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