FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Loctite am 12 Februar 2025, 20:49:37

Titel: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: Loctite am 12 Februar 2025, 20:49:37
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 ?
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: JoWiemann am 12 Februar 2025, 21:00:35
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.
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: Loctite am 12 Februar 2025, 21:24:50
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
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: JoWiemann am 12 Februar 2025, 21:32:15
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
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: Loctite am 12 Februar 2025, 21:47:53
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);
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: Otto123 am 12 Februar 2025, 22:46:48
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.
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: betateilchen am 13 Februar 2025, 09:01:28
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.
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: Loctite am 13 Februar 2025, 17:54:14
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  :))
Titel: Aw: MQTT2 Schaltvorgänge im Log trotz verbose 0
Beitrag von: Loctite am 13 Februar 2025, 19:57:11
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.