Zitat von: Bartimaus am 30 Dezember 2025, 18:50:38S4PL-00416EUDamit ist das Teil identifiziert und ist mit dem morgigen Update verfügbar.
Internals:
FUUID 67807828-f33f-be1a-6f3e-56d9bde8e61ee267
NAME Alarm_Status
NR 68
STATE 3
TYPE dummy
eventCount 51
READINGS:
2025-12-30 17:49:55 state 3
Attributes:
room AppleWatch,Alarmanlage
Internals:
FUUID 67816ae7-f33f-be1a-7c06-39d56c9a9d1ba135
NAME Alarm_Taster
NR 69
STATE off
TYPE dummy
eventCount 44
READINGS:
2025-12-30 16:27:48 state off
Attributes:
alexaName Alarmanlage Taster
devStateIcon on:15px-red off:15px-green
room Alexa,Alarmanlage,AppleWatch
setList on off
Internals:
DEF ([#"_Alarm$:open":state:"open"] != 0) (set pushmsg msg "Kontakt $DEVICE wurde geöffnet. Es sind folgende Kontakte offen: [@"_Alarm$":state:"open"]")
DOELSEIF
([#"_Alarm$:closed":state:"open"] == 0) (set pushmsg msg "alle Kontakte geschlossen")
FUUID 678d3cd1-f33f-be1a-c7f2-dad1fd51a7b4aa33
MODEL FHEM
NAME Alarm_Kontakte_DOIF
NOTIFYDEV global,.*(_Alarm$).*
NR 78
NTFY_ORDER 50-Alarm_Kontakte_DOIF
STATE alle geschlossen
TYPE DOIF
VERSION 30659 2025-12-25 12:37:16
eventCount 23
READINGS:
2025-12-30 17:48:02 Device Aussentuer_Strasse_Alarm
2025-12-30 17:48:02 cmd 2
2025-12-30 17:48:02 cmd_event Aussentuer_Strasse_Alarm
2025-12-30 17:48:02 cmd_nr 2
2025-12-30 15:11:55 mode enabled
2025-12-30 17:48:02 state alle geschlossen
Regex:
accu:
bar:
barAvg:
collect:
cond:
:
0:
"_Alarm$:open" _Alarm$:open
1:
"_Alarm$:closed" _Alarm$:closed
attr:
cmdState:
0:
$DEVICE zuletzt geöffnet
1:
alle geschlossen
wait:
waitdel:
condition:
0 ::AggregateDoIf($hash,'#','_Alarm$','state','"open"') != 0
1 ::AggregateDoIf($hash,'#','_Alarm$','state','"open"') == 0
do:
0:
0 set pushmsg msg "Kontakt $DEVICE wurde geöffnet. Es sind folgende Kontakte offen: [@"_Alarm$":state:"open"]"
1:
0 set pushmsg msg "alle Kontakte geschlossen"
2:
helper:
NOTIFYDEV global,.*(_Alarm$).*
event closed,STATE: closed,hmstate: closed
globalinit 1
last_timer 0
sleeptimer -1
timerdev Aussentuer_Strasse_Alarm
timerevent closed,STATE: closed,hmstate: closed
triggerDev Aussentuer_Strasse_Alarm
timerevents:
closed
STATE: closed
hmstate: closed
timereventsState:
state: closed
STATE: closed
hmstate: closed
triggerEvents:
closed
STATE: closed
hmstate: closed
triggerEventsState:
state: closed
STATE: closed
hmstate: closed
internals:
readings:
trigger:
uiState:
uiTable:
Attributes:
cmdState $DEVICE zuletzt geöffnet|alle geschlossen
do always
room Alarmanlage
Internals:
CFGFN
DEF (([Alarm_Status:STATE] eq "2" or [Alarm_Status:STATE] eq "3") and (#"_Alarm$":state:"open" > 0)) (set FHEM_gong_Mp3 playTone 254,016,set LED_aussen on,set LED blink 30 2,set pushmsg msg Alarm ausgelöst! Mindestens ein Kontakt ist offen.,set Rolladen01 down,set Rolladen02 down,set Rauchmelder_Team alarmOn) DOELSEIF ([Alarm_Status:STATE] eq "0" or [Alarm_Status:STATE] eq "1") (cancel)
FUUID 6953e764-f33f-be1a-da62-f7aba6284e6e4660
MODEL FHEM
NAME Alarm_send_DOIF
NOTIFYDEV global,Alarm_Status
NR 191
NTFY_ORDER 50-Alarm_send_DOIF
STATE initialized
TYPE DOIF
VERSION 30659 2025-12-25 12:37:16
eventCount 10
READINGS:
2025-12-30 16:24:58 cmd 0
2025-12-30 16:24:58 mode enabled
2025-12-30 16:24:58 state initialized
Regex:
accu:
bar:
barAvg:
collect:
cond:
Alarm_Status:
0:
STATE ^Alarm_Status$:^STATE:
1:
STATE ^Alarm_Status$:^STATE:
attr:
cmdState:
0:
{(ReadingsVal("Alarm_Status","STATE","0") eq "2" || ReadingsVal("Alarm_Status","STATE","0") eq "3") ? ((::AggregateDoIf($hash,"#","_Alarm$","state","\"open\"") > 0) ? "alarm" : "armed") : ((ReadingsVal("Alarm_Status","STATE","0") eq "0" || ReadingsVal("Alarm_Status","STATE","0") eq "1") ? "idle" : "disabled")}
repeatsame:
0
wait:
0:
60
120
condition:
0 (::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "2" or ::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "3") and (#"_Alarm$":state:"open" > 0)
1 ::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "0" or ::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "1"
do:
0:
0 set FHEM_gong_Mp3 playTone 254,016,set LED_aussen on,set LED blink 30 2,set pushmsg msg Alarm ausgelöst! Mindestens ein Kontakt ist offen.,set Rolladen01 down,set Rolladen02 down,set Rauchmelder_Team alarmOn
1:
0 cancel
2:
helper:
NOTIFYDEV global,Alarm_Status
globalinit 1
last_timer 0
sleeptimer -1
hmccu:
readings:
all Alarm_Status:STATE
uiState:
uiTable:
Attributes:
cmdState {(ReadingsVal("Alarm_Status","STATE","0") eq "2" || ReadingsVal("Alarm_Status","STATE","0") eq "3") ? ((::AggregateDoIf($hash,"#","_Alarm$","state","\"open\"") > 0) ? "alarm" : "armed") : ((ReadingsVal("Alarm_Status","STATE","0") eq "0" || ReadingsVal("Alarm_Status","STATE","0") eq "1") ? "idle" : "disabled")}
devStateIcon alarm:message_attention
armed:secur_open
idle:security
disabled:control_pause
do always
repeatsame 0
room Alarmanlage
selftrigger wait
wait 60,120
define Alarm_send_DOIF DOIF (
([Alarm_Status:STATE] =~ "^(2|3)$")
and
([Alarm_Kontakte_DOIF] ne "closed")
)
(
set FHEM_gong_Mp3 playTone 254,016,
set LED_aussen on,
set LED blink 30 2,
set pushmsg msg "Alarm ausgelöst! Kontakt $DEVICE wurde geöffnet. Offene Kontakte: [@"_Alarm$":state:"open"]",
set Rolladen01 down,
set Rolladen02 down,
set Rauchmelder_Team alarmOn
)
DOELSEIF (
([Alarm_Status:STATE] =~ "^(0|1)$")
)
(
cancel
)
attr Alarm_send_DOIF wait 60,120
attr Alarm_send_DOIF do always
attr Alarm_send_DOIF selftrigger
attr Alarm_send_DOIF repeatsame 0
Echt cool!Zitat von: Bartimaus am 30 Dezember 2025, 18:50:38Ich hoffe Ihr könnt mir helfen, ansonsten muss ich diese Leiste leider zurückschicken. Wär schade drum.ich sehe da noch eine dritte Möglichkeit, nämlich selbst soviel zu lernen, dass man das mit MQTT steuern kann.
ZitatDass eine vereinfachte Regexprüfung der Grund für die Verschiebbarkeit des berücksichtigten Zeitintervallendes von bis zu 20 Stunden ist, das hätte ich nicht gedacht.Darum geht es nicht. Die angegebene Stunde wird als Absolutzeit (z.B. 20 Uhr) oder Relativzeit (z.B. -5) Stunden zum Sonnenuntergang interpretiert. D.h. "-" ist immer relativ und _vor_ Sonnenuntergang. Da der Wertebereich bis 20 (Uhr) laufen kann, ergibt sich rein theoretisch auch eine mögliche negative Verschiebung von -20 (Stunden).
loadTarget => { comp => '(?:100|[1-9]?\d)(?::-?(?:[1-9]|1[0-9]|20))?',ZitatSelber würde ich mir z.B. -0:45h wünschen. Aber auch im Sommer würde ich persönlich nicht auf die Idee kommen, das berücksichtigte Zeitintervallende um mehr als 10:00h nach vorne zu verlegen.Ich rechne im Stundenraster gemäß den allgemeinen Werteerhebungen im Modul. Mehr Aufwand würde ich nur treiben, wenn es unbedingt nötig ist. Meine aktuelle Liste an ToDo's im Modul ist lang und ich muß momentan Prioritäten setzen. (Zur Zeit total mit der 2.0.0 ausgelastet)
ZitatAuch frage ich mich, in welchen Fällen das berücksichtigte Zeitintervallende nach hinten verschoben werden sollte.Hier liegt, glaube ich, ein Mißverständnis vor. Siehe oben.
ZitatIch verwende bei meinem Developer Account die selbe Emailadresse und den selben Login wie in der EcoFlow App, wo die Seriennummern von Wechselrichter und Batterie korrekt erfasst sind....ist genau richtig und wichtig.
Zitat{"code":"0","message":"Success","data":[{"sn":"hierStehtMeineSeriennummer","online":1}],"eagleEyeTraceId":"","tid":""}Also funktioniert es ja !
Das set PowerOcean detectModel schreibt ins Log:
2025.12.30 18:13:25 3: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Trying to detect model.
2025.12.30 18:13:25 2: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Model "" detected.
2025.12.30 18:13:25 0: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_DetectModel(): Modul initialised.
2025.12.30 18:13:26 0: PowerOcean(Ecoflow 0.3.9.0): Ecoflow_Response(): ERROR! {"code":"1006","message":"current device is not allowed to get device info","eagleEyeTraceId":"","tid":""}
ist leider eine irreführende "normale" Meldung beim Start des Moduls. Danach funktionieren alle Zugriffe.