Hallo,
ich habe gerade zwei Stunden damit verbracht, meinen HM-Sen-MDIR-O (Bewegungsmelder für den Außenbereich) einzubinden. Ich hatte vor, ihn als Dämmerungssensor zu verwenden, um meinen Intertechno ITDS-50 Dämmerungssensor zu ersetzen, der mir einfach zu ungenau war.
Nachdem ich den HM-Sen-MDIR-O recht schnell über den HomeMatic LAN Konfigurations-Adapter eingebunden hatte, stand ich vor den Fragen:
- Wie schalte ich Aktoren bei Bewegung?
- Wie lese ich die Helligkeit aus und gebe FHEM-weit die Info, ob es dunkel oder hell ist?
Irgendwann hat es dann geklappt:
#---- Lichtsensor
define Lichtsensor1 dummy
attr Lichtsensor1 room Lichtsensoren
define Daemmerung notify Aussenmelder_1.*brightness.* {\
if(ReadingsVal("Aussenmelder_1","brightness","---")<=120){\
fhem "set Lichtsensor1 dunkel"};;\
if(ReadingsVal("Aussenmelder_1","brightness","---")>120){\
fhem "set Lichtsensor1 hell"};;\
}
#---- Auffahrtlicht steuern
define Bewegung_Auffahrt notify Aussenmelder_1:motion.* {\
if (Value("Lichtsensor1") eq "dunkel") {\
fhem "set Lichtschalter_03 on-for-timer 00:04:45";;\
fhem "set Lichtschalter_09 on-for-timer 00:04:45";;\
}}
Vielleicht spart dies anderen HM-Sen-MDIR-O Neulingen etwas Zeit beim reinfuchsen.
Schöne Grüße
Ben
Hallo Ben,
hat mir soeben geholfen, vielen Dank!
Auch von mir ein Danke, genau was ich gesucht habe...
Hi,
schön, dass es geklappt hat.
Falls es interessiert, alternativ zum gewählten Ansatz das ganze über die Zentrale zu steuern kann HM dies nattürlich auch mir direktem peeren erledigen - ist ja ihr Geschäft.
Das vorgehen wäre dann:
1) peeren
set <mdir> peerChan 0 <licht> single
2) einstellen des Aktors, wann er schalten soll
2a) kann man machen, indem man die register "manuell" setzt
2b) oder per template (HMinfo)
Templates kann man selbst bauen. Voreingestellt habe ich einen für motionDetector zu dimmer oder switch
define hm HMInfo #einmalig, wenn man noch kein HMInfo hat
set hm templateList #alle vorhandenen templates
set hm <licht> motionOnSw <mdir>:short <time> <level>
Also bei dir
set hm Lichtschalter_03 motionOnSw Aussenmelder_1:short 285 120
set hm Lichtschalter_04 motionOnSw Aussenmelder_1:short 285 120
Falls du einen dimmer steuern willt nutze motionOnDim - oder schreibe ein eigenes Template
bin ein Freund von peeren - ich hoffe, die Templates helfen...
Gruss Martin
Hallo Martin,
sorry ich muss mich hier nochmal ein bisschen schlauer machen, bzw. ich verstehe noch nicht ganz...
Ich habe einen HM-LC-Dim1TPBU-FM und einen HM-Sec-MDIR
Ich las in diesem (//www.elv.de/output/controller.aspx?cid=758&detail=10&detail2=93) Artikel dass es möglich ist
den Dim1 mit dem MDIR zu peeren Kanal 01.
dann dem Kanal 02 eine Schaltzeit 23:00 bis 06:30 zu geben und 10% Lichleistung als Parameter mitzugeben.
der Kanal 3 wäre dann der Taster.
Ich bekomm es aber nicht hin, der MDIR schaltet das Licht nicht...
Kannst DU mir das vielleicht nochmal erklären..?
Danke!
Hallo der-Lolo,
ah, einmal jemand, der die logischen Kanäle nutzen will.
erst einmal das Ziel:
1) normale Taster sollen zum ein/ausschalten genommen werden
2) zwischen 23:00 und 6:30 soll immer 10% Licht an sein (nachtlicht)
3) der dämmerungsschalter soll über den MDIR funktionieren.
nun, sollte nicht so schwer sein.
Ich würde Channel 01 immer für die Taster lassen. Alle Taster, sie du willst werden mit channel01 gepeert und wie gewohnt programmiert, als dimmer eben
Channel 02 könnte das Nachtlicht sein. Da der dimmer keine Uhr hat musst du ihm einen trigger schicken. Dies kann man verschieden tun - und demnach unterscheidet sich die Programmierung
a) täglich 2 Trigger, einer "an", einer "aus". Channel 2 ist ein ein/aus schalter.
b) Channel02 wird "oszillierend" programmiert. Du stellst eine ontime von (23:00-6:30=7:30h =^ 7,5*3600sec=27000) ein und eine offtime von 59400sec. Täglich um 23:00 schickst du einen "on" auf Kanal02 - wenn du willst auch einen Off um 6:30, ist aber nicht notwendig. Der Kanal 2 wird immer zwischen on/off toggeln, mit dem täglichen Trigger synchronisierst du die Uhrzeit.
Im Kanal02 stellst du die Nachtlicht-helligkeit ein
Channel 03 ist dann ein "einfacher" dämmerungsschalter. Den kannst du einstellen wie obenbeschrieben - HM templates oder manuell.
So und nun musst du die Kanäle zusammenfassen:
Es stellt sich die Frage, wie die Prioritäten sein sollen
ch1: 50% (jemand hat licht gemacht)
ch2: 10% (es ist Nacht)
ch3: 60% (es ist Dunkel und es hat sich einer Bewegt)
Sinnvol wäre m.E. einfach: der hellste hat recht.
Man kann auch addieren - und somit sehen "holla, gleich kommt einer".
Also erst einmal addieren
OR: Das Verknüpfungsergebnis ist der höhere von beiden Pegeln.
logicCombination = or
damit sollte es laufen
Gruss Martin
Anpassungen an das Ziel:
Der MDIR soll das Licht schalten für 135 Sekunden wenn der Brightness Wert kleiner als 40 ist. *
Der MDIR soll das Licht nachts für 135 Sekunden schalten, aber mit nur 10% Lichtleistung **
Wenn der Brightness Wert >40 ist soll das Licht nur über den Taster des Dimmers schalten
*über Die Register würde ich dem MDIR gerne sagen das er nach schalten 120 Sekunden nicht aktiv eingreift.
**der zweite Kanal würde also über define at nur zwischen 23 und 6 Uhr die Leistung auf 10% reduzieren.
Ein set hm fl_dim1.1 motionOnDim fl_mot:short 135 40
Bewirkt allerdings eine Art Wechselschaltung - die erste Bewegung schaltet den Dimmer an, die nächste wieder ab...
Jetzt Blick ich nicht mehr durch...
Mit der Leistung des MDIR ohne peeren bin ich ehrlich gesagt unzufrieden, teilweise ist man schon durch den Flur wenn das licht angeht, ich hoffe das es durch das peeren besser wird - und frage mich ob man im MDIR eine Empfindlichkeit einstellen kann sodass dieser sensibler schaltet...
hab ich noch nicht komplett.
im Bezug auf den motion-anteil. Hört sich einfach an
- wenn dunkel (<40) und Bewegung Licht 10% an für 135 sec
was soll im Zeitraum 23-6:30 begrenzt werden? Taster/Bewegungsmelder, alles garnichts?
ZitatEin set hm fl_dim1.1 motionOnDim fl_mot:short 135 40
Bewirkt allerdings eine Art Wechselschaltung - die erste Bewegung schaltet den Dimmer an, die nächste wieder ab...
verstehe ich nicht. Sollte nicht sein. kannst du die register einmal schicken? Nach dem template kann der mdir nicht "abschalten" - nur an.
Zum MotionDetector selbst: Alles was du einstellen kannst ist ind en Registern. Ichkann dirnichtlalle beschreiben, da ich keinen zum testen habe. Dennoch sind
evtFltrPeriod
evtFltrNum
darüber sollte sich die sensitivity einstellen lassen
deine "auszeit" denke ich sollte man mit
minInterval
captInInterval
steuern. wenn du captureIn Interval verbietest sollte der mdir in dieser Zeit nicht mehr triggern. dann das Interval auf 120 setzen. Steht so in der Registerbeschreibung.
Soweit klar?
Gruss Martin
also wenn MDIR Brightness <40 dann Licht 100%
und nur wenn zwischen 23:00 und 06:30 Licht nach trigger MDIR 10%
Ich stell mir das so vor, MDIR schaltet Kanal 1 wenn <40 mit 100%
zwischen 23:00 und 06:30 die Leistung von Kanal 2 auf 10% setzen
Kanal 1 und Kanal 2 UND verknüpft, sodass der kleiner wert gilt.
Kanal 3 = oder Taster 100%
get fl_dim1.1 reg all liefert:
fl_dim1.1 type:dimmer -
list:peer register :value
1: fuseDelay :1 s
1: logicCombination :or
1: ovrTempLvl :80 C
1: powerUpAction :off
1: redLvl :40 %
1: redTempLvl :75 C
1: statusInfoMinDly :2 s
1: statusInfoRandom :1 s
1: transmitTryMax :6
3:fl_mot_chn:01 lgActionTypeDim :toggelDim
3:fl_mot_chn:01 lgActionTypeDim :toggelDim
3:fl_mot_chn:01 lgCtDlyOff :geLo
3:fl_mot_chn:01 lgCtDlyOff :geLo
3:fl_mot_chn:01 lgCtDlyOn :geLo
3:fl_mot_chn:01 lgCtDlyOn :geLo
3:fl_mot_chn:01 lgCtOff :geLo
3:fl_mot_chn:01 lgCtOff :geLo
3:fl_mot_chn:01 lgCtOn :geLo
3:fl_mot_chn:01 lgCtOn :geLo
3:fl_mot_chn:01 lgCtRampOff :geLo
3:fl_mot_chn:01 lgCtRampOff :geLo
3:fl_mot_chn:01 lgCtRampOn :geLo
3:fl_mot_chn:01 lgCtRampOn :geLo
3:fl_mot_chn:01 lgCtValHi :100
3:fl_mot_chn:01 lgCtValHi :100
3:fl_mot_chn:01 lgCtValLo :50
3:fl_mot_chn:01 lgCtValLo :50
3:fl_mot_chn:01 lgDimJtDlyOff :rampOff
3:fl_mot_chn:01 lgDimJtDlyOff :rampOff
3:fl_mot_chn:01 lgDimJtDlyOn :rampOn
3:fl_mot_chn:01 lgDimJtDlyOn :rampOn
3:fl_mot_chn:01 lgDimJtOff :dlyOn
3:fl_mot_chn:01 lgDimJtOff :dlyOn
3:fl_mot_chn:01 lgDimJtOn :dlyOff
3:fl_mot_chn:01 lgDimJtOn :dlyOff
3:fl_mot_chn:01 lgDimJtRampOff :off
3:fl_mot_chn:01 lgDimJtRampOff :off
3:fl_mot_chn:01 lgDimJtRampOn :on
3:fl_mot_chn:01 lgDimJtRampOn :on
3:fl_mot_chn:01 lgDimMaxLvl :100 %
3:fl_mot_chn:01 lgDimMaxLvl :100 %
3:fl_mot_chn:01 lgDimMinLvl :0 %
3:fl_mot_chn:01 lgDimMinLvl :0 %
3:fl_mot_chn:01 lgDimStep :5 %
3:fl_mot_chn:01 lgDimStep :5 %
3:fl_mot_chn:01 lgMultiExec :on
3:fl_mot_chn:01 lgMultiExec :on
3:fl_mot_chn:01 lgOffDly :0 s
3:fl_mot_chn:01 lgOffDly :0 s
3:fl_mot_chn:01 lgOffDlyBlink :on
3:fl_mot_chn:01 lgOffDlyBlink :on
3:fl_mot_chn:01 lgOffDlyNewTime :0.4 s
3:fl_mot_chn:01 lgOffDlyNewTime :0.4 s
3:fl_mot_chn:01 lgOffDlyOldTime :0.4 s
3:fl_mot_chn:01 lgOffDlyOldTime :0.4 s
3:fl_mot_chn:01 lgOffLevel :0 %
3:fl_mot_chn:01 lgOffLevel :0 %
3:fl_mot_chn:01 lgOffTime :111600 s
3:fl_mot_chn:01 lgOffTime :111600 s
3:fl_mot_chn:01 lgOffTimeMode :absolut
3:fl_mot_chn:01 lgOffTimeMode :absolut
3:fl_mot_chn:01 lgOnDly :0 s
3:fl_mot_chn:01 lgOnDly :0 s
3:fl_mot_chn:01 lgOnDlyMode :setToOff
3:fl_mot_chn:01 lgOnDlyMode :setToOff
3:fl_mot_chn:01 lgOnLevel :100 %
3:fl_mot_chn:01 lgOnLevel :100 %
3:fl_mot_chn:01 lgOnLvlPrio :high
3:fl_mot_chn:01 lgOnLvlPrio :high
3:fl_mot_chn:01 lgOnMinLevel :10 %
3:fl_mot_chn:01 lgOnMinLevel :10 %
3:fl_mot_chn:01 lgOnTime :111600 s
3:fl_mot_chn:01 lgOnTime :111600 s
3:fl_mot_chn:01 lgOnTimeMode :absolut
3:fl_mot_chn:01 lgOnTimeMode :absolut
3:fl_mot_chn:01 lgRampOffTime :0.5 s
3:fl_mot_chn:01 lgRampOffTime :0.5 s
3:fl_mot_chn:01 lgRampOnTime :0.5 s
3:fl_mot_chn:01 lgRampOnTime :0.5 s
3:fl_mot_chn:01 lgRampSstep :5 %
3:fl_mot_chn:01 lgRampSstep :5 %
3:fl_mot_chn:01 shActionTypeDim :jmpToTarget
3:fl_mot_chn:01 shActionTypeDim :jmpToTarget
3:fl_mot_chn:01 shCtDlyOff :geLo
3:fl_mot_chn:01 shCtDlyOff :geLo
3:fl_mot_chn:01 shCtDlyOn :geLo
3:fl_mot_chn:01 shCtDlyOn :geLo
3:fl_mot_chn:01 shCtOff :geLo
3:fl_mot_chn:01 shCtOff :geLo
3:fl_mot_chn:01 shCtOn :geLo
3:fl_mot_chn:01 shCtOn :geLo
3:fl_mot_chn:01 shCtRampOff :geLo
3:fl_mot_chn:01 shCtRampOff :geLo
3:fl_mot_chn:01 shCtRampOn :geLo
3:fl_mot_chn:01 shCtRampOn :geLo
3:fl_mot_chn:01 shCtValHi :100
3:fl_mot_chn:01 shCtValHi :100
3:fl_mot_chn:01 shCtValLo :50
3:fl_mot_chn:01 shCtValLo :50
3:fl_mot_chn:01 shDimJtDlyOff :rampOff
3:fl_mot_chn:01 shDimJtDlyOff :rampOff
3:fl_mot_chn:01 shDimJtDlyOn :rampOn
3:fl_mot_chn:01 shDimJtDlyOn :rampOn
3:fl_mot_chn:01 shDimJtOff :dlyOn
3:fl_mot_chn:01 shDimJtOff :dlyOn
3:fl_mot_chn:01 shDimJtOn :dlyOff
3:fl_mot_chn:01 shDimJtOn :dlyOff
3:fl_mot_chn:01 shDimJtRampOff :off
3:fl_mot_chn:01 shDimJtRampOff :off
3:fl_mot_chn:01 shDimJtRampOn :on
3:fl_mot_chn:01 shDimJtRampOn :on
3:fl_mot_chn:01 shDimMaxLvl :100 %
3:fl_mot_chn:01 shDimMaxLvl :100 %
3:fl_mot_chn:01 shDimMinLvl :0 %
3:fl_mot_chn:01 shDimMinLvl :0 %
3:fl_mot_chn:01 shDimStep :5 %
3:fl_mot_chn:01 shDimStep :5 %
3:fl_mot_chn:01 shOffDly :0 s
3:fl_mot_chn:01 shOffDly :0 s
3:fl_mot_chn:01 shOffDlyBlink :on
3:fl_mot_chn:01 shOffDlyBlink :on
3:fl_mot_chn:01 shOffDlyNewTime :0.4 s
3:fl_mot_chn:01 shOffDlyNewTime :0.4 s
3:fl_mot_chn:01 shOffDlyOldTime :0.4 s
3:fl_mot_chn:01 shOffDlyOldTime :0.4 s
3:fl_mot_chn:01 shOffLevel :0 %
3:fl_mot_chn:01 shOffLevel :0 %
3:fl_mot_chn:01 shOffTime :111600 s
3:fl_mot_chn:01 shOffTime :111600 s
3:fl_mot_chn:01 shOffTimeMode :absolut
3:fl_mot_chn:01 shOffTimeMode :absolut
3:fl_mot_chn:01 shOnDly :0 s
3:fl_mot_chn:01 shOnDly :0 s
3:fl_mot_chn:01 shOnDlyMode :setToOff
3:fl_mot_chn:01 shOnDlyMode :setToOff
3:fl_mot_chn:01 shOnLevel :100 %
3:fl_mot_chn:01 shOnLevel :100 %
3:fl_mot_chn:01 shOnLvlPrio :high
3:fl_mot_chn:01 shOnLvlPrio :high
3:fl_mot_chn:01 shOnMinLevel :10 %
3:fl_mot_chn:01 shOnMinLevel :10 %
3:fl_mot_chn:01 shOnTime :111600 s
3:fl_mot_chn:01 shOnTime :111600 s
3:fl_mot_chn:01 shOnTimeMode :absolut
3:fl_mot_chn:01 shOnTimeMode :absolut
3:fl_mot_chn:01 shRampOffTime :0.5 s
3:fl_mot_chn:01 shRampOffTime :0.5 s
3:fl_mot_chn:01 shRampOnTime :0.5 s
3:fl_mot_chn:01 shRampOnTime :0.5 s
3:fl_mot_chn:01 shRampSstep :5 %
3:fl_mot_chn:01 shRampSstep :5 %
Hi,
warum ist jede Zeile doppelt? Ist das ein Ausgabefehler?
So würde ich channel 2 (mein Faforit für den MDIR) programmieren.
Kommandos nur bei Licht kleiner 40 entgegennehmen.
3:fl_mot_chn:01 shCtDlyOff :ltLo
3:fl_mot_chn:01 shCtDlyOn :ltLo
3:fl_mot_chn:01 shCtOff :ltLo
3:fl_mot_chn:01 shCtOn :ltLo
3:fl_mot_chn:01 shCtRampOff :ltLo
3:fl_mot_chn:01 shCtRampOn :ltLo
3:fl_mot_chn:01 shCtValLo :40
jetzt die Jumptabelle.
3:fl_mot_chn:01 shDimJtDlyOff :dlyOn
3:fl_mot_chn:01 shDimJtRampOff :dlyOn
3:fl_mot_chn:01 shDimJtOff :dlyOn
3:fl_mot_chn:01 shDimJtDlyOn :rampOn
3:fl_mot_chn:01 shDimJtRampOn :no
3:fl_mot_chn:01 shDimJtOn :on
Anternativ könnte shDimJtOn :no
gesetzt werden. Damit wird die einschaltzeit NICHT verlängert, sollte noche in trigger WÄHREND on kommen
und die Level (sind klar, denke ich ):
3:fl_mot_chn:01 shOnLevel :100 %
sowie die Anschaltzeit
3:fl_mot_chn:01 shOnTime :135
Das ganze oben sollte mit einem Rutsch funktionieren, wenn du das Template nutzt
Bei dem Zeitchannel kannst du
a) den Kanal über "at" einfach auf 10/100% setzen oder
b) ihn über einen timer intern laufen lassen und über FHEM täglich die Zeit synchen.
Gruss Martin
Wow, zwei Stunden gebastelt und keinen millimeter weiter...
Was mache ich nur falsch?
set fl_dim1.2 regSet fl_mot_chn:01 shCtDlyOff :ltLo
gibt mir zurück:
fl_mot_chn:01 failed: supported register are fuseDelay intKeyVisib lgActionTypeDim lgCtDlyOff lgCtDlyOn lgCtOff lgCtOn lgCtRampOff lgCtRampOn lgCtValHi lgCtValLo lgDimElsActionType lgDimElsJtDlyOff lgDimElsJtDlyOn lgDimElsJtOff lgDimElsJtOn lgDimElsJtRampOff lgDimElsJtRampOn lgDimElsOffTimeMd lgDimElsOnTimeMd lgDimJtDlyOff lgDimJtDlyOn lgDimJtOff lgDimJtOn lgDimJtRampOff lgDimJtRampOn lgDimMaxLvl lgDimMinLvl lgDimStep lgMultiExec lgOffDly lgOffDlyBlink lgOffDlyNewTime lgOffDlyOldTime lgOffLevel lgOffTime lgOffTimeMode lgOnDly lgOnDlyMode lgOnLevel lgOnLvlPrio lgOnMinLevel lgOnTime lgOnTimeMode lgRampOffTime lgRampOnTime lgRampSstep logicCombination ovrTempLvl pairCentral powerUpAction redLvl redTempLvl shActionTypeDim shCtDlyOff shCtDlyOn shCtOff shCtOn shCtRampOff shCtRampOn shCtValHi shCtValLo shDimElsActionType shDimElsJtDlyOff shDimElsJtDlyOn shDimElsJtOff shDimElsJtOn shDimElsJtRampOff shDimElsJtRampOn shDimElsOffTimeMd shDimElsOnTimeMd shDimJtDlyOff shDimJtDlyOn shDimJtOff shDimJtOn shDimJtRampOff shDimJtRampOn shDimMaxLvl shDimMinLvl shDimStep shOffDly shOffDlyBlink shOffDlyNewTime shOffDlyOldTime shOffLevel shOffTime shOffTimeMode shOnDly shOnDlyMode shOnLevel shOnLvlPrio shOnMinLevel shOnTime shOnTimeMode shRampOffTime shRampOnTime shRampSstep statusInfoMinDly statusInfoRandom transmitTryMax
Durchs lesen in dem ein oder anderem thread bin ich auf den peerCheck aufmerksam geworden...
schön das FHEM solche werzeuge bereithält.
weniger schön das Ergebnis
set hm peerCheck - lieferte mir gerade
peerCheck done:
incomplete list
empty list
empty: bd_sw
empty: fl_dim
empty: fl_mot
empty: sw_all
peer not verified
fl_dim1.1 p:fl_mot
Hi Der-Lolo,
ZitatWow, zwei Stunden gebastelt und keinen millimeter weiter...
das tut mir leid.
das regset arbeitet (siehe Commandref):
set <channel-entity> regSet <regName> <value> <peerChannel>
wenn du ein "get reg" machst bekommst du
list:peer register :value
3:fl_mot_chn:01 shCtDlyOff :ltLo
also
list:3
peer: fl_mot_chn:01
reg: shCtDlyOff
value: ltLo
also ist das Kommando:
set fl_dim1.2 regSet shCtDlyOff ltLo fl_mot_chn:01
dein "Sender" ist fl_mot_chn:01 und hat offensichtlich keine eigene Channel-entity? wenn du diesem Channel als entity definierst fällt der doppelpunkt weg
Zitatincomplete list
keine Einträge, also gut
Zitatempty list
empty: bd_sw
empty: fl_dim
empty: fl_mot
empty: sw_all
für diese Entities wurden keine peers gefunden
Zitatpeer not verified
fl_dim1.1 p:fl_mot
diese peer<->peer verknüpfung konnte nicht verifiziert werden. d.h. entweder fehlt der Eintrag bei fl_dim1.1 oder bei fl_mot
Gruss Martin
Hallo Martin,
vielen Dank für Deine Hilfe und Deine mühe - ich bin diese Woche beruflich im Ausland, werde also nicht an der Hardware arbeiten können.
Ich wünsche mir aber das grundlegende Funktionen auch ohne FHEM funktionieren, der WAF steigt doch sicher deutlich wenn zumindest die Grundfunktionen auch funktionieren falls FHEM mal nicht verfügbar ist. Bei meinen Basteleien kam es mittlerweile mehrfach zu dem Eintrag :
2013.09.08 19:58:50 1: CallBlockingFn: Can't connect to localhost:7072
;-) Ich schätze mal ich habe den Raspi abstürzen lassen - oder was bedeutet das?
Kannst DU mir Lesematerial empfehlen damit ich mich besser in dieses thema einarbeiten kann?
Hi,
zum einen hoffe ich, dass das Schreiben der Register verständlich ist. Zum Anderen wollte ich für standart-funktionen "templates" vorsehen bzw von Usern schreiben lassen. Das schalten per motion-detector ist ein klarer Kandidat, den es schon gibt.
Einlesen in HM empfehle ich neben Wiki das EinsteigerDoc.
Zu welchen Themen suchst du Lesematerial?
CallBlocking ist ein Angang in FHEM weitere Processe zu betreiben um diese zeitlich vom hauptprozess zu entkoppeln. Die "rückführung" der Ergebnisse wird über ein einloggen des Tochterprocesses zu FHEM erreicht. Das ist eine recht lose und fragile Kopplung, aber einfach zu erstellen. Was hier schief gegangen ist, ist dass das Resultat des Tochterprozesses sich nicht einloggen kann. somit können die erarbeiteten Ergebnisse nicht eingearbeitet werden.
Warum das passiert kann ich nicht sagen - hier spielen neben den FHEM interna auch System-resources eine Rolle - das ist eben der Schwachpunkt der Implementierung.
Gruss Martin