Hauptmenü

DOIF selftrigger

Begonnen von ch.eick, 06 Dezember 2021, 14:45:47

Vorheriges Thema - Nächstes Thema

ch.eick

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

VG
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

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")')





Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

#2
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?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF