Hallo zusammen!
Ich habe mir heute mal Zeit genommen, um das Großprojekt HMCCU5-Migration im zweiten Anlauf anzugehen nachdem ich im voraus einige Zeit auf einer Test-Instanz gangbare Konfigurationen entwickelt habe.
Nun bin ich auf ein bislang neues Problem gestoßen: substitute scheint nicht mehr auf <channelno>.<datapoint> zu matchen, ein Matchen auf <datapoint> funktioniert.
Beispiel:
attr AU.XX.Regensensor substitute 1.STATE!(0|false):dry,(1|true):rain;2.STATE!(0|false):off,(1|true):on
Wie man hier sieht, lässt sich der Workaround, auf die channelno zu verzichten, hier nicht umsetzen.
Hat jemand einen Tipp?
Falls relevant:
ccudef-substitute auf der HMCCU ist auf .*:${value} gesetzt
ccuflags im HMCCUDEV ist auf showMasterReadings,showLinkReadings,showDeviceReadings,showServiceReadings gesetzt
/Update2: list
Internals:
DEF KEQ0883874
FUUID 5f11cc12-f33f-5676-c825-8b10bd6e3e57cf84
IODev rpiccu
NAME AU.XX.Regensensor
NR 416
STATE 0 (0)
TYPE HMCCUDEV
ccuaddr KEQ0883874
ccudevstate active
ccuif BidCos-RF
ccuname AU.XX.Regensensor
ccusubtype HM-Sen-RD-O
ccutype HM-Sen-RD-O
eventCount 14
firmware 1.4
readonly no
Helper:
DBLOG:
1.STATE:
DbLog:
TIME 1664815553.56241
VALUE 0
2.STATE:
DbLog:
TIME 1664815553.8473
VALUE 0
OLDREADINGS:
READINGS:
2022-10-03 17:58:39 0.AES_KEY 0
2022-10-03 17:58:39 0.CONFIG_PENDING 0
2022-10-03 17:58:39 0.DEVICE_IN_BOOTLOADER 0
2022-10-03 17:58:39 0.RSSI_DEVICE -53
2022-10-03 17:58:39 0.RSSI_PEER -194
2022-10-03 17:58:39 0.STICKY_UNREACH 0
2022-10-03 17:58:39 0.UNREACH 0
2022-10-03 17:58:39 0.UPDATE_PENDING 0
2022-10-03 18:45:53 1.STATE 0
2022-10-03 18:45:53 2.STATE 0
2022-10-03 17:58:39 R-1.AES_ACTIVE 0
2022-10-03 17:58:39 R-1.COND_TX_THRESHOLD_HI 2900
2022-10-03 17:58:39 R-1.COND_TX_THRESHOLD_LO 2850
2022-10-03 17:58:39 R-1.EVENT_FILTERTIME 1.0
2022-10-03 17:58:39 R-1.EVENT_RELEASE_FILTER_TIME 120.0
2022-10-03 17:58:39 R-1.STATE_HIGH_HOLD_TIME 180.0
2022-10-03 17:58:39 R-1.TRANSMIT_TRY_MAX 10
2022-10-03 17:58:39 R-LOCAL_RESET_DISABLE 0
2022-10-03 17:58:39 R-TRANSMIT_DEV_TRY_MAX 10
2022-10-03 17:58:39 activity 0
2022-10-03 18:45:53 control 0
2022-10-03 18:45:53 devstate ok
2022-10-03 18:45:53 hmstate 0
2022-10-03 17:58:39 rssidevice -53
2022-10-03 17:58:39 rssipeer -194
2022-10-03 17:58:39 sign 0
2022-10-03 18:45:53 state 0
helper:
bm:
HMCCUDEV_Attr:
cnt 8
dmx -1000
dtot 0
dtotcnt 0
mTS 03.10. 17:43:15
max 6.79492950439453e-05
tot 0.000325918197631836
mAr:
set
AU.XX.Regensensor
substitute
1\.STATE!(0|false):dry,(1|true):rain
HMCCUDEV_Get:
cnt 20
dmx -1000
dtot 0
dtotcnt 0
mTS 03.10. 17:46:43
max 0.356071949005127
tot 0.908060312271118
mAr:
HASH(0x563e017915f8)
ARRAY(0x563e077cb9a8)
HASH(0x563e07a94288)
HMCCUDEV_Set:
cnt 105
dmx -1000
dtot 0
dtotcnt 0
mTS 03.10. 18:45:53
max 0.00419497489929199
tot 0.0281155109405518
mAr:
HASH(0x563e017915f8)
ARRAY(0x563e0888f510)
HASH(0x563e0841d7a8)
hmccu:
channels 3
detect 3
devspec KEQ0883874
forcedev 0
nodefaults 1
role 0:MAINTENANCE,1:RAINDETECTOR,2:RAINDETECTOR_HEAT
setDefaults 0
cmdlist:
get
set off:noArg on-for-timer on-till on:noArg toggle:noArg
control:
chn 2
dpt STATE
dp:
0.AES_KEY:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
0.CONFIG_PENDING:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
0.DEVICE_IN_BOOTLOADER:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
0.RSSI_DEVICE:
VALUES:
NVAL -53
ONVAL -53
OSVAL -53
OVAL -53
SVAL -53
VAL -53
0.RSSI_PEER:
VALUES:
NVAL -194
ONVAL -194
OSVAL -194
OVAL -194
SVAL -194
VAL -194
0.STICKY_UNREACH:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
0.UNREACH:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
0.UPDATE_PENDING:
VALUES:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.AES_ACTIVE:
MASTER:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
VALUES:
1.COND_TX_THRESHOLD_HI:
MASTER:
NVAL 2900
ONVAL 2900
OSVAL 2900
OVAL 2900
SVAL 2900
VAL 2900
VALUES:
1.COND_TX_THRESHOLD_LO:
MASTER:
NVAL 2850
ONVAL 2850
OSVAL 2850
OVAL 2850
SVAL 2850
VAL 2850
VALUES:
1.EVENT_FILTERTIME:
MASTER:
NVAL 1.000000
ONVAL 1.000000
OSVAL 1.0
OVAL 1.000000
SVAL 1.0
VAL 1.000000
VALUES:
1.EVENT_RELEASE_FILTER_TIME:
MASTER:
NVAL 120.000000
ONVAL 120.000000
OSVAL 120.0
OVAL 120.000000
SVAL 120.0
VAL 120.000000
VALUES:
1.STATE:
VALUES:
NVAL 0
ONVAL 1
OSVAL 1
OVAL 1
SVAL 0
VAL 0
1.STATE_HIGH_HOLD_TIME:
MASTER:
NVAL 180.000000
ONVAL 180.000000
OSVAL 180.0
OVAL 180.000000
SVAL 180.0
VAL 180.000000
VALUES:
1.TRANSMIT_TRY_MAX:
MASTER:
NVAL 10
ONVAL 10
OSVAL 10
OVAL 10
SVAL 10
VAL 10
VALUES:
2.STATE:
VALUES:
NVAL 0
ONVAL 1
OSVAL 1
OVAL 1
SVAL 0
VAL 0
d.LOCAL_RESET_DISABLE:
MASTER:
NVAL 0
ONVAL 0
OSVAL 0
OVAL 0
SVAL 0
VAL 0
VALUES:
d.TRANSMIT_DEV_TRY_MAX:
MASTER:
NVAL 10
ONVAL 10
OSVAL 10
OVAL 10
SVAL 10
VAL 10
VALUES:
roleCmds:
get:
set:
off:
channel 2
role RAINDETECTOR_HEAT
subcount 1
syntax V:STATE:0
usage off
subcmd:
000:
args 0
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 000
unit
on:
channel 2
role RAINDETECTOR_HEAT
subcount 1
syntax V:STATE:1
usage on
subcmd:
000:
args 1
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 000
unit
on-for-timer:
channel 2
role RAINDETECTOR_HEAT
subcount 2
syntax V:ON_TIME:?duration V:STATE:1
usage on-for-timer duration
subcmd:
000:
args
dpt ON_TIME
fnc
max 85825945.600000
min 0.000000
parname duration
partype 2
ps VALUES
scn 000
unit s
001:
args 1
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 001
unit
on-till:
channel 2
role RAINDETECTOR_HEAT
subcount 2
syntax V:ON_TIME:?time V:STATE:1
usage on-till time
subcmd:
000:
args
dpt ON_TIME
fnc
max 85825945.600000
min 0.000000
parname time
partype 2
ps VALUES
scn 000
unit s
001:
args 1
dpt STATE
fnc
max 1
min 0
parname STATE
partype 3
ps VALUES
scn 001
unit
state:
chn 1
dpt STATE
Attributes:
DbLogInclude 1.STATE,2.STATE
IODev rpiccu
alias Regensensor
ccuflags showMasterReadings,showLinkReadings,showDeviceReadings,showServiceReadings
controldatapoint 2.STATE
devStateIcon .*:noIcon:
event-on-change-reading .*
eventMap /datapoint 2.STATE 1:on/datapoint 2.STATE 0:off/
group Klima
room Außen,Entwässerung,Start
stateFormat 1.STATE (2.STATE)
statedatapoint 1.STATE
substitute 1.STATE!0:dry,1:rain;2.STATE!(0|false):off,(1|true):on
userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
webCmd :
widgetOverride control:uzsuToggle,off,on
Patrick
Bei mir funktioniert es. Lösche mal ccudef-substitute, das matched alle Readings und ist außerdem syntaktisch falsch
Hi!
Zitat von: zap am 20 Oktober 2022, 16:12:01
Bei mir funktioniert es. Lösche mal ccudef-substitute, das matched alle Readings und ist außerdem syntaktisch falsch
Habe ich inzwischen auch rausgefunden. Hast Du eine Alternatividee für ccudef-substitute? Die Original-Values würde ich schon gerne behalten.
Patrick
Verstehe ich nicht. Soll dann jedes Reading 2x vorkommen, also einmal der Originalwert und einmal der per substitute geänderte? Ich verstehe den Sinn nicht.
Hi!
Zitat von: zap am 21 Oktober 2022, 09:13:24
Verstehe ich nicht. Soll dann jedes Reading 2x vorkommen, also einmal der Originalwert und einmal der per substitute geänderte? Ich verstehe den Sinn nicht.
Nein, von Readings habe ich nicht gesprochen sondern von Values. HMCCU5 mappt eine Vielzahl von Values auf andere Werte z. B. 1 auf motion und 0 auf noMotion. Mit dem ccudef-substitute-Hack weiter oben hatte ich das rückgängig gemacht ohne die Module patchen zu müssen. D. h. mein Reading 0.LOW_BAT hat nun den Wert 0, wenn die Batterie ok ist. So habe ich eine globale und effiziente Lösung gefunden. Möchte ich aber deviceabhängig(!) nun einzelne Werte doch umbelegen, muss ich das substitute-Attribut eines Devices setzen, das aber leider im beschriebenen Fall nicht wirkt.
Das heißt im Ergebnis, dass zwei Lösungsmöglichkeiten bestehen:
- Eine Alternative des ccudef-substitute-Hacks zur Wiederherstellung der Original-Readings
- Beibehaltung des ccudef-substitute-Hacks aber eine Anpassung des deviceabhängigen Substitutes
Patrick
Zitat von: zap am 21 Oktober 2022, 09:13:24
Verstehe ich nicht. Soll dann jedes Reading 2x vorkommen, also einmal der Originalwert und einmal der per substitute geänderte? Ich verstehe den Sinn nicht.
Keine Idee? Einfallen würde mir allenfalls noch ein Patchen vom HMCCUConf.pm.
Patrick
Ich habe mir das mal angeschaut. Wenn ich die Konvertierung rausnehme, funktionieren einige Befehle wie "toggle" sehr wahrscheinlich nicht mehr. Andere Seiteneffekte kann ich auch nicht ausschließen. Da Du der Einzige bist, der sich diese Funktionalität wünscht, werde ich das erst einmal nicht einführen.
Diese Art der Wertekonvertierung machen sehr viele Module, u.a. CUL_HM.
Hi!
Zitat von: zap am 27 Oktober 2022, 09:37:48
Ich habe mir das mal angeschaut. Wenn ich die Konvertierung rausnehme, funktionieren einige Befehle wie "toggle" sehr wahrscheinlich nicht mehr. Andere Seiteneffekte kann ich auch nicht ausschließen. Da Du der Einzige bist, der sich diese Funktionalität wünscht, werde ich das erst einmal nicht einführen.
Ok, dann werde ich mal schauen, was ich mit dem Patchen der HMCCUConf.pm erreichen kann.
Zitat von: zap am 27 Oktober 2022, 09:37:48
Diese Art der Wertekonvertierung machen sehr viele Module, u.a. CUL_HM.
Das ist mir natürlich bewusst, und ich verstehe auch die Beweggründe dahinter. Aber diese subjektive Umdeutung führt u. a. dazu, dass nach Modulupdates Automatisierungen lautlos ins Leere laufen können wie bei HMCCU5 passiert. Das ist ein bisschen so, wie neben einem Vulkan zu leben. Oft passiert halt nix Schlimmes.
Patrick
Hi!
Zitat von: zap am 20 Oktober 2022, 16:12:01
Bei mir funktioniert es. Lösche mal ccudef-substitute, das matched alle Readings und ist außerdem syntaktisch falsch
Nachdem mein Plan, HMCCUConf.pm zu patchen wegen hardkodierter Regeln gescheitert ist, habe ich mich nochmal mit substitute beschäftigt.
Habe wie vorgeschlagen das ccudef-substitute der HMCCU gelöscht. Es gibt nun exakt ein .*substitute-Attribut in der ganzen Testinstanz und das Problem besteht nach wie vor. Alle Module sind laut Update aktuell.
List des Testgeräts:
Internals:
DEF 000B5BE98E2C76
FUUID 629e2ef7-f33f-2cae-b562-f15a6fb774e3e33e
IODev kvmccu
NAME HmIP_WRC6_000B5BE98E2C76
NR 14
STATE TEST=1
TYPE HMCCUDEV
ccuaddr 000B5BE98E2C76
ccudevstate active
ccuif HmIP-RF
ccuname HmIP-WRC6 000B5BE98E2C76
ccurolestate KEY_TRANSCEIVER
ccusubtype WRC6
ccutype HmIP-WRC6
eventCount 38
firmware 1.0.19
readonly no
OLDREADINGS:
READINGS:
2022-10-29 01:40:21 0.CONFIG_PENDING false
2022-10-29 01:40:18 0.DUTY_CYCLE false
2022-10-29 01:40:18 0.INSTALL_TEST true
2022-10-29 01:40:21 0.LOW_BAT ok
2022-10-29 01:40:18 0.OPERATING_VOLTAGE 2.9
2022-10-29 01:40:18 0.OPERATING_VOLTAGE_STATUS NORMAL
2022-10-29 01:40:21 0.RSSI_DEVICE -76
2022-10-29 01:40:18 0.RSSI_PEER N/A
2022-10-29 01:40:21 0.UNREACH alive
2022-10-29 01:40:18 0.UPDATE_PENDING false
2022-10-29 01:40:18 1.PRESS_SHORT TEST=1
2022-10-29 01:40:18 2.PRESS_SHORT TEST=1
2022-10-29 01:40:21 3.PRESS_SHORT TEST=1
2022-10-29 01:40:21 activity alive
2022-10-29 01:40:21 battery ok
2022-10-29 01:40:21 devstate ok
2022-10-29 01:40:21 hmstate TEST=1
2022-10-29 01:40:18 pressed TEST=1
2022-10-29 01:40:21 rssidevice -76
2022-10-29 01:40:18 rssipeer N/A
2022-10-29 01:40:18 state TEST=1
2022-10-29 01:40:18 voltage 2.9
helper:
bm:
HMCCUDEV_Attr:
cnt 5
dmx -1000
dtot 0
dtotcnt 0
mTS 29.10. 01:34:54
max 8.392333984375e-05
tot 0.000219106674194336
mAr:
set
HmIP_WRC6_000B5BE98E2C76
substitute
.*1.PRESS_SHORT!.+:P=${value}
HMCCUDEV_Get:
cnt 17
dmx -1000
dtot 0
dtotcnt 0
mTS 29.10. 01:34:54
max 0.000270843505859375
tot 0.00343775749206543
mAr:
HASH(0x56395918bbd0)
ARRAY(0x56395a4ea1b8)
HASH(0x56395a4ffd50)
HMCCUDEV_Set:
cnt 91
dmx -1000
dtot 0
dtotcnt 0
mTS 29.10. 01:34:54
max 0.000522851943969727
tot 0.0219762325286865
mAr:
HASH(0x56395918bbd0)
ARRAY(0x56395a5081a0)
HASH(0x56395a4ebdb8)
hmccu:
channels 7
detect 2
devspec 000B5BE98E2C76
forcedev 0
nodefaults 1
role 0:MAINTENANCE,1:KEY_TRANSCEIVER,2:KEY_TRANSCEIVER,3:KEY_TRANSCEIVER,4:KEY_TRANSCEIVER,5:KEY_TRANSCEIVER,6:KEY_TRANSCEIVER
setDefaults 0
cmdlist:
get
set
control:
dp:
0.CONFIG_PENDING:
VALUES:
NVAL 0
ONVAL 0
OSVAL false
OVAL 0
SVAL false
VAL 0
0.DUTY_CYCLE:
VALUES:
NVAL false
ONVAL false
OSVAL false
OVAL false
SVAL false
VAL false
0.INSTALL_TEST:
VALUES:
NVAL true
ONVAL true
OSVAL true
OVAL true
SVAL true
VAL true
0.LOW_BAT:
VALUES:
NVAL 0
ONVAL 0
OSVAL ok
OVAL 0
SVAL ok
VAL 0
0.OPERATING_VOLTAGE:
VALUES:
NVAL 2.900000
ONVAL 2.900000
OSVAL 2.9
OVAL 2.900000
SVAL 2.9
VAL 2.900000
0.OPERATING_VOLTAGE_STATUS:
VALUES:
NVAL 0
ONVAL 0
OSVAL NORMAL
OVAL 0
SVAL NORMAL
VAL 0
0.RSSI_DEVICE:
VALUES:
NVAL -76
ONVAL -74
OSVAL -74
OVAL -74
SVAL -76
VAL -76
0.RSSI_PEER:
VALUES:
NVAL N/A
ONVAL N/A
OSVAL N/A
OVAL 0
SVAL N/A
VAL 0
0.UNREACH:
VALUES:
NVAL 0
ONVAL 0
OSVAL alive
OVAL 0
SVAL alive
VAL 0
0.UPDATE_PENDING:
VALUES:
NVAL false
ONVAL false
OSVAL false
OVAL false
SVAL false
VAL false
1.PRESS_SHORT:
VALUES:
NVAL 1
ONVAL 1
OSVAL P=1
OVAL 1
SVAL TEST=1
VAL 1
2.PRESS_SHORT:
VALUES:
NVAL 1
ONVAL 1
OSVAL P=1
OVAL 1
SVAL TEST=1
VAL 1
3.PRESS_SHORT:
VALUES:
NVAL 1
ONVAL 1
OSVAL TEST=1
OVAL 1
SVAL TEST=1
VAL 1
roleCmds:
get:
set:
state:
chn 1
dpt PRESS_SHORT
Attributes:
ccuflags showMasterReadings,showLinkReadings,showDeviceReadings,showServiceReadings
event-on-change-reading .*
event-on-update-reading .*PRESS_SHORT.*
substitute PRESS_SHORT!.+:TEST=${value}
verbose 5
Mit dem Attribut
substitute PRESS_SHORT!.+:TEST=${value}
werden die Werte ersetzt, mit
substitute 1.PRESS_SHORT!.+:TEST=${value}
aber nicht.
Patrick
Mahlzeit!
Habe den Bug mal näher eingegrenzt. Das Problem scheint zu sein, dass die Substitute-Regel garnicht unversehrt in HMCCU_Substitute ankommt.
Statt
1.PRESS_SHORT!.*:TEST=${value};LOW_BAT!.*:TEST2=${value}
kommt
1!.*:TEST=${value};LOW_BAT!.*:TEST2=${value}
an. Das kann aber nur passieren, wenn ${}-Teile enthalten sind, denn vor dem Aufruf von HMCCU_SubstVariables ist alles ok.
/Update:
Es passiert in der Zeile 3085
$text =~ s/$dp/$clhash->{hmccu}{dp}{$dp}{VALUES}{VAL}/g;
Patrick
Hi!
Mir fiel gerade auf, dass ich 88_HMCCU nach wie vor von Updates ausgenommen habe. Wie ist denn der aktuelle Stand des Bugs?
Danke!
Patrick
Das Issue dazu in Github ist geschlossen, also habe ich es vermutlich gefixt. Kann mich aber nicht mehr genau erinnern ...
Hi!
Zitat von: zap am 02 Juni 2023, 17:54:44Das Issue dazu in Github ist geschlossen, also habe ich es vermutlich gefixt. Kann mich aber nicht mehr genau erinnern ...
Gerade getestet. Der Bug ist leider nach wie vor da.
Patrick