Hallo, ich versuche gerade den alten Inhalt von state an meinem Rolladenaktor auszulesen.
Klappt mir der Anleitung aus der Commandref/Wiki eigentlich auch gut. Einziges Manko ist, was er im state_old drin stehen hat:
state 20
state_old set_20
Da sollte eigentlich eine 0 oder off drin stehen, da das Rollo vorher komplett zu war.
Woher kommt das set_20? Ist ja mehr eine Anweisung als ein state, oder.
Gibt es eine Möglichkeit den alten Stand des Rollos abzufragen? also wirklich die 0 bzw. off?
Hier das List zum Rollo selbst:
Internals:
.FhemMetaInternals 1
.triggerUsed 0
DEF 70B5AE
FUUID 5fc3cb17-f33f-793a-cb4f-14c28698bf2445e5
FVERSION 10_CUL_HM.pm:0.234210/2020-12-26
Homematic_Gateway_MSGCNT 34
Homematic_Gateway_RAWMSG 04030044BE800270B5AE1111110101280049
Homematic_Gateway_RSSI -68
Homematic_Gateway_TIME 2021-01-10 11:39:26
IODev Homematic_Gateway
LASTInputDev Homematic_Gateway
MSGCNT 34
NAME sz_rolladen_Schlafzimmerfenster
NOTIFYDEV global
NR 94
NTFY_ORDER 50-sz_rolladen_Schlafzimmerfenster
STATE 20
TYPE CUL_HM
chanNo 01
lastMsg No:BE - t:02 s:70B5AE d:111111 0101280049
peerList self01,self02
protLastRcv 2021-01-10 11:39:26
protRcv 34 last_at:2021-01-10 11:39:26
protResnd 1 last_at:2021-01-09 09:25:45
protSnd 35 last_at:2021-01-10 11:39:26
protState CMDs_done
rssi_Homematic_Gateway cnt:27 min:-84 max:-73 avg:-75.62 lst:-73
rssi_at_Homematic_Gateway cnt:34 min:-83 max:-67 avg:-71.44 lst:-68
.attraggr:
.attreocr:
.*
.attrminint:
.attrtocr:
.*
.or:
state
.userReadings:
HASH(0x5806b748)
OLDREADINGS:
2021-01-10 11:39:26 state set_20
READINGS:
2020-12-01 10:06:29 .D-devInfo 010100
2020-12-01 10:06:29 .D-stc 30
2020-12-01 10:06:33 .R-confBtnTime 5 min
2020-12-01 14:14:19 .R-driveDown 17 s
2020-12-01 10:06:34 .R-driveTurn 0.5 s
2020-12-01 14:13:43 .R-driveUp 19 s
2020-12-01 14:18:26 .R-intKeyVisib visib
2020-12-01 10:06:33 .R-localResDis off
2020-12-01 10:06:33 .R-pairCentral 0x111111
2020-12-01 10:06:34 .R-refRunCounter 0
2020-12-01 14:18:29 .R-self01-lgActionType jmpToTarget
2020-12-01 14:18:29 .R-self01-lgBlJtDlyOff dlyOn
2020-12-01 14:18:29 .R-self01-lgBlJtDlyOn refOn
2020-12-01 14:18:29 .R-self01-lgBlJtOff dlyOn
2020-12-01 14:18:29 .R-self01-lgBlJtOn dlyOn
2020-12-01 14:18:29 .R-self01-lgBlJtRampOff off
2020-12-01 14:18:29 .R-self01-lgBlJtRampOn rampOn
2020-12-01 14:18:29 .R-self01-lgBlJtRefOff off
2020-12-01 14:18:29 .R-self01-lgBlJtRefOn rampOn
2020-12-01 14:18:29 .R-self01-lgCtDlyOff geLo
2020-12-01 14:18:29 .R-self01-lgCtDlyOn geLo
2020-12-01 14:18:29 .R-self01-lgCtOff geLo
2020-12-01 14:18:29 .R-self01-lgCtOn geLo
2020-12-01 14:18:29 .R-self01-lgCtRampOff geLo
2020-12-01 14:18:29 .R-self01-lgCtRampOn geLo
2020-12-01 14:18:29 .R-self01-lgCtRefOff geLo
2020-12-01 14:18:29 .R-self01-lgCtRefOn geLo
2020-12-01 14:18:29 .R-self01-lgCtValHi 100
2020-12-01 14:18:29 .R-self01-lgCtValLo 50
2020-12-01 14:18:29 .R-self01-lgDriveMode direct
2020-12-01 14:18:29 .R-self01-lgMaxTimeF 0.4 s
2020-12-01 14:18:29 .R-self01-lgMultiExec on
2020-12-01 14:18:29 .R-self01-lgOffDly 0 s
2020-12-01 14:18:29 .R-self01-lgOffLevel 0 %
2020-12-01 14:18:29 .R-self01-lgOffTime unused
2020-12-01 14:18:29 .R-self01-lgOffTimeMode absolut
2020-12-01 14:18:29 .R-self01-lgOnDly 0 s
2020-12-01 14:18:29 .R-self01-lgOnLevel 100 %
2020-12-01 14:18:29 .R-self01-lgOnTime unused
2020-12-01 14:18:29 .R-self01-lgOnTimeMode absolut
2020-12-01 14:18:39 .R-self01-shActionType jmpToTarget
2020-12-01 14:18:39 .R-self01-shBlJtDlyOff dlyOn
2020-12-01 14:18:39 .R-self01-shBlJtDlyOn refOn
2020-12-01 14:18:39 .R-self01-shBlJtOff dlyOn
2020-12-01 14:18:39 .R-self01-shBlJtOn dlyOn
2020-12-01 14:18:39 .R-self01-shBlJtRampOff off
2020-12-01 14:18:39 .R-self01-shBlJtRampOn rampOn
2020-12-01 14:18:29 .R-self01-shBlJtRefOff off
2020-12-01 14:18:29 .R-self01-shBlJtRefOn rampOn
2020-12-01 14:18:39 .R-self01-shCtDlyOff geLo
2020-12-01 14:18:39 .R-self01-shCtDlyOn geLo
2020-12-01 14:18:39 .R-self01-shCtOff geLo
2020-12-01 14:18:39 .R-self01-shCtOn geLo
2020-12-01 14:18:39 .R-self01-shCtRampOff geLo
2020-12-01 14:18:39 .R-self01-shCtRampOn geLo
2020-12-01 14:18:29 .R-self01-shCtRefOff geLo
2020-12-01 14:18:29 .R-self01-shCtRefOn geLo
2020-12-01 14:18:39 .R-self01-shCtValHi 100
2020-12-01 14:18:39 .R-self01-shCtValLo 50
2020-12-01 14:18:29 .R-self01-shDriveMode direct
2020-12-01 14:18:29 .R-self01-shMaxTimeF unused
2020-12-01 14:18:39 .R-self01-shMultiExec off
2020-12-01 14:18:39 .R-self01-shOffDly 0 s
2020-12-01 14:18:39 .R-self01-shOffLevel 0 %
2020-12-01 14:18:39 .R-self01-shOffTime unused
2020-12-01 14:18:39 .R-self01-shOffTimeMode absolut
2020-12-01 14:18:39 .R-self01-shOnDly 0 s
2020-12-01 14:18:29 .R-self01-shOnLevel 100 %
2020-12-01 14:18:39 .R-self01-shOnTime unused
2020-12-01 14:18:39 .R-self01-shOnTimeMode absolut
2020-12-01 14:18:30 .R-self02-lgActionType jmpToTarget
2020-12-01 14:18:30 .R-self02-lgBlJtDlyOff refOff
2020-12-01 14:18:30 .R-self02-lgBlJtDlyOn dlyOff
2020-12-01 14:18:30 .R-self02-lgBlJtOff dlyOff
2020-12-01 14:18:30 .R-self02-lgBlJtOn dlyOff
2020-12-01 14:18:30 .R-self02-lgBlJtRampOff rampOff
2020-12-01 14:18:30 .R-self02-lgBlJtRampOn on
2020-12-01 14:18:30 .R-self02-lgBlJtRefOff rampOff
2020-12-01 14:18:30 .R-self02-lgBlJtRefOn on
2020-12-01 14:18:30 .R-self02-lgCtDlyOff geLo
2020-12-01 14:18:30 .R-self02-lgCtDlyOn geLo
2020-12-01 14:18:30 .R-self02-lgCtOff geLo
2020-12-01 14:18:30 .R-self02-lgCtOn geLo
2020-12-01 14:18:30 .R-self02-lgCtRampOff geLo
2020-12-01 14:18:30 .R-self02-lgCtRampOn geLo
2020-12-01 14:18:30 .R-self02-lgCtRefOff geLo
2020-12-01 14:18:30 .R-self02-lgCtRefOn geLo
2020-12-01 14:18:30 .R-self02-lgCtValHi 100
2020-12-01 14:18:30 .R-self02-lgCtValLo 50
2020-12-01 14:18:30 .R-self02-lgDriveMode direct
2020-12-01 14:18:30 .R-self02-lgMaxTimeF 0.4 s
2020-12-01 14:18:30 .R-self02-lgMultiExec on
2020-12-01 14:18:30 .R-self02-lgOffDly 0 s
2020-12-01 14:18:30 .R-self02-lgOffLevel 0 %
2020-12-01 14:18:30 .R-self02-lgOffTime unused
2020-12-01 14:18:30 .R-self02-lgOffTimeMode absolut
2020-12-01 14:18:30 .R-self02-lgOnDly 0 s
2020-12-01 14:18:30 .R-self02-lgOnLevel 100 %
2020-12-01 14:18:30 .R-self02-lgOnTime unused
2020-12-01 14:18:30 .R-self02-lgOnTimeMode absolut
2020-12-01 14:18:30 .R-self02-shActionType jmpToTarget
2020-12-01 14:18:30 .R-self02-shBlJtDlyOff refOff
2020-12-01 14:18:30 .R-self02-shBlJtDlyOn dlyOff
2020-12-01 14:18:30 .R-self02-shBlJtOff dlyOff
2020-12-01 14:18:30 .R-self02-shBlJtOn dlyOff
2020-12-01 14:18:30 .R-self02-shBlJtRampOff rampOff
2020-12-01 14:18:30 .R-self02-shBlJtRampOn on
2020-12-01 14:18:30 .R-self02-shBlJtRefOff rampOff
2020-12-01 14:18:30 .R-self02-shBlJtRefOn on
2020-12-01 14:18:30 .R-self02-shCtDlyOff geLo
2020-12-01 14:18:30 .R-self02-shCtDlyOn geLo
2020-12-01 14:18:30 .R-self02-shCtOff geLo
2020-12-01 14:18:30 .R-self02-shCtOn geLo
2020-12-01 14:18:30 .R-self02-shCtRampOff geLo
2020-12-01 14:18:30 .R-self02-shCtRampOn geLo
2020-12-01 14:18:30 .R-self02-shCtRefOff geLo
2020-12-01 14:18:30 .R-self02-shCtRefOn geLo
2020-12-01 14:18:30 .R-self02-shCtValHi 100
2020-12-01 14:18:30 .R-self02-shCtValLo 50
2020-12-01 14:18:30 .R-self02-shDriveMode direct
2020-12-01 14:18:30 .R-self02-shMaxTimeF unused
2020-12-01 14:18:30 .R-self02-shMultiExec off
2020-12-01 14:18:30 .R-self02-shOffDly 0 s
2020-12-01 14:18:30 .R-self02-shOffLevel 0 %
2020-12-01 14:18:30 .R-self02-shOffTime unused
2020-12-01 14:18:30 .R-self02-shOffTimeMode absolut
2020-12-01 14:18:30 .R-self02-shOnDly 0 s
2020-12-01 14:18:30 .R-self02-shOnLevel 100 %
2020-12-01 14:18:30 .R-self02-shOnTime unused
2020-12-01 14:18:30 .R-self02-shOnTimeMode absolut
2020-12-01 10:06:34 .R-sign off
2020-12-01 10:06:34 .R-statusInfoMinDly 2 s
2020-12-01 10:06:34 .R-statusInfoRandom 1 s
2020-12-01 10:06:34 .R-transmitTryMax 6
2021-01-09 09:25:06 .associatedWith sz_rolladen_Schlafzimmerfenster,sz_rolladen_Schlafzimmerfenster
2021-01-08 22:45:47 .peerListRDate 2021-01-08 22:45:47
2021-01-10 11:39:26 .protLastRcv 20210110113926
2020-12-01 14:18:22 CommandAccepted yes
2020-12-01 10:06:29 D-firmware 2.11
2020-12-01 10:06:29 D-serialNr REQ0112292
2020-12-01 14:18:36 PairedTo 0x111111
2021-01-08 22:45:45 RegL_00. 00:00 02:81 0A:11 0B:11 0C:11 15:05 18:00
2021-01-08 22:45:46 RegL_01. 00:00 08:00 09:00 0A:00 0B:00 0C:AA 0D:00 0E:BE 0F:05 10:00 30:06 56:00 57:24
2021-01-08 22:45:48 RegL_03.self01 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:11 0C:12 0D:68 0E:00 0F:00 11:C8 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 1A:00 1B:00 1C:00 1D:FF 1E:68 1F:00 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:11 8C:12 8D:68 8E:00 8F:00 91:C8 92:00 93:00 94:00 95:00 96:00 97:00 98:00 99:00 9A:00 9B:00 9C:00 9D:04 9E:68 9F:00
2021-01-08 22:45:49 RegL_03.self02 00:00 11:C8 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 1A:00 1B:00 1C:00 1D:FF 1E:93 1F:00 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:44 8C:54 8D:93 8E:00 8F:00 91:C8 92:00 93:00 94:00 95:00 96:00 97:00 98:00 99:00 9A:00 9B:00 9C:00 9D:04 9E:93 9F:00
2021-01-09 00:38:57 Schaltstatus 1
2020-12-02 19:37:37 Schaltzeit 08:00
2020-12-02 19:37:42 Schaltzeit_sa 09:00
2020-12-13 14:27:43 Schaltzeit_we 10:30
2021-01-08 22:45:49 cfgState ok
2021-01-10 11:39:26 commState CMDs_done
2021-01-10 11:39:26 deviceMsg 20 (to Homematic_Gateway)
2021-01-10 11:39:26 level 20
2021-01-10 11:39:26 motor stop:20
2021-01-10 11:39:26 pct 20
2021-01-09 09:24:42 peerList self01,self02
2020-12-06 12:22:56 powerOn 2020-12-06 12:22:56
2021-01-10 11:39:22 recentStateType ack
2021-01-10 11:39:26 state 20
2021-01-10 11:39:26 state_old set_20
2020-12-01 14:19:50 timedOn off
helper:
HM_CMDNR 190
cSnd 1111111170B5AE020128,1111111170B5AE020128
dlvlCmd ++A01111111170B5AE020128
mId 0005
peerFriend peerSens,peerVirt
peerOpt 3:blindActuator
regLst 0,1,3p
rxType 1
supp_Pair_Rep 0
cmds:
TmplKey self01,self02:no:1610180706.38963
TmplTs 1610180706.38963
cmdKey 1:1:0::sz_rolladen_Schlafzimmerfenster:0005:01:self01,self02
cmdLst:
assignHmKey noArg
clear [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
deviceRename -newName-
down 'change:'[(0..100;1|{10})] [(-ontime-|{})] [(-ramptime-|{})]
eventL -peer- -cond-
eventS -peer- -cond-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6) [-peerChn-]
getVersion noArg
inhibit [(on|{off})]
off noArg
on noArg
pair noArg
pct -value- [-ontime-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerIODev [IO] -btn- [({set}|unset)] 'not for future use'
peerSmart -peerOpt-
press [(long|{short})] [(-peer-|{self01})] [(-repCount-|{0})] [(-repDelay-|{0.25})]
pressL [(-peer-|{self01})]
pressS [(-peer-|{self01})]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- -addr2:data2-...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
statusRequest noArg
stop noArg
toggle noArg
toggleDir noArg
tplDel -tplDel-
tplSet_0 -tplChan-
tplSet_self01 -tplPeer-
tplSet_self02 -tplPeer-
unpair noArg
up 'change:'[(0..100;1|{10})] [(-ontime-|{})] [(-ramptime-|{})]
lst:
condition slider,0,1,255
peer self01,self02
peerOpt ku_kontakt_fenster,sz_kontakt_fenster_links,sz_kontakt_fenster_rechts,wz_kontakt_balkontuer
tplChan
tplDel
tplPeer SwOnCond_short,SwCondBelow_long,SwCondAbove_short,SwOnCond_long,BlStopUpSh_long,BlStopDnSh_long,BlStopUpLg_short,BlStopDnLg_short,BlStopUpLg_long,BlStopDnLg_long,BlStopUpSh_short,SwCondAbove_long,BlStopDnSh_short,SwCondBelow_short
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
dir:
cur stop
rct up
expert:
def 0
det 0
raw 1
tpl 0
io:
newChn +70B5AE,00,00,00
nextSend 1610275166.75894
prefIO
rxt 0
vccu
p:
70B5AE
00
00
00
mRssi:
mNo BE
io:
Homematic_Gateway:
-64
-64
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
chn 1
dev 1
prs 1
rssi:
Homematic_Gateway:
avg -75.6296296296296
cnt 27
lst -73
max -73
min -84
at_Homematic_Gateway:
avg -71.4411764705882
cnt 34
lst -68
max -67
min -83
tmpl:
Attributes:
.mId 0005
IODev Homematic_Gateway
alias Schlafzimmerrolladen
assistantName Schlafzimmerrollo
autoReadReg 4_reqStatus
devStateIcon off:shutter_closed 0:shutter_closed 10:shutter_7 20:fts_shutter_80 30:shutter_6 40:shutter_5 50:shutter_halfopen 60:shutter_4 70:shutter_3 80:shutter_2 90:shutter_1 100:shutter_open on:shutter_open
event-on-change-reading .*
expert rawReg
firmware 2.11
gassistantName Schlafzimmerrollo
genericDeviceType shutter
group Rolladen
icon fts_shutter_20
model HM-LC-BL1-FM
oldreadings state
peerIDs 00000000,70B5AE01,70B5AE02,
room CUL_HM,GAssistant,Wohnung->Schlafzimmer
serialNr REQ0112292
subType blindActuator
timestamp-on-change-reading .*
userReadings state_old { OldReadingsVal("sz_rolladen_Schlafzimmerfenster", "state", ReadingsVal("sz_rolladen_Schlafzimmerfenster", "state", 0)) }
verbose 2
webCmd statusRequest:toggleDir:on:off:up:down:stop
Homematic hat einen Zwischenstand.
Es ist "bidirektional"...
Also:
fhem -> on an den Aktor
state: set_on
Aktor habe on -> fhem
state: on
Wenn du im Eventmonitor schaust siehst du das...
Also ist der old_state korrekt mit set_
Wenn du es anders willst, dann ein userReadings wo du eben set_ "ausblendest". Dann hast du "nur" den "Zustand" und kannst das mittels "oldreadings" auch den "alten" Stand abfragen...
Gruß, Joachim
Also der Aktor hat einen aktuellen Zustand von 20, der state_old den Wert set_20. Soweit korrekt, das mit der Rückmeldung wusste ich bisher nicht.
Wenn ich das "set_" ausblende bleibt immer noch der aktuelle Wert, ich bräuchte aber den alten Wert der vor dem Bewegen des Rolladenaktors der state war.
Zitat...und kannst das mittels "oldreadings" auch den "alten" Stand abfragen...
Ich habe ja dann im Oldreading immer noch den aktuellen Wert stehen und nicht den Wert vom vorherigen Zustand. JEdenfalls wüsste ich nicht, wie ich durch das weglassen von "set_" den alten Wert von state bekomme, soweit ich den Gedanken verstehe. Ich brauche ja den alten Wert, also ein off wenn das Rollo vorher geschlossen war. Es müsste also die Meldung an den Aktor nicht in den state geschrieben werden, oder ein OldOldReading existieren..
Gibt es ein Reading (ggf mit Oldreadings) in dem definitiv der alte Stand des Rolladen enthalten ist, ich sehe bislang nichts.
Ansonsten viel mir als Lösung lediglich ein, den Umweg über eine vor dem setzen berechnete Variable zu gehen, aber das bedeutet ich müsste vor einer Bewegung des Aktors den state auslesen und diesen dann in einem eigenen Reading oder UserReading speichern und dann erst das Rollo bewegen. Ob das überhaupt alles so geht, keine Ahnung.
Warum VORHER?
Einfach wie geschrieben ein userReadings was den state "abgreift" aber halt den eigenen Wert nur "ändert", wenn KEIN set_ im state ist.
Dann steht dort nat. immer der aktuelle Wert aber eben immer nur das OHNE set_
Dann gibt es das Attribut oldReadings und da dann eben das userReadungs auswählen und entsprechend abfragen.
Dann steht ja im userreadings state aber eben nur OHNE set_ und in der "Old-Readings-Variante" davon dann eben der state davor ebenfalls ohne set_, sofern eben auch entsprechend event-on-change-reading gesetzt ist ODER im userReadings neben dem set_-Ausfiltern eben auch nur etwas "geändert" wird, wenn sich der Zustand auch geändert hat.
EDIT: vielleicht erläuterst du einfach mal was denn der state für Werte annehmen kann und welche du gerne hättest. Also evtl. mal einen Eventmonitor-Auszug. Weil nat. wenn eine "Fahrt" Zwsichenschritte "erzeugt", dann steht nat. der letzte "Zwischenschritt" im "Oldreading" und nicht der "Startwert". Aber auch das lässt sich mittels Perl in einem userReadings lösen...
Gruß, Joachim
Zitat von: Superposchi am 10 Januar 2021, 14:54:36
Also der Aktor hat einen aktuellen Zustand von 20, der state_old den Wert set_20. Soweit korrekt, das mit der Rückmeldung wusste ich bisher nicht.
https://wiki.fhem.de/wiki/HomeMatic#Readings
Vieles steht im Wiki ;)
Gruß, Joachim
Also offensichtlich bin ich wohl zu blöd es zu kapieren.
Ich will den Wert haben den das Rollo vor der Bewegung hatte, das ist doch nicht so schwer zu verstehen oder?
Nehmen wir als Beispiel, der Rollo ist ganz auf, wird dann ganz geschlossen, anschließend wird das Fenster geöffnet und der Rollo soll auf 20% fahren, beim schließen der Fenster wieder ganz zu (alter Stand). Das sähe deiner Ausführung nach folgender Maßen aus:
aktueller state alter state bearbeiteter state
on
set_off on on
off set_off off
set_20 off off
20 set_20 20
Zielwert
Vorheriger Zustand 20 20
Die letzte Zeile soll dabei nicht vorgegeben werden, sondern eben aus dem state_old des Vorzustands entnommen werden.
Der aktuelle Wert und der bearbeitete Wert sind dabei aber identisch. Somit kann ich diesen nicht für den neuen Zustand nutzen.
Soweit mein Verständnis der Materie.
Problem gelöst, ich habe mir ein weiteres UserReading für den Altwert von level erstellt.
In dem steht die Stellung des Rolladen in %, und es gibt keine Rückmeldungen.
Also immer in level der aktuelle %-Wert und in level_old der vorhergehende %-Wert.
Das in kombination mit dem anderen Thread sollte es ermöglichen, mit einem DOIF das Rollo nach einer Aktion wieder auf den vorherigen %-Wert zurückzustellen.
Einzig muss ich mir noch was für die alternativen Begriffe "on=100" und "off=0" einfallen lassen.
Alternative, weil es ja um das Öffnen des Fensters geht:
notify auf Fenster auf, hast du doch eh schon? Weil der Rollo ja automatisch fährt!?
Dort ein setReading Rollo alterStatus state und dann erst den Rollo fahren lassen...
Aber wenn es geht, auch gut...
Alternative (weitere): wenn deine Angaben (Liste) so stimmen, dann geht das auch (wie ich geschrieben hatte) mittels userReadings, du musst doch nur den einen doppelten off "ausblenden". Dann steht in oldReading doch passend off drin und das soll doch wieder angefahren werden, oder?
Weil sonst geht das mit dem oldReading nat. nicht weil du ja den Wert VOR oldreading haben willst, eigentlich...
Gruß, Joachim
ZitatAlternative (weitere): wenn deine Angaben (Liste) so stimmen, dann geht das auch (wie ich geschrieben hatte) mittels userReadings
Das wäre auch eine Möglichkeit, kommt der erstgenannten Alternative ja ziemlich nahe.
Zitatdu musst doch nur den einen doppelten off "ausblenden". Dann steht in oldReading doch passend off drin und das soll doch wieder angefahren werden,
Wenn du mir verräts wie das gehen soll, das state entspricht ja praktisch einem Reading das wie bei einem Log automatisch geschrieben/befüllt wird. Wie kann man da eingreifen und einzelne Werte nicht eintragen lassen?
Zu Früh gefreut, deine Alternativen mit dem setreading weist das Problem auf, das es zwar funktioniert, aber die Werte im Abstand von 0,5% aktualisidert werden. Somit ist bei einem geschlossenen Rolladen der auf 20% fährt der Wert für level_old nicht Null, sondern 19,5. Bei meiner Alternative tritt das gleiche Problem wie bei dem UserReading state_old auf, es taucht ein "set_xx" auf statt dem letzten echten Wert.
ZitatWeil sonst geht das mit dem oldReading nat. nicht weil du ja den Wert VOR oldreading haben willst, eigentlich...
Wenn du eine Idee hast wie man das mitloggen des "set_xx" in den state_old oder level_old per UserReading verhindert wäre ich dankbar für einen Ansatz. Denn ja, ich brauche den Wert der vor dem oldreading drin steht.
Mein Vorschlag war NIE level!
Auf die Idee bist du schon selber gekommen... ;)
Also bitte!
Und ich meinte "ausblenden" IM userReadings: if(AktuellesReading eq OldReading){mache nichts...}
Das eine mittels ReadingsVal das andere mittels OldReadingsVal...
Und wenn du den Wert VOR old_readings haben willst, dann (wie ebenfalls geschrieben): dort wo du das Fahren lostrittst einfach per z.B. setreading (im Rollo oder im notify oder im DOIF oder auch in einem extra dummy oder oder oder) einfach den Wert VOR dem Losfahren merken und dann bei Fenster zu eben wieder abfragen.
Da braucht es nicht mal ein OLDREADING!
Und nachdem du eh immer nur halb liest und nicht mal ausprobierst was man schreibt, zumindest habe ich noch KEINEN Versuch GESEHEN!
Immer nur: das geht nicht und das geht nicht usw.
Da macht helfen ehrlich keine Freude...
Gruß, Joachim
ZitatUnd nachdem du eh immer nur halb liest und nicht mal ausprobierst was man schreibt
Sorry, aber da wird eher umgekehrt ein Schuh draus, denn du liest nicht was ich schreibe.
ZitatUnd ich meinte "ausblenden" IM userReadings: if(AktuellesReading eq OldReading){mache nichts...}
Das eine mittels ReadingsVal das andere mittels OldReadingsVal...
Habe ich jetzt schon drei Mal zu gesagt, dass mir das nichts bringt, denn ich brauche zwingend den Wert der vor dem OldReading angegeben wird.
ZitatUnd wenn du den Wert VOR old_readings haben willst, dann (wie ebenfalls geschrieben): dort wo du das Fahren lostrittst einfach per z.B. setreading (im Rollo oder im notify oder im DOIF oder auch in einem extra dummy oder oder oder) einfach den Wert VOR dem Losfahren merken und dann bei Fenster zu eben wieder abfragen.
Habe ich im Post vorher gerade erst zu geschrieben, dass es eingeschränkt funktioniert. Aber eben alle 0,5% aktualisiert wird, und somit auch nicht den Old-Wert liefert sondern den letzten Zwischen Wert.
Du hast dich zigmal wiederholt ohne auch nur einmal auf meine Resonanz zu deinen Ausführungen einzugehen.
Auf die konkrete Frage ob es möglich ist die bidirektionalen Ereignisse im state/state_old zu unterdrücken gehst du hingegen gar nicht ein.
Zitat von: Superposchi am 10 Januar 2021, 20:21:02
Sorry, aber da wird eher umgekehrt ein Schuh draus, denn du liest nicht was ich schreibe.
Wie schon so oft: wer will Hilfe? Wer versucht IN SEINER FREIZEIT zu helfen!?
Und nicht jetzt wieder "verbiegen" etc.!
Sondern dem der Hilfe liefert (in SEINER FREIZEIT) auch mal "verzeihen", dass er u.U. nicht ALLES HAARKLEIN liest (weil man vielleicht nur am Handy versucht zu helfen oder noch andere Dinge nebenbei tut)...
EDIT: und jetzt nicht: ah aber mir verzeihst du das nicht. Ja genau... Weil: du Hilfe suchst und dich durchaus "anstrengen" darfst. Weil es dreht sich um DEINE "Aufgabe" nicht um meine...
Wenn du das nicht kannst/tolerierst: viel Spaß! Ohne mich...
Zitat von: Superposchi am 10 Januar 2021, 20:21:02
Habe ich jetzt schon drei Mal zu gesagt, dass mir das nichts bringt, denn ich brauche zwingend den Wert der vor dem OldReading angegeben wird.
Ja, habe ich (ausnahmsweise ;) ) gelesen. Aber es ging bis zu dem Satz auch immer um den alten Wert und ich wollte nur DAZU eben schreiben dass und wie es geht/gehen sollte.
EDIT: außerdem kannst du doch meine Antworten (teilweise) auch einfach "ignorieren", wenn sie für dich nicht zielführend sind/scheinen...
Zitat von: Superposchi am 10 Januar 2021, 20:21:02
Habe ich im Post vorher gerade erst zu geschrieben, dass es eingeschränkt funktioniert. Aber eben alle 0,5% aktualisiert wird, und somit auch nicht den Old-Wert liefert sondern den letzten Zwischen Wert.
Dann machst du es ben NICHT wie ich geschrieben habe: Fenster auf -> hole Wert und setze Wert in einem Reading DEINER Wahl und einem Device DEINER Wahl. Dann fahre den Rollo. Dann wird NIX mehr aktualisiert weil das Fenster ist ja schon auf. Wenn doch: event-on-change-reading beim Fenster ODER eben abfragen Fenster noch auf -> mache nix.
Dann Fenster zu: hole Wert und setze den Rollo wieder da hin...
WO BITTE soll da jetzt mit 0,5% irgendwas gesetzt werden!?
Und WO bitte ist dein Versuch dazu inkl. Eventmonitor?
Ich habe nur deine Aussage: geht nicht/teilweise...
Zitat von: Superposchi am 10 Januar 2021, 20:21:02
Du hast dich zigmal wiederholt ohne auch nur einmal auf meine Resonanz zu deinen Ausführungen einzugehen.
Auf die konkrete Frage ob es möglich ist die bidirektionalen Ereignisse im state/state_old zu unterdrücken gehst du hingegen gar nicht ein.
Ich habe noch KEINE Ausführung gesehen. Kein list. Kein Eventmonitor. kein GAR NIX!
Ausser: es geht nicht, es geht nicht, es geht teilweise, ...
Und ja genau das habe ich mind. 2x versucht zu erläutern: in einem userReadings NICHT im state selbst! Weil warum unbedingt im state selbst!? Da hast du (wie du ja bereits gemerkt hast) KEINE Chance weil das "gehört" dem Device. Wenn du das anders willst: Maintainer bitten. Selber ändern: es ist ja Open Source...
Gruß, Joachim
ZitatWie schon so oft: wer will Hilfe? Wer versucht IN SEINER FREIZEIT zu helfen!?
Und nicht jetzt wieder "verbiegen" etc.!
Sondern dem der Hilfe liefert (in SEINER FREIZEIT) auch mal "verzeihen", dass er u.U. nicht ALLES HAARKLEIN liest (weil man vielleicht nur am Handy versucht zu helfen oder noch andere Dinge nebenbei tut)...
EDIT: und jetzt nicht: ah aber mir verzeihst du das nicht. Ja genau... Weil: du Hilfe suchst und dich durchaus "anstrengen" darfst. Weil es dreht sich um DEINE "Aufgabe" nicht um meine...
Wenn du das nicht kannst/tolerierst: viel Spaß! Ohne mich...
Das hat nichts mit verzeichen oder tolerieren zu tun, sondern ausschließlich damit, dass wir uns im Kreis drehen. Wie willst du Helfen, wenn du nicht weißt was ich probiere/schreibe/tue? Wie willst du Helfen, wenn du gar nicht den aktuellen Stand des Versuchs kennst?
Das ist doch weder Kritik noch Vorwurf, sondern einfach ein Fakt und das hat rein gar nichts mit der Tatsache zu tun wer Hilfe sucht/bietet und ob er das in seiner Freizeit macht oder nicht. Wenn ich Helfen will, muss ich auch alle Fakten und Grundbedingungen kennen und das kann ich nur wenn ich auch selber lese was der Hilfesuchende schreibt.
ZitatIch habe noch KEINE Ausführung gesehen. Kein list. Kein Eventmonitor. kein GAR NIX!
Ausser: es geht nicht, es geht nicht, es geht teilweise, ...
Dazu gehört auch einfach mal zu glauben was der Hilfesuchende sagt/schreibt. Nur weil man Hilfe sucht ist man doch deshalb kein Vollidiot der Null Ahnung hat.
ZitatUnd ja genau das habe ich mind. 2x versucht zu erläutern: in einem userReadings NICHT im state selbst! Weil warum unbedingt im state selbst!? Da hast du (wie du ja bereits gemerkt hast) KEINE Chance weil das "gehört" dem Device.
Weil das state und das level Reading nun mal die einzigen sind, die die benötigten Informationen liefern. Also muss ich die Informationen von einem dieser beiden Readings abgreifen. Also was soll ich bitte machen wenn in beiden Readings stets die bidirektionale Kommunikation mit dem set_xx auftaucht, da bringt auch ein UserReading nichts, da ich ja keine Quelle habe aus der ich den Inhalt ableiten/errechnen kann. Abgesehen davon ist state_old bzw. level_old ja ein UserReadfing, aber das ignorierst du ja dauerhaft.
ZitatDann machst du es ben NICHT wie ich geschrieben habe: Fenster auf -> hole Wert und setze Wert in einem Reading DEINER Wahl und einem Device DEINER Wahl. Dann fahre den Rollo. Dann wird NIX mehr aktualisiert weil das Fenster ist ja schon auf. Wenn doch: event-on-change-reading beim Fenster ODER eben abfragen Fenster noch auf -> mache nix.
Hast du das mal selbst mit identischen Komponenten ausprobiert? Ich habe es genauso gemacht und es funktioniert eben NICHT. Beziehungsweise so eingeschränkt wie ich es geschrieben habe, aber auch da gilt einfach mal wieder darauf zu vertrauen, dass der Hilfesuchende die Wahrheit schreibt.
Sorry, aber auch ein Hilfebietender muss schon wissen wozu er Hilfe bieten soll.
Zitat von: Superposchi am 10 Januar 2021, 21:48:14
Das hat nichts mit verzeichen oder tolerieren zu tun, sondern ausschließlich damit, dass wir uns im Kreis drehen. Wie willst du Helfen, wenn du nicht weißt was ich probiere/schreibe/tue? Wie willst du Helfen, wenn du gar nicht den aktuellen Stand des Versuchs kennst?
Das ist doch weder Kritik noch Vorwurf, sondern einfach ein Fakt und das hat rein gar nichts mit der Tatsache zu tun wer Hilfe sucht/bietet und ob er das in seiner Freizeit macht oder nicht. Wenn ich Helfen will, muss ich auch alle Fakten und Grundbedingungen kennen und das kann ich nur wenn ich auch selber lese was der Hilfesuchende schreibt.
Sorry, aber auch ein Hilfebietender muss schon wissen wozu er Hilfe bieten soll.
Eben, drum poste doch mal was ich schon lange immer wieder erfrage: lists von Versuchen, Eventmonitor Ausgaben von Versuchen usw.
Zitat von: Superposchi am 10 Januar 2021, 21:48:14
Dazu gehört auch einfach mal zu glauben was der Hilfesuchende sagt/schreibt. Nur weil man Hilfe sucht ist man doch deshalb kein Vollidiot der Null Ahnung hat.
Klar kann ich einfach glauben, dass es SO WIE DU ES GEMACHT HAST nicht geht. Tue ich durchaus.
Drum habe ich ja geschrieben: dann hast du (vermutlich) nicht gemacht was ich geschrieben habe.
Wissen kann ich das bzw. wir beide das nur, wenn du eben postest WAS du versucht hast und zwar nicht in Prosa sondern eben als list eines Devices.
Zitat von: Superposchi am 10 Januar 2021, 21:48:14
Weil das state und das level Reading nun mal die einzigen sind, die die benötigten Informationen liefern. Also muss ich die Informationen von einem dieser beiden Readings abgreifen. Also was soll ich bitte machen wenn in beiden Readings stets die bidirektionale Kommunikation mit dem set_xx auftaucht, da bringt auch ein UserReading nichts, da ich ja keine Quelle habe aus der ich den Inhalt ableiten/errechnen kann. Abgesehen davon ist state_old bzw. level_old ja ein UserReadfing, aber das ignorierst du ja dauerhaft.
Doch genau da bringt ein userReadings etwas weil ich da ja genau diesen Zwiwschenstand "ausblenden" kann: Perl sei dank. Weil es gibt dort z.B. if / Also if Reading =~ m/set_/ z.B. und dann: mache eben nichts, also bleibt das userReadings wie es ist, also ohne set_ Punkt aus und Ende.
Brauchen wir nicht vertiefen, du willst ja nicht das oldReading sondern das davor...
Zitat von: Superposchi am 10 Januar 2021, 21:48:14
Hast du das mal selbst mit identischen Komponenten ausprobiert? Ich habe es genauso gemacht und es funktioniert eben NICHT. Beziehungsweise so eingeschränkt wie ich es geschrieben habe, aber auch da gilt einfach mal wieder darauf zu vertrauen, dass der Hilfesuchende die Wahrheit schreibt.
Nicht identisch aber ähnlich genug: ich habe ein notify auf Fenster auf. Merke mir die aktuelle Temperatur eines Thermostates. Setze die Temp dann auf Fenster auf. Und wenn das Fenster zu geht prüfe ich sogar, ob jemand inzwischen rumgedreht hat etc. und setze dann (u.U.) zurück auf die gemerkte Temperatur.
Also: es geht.
Warum es bei dir nicht geht: keine Ahnung. Du postest ja nichts von dem was du ausprobierst. Du sagst zwar: gemacht wie du sagst aber es geht nicht und das soll ich glauben. OBWOHL ich WEISS, dass es eben doch geht. Und zwar nicht weil ich es glaube. Sondern Weiß, weil JA: probiert. (und so weit ist ein Homematic Rollo nicht von einem Homematic Thermostat auseinander / die Readings sind andere ja, das Verhalten aber gleich / ähnlich genug)...
Zitat von: Superposchi am 10 Januar 2021, 21:48:14
Sorry, aber auch ein Hilfebietender muss schon wissen wozu er Hilfe bieten soll.
Ja genau! Super, dass du das endlich erkannt hast!! :)
Dann liefere doch auch mal die notwendigen Infos!
Viel Spaß noch, Joachim
Ok, so langsam kommen wir doch wieder auf einen Nenner.
Werde dir die List und Auszüge des EventMonitors liefern sobald ich es schaffe, muss aber schauen wieviel Zeit ich die kommenden Tage nach der Arbeit habe.
Will erst mal schauen, dass ich meine neuen Rauchmelder und Regale montiert kriege, damit wieder etwas Ordnung in die Bude kommt.
ZitatWarum es bei dir nicht geht: keine Ahnung. Du postest ja nichts von dem was du ausprobierst. Du sagst zwar: gemacht wie du sagst aber es geht nicht und das soll ich glauben. OBWOHL ich WEISS, dass es eben doch geht. Und zwar nicht weil ich es glaube. Sondern Weiß, weil JA: probiert. (und so weit ist ein Homematic Rollo nicht von einem Homematic Thermostat auseinander / die Readings sind andere ja, das Verhalten aber gleich / ähnlich genug)...
Ich kann nicht beurteilen wie ähnlich sich Thermostat und Rolloaktor sind. ich kann nur sagen was ich selbst in den Readings sehen konnte, da wurde der Wert bei level und entsprechend auch bei level_old im 0,5er Schritten hochgezählt. Werde aber da noch mal ein EventMonitor-Auszug liefern sobald ich dazu komme.
Es kann ja sein, dass in 0,5-Schritten hochgezählt wird.
Aber mit dem notify auf Fenster auf ist das doch egal.
EDIT: gleiches gilt, solltest du ein DOIF dafür (bzw. für die autom. Rollofahrt) haben (wollen). Wobei bei DOIF kann ich halt wenig helfen: ich nutze das (immer noch) nicht...
Zumindest bei mir. Selbst wenn ich zwischendrin noch dreimal die Temperatur ändere wird nicht neu "gespeichert" weil: Fenster ist immer noch auf...
Wichtig: es muss halt dort passieren, wo dann nat. auch der Rolladen gefahren wird und zwar NACHDEM du den Wert abgefragt und "gespeicjhert" hast...
Und das Thema userReadings haben wir ja at akta gelegt, weil es nicht das ist was du brauchst/willst.
(obwohl es geht wie ich geschrieben habe um die set_ Zwischenstände auszublenden / und vermutlich würde das sogar für das Problem gehen, weil du ja zusätzlich abfragen kannst, ob das Fenster auf oder zu ist / aber egal)
Viel Spaß, Joachim
ZitatAber mit dem notify auf Fenster auf ist das doch egal.
Das Problem ist, ich nutze kein Notify sondern ein DOIF.
Da ich mit DOIF's sowohl notify's, at's als auch watchdog's nachbilden kann habe ich so alles mit einer Syntex. Ist für mich wesentlich einfacher zu überblicken.
Aber das DOIF wird bei jeder änderung um 0,5 neu ausgelöst, da als Bedingung unter anderem kleiner 20 drin steht.
ZitatUnd das Thema userReadings haben wir ja at akta gelegt, weil es nicht das ist was du brauchst/willst.
(obwohl es geht wie ich geschrieben habe um die set_ Zwischenstände auszublenden / und vermutlich würde das sogar für das Problem gehen, weil du ja zusätzlich abfragen kannst, ob das Fenster auf oder zu ist / aber egal)
Du hast zig mal geschrieben das es geht, aber nicht einmal einen klar verständlichen Hinweis wie. Würde diese Art nämlich lieber nutzen wenn es vernünftig umsetzbar ist. Aber nur zu wissen das es geht bringt mir nichts wenn ich nicht weiß wonach ich suchen muss.
Zitat von: Superposchi am 10 Januar 2021, 23:00:38
Das Problem ist, ich nutze kein Notify sondern ein DOIF.
Da ich mit DOIF's sowohl notify's, at's als auch watchdog's nachbilden kann habe ich so alles mit einer Syntex. Ist für mich wesentlich einfacher zu überblicken.
Aber das DOIF wird bei jeder änderung um 0,5 neu ausgelöst, da als Bedingung unter anderem kleiner 20 drin steht.
Dann stimmen halt die Bedingungen nicht...
...oder du brauchst eine weitere...
Oder (auch im DOIF geht Perl) eine Abfrage bestimmter Bedingungen und nur dann eben den Wert auslesen und abspeichern. Dazu gibt es (soweit ich gelesen habe) sogar Möglichkeiten "in" DOIF und man braucht gar kein setreading (aber wie genau das bei DOIF geht kann ich nicht helfen -> commandref sollte helfen).
Daher nutze ich halt lieber notify at etc. weil da ist klar und einfach ersichtlich WAS WARUM passiert (zumindest für mich)...
Zitat von: Superposchi am 10 Januar 2021, 23:00:38
Du hast zig mal geschrieben das es geht, aber nicht einmal einen klar verständlichen Hinweis wie. Würde diese Art nämlich lieber nutzen wenn es vernünftig umsetzbar ist. Aber nur zu wissen das es geht bringt mir nichts wenn ich nicht weiß wonach ich suchen muss.
Ich habe mich fusselig geschrieben was du abfragen kannst/solltest usw. aber von dir immer nur gehört: geht nicht...
Ohne auch nur einen deiner Versuche gesehen zu haben...
Da ich die Geräte nicht habe und (ja: sorry) keine Lust hatte alles mit dummy zu "simulieren", wenn die "Gegenseite" eh (ohne auch nur ein list von einem eigenen Test zu posten) schreibt: geht nicht...
Gruß, Joachim
Zitat von: MadMax-FHEM am 10 Januar 2021, 23:19:16
Dann stimmen halt die Bedingungen nicht...
...oder du brauchst eine weitere...
Oder (auch im DOIF geht Perl) eine Abfrage bestimmter Bedingungen und nur dann eben den Wert auslesen und abspeichern. Dazu gibt es (soweit ich gelesen habe) sogar Möglichkeiten "in" DOIF und man braucht gar kein setreading (aber wie genau das bei DOIF geht kann ich nicht helfen -> commandref sollte helfen).
Wobei das eigentlich nicht sein kann...
Also es muss doch (wenn halbwegs "vernünftig" aufgesetzt) EINE Stelle geben, wo du eben bei bestimmten Bedingungen (u.a. Fenster auf) den Rollo auf eine bestimmte Position fahren lassen willst!?
Dann genau dort BEVOR du den
set Rollo Fensterauf-Position absetzt eben: Abfrage aktuelle Position und "speichern" (im DOIF oder im Rollo oder in einem dummy oder oder oder)...
(z.B. setreading Rollo hierMerkeIchMirDenZustand $value / $value = ReadingsVal("Rollo","hier-steht-was-mich-interessiert","Ersatzwert") / die beiden Readingnamen "hierMerkeIchMirDenZustand" und "hier-steht-was-mich-interessiert" musst du halt so nennen wie es dir gefällt [für den "Speicherort"] bzw. wo eben der Wert drin steht den du für später brauchst / und wie geschrieben du musst das nat. nicht im Rollo speichern, sondern kannst das auch im DOIF selbst "hinterlegen" aber wie man das macht musst du eben in der commandref nachlesen, weil ich kein DOIF nutze)
Und das wird doch (hoffentlich) nicht bei jedem Zwischenstand des Rollo erneut aufgerufen!? Sonst würdest du doch alle 0,5%-lang denselben
set Rollo Fensterauf-Position erneut schicken und das wäre ja totaler Blödsinn...
Und genauso muss es doch EINE definierte Stelle geben wo du eben den Rollo gerne wieder auf die alte Postition fahren lassen willst. Dort dann eben einfach den "gespeicherten" Wert abrufen und dann eben
set Rollo gespeicherter-Wert. ($value = ReadingsVal("Rollo", "hierMerkeIchMirDenZustand", "Ersatzwert") und dann set Rollo $value / und auch hier: wenn du es im DOIF "hinterlegt" hast, dann musst du eben nachlesen wie du den "abgespeicherten" Wert wieder aus dem DOIF "rauskriegst")
Ist quasi genau das was ich schon vor X Posts (immer wieder) geschrieben habe (gut mit notify aber die Idee war immer: bevor du fährst merken und dann wieder zurückstellen)...
Und jetzt würde ich gerne (immer noch) wissen wollen warum das nicht gehen soll.
Gruß, Joachim
ZitatIch habe mich fusselig geschrieben was du abfragen kannst/solltest usw. aber von dir immer nur gehört: geht nicht...
Also für mich ist nirgendwo ersichtlich nach welchem Befehl ich suchen soll um diese Filterung beim auslesen des state in den state_old zu machen.
ZitatUnd das wird doch (hoffentlich) nicht bei jedem Zwischenstand des Rollo erneut aufgerufen!? Sonst würdest du doch alle 0,5%-lang denselben set Rollo Fensterauf-Position erneut schicken und das wäre ja totaler Blödsinn...
Aktuell leider ja. Mit den jetzigen Bedingungen wird das eben bei jedem Zwischenstand erneut aufgerufen. Das ist mir aber auch eben erst gestern Abend klar geworden und ich suche seitdem nach einer Einschränkung der Bedingungen. Das Problem ist halt, dass das DOIF IMMER greifen soll, wenn jemand zu Hause ist, das Rollo weniger wie 20% geöffnet ist und jemand das Fenster öffnen.
Dabei ist genau die mittlere Bedingung das Problem, denn kleiner als 20% trifft natürlich bei jedem Zwischenstand zu. Da mir aber nicht klar war, dass der Rolladenaktor jeden Zwischenschritt speichert/sendet, war mir nicht klar, dass dies ein Problem sein würde. Ich bin davon ausgegangen, der Rollo steht auf irgendeinem Wert kleiner 20% und bekommt dann einfach die Anweisung fahre auf 20% hoch und fertig.
Hier ist schon mal das List des DOIF's:
Internals:
.FhemMetaInternals 1
DEF (([sz_structure_schlafzimmerfenster] eq "open") and ([Anwesenheitsstatus] eq "1") and ([sz_rolladen_Schlafzimmerfenster:"stop"]) and (([sz_rolladen_Schlafzimmerfenster] eq "off") or ([sz_rolladen_Schlafzimmerfenster] < 20)))
{my $statenew=ReadingsVal("sz_rolladen_Schlafzimmerfenster","state","");fhem("setreading sz_rolladen_Schlafzimmerfenster level_old $statenew");fhem("set sz_rolladen_Schlafzimmerfenster 20")}
DOELSEIF (([sz_structure_schlafzimmerfenster] eq "closed") and ([Anwesenheitsstatus] eq "1"))
{my $stateold=ReadingsVal("sz_rolladen_Schlafzimmerfenster","level_old","");fhem("set sz_rolladen_Schlafzimmerfenster $stateold")}
FUUID 5ffad587-f33f-793a-ffc3-8bd3a7f17206bcfd
FVERSION 98_DOIF.pm:0.234660/2021-01-03
MODEL FHEM
NAME schlafzimmerrolle_lueften
NOTIFYDEV global
NR 214
NTFY_ORDER 50-schlafzimmerrolle_lueften
STATE deactivated
TYPE DOIF
VERSION 23466 2021-01-03 17:14:46
.attraggr:
.attrminint:
READINGS:
2021-01-10 20:11:12 mode deactivated
2021-01-10 20:11:12 state deactivated
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
do:
0:
helper:
DEVFILTER ^global$
NOTIFYDEV global
uiState:
uiTable:
Attributes:
alias Lüften
disable 1
do always
room Steuerung->Rolladen
Und das List des Rolladenaktors:
Internals:
.FhemMetaInternals 1
.triggerUsed 1
DEF 70B5AE
FUUID 5fc3cb17-f33f-793a-cb4f-14c28698bf2445e5
FVERSION 10_CUL_HM.pm:0.234210/2020-12-26
Homematic_Gateway_MSGCNT 96
Homematic_Gateway_RAWMSG 0501004569A41070B5AE1111110601C100
Homematic_Gateway_RSSI -69
Homematic_Gateway_TIME 2021-01-11 09:36:50
IODev Homematic_Gateway
LASTInputDev Homematic_Gateway
MSGCNT 96
NAME sz_rolladen_Schlafzimmerfenster
NOTIFYDEV global
NR 94
NTFY_ORDER 50-sz_rolladen_Schlafzimmerfenster
STATE 96.5
TYPE CUL_HM
chanNo 01
lastMsg No:69 - t:10 s:70B5AE d:111111 0601C100
peerList self01,self02
protLastRcv 2021-01-11 09:36:50
protRcv 96 last_at:2021-01-11 09:36:50
protSnd 97 last_at:2021-01-11 09:36:50
protState CMDs_done
rssi_Homematic_Gateway cnt:66 min:-74 max:-71 avg:-72.39 lst:-73
rssi_at_Homematic_Gateway cnt:96 min:-70 max:-65 avg:-66.98 lst:-69
.attraggr:
.attreocr:
.*
.attrminint:
.attrtocr:
.*
.or:
.*
.userReadings:
HASH(0x5800e178)
OLDREADINGS:
2021-01-10 20:09:16 .protLastRcv 20210110200916
2021-01-10 20:09:11 commState CMDs_processing...
2021-01-10 20:07:48 deviceMsg off (to Homematic_Gateway)
2021-01-10 20:09:12 level 0
2021-01-10 19:31:55 level_old 19.5
2021-01-10 20:07:48 motor stop:off
2021-01-10 20:07:48 pct 0
2021-01-10 20:09:12 recentStateType ack
2021-01-10 20:09:12 state off
2021-01-10 20:09:12 state_old set_0
READINGS:
2020-12-01 10:06:29 .D-devInfo 010100
2020-12-01 10:06:29 .D-stc 30
2020-12-01 10:06:33 .R-confBtnTime 5 min
2020-12-01 14:14:19 .R-driveDown 17 s
2020-12-01 10:06:34 .R-driveTurn 0.5 s
2020-12-01 14:13:43 .R-driveUp 19 s
2020-12-01 14:18:26 .R-intKeyVisib visib
2020-12-01 10:06:33 .R-localResDis off
2020-12-01 10:06:33 .R-pairCentral 0x111111
2020-12-01 10:06:34 .R-refRunCounter 0
2020-12-01 14:18:29 .R-self01-lgActionType jmpToTarget
2020-12-01 14:18:29 .R-self01-lgBlJtDlyOff dlyOn
2020-12-01 14:18:29 .R-self01-lgBlJtDlyOn refOn
2020-12-01 14:18:29 .R-self01-lgBlJtOff dlyOn
2020-12-01 14:18:29 .R-self01-lgBlJtOn dlyOn
2020-12-01 14:18:29 .R-self01-lgBlJtRampOff off
2020-12-01 14:18:29 .R-self01-lgBlJtRampOn rampOn
2020-12-01 14:18:29 .R-self01-lgBlJtRefOff off
2020-12-01 14:18:29 .R-self01-lgBlJtRefOn rampOn
2020-12-01 14:18:29 .R-self01-lgCtDlyOff geLo
2020-12-01 14:18:29 .R-self01-lgCtDlyOn geLo
2020-12-01 14:18:29 .R-self01-lgCtOff geLo
2020-12-01 14:18:29 .R-self01-lgCtOn geLo
2020-12-01 14:18:29 .R-self01-lgCtRampOff geLo
2020-12-01 14:18:29 .R-self01-lgCtRampOn geLo
2020-12-01 14:18:29 .R-self01-lgCtRefOff geLo
2020-12-01 14:18:29 .R-self01-lgCtRefOn geLo
2020-12-01 14:18:29 .R-self01-lgCtValHi 100
2020-12-01 14:18:29 .R-self01-lgCtValLo 50
2020-12-01 14:18:29 .R-self01-lgDriveMode direct
2020-12-01 14:18:29 .R-self01-lgMaxTimeF 0.4 s
2020-12-01 14:18:29 .R-self01-lgMultiExec on
2020-12-01 14:18:29 .R-self01-lgOffDly 0 s
2020-12-01 14:18:29 .R-self01-lgOffLevel 0 %
2020-12-01 14:18:29 .R-self01-lgOffTime unused
2020-12-01 14:18:29 .R-self01-lgOffTimeMode absolut
2020-12-01 14:18:29 .R-self01-lgOnDly 0 s
2020-12-01 14:18:29 .R-self01-lgOnLevel 100 %
2020-12-01 14:18:29 .R-self01-lgOnTime unused
2020-12-01 14:18:29 .R-self01-lgOnTimeMode absolut
2020-12-01 14:18:39 .R-self01-shActionType jmpToTarget
2020-12-01 14:18:39 .R-self01-shBlJtDlyOff dlyOn
2020-12-01 14:18:39 .R-self01-shBlJtDlyOn refOn
2020-12-01 14:18:39 .R-self01-shBlJtOff dlyOn
2020-12-01 14:18:39 .R-self01-shBlJtOn dlyOn
2020-12-01 14:18:39 .R-self01-shBlJtRampOff off
2020-12-01 14:18:39 .R-self01-shBlJtRampOn rampOn
2020-12-01 14:18:29 .R-self01-shBlJtRefOff off
2020-12-01 14:18:29 .R-self01-shBlJtRefOn rampOn
2020-12-01 14:18:39 .R-self01-shCtDlyOff geLo
2020-12-01 14:18:39 .R-self01-shCtDlyOn geLo
2020-12-01 14:18:39 .R-self01-shCtOff geLo
2020-12-01 14:18:39 .R-self01-shCtOn geLo
2020-12-01 14:18:39 .R-self01-shCtRampOff geLo
2020-12-01 14:18:39 .R-self01-shCtRampOn geLo
2020-12-01 14:18:29 .R-self01-shCtRefOff geLo
2020-12-01 14:18:29 .R-self01-shCtRefOn geLo
2020-12-01 14:18:39 .R-self01-shCtValHi 100
2020-12-01 14:18:39 .R-self01-shCtValLo 50
2020-12-01 14:18:29 .R-self01-shDriveMode direct
2020-12-01 14:18:29 .R-self01-shMaxTimeF unused
2020-12-01 14:18:39 .R-self01-shMultiExec off
2020-12-01 14:18:39 .R-self01-shOffDly 0 s
2020-12-01 14:18:39 .R-self01-shOffLevel 0 %
2020-12-01 14:18:39 .R-self01-shOffTime unused
2020-12-01 14:18:39 .R-self01-shOffTimeMode absolut
2020-12-01 14:18:39 .R-self01-shOnDly 0 s
2020-12-01 14:18:29 .R-self01-shOnLevel 100 %
2020-12-01 14:18:39 .R-self01-shOnTime unused
2020-12-01 14:18:39 .R-self01-shOnTimeMode absolut
2020-12-01 14:18:30 .R-self02-lgActionType jmpToTarget
2020-12-01 14:18:30 .R-self02-lgBlJtDlyOff refOff
2020-12-01 14:18:30 .R-self02-lgBlJtDlyOn dlyOff
2020-12-01 14:18:30 .R-self02-lgBlJtOff dlyOff
2020-12-01 14:18:30 .R-self02-lgBlJtOn dlyOff
2020-12-01 14:18:30 .R-self02-lgBlJtRampOff rampOff
2020-12-01 14:18:30 .R-self02-lgBlJtRampOn on
2020-12-01 14:18:30 .R-self02-lgBlJtRefOff rampOff
2020-12-01 14:18:30 .R-self02-lgBlJtRefOn on
2020-12-01 14:18:30 .R-self02-lgCtDlyOff geLo
2020-12-01 14:18:30 .R-self02-lgCtDlyOn geLo
2020-12-01 14:18:30 .R-self02-lgCtOff geLo
2020-12-01 14:18:30 .R-self02-lgCtOn geLo
2020-12-01 14:18:30 .R-self02-lgCtRampOff geLo
2020-12-01 14:18:30 .R-self02-lgCtRampOn geLo
2020-12-01 14:18:30 .R-self02-lgCtRefOff geLo
2020-12-01 14:18:30 .R-self02-lgCtRefOn geLo
2020-12-01 14:18:30 .R-self02-lgCtValHi 100
2020-12-01 14:18:30 .R-self02-lgCtValLo 50
2020-12-01 14:18:30 .R-self02-lgDriveMode direct
2020-12-01 14:18:30 .R-self02-lgMaxTimeF 0.4 s
2020-12-01 14:18:30 .R-self02-lgMultiExec on
2020-12-01 14:18:30 .R-self02-lgOffDly 0 s
2020-12-01 14:18:30 .R-self02-lgOffLevel 0 %
2020-12-01 14:18:30 .R-self02-lgOffTime unused
2020-12-01 14:18:30 .R-self02-lgOffTimeMode absolut
2020-12-01 14:18:30 .R-self02-lgOnDly 0 s
2020-12-01 14:18:30 .R-self02-lgOnLevel 100 %
2020-12-01 14:18:30 .R-self02-lgOnTime unused
2020-12-01 14:18:30 .R-self02-lgOnTimeMode absolut
2020-12-01 14:18:30 .R-self02-shActionType jmpToTarget
2020-12-01 14:18:30 .R-self02-shBlJtDlyOff refOff
2020-12-01 14:18:30 .R-self02-shBlJtDlyOn dlyOff
2020-12-01 14:18:30 .R-self02-shBlJtOff dlyOff
2020-12-01 14:18:30 .R-self02-shBlJtOn dlyOff
2020-12-01 14:18:30 .R-self02-shBlJtRampOff rampOff
2020-12-01 14:18:30 .R-self02-shBlJtRampOn on
2020-12-01 14:18:30 .R-self02-shBlJtRefOff rampOff
2020-12-01 14:18:30 .R-self02-shBlJtRefOn on
2020-12-01 14:18:30 .R-self02-shCtDlyOff geLo
2020-12-01 14:18:30 .R-self02-shCtDlyOn geLo
2020-12-01 14:18:30 .R-self02-shCtOff geLo
2020-12-01 14:18:30 .R-self02-shCtOn geLo
2020-12-01 14:18:30 .R-self02-shCtRampOff geLo
2020-12-01 14:18:30 .R-self02-shCtRampOn geLo
2020-12-01 14:18:30 .R-self02-shCtRefOff geLo
2020-12-01 14:18:30 .R-self02-shCtRefOn geLo
2020-12-01 14:18:30 .R-self02-shCtValHi 100
2020-12-01 14:18:30 .R-self02-shCtValLo 50
2020-12-01 14:18:30 .R-self02-shDriveMode direct
2020-12-01 14:18:30 .R-self02-shMaxTimeF unused
2020-12-01 14:18:30 .R-self02-shMultiExec off
2020-12-01 14:18:30 .R-self02-shOffDly 0 s
2020-12-01 14:18:30 .R-self02-shOffLevel 0 %
2020-12-01 14:18:30 .R-self02-shOffTime unused
2020-12-01 14:18:30 .R-self02-shOffTimeMode absolut
2020-12-01 14:18:30 .R-self02-shOnDly 0 s
2020-12-01 14:18:30 .R-self02-shOnLevel 100 %
2020-12-01 14:18:30 .R-self02-shOnTime unused
2020-12-01 14:18:30 .R-self02-shOnTimeMode absolut
2020-12-01 10:06:34 .R-sign off
2020-12-01 10:06:34 .R-statusInfoMinDly 2 s
2020-12-01 10:06:34 .R-statusInfoRandom 1 s
2020-12-01 10:06:34 .R-transmitTryMax 6
2021-01-10 17:57:51 .associatedWith sz_rolladen_Schlafzimmerfenster,sz_rolladen_Schlafzimmerfenster
2021-01-08 22:45:47 .peerListRDate 2021-01-08 22:45:47
2021-01-11 09:36:50 .protLastRcv 20210111093650
2020-12-01 14:18:22 CommandAccepted yes
2020-12-01 10:06:29 D-firmware 2.11
2020-12-01 10:06:29 D-serialNr REQ0112292
2020-12-01 14:18:36 PairedTo 0x111111
2021-01-08 22:45:45 RegL_00. 00:00 02:81 0A:11 0B:11 0C:11 15:05 18:00
2021-01-08 22:45:46 RegL_01. 00:00 08:00 09:00 0A:00 0B:00 0C:AA 0D:00 0E:BE 0F:05 10:00 30:06 56:00 57:24
2021-01-08 22:45:48 RegL_03.self01 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:11 0C:12 0D:68 0E:00 0F:00 11:C8 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 1A:00 1B:00 1C:00 1D:FF 1E:68 1F:00 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:11 8C:12 8D:68 8E:00 8F:00 91:C8 92:00 93:00 94:00 95:00 96:00 97:00 98:00 99:00 9A:00 9B:00 9C:00 9D:04 9E:68 9F:00
2021-01-08 22:45:49 RegL_03.self02 00:00 11:C8 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 1A:00 1B:00 1C:00 1D:FF 1E:93 1F:00 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:44 8C:54 8D:93 8E:00 8F:00 91:C8 92:00 93:00 94:00 95:00 96:00 97:00 98:00 99:00 9A:00 9B:00 9C:00 9D:04 9E:93 9F:00
2021-01-09 00:38:57 Schaltstatus 1
2020-12-02 19:37:37 Schaltzeit 08:00
2020-12-02 19:37:42 Schaltzeit_sa 09:00
2020-12-13 14:27:43 Schaltzeit_we 10:30
2021-01-08 22:45:49 cfgState ok
2021-01-10 20:09:12 commState CMDs_done
2021-01-11 09:36:50 deviceMsg 96.5 (to Homematic_Gateway)
2021-01-11 09:36:50 level 96.5
2021-01-10 20:08:26 level_old 0
2021-01-11 09:36:50 motor stop:96.5
2021-01-11 09:36:50 pct 96.5
2021-01-10 17:57:26 peerList self01,self02
2020-12-06 12:22:56 powerOn 2020-12-06 12:22:56
2021-01-10 20:09:16 recentStateType info
2021-01-11 09:36:50 state 96.5
2021-01-11 09:36:50 state_old off
2020-12-01 14:19:50 timedOn off
helper:
HM_CMDNR 105
cSnd 1111111170B5AE0201000000,1111111170B5AE020100
dlvlCmd ++A01111111170B5AE020100
mId 0005
peerFriend peerSens,peerVirt
peerOpt 3:blindActuator
regLst 0,1,3p
rxType 1
supp_Pair_Rep 0
cmds:
TmplKey self01,self02:no:1610297871.21898
TmplTs 1610297871.21898
cmdKey 1:1:0::sz_rolladen_Schlafzimmerfenster:0005:01:self01,self02
cmdLst:
assignHmKey noArg
clear [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
deviceRename -newName-
down 'change:'[(0..100;1|{10})] [(-ontime-|{})] [(-ramptime-|{})]
eventL -peer- -cond-
eventS -peer- -cond-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6) [-peerChn-]
getVersion noArg
inhibit [(on|{off})]
off noArg
on noArg
pair noArg
pct -value- [-ontime-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerIODev [IO] -btn- [({set}|unset)] 'not for future use'
peerSmart -peerOpt-
press [(long|{short})] [(-peer-|{self01})] [(-repCount-|{0})] [(-repDelay-|{0.25})]
pressL [(-peer-|{self01})]
pressS [(-peer-|{self01})]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- -addr2:data2-...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
statusRequest noArg
stop noArg
toggle noArg
toggleDir noArg
tplDel -tplDel-
tplSet_0 -tplChan-
tplSet_self01 -tplPeer-
tplSet_self02 -tplPeer-
unpair noArg
up 'change:'[(0..100;1|{10})] [(-ontime-|{})] [(-ramptime-|{})]
lst:
condition slider,0,1,255
peer self01,self02
peerOpt ku_kontakt_fenster,sz_kontakt_fenster_links,sz_kontakt_fenster_rechts,wz_kontakt_balkontuer
tplChan
tplDel
tplPeer BlStopDnSh_long,SwCondAbove_short,BlStopUpLg_long,SwCondBelow_long,BlStopUpSh_short,BlStopDnLg_short,BlStopUpLg_short,BlStopDnSh_short,SwCondAbove_long,SwOnCond_short,SwOnCond_long,BlStopDnLg_long,BlStopUpSh_long,SwCondBelow_short
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
dir:
cur stop
rct down
expert:
def 0
det 0
raw 1
tpl 0
io:
newChn +70B5AE,00,00,00
nextSend 1610354210.52833
prefIO
rxt 0
vccu
p:
70B5AE
00
00
00
mRssi:
mNo 69
io:
Homematic_Gateway:
-65
-65
prt:
bErr 0
sProc 0
rspWait:
q:
qReqConf
qReqStat
role:
chn 1
dev 1
prs 1
rpt:
IO Homematic_Gateway
flg A
ts 1610354210.23262
ack:
HASH(0x58f9d270)
69800211111170B5AE00
rssi:
Homematic_Gateway:
avg -72.3939393939394
cnt 66
lst -73
max -71
min -74
at_Homematic_Gateway:
avg -66.9895833333333
cnt 96
lst -69
max -65
min -70
tmpl:
Attributes:
.mId 0005
IODev Homematic_Gateway
alias Schlafzimmerrolladen
assistantName Schlafzimmerrollo
autoReadReg 4_reqStatus
devStateIcon off:shutter_closed 0:shutter_closed 10:shutter_7 20:fts_shutter_80 30:shutter_6 40:shutter_5 50:shutter_halfopen 60:shutter_4 70:shutter_3 80:shutter_2 90:shutter_1 100:shutter_open on:shutter_open
event-on-change-reading .*
expert rawReg
firmware 2.11
gassistantName Schlafzimmerrollo
genericDeviceType shutter
group Rolladen
icon fts_shutter_20
model HM-LC-BL1-FM
oldreadings .*
peerIDs 00000000,70B5AE01,70B5AE02,
room CUL_HM,GAssistant,Wohnung->Schlafzimmer
serialNr REQ0112292
subType blindActuator
timestamp-on-change-reading .*
userReadings state_old { OldReadingsVal("sz_rolladen_Schlafzimmerfenster", "state", ReadingsVal("sz_rolladen_Schlafzimmerfenster", "state", 0)) }
verbose 2
webCmd statusRequest:toggleDir:on:off:up:down:stop
Mitschnitt vom Eventmonitor kann ich erst wenn ich vorm System sitze und nicht per Fernzugriff.
Zitat von: Superposchi am 11 Januar 2021, 10:12:37
Also für mich ist nirgendwo ersichtlich nach welchem Befehl ich suchen soll um diese Filterung beim auslesen des state in den state_old zu machen.
Ist zwar ja eigentlich "erledigt" aber trotzdem:
hier: https://forum.fhem.de/index.php/topic,117629.msg1120276.html#msg1120276
Zitat
Einfach wie geschrieben ein userReadings was den state "abgreift" aber halt den eigenen Wert nur "ändert", wenn KEIN set_ im state ist.
Dann steht dort nat. immer der aktuelle Wert aber eben immer nur das OHNE set_
...
Dann steht ja im userreadings state aber eben nur OHNE set_ und in der "Old-Readings-Variante" davon dann eben der state davor ebenfalls ohne set_, sofern eben auch entsprechend event-on-change-reading gesetzt ist ODER im userReadings neben dem set_-Ausfiltern eben auch nur etwas "geändert" wird, wenn sich der Zustand auch geändert hat.
hier: https://forum.fhem.de/index.php/topic,117629.msg1120422.html#msg1120422
Zitat
Und ich meinte "ausblenden" IM userReadings: if(AktuellesReading eq OldReading){mache nichts...}
Das eine mittels ReadingsVal das andere mittels OldReadingsVal...
hier: https://forum.fhem.de/index.php/topic,117629.msg1120472.html#msg1120472
Zitat
Doch genau da bringt ein userReadings etwas weil ich da ja genau diesen Zwiwschenstand "ausblenden" kann: Perl sei dank. Weil es gibt dort z.B. if / Also if Reading =~ m/set_/ z.B. und dann: mache eben nichts, also bleibt das userReadings wie es ist, also ohne set_ Punkt aus und Ende.
Gruß, Joachim
Zitat von: Superposchi am 11 Januar 2021, 10:12:37
Aktuell leider ja. Mit den jetzigen Bedingungen wird das eben bei jedem Zwischenstand erneut aufgerufen. Das ist mir aber auch eben erst gestern Abend klar geworden und ich suche seitdem nach einer Einschränkung der Bedingungen. Das Problem ist halt, dass das DOIF IMMER greifen soll, wenn jemand zu Hause ist, das Rollo weniger wie 20% geöffnet ist und jemand das Fenster öffnen.
Dabei ist genau die mittlere Bedingung das Problem, denn kleiner als 20% trifft natürlich bei jedem Zwischenstand zu. Da mir aber nicht klar war, dass der Rolladenaktor jeden Zwischenschritt speichert/sendet, war mir nicht klar, dass dies ein Problem sein würde. Ich bin davon ausgegangen, der Rollo steht auf irgendeinem Wert kleiner 20% und bekommt dann einfach die Anweisung fahre auf 20% hoch und fertig.
Naja, dann in der commandref zu DOIF lesen, es gibt "triggernde Abfragen" und "nur Abfragen". Ich glaube war was mit Fragezeichen davor, also statt:
([sz_rolladen_Schlafzimmerfenster] < 20))
Sowas:
([?sz_rolladen_Schlafzimmerfenster] < 20))
Aber wie geschrieben: ich nutze KEIN DOIF (genau wegen "sowas" / bei einem notify/at etc. ist ganz einfach klar ersichtlich WANN/WARUM es "triggert". Bei DOIF ist dann wieder irgendwo ein Attribut gesetzt oder dies oder das und "tausend Dinge" in der "Bedingung"... Aber: muss jeder selber wissen)...
Also immer beim Erstellen einer DOIF-Bedingung prüfen, ob die auch getriggert werden soll/muss ODER "nur" im Falle "einer Triggerung" (durch andere Dinge, z.B. Fenster auf) abgefragt/geprüft werden soll...
Aktuell sind (wohl) ALLE deine Bedingungsprüfungen triggernd!
D.h. egal was davon sich ändert das DOIF wird durchlaufen...
Mag ja sein, dass das so soll aber dann musst du eben eine "Unterabfrage" einbauen, die eben dafür sorgt, dass der Wert eben nicht erneut gesetzt wird.
Da gibt es viele Möglichkeiten: Abfragen wann der old_state zuletzt gesetzt wurde und ob das (in etwa) übereinstimmt mit dem Fenster-Auf-Zeitpunkt (ReadingsAge), dann wird eben nicht neu gesetzt. Oder du merkst dir, dass eben gerade der erste Durchlauf des DOIF ist und solange wird eben nur beim ersten Durchlauf der alte/aktuelle Wert abgefragt und gesetzt (also weiteres Reading [im Rollo oder besser DOIF / evtl. auch beide readings ins DOIF, musst du wissen]) und erst im DOELSIF wird dann wieder zurückgesetzt, dass das der erste "Komplett-Durchlauf" war.
Usw.
Man kann wunderbar Perl "programmieren" im DOIF (und im DOIF gibt es bestimmte weitere "schöne" Mechanismen "sowas" abzubilden) und genügend "Funktionen"/Funktionalitäten" in fhem bestimmte Dinge einzuschränken/abzufragen: ReadingsAge, ReadingsTimeStamp, ReadingsVal, ... und zu "speichern": setreading...
EDIT: ist es wirklich sinnvoll den Anwesenheitsstatus abzufragen bzw. damit triggern zu lassen? Ich farge ja nur... Weil Fenster auf/zu machen geht ja nur, wenn jemand da ist!? ;) Bzw. wenn niemnd da ist und trotzdem Fenster auf geht/zu geht soll nicht gefahren werden. Evtl. verstehe ich ja noch: Fenster ist auf und Rollo evtl. auch (auf 20) und alle verlassen die Wohnung -> mache Rollo zu (aber auf den alten Wert? Was wenn der 19 war? ;) Dann ist es auch egal)... Evtl. hat die Logik an sich noch "Unstimmigkeiten"/"Löcher"... Aber: das musst du wissen... Ich will und werde mich da nicht (weiter) "einmischen"... Ich hab genug geschrieben wie es funktionieren KANN/KÖNNTE/SOLLTE (und ich denke auch wird / bzw. eben müsste auch klar formuliert sein WANN/WARUM [und unterscheiden in "soll nur erfüllt/nicht erfüllt sein" und "wenn sich da was ändert bitte nochmal prüfen"] WAS passieren soll damit man entsprechend vorschlagen kann)... Einbauen musst das schon du in deine ganze Logik (die ich nicht kenne / also nicht [formuliert] wie sie gedacht war/ist außer was im DOIF [sofern ich das "verstehe"] zu sehen ist und da bin ich mir nicht sicher, ob das alles tatsächlich so gewollt war ;) )
Gruß, Joachim
Ja das mit dem ? müsste funktionieren.
Der Fehler war halt der Grundgedanke, dass der Aktor von 0 auf 20 springt. stattdessen geht es ja 0 -> 0,5 -> 1 -> 1,5 -> 2 -> 2,5 -> 3 -> etc..
Wenn er direkt auf 20 springen würde wäre mein DOIF ja in Ordnung gewesen. Da greift halt das Sprichwort: Unwissenheit (meinerseits) schützt vor Fehlern nicht.
Werde es heute Abend noch mal probieren, gestern war es mir einfach zu spät geworden.