MQTT2 Schaltvorgänge im Log trotz verbose 0

Begonnen von Loctite, 12 Februar 2025, 20:49:37

Vorheriges Thema - Nächstes Thema

Loctite

Hallo.
Ich habe bei jedem übermitteltem Befehl zwei Logeinträge:

{"time":"2025-02-12T20:43:58.06617431+01:00","level":"INFO","msg":"trying to set default power","device":"0PVP50Zxxxxxx","power":259}
{"time":"2025-02-12T20:44:00.094286827+01:00","level":"INFO","msg":"set default power","device":"0PVP50Zxxxxxx","power":259}

Ich habe schon im MQTT devide und im MQTT2 server auf verbose 0 gestellt.
Es ändert sich nichts. Ok auf 5 wird noch mehr, aber ganz abschalten funktioniert nicht.

Der Befehl wird über ein Notify ausgeführt. Auch das habe ich auf verbose 0 gestellt. Es geht nicht weg.
Kann mir jemand sagen was ich hier falsch mache ?

JoWiemann

Nach, dann zeig uns doch bitte das List vom notify.

Grüße Jörg

PS: Lies doch bitte im  https://forum.fhem.de/index.php?topic=71806.0 , wie man Anfragen stellt. Das wäre schön.
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Loctite

Ich bin eher davon ausgegangen das es noch einen "Schalter" wie verbose gibt.

Internals:
   CFGFN     
   DEF        haus.stromzaehler:power:.* {
my $soc = ReadingsNum("NOAH2000", "soc", "0");
my $disLimit = ReadingsNum("NOAH2000", "discharge_limit", "0");
my $prev_shellyplug = ReadingsVal("Sh_BKWShellyPlug", "state", "");
my $noahmqtt = ReadingsVal("du_noah_mqtt", "state", "");
my $solar_w = ReadingsNum("NOAH2000", "solar_w", "0");
my $strom = ReadingsNum("haus.stromzaehler", "power", "0");
my $prev_output_set = ReadingsNum("NOAH2000", "output_power_w", "0");
my $status = ReadingsVal("NOAH2000", "status", "offline");
my $output_set = 0;
my $benutzenTelegram = ReadingsVal("du_Heizen_Telegram", "state", "");
my $stunde = POSIX::strftime("%H",localtime(time));
my $info = 0;
my @Zeit_abend = (18,19,20,21,21,22,22,21,20,19,18,18); #pro Monat laut Auswertung Grafik
my @Zeit_morgen = (8,7,6,5,4,4,4,5,5,6,7,8); #pro Monat
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
my $shellyplug = "off"; # ShellyPlug
my $threshold = 5;      # Reduktionsschwelle für den output_set

# Zeitfenster für den aktuellen Monat bestimmen
my $zeit_morgen = $Zeit_morgen[$mon];
my $zeit_abend = $Zeit_abend[$mon];

# Regelung nur ausführen, wenn Status "online" ist und noahmqtt "on" ist
if ($status eq "online" && $noahmqtt eq "on") {
# Regelung nur im erlaubten Zeitfenster
# if ($stunde >= $zeit_morgen && $stunde <= $zeit_abend) {
if ($stunde >= $zeit_morgen && $soc >= 60) {
if ($soc > $disLimit) {
# Ausgabe an den Wechselrichter abhängig vom Stromverbrauch im Haus
my $max_output = ($soc > 80) ? 400 : 300;
$output_set = ($strom > $max_output) ? $max_output : $strom;

# Reduktion des output_set um den threshold-Wert
$output_set = $output_set - $threshold;
$output_set = 0 if $output_set < 0;  # Sicherstellen, dass der Wert nicht negativ wird
} else {
# Akku unter Mindeststand, keine Energieentnahme
$output_set = 0;
}
}

# Wenn der SOC abends unter 60% fällt, setze output_set fest auf 50
if ($stunde >= $zeit_abend && $soc < 60) {
$output_set = 50;
}

# Wenn der SOC unter disLimit fällt, setze output_set zusätzlich auf 0
if ($soc <= $disLimit) {
$output_set = 0;         # Keine Energie mehr an den Wechselrichter
}

# Berechnungen für ShellyPlug
if ($shellyplug eq "off" && $stunde >= $zeit_morgen) {
if (($soc >= 30 && $solar_w > 400) || $soc > 80) {
$shellyplug = "on";  # Einschalten bei SOC >= 30% und Solar > 400W oder SOC > 80%
}
}

# Abends bleibt ShellyPlug an, solange Akku nicht unter disLimit fällt
if ($stunde >= $zeit_abend && $soc > $disLimit) {
$shellyplug = "on";
} elsif ($soc <= $disLimit) {
$shellyplug = "off";  # Abschalten, wenn Akku unter disLimit fällt
}

# Ausgabe von Befehlen, wenn sich Werte geändert haben
if ($output_set != $prev_output_set) {
fhem "set myBroker publish noah2mqtt/0PVP50Zxxxxxx/parameters/set {\"output_power_w\":$output_set}";
if ($benutzenTelegram eq "on"){
fhem "set telegram send \@xx SOC $soc% setze output_power auf $output_set W / Strom = $strom W ";
}
}

# ShellyPlug-Befehl nur ausführen, wenn sich der Zustand geändert hat
if ($shellyplug ne $prev_shellyplug) {
fhem "set Sh_BKWShellyPlug $shellyplug";
$prev_shellyplug = $shellyplug;
if ($benutzenTelegram eq "on"){
fhem "set telegram send \@xx SOC $soc%, Zeit $stunde, Solar: $solar_w, schalte ShellyPlug $shellyplug";
}
}
}
}
   FUUID      67ace90b-f33f-b7a0-46a9-8165140933e72c70
   NAME       no_NOAH2000_steuerung2
   NOTIFYDEV  haus.stromzaehler
   NR         566
   NTFY_ORDER 50-no_NOAH2000_steuerung2
   REGEXP     haus.stromzaehler:power:.*
   STATE      2025-02-12 21:19:58
   TRIGGERTIME 1739391599.01483
   TYPE       notify
   eventCount 9
   READINGS:
     2025-02-12 20:13:50   state           active
     2025-02-12 21:19:58   triggeredByDev  haus.stromzaehler
     2025-02-12 21:19:58   triggeredByEvent power: 359
