FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Superposchi am 10 Januar 2021, 11:50:29

Titel: alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 11:50:29
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?
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 11:58:47
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
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 12:04:59
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
Titel: Antw:alter state auslesen
Beitrag 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.
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 15:01:55
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
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 15:13:28
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 15:26:55
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.
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 15:34:47
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 15:41:29
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 19:47:19
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 20:00:50
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 20:21:02
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 20:30:14
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 21:48:14
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 22:02:26
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 22:49:45
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 22:55:11
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 10 Januar 2021, 23:00:38
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 10 Januar 2021, 23:19:16
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
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 11 Januar 2021, 02:05:18
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 11 Januar 2021, 10:12:37
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.
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 11 Januar 2021, 10:20:12
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.
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 11 Januar 2021, 10:35:32
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
Titel: Antw:alter state auslesen
Beitrag von: MadMax-FHEM am 11 Januar 2021, 10:48:42
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
Titel: Antw:alter state auslesen
Beitrag von: Superposchi am 11 Januar 2021, 11:04:56
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.