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.
Readingname | Inhalt |
(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. :-)
Mach mal ein list vom entsprechenden Device und poste das hier in Code-Tags. Deine Ausführungen sind nicht ganz klar.
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","")}}
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.
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.
die readings sollten auch mit "set <dev> clear readings" verschwinden. danach brauchst du aber wieder getconfig.
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","")}}
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
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.
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.
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.