alter state auslesen

Begonnen von Superposchi, 10 Januar 2021, 11:50:29

Vorheriges Thema - Nächstes Thema

Superposchi

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?

Superposchi

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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

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.

MadMax-FHEM

#4
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

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.

Superposchi

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.

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

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.

MadMax-FHEM

#10
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

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.

MadMax-FHEM

#12
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

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.

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)