stateFormat erzeugt Readings

Begonnen von FunkOdyssey, 03 Februar 2016, 09:25:26

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Hallo,

ich habe mir mittels userreadings ein paar Readings (beginn&anfang) gebastelt.
Diese lasse ich mir im mittels stateFormat anzeigen:


beginn - anfang (state)


Dies erzeugt nun leider neue Readings, die ich nicht haben will.








ReadingnameInhalt
(closed)
-2016-02-02 20:03:12 (closed)


Mir ist bekannt, dass stateFormat eigentlich mit einem Komma getrennt wird.
Aber gibt es dennoch eine Möglichkeit, einen längeren String mit "Anfangstimestamp - Endetimestamp (status)" aufzunehmen?

Am Rande:
Kann man hier in BBCode keine Table-Border zuweisen? Schade. :-)

marvin78

Mach mal ein list vom entsprechenden Device und poste das hier in Code-Tags. Deine Ausführungen sind nicht ganz klar.

FunkOdyssey

Stimmt. Ist bestimmt einfacher. :-)

Man achte auf die ersten beiden Readings. Das erste Reading ist von einem vorherigen stateFormat-Versuch und kann nicht mehr gelöscht werden. Ich bin halt darauf aufmerksam geworden, weil im Log über die Zeichen gemeckert wird. :-)

Internals:
   DEF        XXXXXX
   IODev      hmusb
   LASTInputDev hmusb2
   MSGCNT     2
   NAME       contact_diele
   NR         720
   NTFY_ORDER 50-contact_diele
   STATE      2016-02-02 20:02:52 - 2016-02-02 20:03:12 (closed)
   TYPE       CUL_HM

   Readings:
     2016-01-11 10:30:52   (closed)
     2016-02-02 20:02:52   -               2016-02-02 20:03:12 (closed)
     2016-02-03 09:09:25   Activity        alive
     2015-10-26 09:29:22   D-firmware      1.0
     2015-10-26 09:29:22   D-serialNr      XXXXXX
     2015-10-26 10:25:47   PairedTo        XXXXXX
     2015-10-26 10:25:47   R-cyclicInfoMsg on
     2015-10-26 10:25:47   R-eventDlyTime  0 s
     2015-10-26 10:25:47   R-pairCentral   XXXXXX
     2015-10-26 10:25:47   R-sabotageMsg   on
     2015-10-26 10:25:47   R-sign          on
     2015-10-26 10:25:47   RegL_00.        02:01 09:01 0A:26 0B:34 0C:58 10:01 14:06 00:00
     2015-10-26 10:25:47   RegL_01.        08:01 20:9C 21:00 30:06 00:00
     2016-02-03 09:16:05   alive           yes
     2016-02-03 09:16:05   battery         ok
     2016-02-03 09:16:05   contact         closed (to vccu)
     2016-02-03 09:16:05   recentStateType info
     2016-02-03 09:16:05   sabotageError   off
     2016-02-03 09:16:05   state           closed
     2016-02-02 20:03:12   time            2016-02-02 20:02:52
     2016-02-02 20:03:12   timeClose       2016-02-02 20:03:12
     2016-02-02 20:03:12   trigDst_vccu    noConfig
     2016-02-02 20:03:12   trigger_cnt     34

Attributes:
   IODev      hmusb
   IOgrp      vccu
   actCycle   001:05
   actStatus  alive
   autoReadReg 4_reqStatus
   event-on-change-reading .*
   expert     2_full
   firmware   1.0
   model      HM-SEC-SCo
   peerIDs    00000000,
   serialNr   xxxxxxx
   stateFormat time - timeClose (state)
   subType    threeStateSensor
   userReadings time:contact {if (ReadingsVal("$name","contact","") =~ "open.*") {ReadingsTimestamp("$name","contact","")} else {ReadingsVal("$name","time","")}},
timeClose:contact {if (ReadingsVal("$name","contact","") =~ "closed.*") {ReadingsTimestamp("$name","contact","")} else {ReadingsVal("$name","time","")}}

marvin78

Eigentlich sollte stateFormat keine Readings erzeugen. Aber du verwendest ein Perl Schlüsselwort (time) als Reading über userReadings. Eventuell verursacht das das Problem, auch wenn ich gerade nicht erklären kann, warum das im speziellen Fall so ist.

Gelöscht bekommst du sie eventuell direkt im stateFile.

FunkOdyssey

Ich versuche es einfach mit nem neuen Namen.
Einige Readings kann ich per deletereading löschen. Den Rest mach ich dann über das Statefile.

Vielen Dank.

frank