Attributes:
   disable    0
   disabledAfterTrigger 30
   room       NOAH2000
   verbose    0

JoWiemann

#3
OK,

Du machst einen fhem(<befehl>, [0|1]); ohne den optionalen zweiten Parameter. Sofern nicht gesetzt, schreibt fhem(), unabhängig Deiner verbose Level, ins Log. Also einfach den optionale Paramter auf 1 setzen und Ruhe ist.

Grüße Jörg

PS: Du rufst die Sub fhem ohne () auf. Wir hatten letzten das Problem, das es wohl ab einer gewissen Perl Version nicht mehr tolleriert wird
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Loctite

Ah vielen Dank !
Ich hab schon die ganze Zeit gesucht aber nichts gefunden.
Den fhem Befehl kenne ich nur so, habe dazu aber auch nichts gefunden.

Also ist das so richtig ?
fhem ("set myBroker publish noah2mqtt/0PVP50Zxxxxx/parameters/set {\"output_power_w\":$output_set}",1);

Otto123

Zitat von: Loctite am 12 Februar 2025, 21:47:53aber auch nichts gefunden.
Steht im Abschnitt Perl specials in der Commandref.
ZitatBemerkung: Wenn diese Funktion einen wert zurück liefert, wird dieser in der allgemeinen Logdatei gespeichert.. Benutzen sie "1" als zweites Argument um dieses speichern zu verhindern. Sinnvoll ist dieses Argument bei der Abfrage von Werten mittels "get...".
Das besondere bei Dir scheint noch, dass der (einer der?) set Befehl(e) etwas zurück gibt.
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

Anmerkung:

Einen solch langen "Roman" an perl code sollte man nicht unbedingt direkt in das DEF des notify schreiben. Man kann den Code in eine Funktion in 99_myUtils.pm auslagern und dann im notify diese Funktion aufrufen. Das erhöht die Wartbarkeit einer FHEM Installation erfahrungsgemäß sehr.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Loctite

Ja an 99_myUtils.pm habe ich auch schon gedacht. Nur komme ich so erst mal besser zurecht, da ich auch noch über mein Smartphone Änderungen vornehme.

Danke für die schnelle Hilfe !
Gut das nun ruhe im Log ist...das wurde sehr schnell sehr viel und da bekomme ich dann etwas Panik wenn ich das nicht beheben kann  :))

Loctite

Hallo.

Es hat gestern aufgehört, weil mein Skript nichts mehr gesendet hat.
Dann ging es aber wieder los.
Ich habe zuerst alles noch mal auf verbose 0 gesetzt, aber ohne Änderung.
Dann habe ich mir noch mal die mqtt Applikation angeschaut und gesehen das dort auch eine Möglichkeit besteht einen Log Level einzustellen.
Diesen habe ich nun auf WARN gestellt, was die zweit niedrigste Log Stufe ist.

Nun ist wirklich Ruhe !
Daraufhin hab ich alle verbose 0 zurück auf 3 gestellt. Ich möchte ja in meinem Skript auch etwas sehen wenn ich da mal wieder etwas verhaue.
Und ja, es bleibt nun zum Glück so...war jetzt schon etwas am verzweifeln.