Hallo zusammen,
ich habe ein DOIF bei dem im Device eigenen readings gesetzt werden, die dann einen weiteren zweit triggern sollen.
Bisher habe ich bereits folgende Attribute ausprobiert, aber ohne Erfolg.
checkall all
selftrigger all
Hier werden im DOIF die readings gesetzt
CommandSetReading(undef, "$SELF SpeicherExternTrigger frei"); ## Trigger freigeben
CommandSetReading(undef, "$SELF SpeicherTrigger entladen"); ## Signalisiere entladen im stateFormat
Das sind dann die Events, die ich sehe
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl SpeicherExternTrigger: frei <<<
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl SpeicherTrigger: entladen <<<
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl cmd_nr: 3
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl cmd: 3
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl cmd_event: Kia_eNiro_PV
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl smart_Laden Beendet
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl SpeicherExternTrigger: frei <<<
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl SpeicherTrigger: entladen <<<
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl cmd_nr: 3
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl cmd: 3
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl cmd_event: WR_1_Speicher_1_ExternControl
2021-12-06 14:16:24.882 DOIF WR_1_Speicher_1_ExternControl smart_Laden Beendet
Im Log kommen auch Meldungen, die ich ausgebe
2021.12.06 14:16:08.642 3: WR_1_Speicher_1_ExternControl cmd_2 : smart_laden aktiviert
2021.12.06 14:16:08.642 3: WR_1_Speicher_1_ExternControl cmd_2 : SpeicherExternTrigger, Entlademodus gesperrt
2021.12.06 14:16:24.855 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie auf 75.00 %, SpeicherExternTrigger, freigegeben
2021.12.06 14:16:24.860 3: WR_1_Speicher_1_ExternControl cmd_3 : Batterie auf 75.00 %, SpeicherExternTrigger, freigegeben
Nun sollte durch die Events aber auch das hier getriggert werden, was aber trotz der Attribute nicht der Fall ist:
[$SELF:SpeicherEntladung] eq "Zeit" and <<< steht fix auf Zeit
[[$SELF:SpeicherZeitStart]-[$SELF:SpeicherZeitEnde]] <<< ist 09:00 - 18:00 Uhr
[$SELF:SpeicherEntladung] eq "Trigger" <<< ist nicht erfüllt, wodurch der zweite Teil vom or greifen soll
##############################################################################
## 4 Freigabe der Batterie mit externem Trigger
DOELSEIF
([$SELF:SpeicherExternTrigger] eq "frei" and ## Verriegelung, wenn zwangsgeladen werden muss
([$SELF:SpeicherEntladung] eq "Trigger" and ## Triggersteuerung
[$SELF:SpeicherTrigger] eq "entladen" ## also Speicherentladung freigeben
or
[$SELF:SpeicherEntladung] eq "Zeit" and ## oder bei Zeitsteuerung wenn das
[[$SELF:SpeicherZeitStart]-[$SELF:SpeicherZeitEnde]]) ## Zeitfenster aktiv ist
)
{
CommandSet(undef, "WR_1_API 22_03_Battery_MinHomeConsumption 50"); ## Speicher für Entladung freigeben
CommandSetReading(undef, "$SELF SpeicherTrigger entladen"); ## Signalisiere entladen im stateFormat
if (AttrVal("$SELF","verbose",0) >=3)
{Log 3, "$SELF cmd_4 : SpeicherExternTrigger, Entlademodus freigegeben"};
}
Ich habe bereits so viele Attribut Kombinationen getestet, komme aber einfach nicht weiter.
Ich meine vor einem Jahr wäre es sogar ohne die oben benannten Attribute gelaufen, aber es gab ja auch diverse DOIF updates und nun geht's irgend wie nicht mehr.
Das RAW vom DOIF ist ziemlich lang, weshalb ich es jetzt erstmal weg gelassen habe.
Im Wiki liegt auch das Original WR_1_Speicher_1_ExternControl (https://wiki.fhem.de/wiki/Kostal_Plenticore_10_Plus#RAW_Definition_des_WR_1_Speicher_1_ExternControl)
VG
Christian
Die Selftrigger-Geschichte funktioniert nicht immer. Je nach dem über welche Wege man sich selbst triggert, kann auch von FHEM eine Schleife unterbunden werden. Da kann das Modul auch nichts mehr machen. An diesen Mechanismen hat sich in den letzten Jahren zumindest im DOIF nichts geändert.
Mit Hilfe von Timern kann ein Event immer entkoppelt werden.
statt
CommandSetReading(undef, "$SELF SpeicherExternTrigger frei")
etwas verzögert ausführen:
set_Exec("timer",0.1,'fhem_set("$SELF SpeicherExternTrigger frei")')
Zitat von: Damian am 06 Dezember 2021, 15:00:16
Die Selftrigger-Geschichte funktioniert nicht immer. Je nach dem über welche Wege man sich selbst triggert, kann auch von FHEM eine Schleife unterbunden werden. Da kann das Modul auch nichts mehr machen. An diesen Mechanismen hat sich in den letzten Jahren zumindest im DOIF nichts geändert.
Mit Hilfe von Timern kann ein Event immer entkoppelt werden.
statt
CommandSetReading(undef, "$SELF SpeicherExternTrigger frei")
etwas verzögert ausführen:
set_Exec("timer",0.1,'fhem_set("$SELF SpeicherExternTrigger frei")')
Hi Damian,
geht das nur im Perl Modus oder auch im FHEM Modus. das DOIF habe ich noch nicht auf den Perl Modus umgestellt.
Undefined subroutine &main::set_Exec called at (eval 867260) line 1
EDIT:
Hab's gefunden, es geht nur im Perl Mode.Hätte ich noch eine andere Möglichkeit?
Zitat von: ch.eick am 06 Dezember 2021, 16:13:50
Hi Damian,
geht das nur im Perl Modus oder auch im FHEM Modus. das DOIF habe ich noch nicht auf den Perl Modus umgestellt.
Undefined subroutine &main::set_Exec called at (eval 867260) line 1
EDIT: Hab's gefunden, es geht nur im Perl Mode.
Hätte ich noch eine andere Möglichkeit?
Im FHEM-Modus mit sleep oder mit wait verzögern.