die readings sollten auch mit "set <dev> clear readings" verschwinden. danach brauchst du aber wieder getconfig.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

FunkOdyssey

Hmm, schade. Jetzt habe ich trotz Umschiffung des Begriffs "time" wieder fehlerhafte Readings:


Internals:
   DEF        xxxx
   IODev      hmusb2
   LASTInputDev hmusb
   MSGCNT     107
   NAME       contact_diele
   NR         720
   NTFY_ORDER 50-contact_diele
   STATE      2016-02-09 21:13:45 - 2016-02-09 21:14:26 (closed)
   TYPE       CUL_HM
   protLastRcv 2016-02-10 09:33:43
   protSnd    57 last_at:2016-02-10 09:33:43
   protState  CMDs_done
   Readings:
     2016-02-07 19:57:57   -               2016-02-07 19:58:02 (closed)
     2016-02-08 09:43:02   Activity        alive
     2016-02-05 11:32:19   D-firmware      1.0
     2016-02-05 11:32:19   D-serialNr      xxxx
     2016-02-03 21:26:27   PairedTo        xxxx
     2016-02-03 21:26:27   R-cyclicInfoMsg on
     2016-02-03 21:26:27   R-eventDlyTime  0 s
     2016-02-03 21:26:27   R-pairCentral   xxxx
     2016-02-03 21:26:27   R-sabotageMsg   on
     2016-02-03 21:26:27   R-sign          on
     2016-02-03 21:26:27   RegL_00.        02:01 09:01 0A:26 0B:34 0C:58 10:01 14:06 00:00
     2016-02-03 21:26:27   RegL_01.        08:01 20:9C 21:00 30:06 00:00
     2016-02-09 21:14:26   TuerAuf         2016-02-09 21:13:45
     2016-02-09 21:14:26   TuerZu          2016-02-09 21:14:26
     2016-02-10 09:33:43   alive           yes
     2016-02-10 09:33:43   battery         ok
     2016-02-10 09:33:43   contact         closed (to vccu)
     2016-02-10 09:33:43   recentStateType info
     2016-02-10 09:33:43   sabotageError   off
     2016-02-10 09:33:43   state           closed
     2016-02-09 21:14:26   trigDst_vccu    noConfig
     2016-02-09 21:14:26   trigger_cnt     60
Attributes:
   IODev      hmusb
   IOgrp      vccu
   actCycle   001:05
   actStatus  alive
   autoReadReg 4_reqStatus
   event-on-change-reading .*
   expert     2_full
   firmware   1.0
   model      HM-SEC-SCo
   peerIDs    00000000,
   stateFormat TuerAuf - TuerZu (state)
   subType    threeStateSensor
   userReadings TuerAuf:contact {if (ReadingsVal("$name","contact","") =~ "open.*") {ReadingsTimestamp("$name","contact","")} else {ReadingsVal("$name","TuerAuf","")}},
TuerZu:contact {if (ReadingsVal("$name","contact","") =~ "closed.*") {ReadingsTimestamp("$name","contact","")} else {ReadingsVal("$name","TuerZu","")}}


Bootscreen

#7
Test mal folgendes als stateFormat: 
{sprintf("%s - %s (%s)",ReadingsVal("$name","TuerAuf",""),ReadingsVal("$name","TuerZu",""),ReadingsVal("$name","state",""))}

und mit
deletereading contact_diele -
solltest du das reading löschen können. ich gebe aber keine garantie dafür, da ich nicht weiß inwieweit das - ein problem geben könnte
Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

FunkOdyssey

Das probiere ich mal aus.
Daran hatte ich auch schon gedacht, aber das hätte ich auf die Schnelle nicht hinbekommen.

Du weiß nicht zufälligerweise auswendig, wie man Datum/Uhrzeit in sprintf() umformatiert?

Ich habe nun:
2016-02-10 10:27:12 - 2016-02-10 10:28:10 (closed)

Und hätte gerne :-)
2016-02-10 10:27:12 - 10:28:10 (closed)

Ich hab' schon Stunden gesucht und konnte nichts "einfaches" finden.

Danke vielmals.

Bootscreen

Ungestestet:
{sprintf("%s - %s (%s)",ReadingsVal("$name","TuerAuf",""),substr(ReadingsVal("$name","TuerZu",""),11),ReadingsVal("$name","state",""))}

Mag aber bessere Lösungen geben und geht auch nur sofern sich das Datumsformat nicht ändert.
Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

FunkOdyssey

Danke für dein Tipp mit substr().

Aber unabhängig davon tauchen die Readings nun wieder auf. Es handelt sich hier um Türkontakte. Sobald die Tür geöffnet wird, wird das Reading angelegt. Komisch.