If you have Big Ass Fans, then like me you probably got the email this week that their fans can support Matter with a firmware upgrade. I upgraded one of my fans and paired it with a Home Assistant server I have for testing. Integration was simple and quick, however functionality was limited to ON/OFF and some sensors. The HA integration is in beta, so not surprising. Anyway, willing to test if/when the OH binding can support.
I just discovered some light bulbs in the basement that support matter according to the box they were in. So I might be able to test this after all. However I still need to get my border router up and running (the esp device I wrote about earlier). Does anyone have any experience how this works? Do I just set it up to reside in the same network as OH (I know IPv6 is a requirement) and should be able to pair with any thread devices on the network? Or is there some kind of pairing required between the br and the device before that?
If you are able to test with the binding posted here and send me the JSON data from the logs i can look to add support for it.
The problem is you need a bluetooth enabled device with a specific app who knows how to commission a thread device to a thread router. I have a super basic IOS prototype for this that i plan on putting into our IOS client at some point, but its not in a state that can be used by others right now.
There are very limited choices for apps to pair thread devices right now, which is why for the time being i would recommend using Echo/Google Home/ Apple TV thread capable router for the time being (and use their app to add). I have heard you can use the HA mobile client to add to a open thread gateway, which could then be commissioned to OH, but i have not tried that.
And a little update on status since i have been out for a while. I have been working on getting the other side of the binding, namely exposing openHAB items as Matter Endpoints. This essentially makes openHAB a Matter Bridge and then can be controlled locally by Alexa/Siri/Goolgle much like the Homekit binding. I have this working for Switches and Dimmers, iâm just adding Thermostats now and then need to do a big cleanup. Iâll hopefully post something within the week.
Is there a specific OH version needed? I typically run Milestones, but can spin up a current snapshot if needed.
I donât think the last milestone has the UI changes which makes adding matter devices easier, you might want to spin up a snapshot instance to just add this device and get the JSON in the DEBUG logs. The next milestone will have everything in it, and will probably be released before i am able to support the fan (assuming it doesnât actually work out of the box).
Got it. I know the BAF app provides the code for commissioning, so I may not need advanced UI. Iâll try one night this week (PST, San Diego) and report back.
The updated UI in the nightlies has a way now to use this code when âdiscoveringâ devices. This make adding devices much easier.
Ok thanks, that does not sound too promising. However I think I made a mistake anyway. I think the bulb works via WiFi only and not via Thread (makes sense as itâs not battery powered).
Milestone 3 will come next weekend. Just letting you know, maybe you want to wait for the milestone then,
This is fantastic!
I find I rarely open the OH app to control things anymore since voice is so convenient and works very well for me. In fact my main UI looks pathetic, used mainly for testing devices these days.
Initial scan results:
2024-11-05 05:46:28.118 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":4,"clusterId":1026,"attributeId":0,"attributeName":"measuredValue"},"version":1625071445,"value":1958}}}
2024-11-05 05:46:28.120 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":5,"clusterId":1029,"attributeId":0,"attributeName":"measuredValue"},"version":2754812112,"value":6750}}}
2024-11-05 05:46:28.120 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":4,"clusterId":1026,"attributeId":0,"attributeName":"measuredValue"},"version":1625071445,"value":1958}
2024-11-05 05:46:28.121 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:46:28.121 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":6,"clusterId":1030,"attributeId":0,"attributeName":"occupancy"},"version":3194850094,"value":{"occupied":true}}}}
2024-11-05 05:46:28.122 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":5,"clusterId":1029,"attributeId":0,"attributeName":"measuredValue"},"version":2754812112,"value":6750}
2024-11-05 05:46:28.122 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":6,"clusterId":1030,"attributeId":0,"attributeName":"occupancy"},"version":3194850094,"value":{"occupied":true}}
2024-11-05 05:46:28.122 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:46:28.122 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:46:28.276 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":0,"attributeName":"fanMode"},"version":3468296708,"value":0}}}
2024-11-05 05:46:28.277 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":2,"attributeName":"percentSetting"},"version":3468296708,"value":0}}}
2024-11-05 05:46:28.277 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":0,"attributeName":"fanMode"},"version":3468296708,"value":0}
2024-11-05 05:46:28.278 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:46:28.278 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":2,"attributeName":"percentSetting"},"version":3468296708,"value":0}
2024-11-05 05:46:28.278 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":3,"attributeName":"percentCurrent"},"version":3468296708,"value":0}}}
2024-11-05 05:46:28.278 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:46:28.278 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":10,"attributeName":"windSetting"},"version":3468296708,"value":{"sleepWind":false,"naturalWind":false}}}}
2024-11-05 05:46:28.278 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":3,"attributeName":"percentCurrent"},"version":3468296708,"value":0}
2024-11-05 05:46:28.279 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":11,"attributeName":"airflowDirection"},"version":3468296708,"value":0}}}
2024-11-05 05:46:28.279 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:46:28.279 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":10,"attributeName":"windSetting"},"version":3468296708,"value":{"sleepWind":false,"naturalWind":false}}
2024-11-05 05:46:28.279 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"7886773844386698258","endpointId":1,"clusterId":514,"attributeId":11,"attributeName":"airflowDirection"},"version":3468296708,"value":0}
2024-11-05 05:46:28.279 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:46:28.280 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 7886773844386698258
2024-11-05 05:47:23.289 [DEBUG] [nternal.client.MatterWebsocketClient] - sendMessage: {"id":"fa09afc2-3c74-4826-860c-eb805227d90e","namespace":"nodes","function":"pairNode","args":["31108740255"]}
2024-11-05 05:47:23.292 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mMatterController: e[0mCommissioning device with identifier {"shortDiscriminator":12} and 1 scanners and knownAddress "undefined"e[0m
2024-11-05 05:47:23.292 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mControllerDiscovery: e[0mStart Discovering devices using identifier {"shortDiscriminator":12} ...e[0m
2024-11-05 05:47:34.506 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mInteractionClient: e[0mSubscription 927720469 timed out after 66229ms ...e[0m
2024-11-05 05:47:34.507 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mPairedNode: e[0mNode 7886773844386698258: Subscription update not received ...e[0m
2024-11-05 05:47:34.507 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"nodeStateInformation","data":{"nodeId":"7886773844386698258","state":"Reconnecting"}}}
2024-11-05 05:47:34.509 [DEBUG] [nternal.client.MatterWebsocketClient] - nodeStateInformation message {"nodeId":"7886773844386698258","state":"Reconnecting"}
2024-11-05 05:47:34.510 [DEBUG] [r.internal.handler.ControllerHandler] - Node onEvent: node 7886773844386698258 is Reconnecting
2024-11-05 05:47:44.643 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mInteractionMessenger: e[0mRetransmission limit reached, trying to reconnect and resend the message.e[0m
2024-11-05 05:47:44.644 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mMatterController: e[0mRe-Discovering device failed (no address found), remove all sessions for node 7886773844386698258e[0m
2024-11-05 05:47:44.645 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mSecureSession: e[0mEnd CASE session secure/13039e[0m
2024-11-05 05:47:44.645 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mCommission~ontroller: e[0mSession for peer node 7886773844386698258 disconnected ...e[0m
2024-11-05 05:47:44.645 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mPairedNode: e[0mNode 7886773844386698258: Session disconnected, trying to reconnect ...e[0m
2024-11-05 05:47:44.650 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mPairedNode: e[0mNode 7886773844386698258: Error resubscribing to all attributes and events. Try to reconnect ... e[31mNo operational address found for node 7886773844386698258
2024-11-05 05:47:51.809 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mCaseClient: e[0mCase client: Paired successfully with udp://fe80::8e4b:14ff:fe54:cd90%eno1:5540 and parameters e[34midleIntervalMs: e[2;39m500 e[0;34mactiveIntervalMs: e[2;39m300 e[0;34mactiveThresholdMs: e[2;39m4000 e[0;34mdataModelRevision: e[2;39m17 e[0;34minteractionModelRevision: e[2;39m11 e[0;34mspecificationVersion: e[2;39m0 e[0;34mmaxPathsPerInvoke: e[2;39m1e[0m
2024-11-05 05:47:51.810 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mInsecureSession: e[0mEnd insecure session insecure/2070157823708401546e[0m
2024-11-05 05:47:51.949 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mInteractionClient: e[0mSubscription successfully initialized with ID 664765033 and maxInterval 60s.e[0m
2024-11-05 05:47:51.992 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"nodeStateInformation","data":{"nodeId":"7886773844386698258","state":"Connected"}}}
2024-11-05 05:47:51.993 [DEBUG] [nternal.client.MatterWebsocketClient] - nodeStateInformation message {"nodeId":"7886773844386698258","state":"Connected"}
2024-11-05 05:47:51.993 [DEBUG] [r.internal.handler.ControllerHandler] - Node onEvent: node 7886773844386698258 is Connected
2024-11-05 05:47:51.993 [DEBUG] [r.internal.handler.ControllerHandler] - updateNode BEGIN 7886773844386698258
2024-11-05 05:47:51.994 [DEBUG] [nternal.client.MatterWebsocketClient] - sendMessage: {"id":"7acede48-12f4-4ff4-a3bb-99a01c775b4b","namespace":"nodes","function":"getNode","args":["7886773844386698258"]}
2024-11-05 05:47:53.293 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mControllerDiscovery: e[0mFound 0 devices using identifier {"shortDiscriminator":12}e[0m
2024-11-05 05:47:53.293 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mController: e[0;31mError executing function pairNode: No device discovered using identifier {"shortDiscriminator":12}! Please check that the relevant device is online.e[0m
2024-11-05 05:47:53.294 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mController: e[0;31mStack trace: Error: No device discovered using identifier {"shortDiscriminator":12}! Please check that the relevant device is online.
2024-11-05 05:47:53.294 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"response","message":{"type":"resultError","id":"fa09afc2-3c74-4826-860c-eb805227d90e","result":"undefined","error":"No device discovered using identifier {\"shortDiscriminator\":12}! Please check that the relevant device is online."}}
2024-11-05 05:47:53.295 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mController: e[0;31mError name: Errore[0m
2024-11-05 05:47:53.295 [DEBUG] [ding.matter.internal.util.NodeRunner] - e[0;1;90mController: e[0;31mFull error object: {"stack":"Error: No device discovered using identifier {\"shortDiscriminator\":12}! Please check that the relevant device is online.\n at eval (webpack://matter-server/./node_modules/@matter.js/protocol/dist/cjs/protocol/ControllerDiscovery.js?:51:15)\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)","message":"No device discovered using identifier {\"shortDiscriminator\":12}! Please check that the relevant device is online."}e[0m
2024-11-05 05:47:53.295 [DEBUG] [nternal.client.MatterWebsocketClient] - result type: resultError
2024-11-05 05:47:53.699 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"response","message":{"type":"resultSuccess","id":"7acede48-12f4-4ff4-a3bb-99a01c775b4b","result":{"id":"7886773844386698258","endpoints":{"0":{"number":0,"clusters":{"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":22,"revision":1}],"serverList":[29,31,40,48,49,51,60,62,63],"clientList":[],"partsList":[1,4,5,6],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"AccessControl":{"id":31,"name":"AccessControl","acl":[{"privilege":5,"authMode":2,"subjects":["10008520543529035347"],"targets":null,"fabricIndex":3}],"extension":[],"subjectsPerAccessControlEntry":4,"targetsPerAccessControlEntry":3,"accessControlEntriesPerFabric":4,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"BasicInformation":{"id":40,"name":"BasicInformation","dataModelRevision":17,"vendorName":"Big Ass Fans","vendorId":5202,"productName":"Haiku H/I Series","productId":3,"nodeLabel":"Guest Fan\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","location":"XX","hardwareVersion":1,"hardwareVersionString":"1","softwareVersion":0,"softwareVersionString":"3.3.0","partNumber":"0","productUrl":"https://bigassfans.com/support/haiku/","productLabel":"Haiku H/I Series","capabilityMinima":{"caseSessionsPerFabric":3,"subscriptionsPerFabric":3},"clusterRevision":2,"featureMap":{},"attributeList":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,19,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"GeneralCommissioning":{"id":48,"name":"GeneralCommissioning","breadcrumb":0,"basicCommissioningInfo":{"failSafeExpiryLengthSeconds":60,"maxCumulativeFailsafeSeconds":900},"regulatoryConfig":0,"locationCapability":0,"supportsConcurrentConnection":true,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4],"generatedCommandList":[1,3,5]},"NetworkCommissioning":{"id":49,"name":"NetworkCommissioning","maxNetworks":1,"networks":[{"networkId":"313533302d494f54","connected":true}],"interfaceEnabled":true,"lastNetworkingStatus":0,"lastNetworkId":"313533302d494f54","lastConnectErrorValue":null,"scanMaxTimeSeconds":10,"connectMaxTimeSeconds":30,"clusterRevision":1,"featureMap":{"wiFiNetworkInterface":true,"threadNetworkInterface":false,"ethernetNetworkInterface":false},"attributeList":[0,1,2,3,4,5,6,7,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4,6,8],"generatedCommandList":[1,5,7]},"GeneralDiagnostics":{"id":51,"name":"GeneralDiagnostics","networkInterfaces":[{"name":"WIFI_STA_DEF","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"8c4b1454cd90","iPv4Addresses":["c0a81e76"],"iPv6Addresses":["fe800000000000008e4b14fffe54cd90"],"type":1},{"name":"WIFI_AP_DEF","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"000000000000","iPv4Addresses":["c0a80401"],"iPv6Addresses":[],"type":1}],"rebootCount":9,"testEventTriggersEnabled":false,"clusterRevision":1,"featureMap":{"dataModelTest":false},"attributeList":[0,1,8,65528,65529,65531,65532,65533],"acceptedCommandList":[0],"generatedCommandList":[]},"AdministratorCommissioning":{"id":60,"name":"AdministratorCommissioning","windowStatus":0,"adminFabricIndex":null,"adminVendorId":null,"clusterRevision":1,"featureMap":{"basic":false},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2],"generatedCommandList":[]},"OperationalCredentials":{"id":62,"name":"OperationalCredentials","nocs":[{"noc":"15300101022402013703241400182604c90bdb2c2605494288413706241501271112d4828a0673736d18240701240801300941046922d9aaa86b87bf0cb81aa3d216cffc8931ffc66d6c0ac53e2e4de4d870d0bcaccf520ddc8a710d59f17dc6554a4cbf163e98a6907b945ab0b8c6000d984bb2370a3501280118240201360304020401183004147a0362631ee2b5159cb514f8c342ff43af1ab47a300514756791527f069a456474fdfa86fab322f447b82118300b40fb7e7a3d5290495237f96850dfaccdd77d74aea312588ad1cb82326043212f7116d7c80a14b4b74c8d6ec981a6c531ae8e5833271a9a6bc5e1b4151d29aa666f18","icac":null,"fabricIndex":3}],"fabrics":[{"rootPublicKey":"040808954071db87d58557500aa66441a802e650a18dd413ccebeb5dc12249e38dfd9ea7088922f493473f2eb53163fae3e7c10dff18fcead9decce73b77c8fafc","vendorId":65521,"fabricId":"1","nodeId":"7886773844386698258","label":"","fabricIndex":3}],"supportedFabrics":5,"commissionedFabrics":1,"trustedRootCertificates":["1530010100240201370324140018260479f1da2c2605f9278841370624140018240701240801300941040808954071db87d58557500aa66441a802e650a18dd413ccebeb5dc12249e38dfd9ea7088922f493473f2eb53163fae3e7c10dff18fcead9decce73b77c8fafc370a3501290118240260300414756791527f069a456474fdfa86fab322f447b821300514756791527f069a456474fdfa86fab322f447b82118300b4097d6828cb46539f0d5cd767ddcd51bb6796fa3c1dfb28290a847af8662adbad31fc04bb23a67250fa90823b85315cefd8848929732128587ed4479720b959a8e18"],"currentFabricIndex":3,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,5,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4,6,7,9,10,11],"generatedCommandList":[1,3,5,8]},"GroupKeyManagement":{"id":63,"name":"GroupKeyManagement","groupKeyMap":[],"groupTable":[],"maxGroupsPerFabric":4,"maxGroupKeysPerFabric":3,"clusterRevision":2,"featureMap":{"cacheAndSync":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[0,1,3,4],"generatedCommandList":[2,5]}}},"1":{"number":1,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Groups":{"id":4,"name":"Groups","nameSupport":{"nameSupport":true},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65528,65529,65531,65532,65533],"acceptedCommandList":[0,1,2,3,4,5],"generatedCommandList":[0,1,2,3]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":43,"revision":1}],"serverList":[3,4,29,514],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"FanControl":{"id":514,"name":"FanControl","fanMode":0,"fanModeSequence":2,"percentSetting":0,"percentCurrent":0,"clusterRevision":4,"featureMap":{"multiSpeed":false,"auto":true,"rocking":false,"wind":true,"step":true,"airflowDirection":true},"attributeList":[0,1,2,3,9,10,11,65528,65529,65531,65532,65533],"acceptedCommandList":[0],"generatedCommandList":[],"windSupport":{"sleepWind":false,"naturalWind":true},"windSetting":{"sleepWind":false,"naturalWind":false},"airflowDirection":0}}},"4":{"number":4,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":770,"revision":1}],"serverList":[3,29,1026],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"TemperatureMeasurement":{"id":1026,"name":"TemperatureMeasurement","measuredValue":1954,"minMeasuredValue":-2000,"maxMeasuredValue":10000,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}},"5":{"number":5,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":775,"revision":1}],"serverList":[3,29,1029],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"RelativeHumidityMeasurement":{"id":1029,"name":"RelativeHumidityMeasurement","measuredValue":6757,"minMeasuredValue":0,"maxMeasuredValue":10000,"clusterRevision":3,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}},"6":{"number":6,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":263,"revision":1}],"serverList":[3,29,1030],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"OccupancySensing":{"id":1030,"name":"OccupancySensing","occupancy":{"occupied":false},"occupancySensorType":0,"occupancySensorTypeBitmap":{"pir":true,"ultrasonic":false,"physicalContact":false},"clusterRevision":3,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}}}},"error":"undefined"}}
2024-11-05 05:47:53.702 [DEBUG] [nternal.client.MatterWebsocketClient] - result type: resultSuccess
2024-11-05 05:47:53.709 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 7886773844386698258
2024-11-05 05:47:53.709 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 7886773844386698258
2024-11-05 05:47:53.709 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:22fff4a651:7886773844386698258_1 matter:controller:22fff4a651 1
2024-11-05 05:47:53.711 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:22fff4a651:7886773844386698258_1' to inbox.
2024-11-05 05:47:53.711 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 7886773844386698258
2024-11-05 05:47:53.711 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:22fff4a651:7886773844386698258_4 matter:controller:22fff4a651 4
2024-11-05 05:47:53.712 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:22fff4a651:7886773844386698258_4' to inbox.
2024-11-05 05:47:53.713 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 7886773844386698258
2024-11-05 05:47:53.713 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:22fff4a651:7886773844386698258_5 matter:controller:22fff4a651 5
2024-11-05 05:47:53.714 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:22fff4a651:7886773844386698258_5' to inbox.
2024-11-05 05:47:53.715 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 7886773844386698258
2024-11-05 05:47:53.715 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:22fff4a651:7886773844386698258_6 matter:controller:22fff4a651 6
2024-11-05 05:47:53.716 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:22fff4a651:7886773844386698258_6' to inbox.
2024-11-05 05:47:53.716 [DEBUG] [r.internal.handler.ControllerHandler] - updateNode END 7886773844386698258
Thanks @kjknauss , thats perfect. Your BAF is advertising the FanControl, Temperature, Humidity and OccupancySensor clusters. Those should be easy to implement are are quite common, so others will benefit as well.
Thatâs good news. One note on fan speed, these fans have a step value of 7 (0=0, 7=100). The app, remotes, and lights on the fans mirror these steps, so itâs not a true percentage setting. The percentage ends up something divisible by 14.2857142⊠After much testing I have overcome this with metadata state and command descriptions to match the steps:
0=OFF
14=1
29=2
43=3
57=4
71=5
86=6
100=7
Iâm guessing that doesnât change in the matter world, but I can test when available.
Another question: Would we expect a different result if I paired the fan with Apple Home first (which BAF claims full support) and then used a pairing code from Apple to pair in OH? With most things I want OH to remain the center of my home automation and pair there first, but just wondering.
The Fan is reporting it supports FanModeSequence=2
as the control type, which means it supports setting the speed to âOFF, LOW, MED, HIGH, AUTOâ, it also supports INCREASE and DECREASE commands (steps) as well as setting percentage amount, iâll look at supporting all of those in openHAB.
Thats one of the benefits of Matter, if you commission first with Apple home, then use that to commission openHAB, the connection from openHAB to the device is direct, Apple is not involved anymore. if you were to remove it from Apple, openHAB will still be connected to the device. The device itself is the central repository for controller pairings, not Apple or openHAB .
Regarding my problem with the unstable thing status for my smart bulb, I just run a continuous ping and I can see that sometimes the bulb does not respond.
Statistiques Ping pour fe80::xxxx:xxxx:xxxx:xxxx:
Paquets : envoyés = 836, reçus = 816, perdus = 20 (perte 2%),
Durée approximative des boucles en millisecondes :
Minimum = 3ms, Maximum = 3710ms, Moyenne = 223ms
Maybe ithe ânode reconnectingâ happens when the controller tries to connect to the bulb and the bulb does not answer enough quickly ?
Are there timeouts we could customize ?
What I would like to avoid is such logs:
2024-11-09 15:04:53.734 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from ONLINE to UNKNOWN (NOT_YET_READY): Node Reconnecting
2024-11-09 15:05:02.802 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from UNKNOWN (NOT_YET_READY): Node Reconnecting to ONLINE
2024-11-09 15:07:07.258 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from ONLINE to UNKNOWN (NOT_YET_READY): Node Reconnecting
2024-11-09 15:07:23.815 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from UNKNOWN (NOT_YET_READY): Node Reconnecting to ONLINE
2024-11-09 15:12:33.728 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from ONLINE to UNKNOWN (NOT_YET_READY): Node Reconnecting
2024-11-09 15:12:35.592 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from UNKNOWN (NOT_YET_READY): Node Reconnecting to ONLINE
2024-11-09 15:15:46.378 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from ONLINE to UNKNOWN (NOT_YET_READY): Node Reconnecting
2024-11-09 15:15:55.925 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from UNKNOWN (NOT_YET_READY): Node Reconnecting to ONLINE
2024-11-09 15:19:03.730 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from ONLINE to UNKNOWN (NOT_YET_READY): Node Reconnecting
2024-11-09 15:19:16.415 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'matter:endpoint:openhab:ampouleTapo1' changed from UNKNOWN (NOT_YET_READY): Node Reconnecting to ONLINE
Or does it mean that this bulb is simply of bad quality ?
Those logs indicate that the device has not responded to a heartbeat message and matter.js is attempting to establish a connection again (this is all UDP so there is not a direct TCP connection, which makes things very async). My tapo and onvis plugs are notorious for this. I also have a Leviton dimmer or 2 that i think bounce around APs and become unstable as well. There might be some tuning we can eventually do in matter.js to make reconnections better , the project leader is eager for more usage so we can catch stuff like this. If you look at the verbose matter logs, there will be more info on connection issues.
Ok, i have a new Jar ready if people want to test. Couple big things that have been updated.
- This upgrades to the latest matter.js core, lot of improvements there.
- This adds
FanControl
,OccupancySensor
andTemperatureMeasurement
cluster support - The MatterServer is now a OSGI singleton service for better lifecycle support and can be shared for multiple controllers and bridges.
- openHAB as a Matter Bridge (see below for more info)
I have not tested the new clusters with actual devices, so i would expect some bugs there, but will be easily fixable.
Matter Bridge Support
This should be considered experimental and is probably full of bugs. There is now initial support for exposing openHAB items as Matter devices, right now this supports âOnOffLightâ, âDimmableLightâ and âThermostatâ matter device types.
See the README for more info, but you essentially add matter
metadata to items, very much like alexa, ga and homekit metadata.
The bridge can be configured in the MainUI under Settings -> Add-on Settings -> Matter Binding
This provides the QR code needed for the first client to connect as well as other values that are safe to leave as is.
I have tested this with Homekit, and this works very nicely, my plan is to continue to build out additional Matter device support and test on Alexa and GA soon as well.
As alway please read the README, there is new information there.
Similar results:
x out of pairing code and ip (unsure if it matters)
2024-11-09 22:51:33.237 [DEBUG] [nternal.client.MatterWebsocketClient] - sendMessage: {"id":"89b7ae61-45ad-4208-bfa9-84cbc609cc0c","namespace":"nodes","function":"pairNode","args":["XXXXXXXXXXX"]}
2024-11-09 22:51:33.240 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mPeerCommissioner: e[0mCommissioning device with identifier {"shortDiscriminator":12} and 1 scanners and knownAddress "undefined"e[0m
2024-11-09 22:51:33.240 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mControllerDiscovery: e[0mStart Discovering devices using identifier {"shortDiscriminator":12} ...e[0m
2024-11-09 22:51:33.240 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mControllerDiscovery: e[0mFound 5 devices using identifier {"shortDiscriminator":12}e[0m
2024-11-09 22:51:33.241 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mPeerCommissioner: e[0mCommissioning device e[34mSII: e[2;39mundefined e[0;34mSAI: e[2;39mundefined e[0;34mSAT: e[2;39mundefined e[0;34mT: e[2;39m0 e[0;34mDT: e[2;39mundefined e[0;34mPH: e[2;39m33 e[0;34mICD: e[2;39m0 e[0;34mVP: e[2;39m5202+3 e[0;34mDN: e[2;39mundefined e[0;34mRI: e[2;39mundefined e[0;34mPI: e[0m
2024-11-09 22:51:34.993 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mPaseClient: e[0mPase client: Paired successfully with udp://fe80::8e4b:14ff:fe54:cd90%enp1s0:5540.e[0m
2024-11-09 22:51:34.993 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mInsecureSession: e[0mEnd insecure session insecure/12267837438698760788e[0m
2024-11-09 22:51:34.994 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mPeerCommissioner: e[0mStart commissioning of node 2754331428455262459 into fabric 1 (index 1)e[0m
2024-11-09 22:51:34.995 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mSkipping NetworkCommissioning steps because the device is already on IP network (udp)e[0m
2024-11-09 22:51:34.995 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 0.1: GetInitialDatae[0m
2024-11-09 22:51:35.276 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 3.1: GeneralCommissioning.ArmFailsafee[0m
2024-11-09 22:51:35.313 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 5.1: GeneralCommissioning.ConfigureRegulatoryInformatione[0m
2024-11-09 22:51:35.382 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 5.2: TimeSynchronization.SynchronizeTimee[0m
2024-11-09 22:51:35.384 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 6.1: OperationalCredentials.DeviceAttestatione[0m
2024-11-09 22:51:35.869 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 7.1: OperationalCredentials.Certificatese[0m
2024-11-09 22:51:37.711 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 10.1: AccessControle[0m
2024-11-09 22:51:37.712 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 12.1: Reconnecte[0m
2024-11-09 22:51:40.565 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mCaseClient: e[0mCase client: Paired successfully with udp://fe80::xxxx:xxxx:xxxx:xxxx%enp1s0:5540 and parameters e[34midleIntervalMs: e[2;39m500 e[0;34mactiveIntervalMs: e[2;39m300 e[0;34mactiveThresholdMs: e[2;39m4000 e[0;34mdataModelRevision: e[2;39m17 e[0;34minteractionModelRevision: e[2;39m11 e[0;34mspecificationVersion: e[2;39m0 e[0;34mmaxPathsPerInvoke: e[2;39m1e[0m
2024-11-09 22:51:40.566 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mInsecureSession: e[0mEnd insecure session insecure/10709857685131737033e[0m
2024-11-09 22:51:40.568 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mController~missioner: e[0mExecuting commissioning step 15.1: GeneralCommissioning.Completee[0m
2024-11-09 22:51:40.782 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mPairedNode: e[0mNode 2754331428455262459: Created paired node with device data undefinede[0m
2024-11-09 22:51:40.782 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"nodeStateInformation","data":{"nodeId":"2754331428455262459","state":"Reconnecting"}}}
2024-11-09 22:51:40.783 [DEBUG] [nternal.client.MatterWebsocketClient] - nodeStateInformation message {"nodeId":"2754331428455262459","state":"Reconnecting"}
2024-11-09 22:51:40.785 [DEBUG] [r.internal.handler.ControllerHandler] - Node onEvent: node 2754331428455262459 is Reconnecting
2024-11-09 22:51:40.931 [DEBUG] [internal.util.MatterWebsocketService] - e[0;1;90mInteractionClient: e[0mSubscription successfully initialized with ID 3188075149 and maxInterval 60s.e[0m
2024-11-09 22:51:40.999 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"nodeStateInformation","data":{"nodeId":"2754331428455262459","state":"Connected"}}}
2024-11-09 22:51:41.000 [DEBUG] [nternal.client.MatterWebsocketClient] - nodeStateInformation message {"nodeId":"2754331428455262459","state":"Connected"}
2024-11-09 22:51:41.000 [DEBUG] [r.internal.handler.ControllerHandler] - Node onEvent: node 2754331428455262459 is Connected
2024-11-09 22:51:41.000 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"response","message":{"type":"resultSuccess","id":"89b7ae61-45ad-4208-bfa9-84cbc609cc0c","result":"2754331428455262459","error":"undefined"}}
2024-11-09 22:51:41.000 [DEBUG] [r.internal.handler.ControllerHandler] - updateNode BEGIN 2754331428455262459
2024-11-09 22:51:41.001 [DEBUG] [nternal.client.MatterWebsocketClient] - result type: resultSuccess
2024-11-09 22:51:41.001 [DEBUG] [nternal.client.MatterWebsocketClient] - sendMessage: {"id":"a79b491f-ec19-486e-832c-548ef0df54c9","namespace":"nodes","function":"getNode","args":["2754331428455262459"]}
2024-11-09 22:51:41.001 [DEBUG] [nal.discovery.MatterDiscoveryService] - startScan complete
2024-11-09 22:51:42.407 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"response","message":{"type":"resultSuccess","id":"a79b491f-ec19-486e-832c-548ef0df54c9","result":{"id":"2754331428455262459","endpoints":{"0":{"number":0,"clusters":{"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":22,"revision":1}],"serverList":[29,31,40,48,49,51,60,62,63],"clientList":[],"partsList":[1,4,5,6],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"AccessControl":{"id":31,"name":"AccessControl","acl":[{"privilege":5,"authMode":2,"subjects":["14320756025586964783"],"targets":null,"fabricIndex":1}],"extension":[],"subjectsPerAccessControlEntry":4,"targetsPerAccessControlEntry":3,"accessControlEntriesPerFabric":4,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"BasicInformation":{"id":40,"name":"BasicInformation","dataModelRevision":17,"vendorName":"Big Ass Fans","vendorId":5202,"productName":"Haiku H/I Series","productId":3,"nodeLabel":"Guest Fan\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","location":"XX","hardwareVersion":1,"hardwareVersionString":"1","softwareVersion":0,"softwareVersionString":"3.3.0","partNumber":"0","productUrl":"https://bigassfans.com/support/haiku/","productLabel":"Haiku H/I Series","capabilityMinima":{"caseSessionsPerFabric":3,"subscriptionsPerFabric":3},"clusterRevision":2,"featureMap":{},"attributeList":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,19,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"GeneralCommissioning":{"id":48,"name":"GeneralCommissioning","breadcrumb":0,"basicCommissioningInfo":{"failSafeExpiryLengthSeconds":60,"maxCumulativeFailsafeSeconds":900},"regulatoryConfig":0,"locationCapability":0,"supportsConcurrentConnection":true,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4],"generatedCommandList":[1,3,5]},"NetworkCommissioning":{"id":49,"name":"NetworkCommissioning","maxNetworks":1,"networks":[],"interfaceEnabled":true,"lastNetworkingStatus":0,"lastNetworkId":"313533302d494f54","lastConnectErrorValue":null,"scanMaxTimeSeconds":10,"connectMaxTimeSeconds":30,"clusterRevision":1,"featureMap":{"wiFiNetworkInterface":true,"threadNetworkInterface":false,"ethernetNetworkInterface":false},"attributeList":[0,1,2,3,4,5,6,7,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4,6,8],"generatedCommandList":[1,5,7]},"GeneralDiagnostics":{"id":51,"name":"GeneralDiagnostics","networkInterfaces":[{"name":"WIFI_STA_DEF","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"8c4b1454cd90","iPv4Addresses":["c0a81e76"],"iPv6Addresses":["fe800000000000008e4b14fffe54cd90"],"type":1},{"name":"WIFI_AP_DEF","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"000000000000","iPv4Addresses":["c0a80401"],"iPv6Addresses":[],"type":1}],"rebootCount":4,"testEventTriggersEnabled":false,"clusterRevision":1,"featureMap":{"dataModelTest":false},"attributeList":[0,1,8,65528,65529,65531,65532,65533],"acceptedCommandList":[0],"generatedCommandList":[]},"AdministratorCommissioning":{"id":60,"name":"AdministratorCommissioning","windowStatus":0,"adminFabricIndex":null,"adminVendorId":null,"clusterRevision":1,"featureMap":{"basic":false},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2],"generatedCommandList":[]},"OperationalCredentials":{"id":62,"name":"OperationalCredentials","nocs":[{"noc":"153001010224020137032414001826047970e12c2605f9a68e4137062415012711fb28c552d759392618240701240801300941043f56755d57215d25be342bcb1c6c844476b44e3b9a401c08f7108e0bb0c5d87186818af8c0fc9b4c1391998f993694b62825404a3adbb46e0549798849dea5a1370a3501280118240201360304020401183004143adebca333131bbe8afc84a49c2d456896a2ba863005149c72e76d888ccb57e9856e39da63f28e35593b9618300b4070f7f67b20fe97579bbcce0962521b942f9feadec114797e5b7db79cd182df350b29b30858462055a68bcd17334d7e3d85163580722079372da9ee40f6bab0b618","icac":null,"fabricIndex":1}],"fabrics":[{"rootPublicKey":"04828b52896c509aa109b29f97cd1a65fb05ffe4c722461b7e656c1f71bfd6c4c760ed458586b693969cb49aba1ff6f4a43af16a1c63620416b8594e7272850f9a","vendorId":65521,"fabricId":"1","nodeId":"2754331428455262459","label":"","fabricIndex":1}],"supportedFabrics":5,"commissionedFabrics":1,"trustedRootCertificates":["15300101002402013703241400182604b26be12c260532a28e4137062414001824070124080130094104828b52896c509aa109b29f97cd1a65fb05ffe4c722461b7e656c1f71bfd6c4c760ed458586b693969cb49aba1ff6f4a43af16a1c63620416b8594e7272850f9a370a35012901182402603004149c72e76d888ccb57e9856e39da63f28e35593b963005149c72e76d888ccb57e9856e39da63f28e35593b9618300b4066352f23163ae7c92c8e955576a0970d197fc6ca0d09bbd08dd765a99cb23b507641d3a7738d51dcf00c3e0e28d44aa8e002407c447390fc3ac64a143c5b15f418"],"currentFabricIndex":1,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,5,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4,6,7,9,10,11],"generatedCommandList":[1,3,5,8]},"GroupKeyManagement":{"id":63,"name":"GroupKeyManagement","groupKeyMap":[],"groupTable":[],"maxGroupsPerFabric":4,"maxGroupKeysPerFabric":3,"clusterRevision":2,"featureMap":{"cacheAndSync":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[0,1,3,4],"generatedCommandList":[2,5]}}},"1":{"number":1,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Groups":{"id":4,"name":"Groups","nameSupport":{"nameSupport":true},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65528,65529,65531,65532,65533],"acceptedCommandList":[0,1,2,3,4,5],"generatedCommandList":[0,1,2,3]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":43,"revision":1}],"serverList":[3,4,29,514],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"FanControl":{"id":514,"name":"FanControl","fanMode":0,"fanModeSequence":2,"percentSetting":0,"percentCurrent":0,"clusterRevision":4,"featureMap":{"multiSpeed":false,"auto":true,"rocking":false,"wind":true,"step":true,"airflowDirection":true},"attributeList":[0,1,2,3,9,10,11,65528,65529,65531,65532,65533],"acceptedCommandList":[0],"generatedCommandList":[],"windSupport":{"sleepWind":false,"naturalWind":true},"windSetting":{"sleepWind":false,"naturalWind":false},"airflowDirection":0}}},"4":{"number":4,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":770,"revision":1}],"serverList":[3,29,1026],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"TemperatureMeasurement":{"id":1026,"name":"TemperatureMeasurement","measuredValue":2040,"minMeasuredValue":-2000,"maxMeasuredValue":10000,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}},"5":{"number":5,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":775,"revision":1}],"serverList":[3,29,1029],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"RelativeHumidityMeasurement":{"id":1029,"name":"RelativeHumidityMeasurement","measuredValue":5603,"minMeasuredValue":0,"maxMeasuredValue":10000,"clusterRevision":3,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}},"6":{"number":6,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":263,"revision":1}],"serverList":[3,29,1030],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"OccupancySensing":{"id":1030,"name":"OccupancySensing","occupancy":{"occupied":false},"occupancySensorType":0,"occupancySensorTypeBitmap":{"pir":true,"ultrasonic":false,"physicalContact":false},"clusterRevision":3,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}}}},"error":"undefined"}}
2024-11-09 22:51:42.415 [DEBUG] [nternal.client.MatterWebsocketClient] - result type: resultSuccess
2024-11-09 22:51:42.440 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 2754331428455262459
2024-11-09 22:51:42.441 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 2754331428455262459
2024-11-09 22:51:42.441 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:8862d8bbf0:2754331428455262459_1 matter:controller:8862d8bbf0 1
2024-11-09 22:51:42.448 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:8862d8bbf0:2754331428455262459_1' to inbox.
2024-11-09 22:51:42.449 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 2754331428455262459
2024-11-09 22:51:42.450 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:8862d8bbf0:2754331428455262459_4 matter:controller:8862d8bbf0 4
2024-11-09 22:51:42.451 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:8862d8bbf0:2754331428455262459_4' to inbox.
2024-11-09 22:51:42.451 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 2754331428455262459
2024-11-09 22:51:42.452 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:8862d8bbf0:2754331428455262459_5 matter:controller:8862d8bbf0 5
2024-11-09 22:51:42.453 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:8862d8bbf0:2754331428455262459_5' to inbox.
2024-11-09 22:51:42.453 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 2754331428455262459
2024-11-09 22:51:42.454 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:8862d8bbf0:2754331428455262459_6 matter:controller:8862d8bbf0 6
2024-11-09 22:51:42.455 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'matter:endpoint:8862d8bbf0:2754331428455262459_6' to inbox.
2024-11-09 22:51:42.455 [DEBUG] [r.internal.handler.ControllerHandler] - updateNode END 2754331428455262459
2024-11-09 22:56:27.080 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"2754331428455262459","endpointId":4,"clusterId":1026,"attributeId":0,"attributeName":"measuredValue"},"version":3333192258,"value":2007}}}
2024-11-09 22:56:27.081 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"2754331428455262459","endpointId":4,"clusterId":1026,"attributeId":0,"attributeName":"measuredValue"},"version":3333192258,"value":2007}
2024-11-09 22:56:27.083 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 2754331428455262459
2024-11-09 22:56:28.034 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"event","message":{"type":"attributeChanged","data":{"path":{"nodeId":"2754331428455262459","endpointId":5,"clusterId":1029,"attributeId":0,"attributeName":"measuredValue"},"version":3208656044,"value":5561}}}
2024-11-09 22:56:28.036 [DEBUG] [nternal.client.MatterWebsocketClient] - attributeChanged message {"path":{"nodeId":"2754331428455262459","endpointId":5,"clusterId":1029,"attributeId":0,"attributeName":"measuredValue"},"version":3208656044,"value":5561}
2024-11-09 22:56:28.036 [DEBUG] [r.internal.handler.ControllerHandler] - No handler found for node 2754331428455262459
This is new in the BAF app:
Assuming Test is the OH fabric?
Adding one of the discovered lines (matter:endpoint:8862d8bbf0:2754331428455262459_1) results in this:
2024-11-09 23:11:52.878 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : ServiceFactory.getService()
2024-11-09 23:11:52.879 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Checking constructor public org.openhab.binding.matter.internal.actions.MatterEndpointActions()
2024-11-09 23:11:52.880 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Found constructor with 0 arguments : public org.openhab.binding.matter.internal.actions.MatterEndpointActions()
2024-11-09 23:11:52.881 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : This thread collected dependencies
2024-11-09 23:11:52.882 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : getService (ServiceFactory) dependencies collected.
2024-11-09 23:11:52.882 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Querying state satisfied
2024-11-09 23:11:52.883 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : For dependency osgi.ds.satisfying.condition, optional: false; to bind: [[RefPair: ref: [{org.osgi.service.condition.Condition}={service.id=6, service.bundleid=0, service.scope=singleton, service.pid=0.org.osgi.service.condition.ConditionImpl, osgi.condition.id=true}] service: [null]]]
2024-11-09 23:11:52.883 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : getting activate: activate
2024-11-09 23:11:52.884 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Locating method activate in class org.openhab.binding.matter.internal.actions.MatterEndpointActions
2024-11-09 23:11:52.884 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Declared Method org.openhab.binding.matter.internal.actions.MatterEndpointActions.activate([interface org.osgi.service.component.ComponentContext]) not found
2024-11-09 23:11:52.885 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Locating method activate in class java.lang.Object
2024-11-09 23:11:52.885 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Declared Method java.lang.Object.activate([interface org.osgi.service.component.ComponentContext]) not found
2024-11-09 23:11:52.886 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : activate method [activate] not found, ignoring
2024-11-09 23:11:52.887 [DEBUG] [ternal.actions.MatterEndpointActions] - bundle org.openhab.binding.matter:4.3.0.202411091847 (270)[org.openhab.binding.matter.internal.actions.MatterEndpointActions(352)] : Changed state from satisfied to active
2024-11-09 23:11:52.907 [DEBUG] [ter.internal.handler.EndpointHandler] - initialize endpoint 1
2024-11-09 23:11:52.909 [DEBUG] [r.internal.handler.ControllerHandler] - childHandlerInitialized ready true org.openhab.binding.matter.internal.handler.EndpointHandler@66b31cd8
2024-11-09 23:11:52.910 [DEBUG] [r.internal.handler.ControllerHandler] - updateNode BEGIN 2754331428455262459
2024-11-09 23:11:52.910 [DEBUG] [nternal.client.MatterWebsocketClient] - sendMessage: {"id":"f32dcfcb-9b4c-437e-9246-1180a7216ed8","namespace":"nodes","function":"getNode","args":["2754331428455262459"]}
2024-11-09 23:11:54.290 [DEBUG] [nternal.client.MatterWebsocketClient] - onWebSocketText {"type":"response","message":{"type":"resultSuccess","id":"f32dcfcb-9b4c-437e-9246-1180a7216ed8","result":{"id":"2754331428455262459","endpoints":{"0":{"number":0,"clusters":{"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":22,"revision":1}],"serverList":[29,31,40,48,49,51,60,62,63],"clientList":[],"partsList":[1,4,5,6],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"AccessControl":{"id":31,"name":"AccessControl","acl":[{"privilege":5,"authMode":2,"subjects":["14320756025586964783"],"targets":null,"fabricIndex":1}],"extension":[],"subjectsPerAccessControlEntry":4,"targetsPerAccessControlEntry":3,"accessControlEntriesPerFabric":4,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"BasicInformation":{"id":40,"name":"BasicInformation","dataModelRevision":17,"vendorName":"Big Ass Fans","vendorId":5202,"productName":"Haiku H/I Series","productId":3,"nodeLabel":"Guest Fan\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000","location":"XX","hardwareVersion":1,"hardwareVersionString":"1","softwareVersion":0,"softwareVersionString":"3.3.0","partNumber":"0","productUrl":"https://bigassfans.com/support/haiku/","productLabel":"Haiku H/I Series","capabilityMinima":{"caseSessionsPerFabric":3,"subscriptionsPerFabric":3},"clusterRevision":2,"featureMap":{},"attributeList":[0,1,2,3,4,5,6,7,8,9,10,12,13,14,19,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"GeneralCommissioning":{"id":48,"name":"GeneralCommissioning","breadcrumb":0,"basicCommissioningInfo":{"failSafeExpiryLengthSeconds":60,"maxCumulativeFailsafeSeconds":900},"regulatoryConfig":0,"locationCapability":0,"supportsConcurrentConnection":true,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4],"generatedCommandList":[1,3,5]},"NetworkCommissioning":{"id":49,"name":"NetworkCommissioning","maxNetworks":1,"networks":[],"interfaceEnabled":true,"lastNetworkingStatus":0,"lastNetworkId":"313533302d494f54","lastConnectErrorValue":null,"scanMaxTimeSeconds":10,"connectMaxTimeSeconds":30,"clusterRevision":1,"featureMap":{"wiFiNetworkInterface":true,"threadNetworkInterface":false,"ethernetNetworkInterface":false},"attributeList":[0,1,2,3,4,5,6,7,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4,6,8],"generatedCommandList":[1,5,7]},"GeneralDiagnostics":{"id":51,"name":"GeneralDiagnostics","networkInterfaces":[{"name":"WIFI_STA_DEF","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"8c4b1454cd90","iPv4Addresses":["c0a81e76"],"iPv6Addresses":["fe800000000000008e4b14fffe54cd90"],"type":1},{"name":"WIFI_AP_DEF","isOperational":true,"offPremiseServicesReachableIPv4":null,"offPremiseServicesReachableIPv6":null,"hardwareAddress":"000000000000","iPv4Addresses":["c0a80401"],"iPv6Addresses":[],"type":1}],"rebootCount":4,"testEventTriggersEnabled":false,"clusterRevision":1,"featureMap":{"dataModelTest":false},"attributeList":[0,1,8,65528,65529,65531,65532,65533],"acceptedCommandList":[0],"generatedCommandList":[]},"AdministratorCommissioning":{"id":60,"name":"AdministratorCommissioning","windowStatus":0,"adminFabricIndex":null,"adminVendorId":null,"clusterRevision":1,"featureMap":{"basic":false},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2],"generatedCommandList":[]},"OperationalCredentials":{"id":62,"name":"OperationalCredentials","nocs":[{"noc":"153001010224020137032414001826047970e12c2605f9a68e4137062415012711fb28c552d759392618240701240801300941043f56755d57215d25be342bcb1c6c844476b44e3b9a401c08f7108e0bb0c5d87186818af8c0fc9b4c1391998f993694b62825404a3adbb46e0549798849dea5a1370a3501280118240201360304020401183004143adebca333131bbe8afc84a49c2d456896a2ba863005149c72e76d888ccb57e9856e39da63f28e35593b9618300b4070f7f67b20fe97579bbcce0962521b942f9feadec114797e5b7db79cd182df350b29b30858462055a68bcd17334d7e3d85163580722079372da9ee40f6bab0b618","icac":null,"fabricIndex":1}],"fabrics":[{"rootPublicKey":"04828b52896c509aa109b29f97cd1a65fb05ffe4c722461b7e656c1f71bfd6c4c760ed458586b693969cb49aba1ff6f4a43af16a1c63620416b8594e7272850f9a","vendorId":65521,"fabricId":"1","nodeId":"2754331428455262459","label":"","fabricIndex":1}],"supportedFabrics":5,"commissionedFabrics":1,"trustedRootCertificates":["15300101002402013703241400182604b26be12c260532a28e4137062414001824070124080130094104828b52896c509aa109b29f97cd1a65fb05ffe4c722461b7e656c1f71bfd6c4c760ed458586b693969cb49aba1ff6f4a43af16a1c63620416b8594e7272850f9a370a35012901182402603004149c72e76d888ccb57e9856e39da63f28e35593b963005149c72e76d888ccb57e9856e39da63f28e35593b9618300b4066352f23163ae7c92c8e955576a0970d197fc6ca0d09bbd08dd765a99cb23b507641d3a7738d51dcf00c3e0e28d44aa8e002407c447390fc3ac64a143c5b15f418"],"currentFabricIndex":1,"clusterRevision":1,"featureMap":{},"attributeList":[0,1,2,3,4,5,65528,65529,65531,65532,65533],"acceptedCommandList":[0,2,4,6,7,9,10,11],"generatedCommandList":[1,3,5,8]},"GroupKeyManagement":{"id":63,"name":"GroupKeyManagement","groupKeyMap":[],"groupTable":[],"maxGroupsPerFabric":4,"maxGroupKeysPerFabric":3,"clusterRevision":2,"featureMap":{"cacheAndSync":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[0,1,3,4],"generatedCommandList":[2,5]}}},"1":{"number":1,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Groups":{"id":4,"name":"Groups","nameSupport":{"nameSupport":true},"clusterRevision":4,"featureMap":{"groupNames":true},"attributeList":[0,65528,65529,65531,65532,65533],"acceptedCommandList":[0,1,2,3,4,5],"generatedCommandList":[0,1,2,3]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":43,"revision":1}],"serverList":[3,4,29,514],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"FanControl":{"id":514,"name":"FanControl","fanMode":0,"fanModeSequence":2,"percentSetting":0,"percentCurrent":0,"clusterRevision":4,"featureMap":{"multiSpeed":false,"auto":true,"rocking":false,"wind":true,"step":true,"airflowDirection":true},"attributeList":[0,1,2,3,9,10,11,65528,65529,65531,65532,65533],"acceptedCommandList":[0],"generatedCommandList":[],"windSupport":{"sleepWind":false,"naturalWind":true},"windSetting":{"sleepWind":false,"naturalWind":false},"airflowDirection":0}}},"4":{"number":4,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":770,"revision":1}],"serverList":[3,29,1026],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"TemperatureMeasurement":{"id":1026,"name":"TemperatureMeasurement","measuredValue":1994,"minMeasuredValue":-2000,"maxMeasuredValue":10000,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}},"5":{"number":5,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":775,"revision":1}],"serverList":[3,29,1029],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"RelativeHumidityMeasurement":{"id":1029,"name":"RelativeHumidityMeasurement","measuredValue":5617,"minMeasuredValue":0,"maxMeasuredValue":10000,"clusterRevision":3,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}},"6":{"number":6,"clusters":{"Identify":{"id":3,"name":"Identify","identifyTime":0,"identifyType":2,"clusterRevision":4,"featureMap":{},"attributeList":[0,1,65528,65529,65531,65532,65533],"acceptedCommandList":[0,64],"generatedCommandList":[]},"Descriptor":{"id":29,"name":"Descriptor","deviceTypeList":[{"deviceType":263,"revision":1}],"serverList":[3,29,1030],"clientList":[],"partsList":[],"clusterRevision":2,"featureMap":{"tagList":false},"attributeList":[0,1,2,3,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]},"OccupancySensing":{"id":1030,"name":"OccupancySensing","occupancy":{"occupied":false},"occupancySensorType":0,"occupancySensorTypeBitmap":{"pir":true,"ultrasonic":false,"physicalContact":false},"clusterRevision":3,"featureMap":{},"attributeList":[0,1,2,65528,65529,65531,65532,65533],"acceptedCommandList":[],"generatedCommandList":[]}}}}},"error":"undefined"}}
2024-11-09 23:11:54.295 [DEBUG] [nternal.client.MatterWebsocketClient] - result type: resultSuccess
2024-11-09 23:11:54.303 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 2754331428455262459
2024-11-09 23:11:54.304 [DEBUG] [r.internal.handler.ControllerHandler] - discoverChildEndpoint 2754331428455262459
2024-11-09 23:11:54.304 [DEBUG] [nal.discovery.MatterDiscoveryService] - discoverChildEndpointThing: matter:endpoint:8862d8bbf0:2754331428455262459_1 matter:controller:8862d8bbf0 1
2024-11-09 23:11:54.306 [DEBUG] [ter.internal.handler.EndpointHandler] - updateEndpoint 1 2754331428455262459
2024-11-09 23:11:54.307 [DEBUG] [ter.internal.handler.EndpointHandler] - Setting Online 1 2754331428455262459
2024-11-09 23:11:54.312 [DEBUG] [er.internal.devices.types.DeviceType] - Creating channels for cluster: Groups
2024-11-09 23:11:54.316 [DEBUG] [.devices.converter.ConverterRegistry] - No converter found for cluster 4
2024-11-09 23:11:54.316 [DEBUG] [er.internal.devices.types.DeviceType] - Creating channels for cluster: Descriptor
2024-11-09 23:11:54.317 [DEBUG] [.devices.converter.ConverterRegistry] - No converter found for cluster 29
2024-11-09 23:11:54.317 [DEBUG] [er.internal.devices.types.DeviceType] - Creating channels for cluster: Identify
2024-11-09 23:11:54.317 [DEBUG] [.devices.converter.ConverterRegistry] - No converter found for cluster 3
2024-11-09 23:11:54.318 [DEBUG] [er.internal.devices.types.DeviceType] - Creating channels for cluster: FanControl
2024-11-09 23:11:54.318 [DEBUG] [er.internal.devices.types.DeviceType] - Converter found for cluster: FanControl
2024-11-09 23:11:54.319 [DEBUG] [r.internal.handler.ControllerHandler] - Could not update node 2754331428455262459
java.util.concurrent.CompletionException: java.lang.NullPointerException: Cannot invoke "org.openhab.binding.matter.internal.client.model.cluster.gen.FanControlCluster$FanModeSequenceEnum.ordinal()" because "this.cluster.fanModeSequence" is null
at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315) ~[?:?]
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320) ~[?:?]
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:722) ~[?:?]
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) ~[?:?]
at org.openhab.binding.matter.internal.client.MatterWebsocketClient.lambda$1(MatterWebsocketClient.java:222) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:840) [?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "org.openhab.binding.matter.internal.client.model.cluster.gen.FanControlCluster$FanModeSequenceEnum.ordinal()" because "this.cluster.fanModeSequence" is null
at org.openhab.binding.matter.internal.devices.converter.FanControlConverter.createChannels(FanControlConverter.java:70) ~[?:?]
at org.openhab.binding.matter.internal.devices.types.DeviceType.lambda$1(DeviceType.java:127) ~[?:?]
at java.util.HashMap.forEach(HashMap.java:1421) ~[?:?]
at org.openhab.binding.matter.internal.devices.types.DeviceType.createChannels(DeviceType.java:121) ~[?:?]
at org.openhab.binding.matter.internal.handler.EndpointHandler.updateEndpoint(EndpointHandler.java:242) ~[?:?]
at org.openhab.binding.matter.internal.handler.ControllerHandler.updateNodeEndpoints(ControllerHandler.java:390) ~[?:?]
at org.openhab.binding.matter.internal.handler.ControllerHandler.lambda$9(ControllerHandler.java:362) ~[?:?]
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718) ~[?:?]
... 9 more
2024-11-09 23:11:54.323 [DEBUG] [ter.internal.handler.EndpointHandler] - setEndpointStatus OFFLINE COMMUNICATION_ERROR java.lang.NullPointerException: Cannot invoke "org.openhab.binding.matter.internal.client.model.cluster.gen.FanControlCluster$FanModeSequenceEnum.ordinal()" because "this.cluster.fanModeSequence" is null 1 2754331428455262459
Well thats weird, i can see that value in the JSON, wonder if that cluster is not serializing right? In any case, i just posted a new jar that checks if this is null first before adding the channel. So for the time being, mode selection may not be there, but you should still be able to control the speed %.