Hallo André,
ich habe am 4. Kanal von dem SWAP RGB Sketch eine Leuchte angebunden, die einfach ein/aus schalten möchte. Dazu habe ich diesen 4. Kanal mit readingsProxy als separates Device angelegt. setFN funktioniert ohne Probleme, ich bekomme lediglich keinen longpoll update im FHEMWEB. d.H. ich muss F5 drücken, damit das Icon z:B. von on auf off wechselt, oder umgekehrt.
verwende ich für valueFN einfach nur "" wird mir zwar der Inhalt vom reading angezeigt, aber auch nur nach reload mit F5. Ebenfalls kein Longpoll.
Kann es sein, dass Longpoll gar nicht funktioniert, oder wo liegt mein Fehler?
Das ist das list:
Internals:
CFGFN
DEF bz_LED:0B.4-White
DEVICE bz_LED
NAME bz_LampeDekoBlumen
NR 9521
NTFY_ORDER 50-bz_LampeDekoBlumen
READING 0B.4-White
STATE 00
TYPE readingsProxy
CHANGED:
00
CHANGEDWITHSTATE:
Content:
bz_LED 1
Readings:
2015-07-12 18:57:44 lastCmd off
2015-07-12 18:57:44 state 00
Attributes:
alias Blümchen
group Licht
room Badezimmer
setFn {($CMD eq "on")?"regSet 0B.4 FF":"regSet 0B.4 00"}
setList on off
valueFn ""
webCmd on:off
doch. longpoll funktioniert auch mit readingsProxy.
du musst eine valueFn anlegen die aus dem tatsächlichen wert des readings (also 00 bzw FF) die im proxy verwendeten werte (also off bzw. on) erzeugt. etwas in der art:{(hex($VALUE) == 0)?"off":"on"}
gruss
andre
das bräuchte ich aber nur, damit direkt die passenden Icons angezeigt werden, oder? Mein Problem ist aktuell, dass der state gar nicht angepasst wird.
Egal ob mit on/off oder mit dem Wert, der wirklich im reading steht.
Auch mit einer valueFN, die den Hex wert in den Text on oder off umschreibt, bleibt das Longpoll Problem.
1. Ich klicke per webcmd auf "on"
2. Lampe geht an (also die physikalische Leuchte meine ich)
3. am state von readingsProxy ändert sich nix
4. F5 drücken
5. Erst jetzt hat sich state geändert (Entweder mit dem Hex Wert, ohne valueFN, oder eben mit on/off
siehst du die events im event monitor?
gruss
andre
Ja, sehe ich:
Kanal über readingsProxy einschalten:
2015-07-12 21:22:37 SWAP_0000002200000003 bz_LED set-regSet
2015-07-12 21:22:38 SWAP_0000002200000003 bz_LED 0B-RGBlevel: 000000FF
2015-07-12 21:22:38 SWAP_0000002200000003 bz_LED 0B.4-White: FF
2015-07-12 21:22:38 SWAP_0000002200000003 bz_LED off
2015-07-12 21:22:38 SWAP_0000002200000003 bz_LED RGB: 000000FF
Kanal über readingsProxy ausschalten:
2015-07-12 21:21:53 SWAP_0000002200000003 bz_LED set-regSet
2015-07-12 21:21:53 SWAP_0000002200000003 bz_LED 0B-RGBlevel: 00000000
2015-07-12 21:21:53 SWAP_0000002200000003 bz_LED 0B.4-White: 00
2015-07-12 21:21:53 SWAP_0000002200000003 bz_LED off
2015-07-12 21:21:53 SWAP_0000002200000003 bz_LED RGB: 00000000
das sind aber nur die events für das original device. nicht für das proxy device.
das proxy device sollte auch events produzieren.
Dann kommen keine Events vom readingsProxy Device.
Seltsam, bei folgenden devices habe ich kein Problem:
Internals:
CFGFN
DEF wz_Gewaechshaus:state
DEVICE wz_Gewaechshaus
NAME Test
NR 10420
NTFY_ORDER 50-Test
READING state
STATE off
TYPE readingsProxy
Content:
wz_Gewaechshaus 1
Readings:
2015-07-12 22:21:23 state off
Attributes:
room Wohnzimmer
Internals:
DEF wz_LampeSideboard:17-Motion
DEVICE wz_LampeSideboard
NAME wz_Bewegungsmelder
NR 292
NTFY_ORDER 50-wz_Bewegungsmelder
READING 17-Motion
STATE 00
TYPE readingsProxy
Content:
wz_LampeSideboard 1
Readings:
2015-07-12 22:14:35 state 00
Attributes:
devStateIcon 00:message_presence_disabled 01:people_sensor
icon motion_detector
room ALARM,Wohnzimmer
Kann Das vielleicht ein Problem mit dem ? Oder - in dem readings Namen sein ?
An dem . oder - im Namen des Reading liegt es nicht. Habe das gerade mal mit einem FS20 Device und userreading ausprobiert.
Dem readingsProxy ist dort relativ egal was in dem Readingsnamen vorkommt.
Ich glaube es liegt an dem RGB Register von dem SWAP Device. An einem anderem SWAP Device (ebenfalls so ein RGB Board, nur eben in einem anderen Raum) da lese ich über readingsProxy das Reading des Bewegungsmelders aus (17-Motion). Das funktioniert alles ohne Probleme und wird auch ganz korrekt mit longpoll aktualisiert.
Jetzt bleibt ja eigentlich nur noch das RGB Reading als Problemkandidat übrig, oder? :-)
Hallo André,
habe noch einmal mit Dummys und FS20 Geräten getestet. Bei beiden funktioniert das longpoll update ohne Probleme. Das auslesen und anzeigen über readingsProxy von dem reading 17-Motion funktoniert auch mit Longpoll. An den . und - im readingsname liegt es nicht, das habe ich mit Dummys mal getestet, ohne Probleme.
Kannst du das Problem mit einem SWAP Device nachstellen?
Das ist das list von dem SWAP Device, wo ich den 4. Kanal als eigenes Device per readingsProxy schalten möchte:
Internals:
CHANNELS 4
CMD_SIZE 10
DEF 07
Developer justme
IODev nn_F2F_FBF_panStick
LASTInputDev panStick
MSGCNT 2470
NAME bz_LED
NR 258
Product RGB driver board with IR
STATE off
SWAP_00-ProductCode 0000002200000003
SWAP_00.1-ManufacturerID 00000022
SWAP_00.2-ProductID 00000003
SWAP_01-HardwareVersion 00100640
SWAP_02-FirmwareVersion 00020004
SWAP_03-SystemState 01
SWAP_04-FrequencyChannel 00
SWAP_05-SecurityOption 00
SWAP_06-SecurityPassword 00
SWAP_07-SecurityNonce D8
SWAP_08-NetworkID B547
SWAP_09-DeviceAddress 07
SWAP_0A-PeriodicTxInterval 0258
SWAP_MISSED 0
SWAP_Sent_unconfirmed 0 Sent_unconfirmed
SWAP_lastRcv 2015-07-14 07:40:16
SWAP_lastSend 2015-07-14 07:40:16
SWAP_nonce 77
TYPE SWAP_0000002200000003
addr 07
devices
nonce 166
panStick_MSGCNT 2470
panStick_TIME 2015-07-14 07:40:16
Readings:
2015-07-14 07:40:16 0B-RGBlevel 00000000
2015-07-14 07:40:16 0B.1-Red 00
2015-07-14 07:40:16 0B.2-Green 00
2015-07-14 07:40:16 0B.3-Blue 00
2015-07-14 07:40:16 0B.4-White 00
2015-07-14 07:31:36 0D-InternalTemperature 00000015
2015-07-09 12:33:31 0E-PowerOnState 0000000000
2015-07-09 12:33:31 0E.1-State 00
2015-07-09 12:33:31 0E.2-Brightness 00
2015-07-09 12:33:31 0E.3-Color 000000
2015-07-14 06:07:01 0F-Command 11000300000000000000
2015-07-14 06:07:01 0F.1-Cmd 11
2015-07-14 06:07:01 0F.2-Args 000300000000000000
2015-07-14 07:31:36 16.0-Temperature 02D4
2015-07-14 07:31:36 16.1-Humidity 026C
2015-07-09 12:33:32 17-Motion 01
2015-07-14 07:31:36 internaltemperature 21
2015-07-14 07:40:16 state off
Helper:
RGB_SIZE 5
Product:
label RGB driver board with IR
name rgbdriver
pwrdownmode 0
Registers:
11:
HASH(0x2a30ee8)
HASH(0x29fa070)
HASH(0x29fa8c8)
12:
hwmask 02
name IRrecv
swversion
type regular
endpoints:
HASH(0x29e6860)
HASH(0x29face8)
HASH(0x2888dd8)
13:
hwmask
name Temp
swversion
type regular
endpoints:
HASH(0x2a3a1b8)
14:
hwmask
name PowerOn
swversion
type config
endpoints:
HASH(0x2a45608)
HASH(0x2d73658)
HASH(0x2a3a140)
HASH(0x2d23648)
15:
HASH(0x29e6b48)
HASH(0x2d56dd0)
16:
hwmask 08
name Repeater mode
swversion
type config
endpoints:
HASH(0x2a45b48)
17:
hwmask 01
name Bri
swversion
type regular
endpoints:
HASH(0x2d56d58)
18:
hwmask 04
name DMX
swversion 00020001
type config
endpoints:
HASH(0x2a45f20)
19:
hwmask 10
name LedPower
swversion
type regular
endpoints:
HASH(0x2d56c98)
20:
hwmask 20
name IRsend
swversion
type regular
endpoints:
HASH(0x29faac0)
HASH(0x2d56e18)
HASH(0x2d56998)
HASH(0x2d56b30)
22:
hwmask 200
name sensor
swversion
type regular
endpoints:
HASH(0x29dad08)
HASH(0x2d563e0)
23:
hwmask 400
name motion
swversion
type regular
endpoints:
HASH(0x2d56158)
sentList:
Attributes:
IODev nn_F2F_FBF_panStick
ProductCode 0000002200000003
alias Badezimmer LED
devStateIcon {(SWAP_0000002200000003_devStateIcon($name),"toggle")}
event-min-interval .*:600
event-on-change-reading .*
fp_nn_fpHandy 645,325,1,
group Licht
icon light_led_stripe_rgb
room Badezimmer
userReadings internaltemperature:0D-InternalTemperature {hex(ReadingsVal($name,"0D-InternalTemperature","0"))}
userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
webCmd rgb:rgb ff0000:rgb 00ff00:rgb 0000ff:toggle:on:off:dimUp:dimDown
Das ist die Ausgabe von get deviceXML (Ich benutze ja eine angepasste Version, wegen dem Bewegungsmelder Register. Habe dort allerdings nix am RGB Register geändert, sondern lediglich das Register 17 zugefügt.
[code]
$VAR1 = {
'label' => 'RGB driver board with IR',
'name' => 'rgbdriver',
'pwrdownmode' => 0,
'registers' => {
'11' => [
{
'endpoints' => [
{
'direction' => 2,
'name' => 'RGBlevel',
'size' => 3,
'type' => 1
},
{
'direction' => 2,
'name' => 'Red',
'position' => '0',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Green',
'position' => '1',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Blue',
'position' => '2',
'size' => 1,
'type' => 1
}
],
'hwmask' => undef,
'name' => 'RGB',
'swversion' => undef,
'type' => 'regular'
},
{
'endpoints' => [
{
'direction' => 2,
'name' => 'RGBlevel',
'size' => 4,
'type' => 1
},
{
'direction' => 2,
'name' => 'Red',
'position' => '0',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Green',
'position' => 1,
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Blue',
'position' => 2,
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'White',
'position' => 3,
'size' => 1,
'type' => 1
}
],
'hwmask' => '40',
'name' => 'RGB',
'swversion' => '00020000',
'type' => 'regular'
},
{
'endpoints' => [
{
'direction' => 2,
'name' => 'RGBlevel',
'size' => 5,
'type' => 1
},
{
'direction' => 2,
'name' => 'Red',
'position' => '0',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Green',
'position' => '1',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Blue',
'position' => '2',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'White',
'position' => '3',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'White2',
'position' => '4',
'size' => 1,
'type' => 1
}
],
'hwmask' => '80',
'name' => 'RGB',
'swversion' => '00020000',
'type' => 'regular'
}
],
'12' => {
'endpoints' => [
{
'direction' => 1,
'name' => 'IRCommand',
'size' => 5,
'type' => 1
},
{
'direction' => 1,
'name' => 'Type',
'position' => '0',
'size' => 1,
'type' => 1
},
{
'direction' => 1,
'name' => 'Value',
'position' => '1',
'size' => 4,
'type' => 1
}
],
'hwmask' => '02',
'name' => 'IRrecv',
'swversion' => undef,
'type' => 'regular'
},
'13' => {
'endpoints' => [
{
'direction' => 1,
'name' => 'InternalTemperature',
'size' => 4,
'type' => 2,
'units' => [
{
'factor' => '1',
'name' => 'C',
'offset' => '0'
}
]
}
],
'hwmask' => undef,
'name' => 'Temp',
'swversion' => undef,
'type' => 'regular'
},
'14' => {
'endpoints' => [
{
'default' => undef,
'direction' => 2,
'name' => 'PowerOnState',
'size' => 5,
'type' => 1,
'verif' => undef
},
{
'default' => '0',
'direction' => 2,
'name' => 'State',
'position' => '0',
'size' => 1,
'type' => 1,
'verif' => '(0|1|2|3)'
},
{
'default' => undef,
'direction' => 2,
'name' => 'Brightness',
'position' => '1',
'size' => 1,
'type' => 1,
'verif' => undef
},
{
'default' => undef,
'direction' => 2,
'name' => 'Color',
'position' => '2',
'size' => 3,
'type' => 1,
'verif' => undef
}
],
'hwmask' => undef,
'name' => 'PowerOn',
'swversion' => undef,
'type' => 'config'
},
'15' => [
{
'endpoints' => [
{
'direction' => 2,
'name' => 'Command',
'size' => 6,
'type' => 1
},
{
'direction' => 2,
'name' => 'Cmd',
'position' => '0',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Args',
'position' => '1',
'size' => 5,
'type' => 1
}
],
'hwmask' => undef,
'name' => 'Cmd',
'swversion' => undef,
'type' => 'regular'
},
{
'endpoints' => [
{
'direction' => 2,
'name' => 'Command',
'size' => 10,
'type' => 1
},
{
'direction' => 2,
'name' => 'Cmd',
'position' => '0',
'size' => 1,
'type' => 1
},
{
'direction' => 2,
'name' => 'Args',
das ist sehr seltsam.
ich schaue es mir in ruhe an. komme aber vermutlich erst am wochenende dazu.
gruss
andre
Oh, ich sehe gerade, dass meine Antwort beschnitten wurde. Die letzte Ausgabe war vermutlich zu lang und darum hat es das /code Element gekillt.
Wenn ich dir noch was zuarbeiten kann, lass es mich wissen. Ich vermute allerdings, dass du es ziemlich schnell nachstellen kannst. Hatte auch mit den anderen Registern/Readings (red, green, blue) keinen Erfolg. Scheint also nicht am White Register zu liegen.
Hi André, konntest du dich mit dem Problem beschäftigen?
jein...
ich habe glaube ich einen workaround aber ich verstehe nicht woher das problem kommt.
ersetz mal bitte zeile 122: readingsSingleUpdate($hash, "state", $value, 1);
durch readingsSingleUpdate($hash, "state", $value, 0);
DoTrigger( $name, "$value" );
und schau ob es dann so funktioniert wie es soll.
gruss
andre
Jau, damit gehts :-)
Vielleicht hilft es dir etwas bei der Suche: Ich habe gestern einen readingsProxy angelegt, womit ich ebenfalls ein Register ansteuere und mir anzeigen lasse. Damit hatte ich keine Probleme, es gibt dafür aber auch kein eigenes SWAP_XXXXX Modul, wie für das RGBWW Board.
Keine Ahnung ob es dir hilft :-)
Internals:
CFGFN
DEF SWAP_51:0D-PWM_output_0
DEVICE SWAP_51
NAME rp_SWAP_51
NR 10132
NTFY_ORDER 50-rp_SWAP_51
READING 0D-PWM_output_0
STATE 255
TYPE readingsProxy
Content:
SWAP_51 1
Readings:
2015-07-20 15:07:12 lastCmd val
2015-07-20 15:07:12 state 255
Attributes:
room SWAP
setFn {"regSet 0D " . sprintf("%02x",$ARGS)}
setList val:slider,0,1,255
valueFn {hex($VALUE)}
webCmd val