YoLink integration

I’m not that involved in the development. I get updates when they make them. This product is still very malleable. We can probably partly blame the addition of HaLow cameras and Matter integration for why it’s not here already, as we made a decision to make two new hubs instead of one super-hub. I can’t really say much in here without having my words thrown back at me if something doesn’t happen when I hoped it would, and giving an accurate date for a new product, especially a very complex one like this, is like making a 100 yard putt in golf.

3 Likes

Understood, thank you, please forward my suggestions, the third party alarm monitoring system to which I was referring is with your sensors and the Yolink integration relationship/service Virtualarm -

@Eric-YoLink I just received my YoLink Hub starter kit with 2 contact sensors plus a FlexFob.
I fired-up the Hub: AOK
I added the FlexFOB: AOK, then to my great disappointment, after adding them to Home Assistant, all I see is:
image

No “entity” representation for the buttons. No use of the buttons possible in Home Assistant.

Please let me know if there is any way to use the FlexFOB to trigger Home Assistant automations.

Anxiously awaiting insight into the error of my ways.

Just scroll up a bit. It’s been talked about several times here recently. You just need listen for “yolink_event” in Developer Tools / Events and find out what your buttons device IDs are and then use them in your automations.

1 Like

Doh! Got it! Thanks!

@Eric-YoLink: Never mind :wink:

…and my apologies to everyone on this thread who has posted on this subject. My bad. I should have done more “fob” homework before posting.

1 Like

So I’m trying to replace a YoLink Relay Switch with a Garage Controller. I first delete (Unbind) the switch in the YoLink app. Then in HA, I reload the integration, but noticed that the device still remains, even after a HA restart. It just shows that it is no longer managed by the YoLink integration. Clicking on the three dots on the device doesn’t even give me the option to delete it. How can I get this removed so I can add my new controller (using the same name)?

Hi, could you share your node red flow? Thanks!

Sure, @Greg3. Here’s what the flow looks like:

[{"id":"4d80587320a1dec4","type":"tab","label":"FlexFob - same","disabled":false,"info":"","env":[]},{"id":"0780ae4e011870bd","type":"server-events","z":"4d80587320a1dec4","name":"","server":"eab218f1.7f8978","version":2,"eventType":"yolink_event","exposeToHomeAssistant":false,"eventData":"","haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"}],"event_type":"","x":110,"y":100,"wires":[["c01cfb38ef7eea18"]]},{"id":"c01cfb38ef7eea18","type":"change","z":"4d80587320a1dec4","name":"Get Button","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.event.type","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":310,"y":100,"wires":[["428aa99286d811c8"]]},{"id":"428aa99286d811c8","type":"function","z":"4d80587320a1dec4","name":"Parse Button","func":"var button = msg.payload.toString();\nbutton = button.substr(7, 3);\nmsg.payload = button;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":200,"wires":[["1f79203283cf0da5"]]},{"id":"1f79203283cf0da5","type":"switch","z":"4d80587320a1dec4","name":"Fob 1","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1_s","vt":"str"},{"t":"eq","v":"2_s","vt":"str"},{"t":"eq","v":"3_s","vt":"str"},{"t":"eq","v":"4_s","vt":"str"},{"t":"eq","v":"1_l","vt":"str"},{"t":"eq","v":"2_l","vt":"str"},{"t":"eq","v":"3_l","vt":"str"},{"t":"eq","v":"4_l","vt":"str"}],"checkall":"true","repair":false,"outputs":8,"x":650,"y":200,"wires":[["a2750cbe9fcd04f0"],["267118139a5d14d3"],["94ae7325222e9396"],["4f2d10ea09cd88ec"],["40ac8eefb3552543"],["40ac8eefb3552543"],["40ac8eefb3552543"],["40ac8eefb3552543"]]},{"id":"a2750cbe9fcd04f0","type":"api-call-service","z":"4d80587320a1dec4","name":"Toggle CAM Bed","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"toggle","areaId":[],"deviceId":["ac68d62885e794e9d48184a4fa1e4de6"],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":910,"y":80,"wires":[[]]},{"id":"4f2d10ea09cd88ec","type":"api-call-service","z":"4d80587320a1dec4","name":"Toggle SAM Bed","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"toggle","areaId":[],"deviceId":["02f045e6841b681c321a412877f28e9c"],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":910,"y":260,"wires":[[]]},{"id":"267118139a5d14d3","type":"api-call-service","z":"4d80587320a1dec4","name":"All Lights On","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["all"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":140,"wires":[[]]},{"id":"94ae7325222e9396","type":"api-call-service","z":"4d80587320a1dec4","name":"All Lights Off","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["all"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":200,"wires":[[]]},{"id":"7f8251da7b413a43","type":"comment","z":"4d80587320a1dec4","name":"Yolink FlexFob - 1 or more Fobs Same Programming","info":"","x":210,"y":40,"wires":[]},{"id":"40ac8eefb3552543","type":"debug","z":"4d80587320a1dec4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":890,"y":320,"wires":[]},{"id":"eab218f1.7f8978","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

At this point, we are only using the short presses, but I set the Fob 1 switch node to handle all 8 possible events (4 buttons x long & short). Also, we have 2 fobs but they are “programmed” to perform identically. If you wish to have fobs that function differently, you need to capture the device ID and further split the flow, as below:

[{"id":"1fc09f5b46b25726","type":"tab","label":"FlexFob - diff","disabled":false,"info":"","env":[]},{"id":"c9fb201e0f2c93ca","type":"server-events","z":"1fc09f5b46b25726","name":"","server":"eab218f1.7f8978","version":2,"eventType":"yolink_event","exposeToHomeAssistant":false,"eventData":"","haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"}],"event_type":"","x":110,"y":100,"wires":[["6a2d816898b45efb"]]},{"id":"6a2d816898b45efb","type":"change","z":"1fc09f5b46b25726","name":"Get Fob & Button","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.event.device_id","tot":"jsonata"},{"t":"set","p":"payload","pt":"msg","to":"payload.event.type","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":330,"y":100,"wires":[["93beb40c2504196e"]]},{"id":"93beb40c2504196e","type":"function","z":"1fc09f5b46b25726","name":"Parse Fob & Button","func":"var button = msg.payload.toString();\nbutton = button.substr(7, 3);\nmsg.payload = button;\nvar fob = msg.topic.toString();\nfob = fob.substring(0,3);\nmsg.topic = fob;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":200,"wires":[["9c88d6251990f939"]]},{"id":"8bc46c2b2875c5e5","type":"switch","z":"1fc09f5b46b25726","name":"Fob 1","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1_s","vt":"str"},{"t":"eq","v":"2_s","vt":"str"},{"t":"eq","v":"3_s","vt":"str"},{"t":"eq","v":"4_s","vt":"str"},{"t":"eq","v":"1_l","vt":"str"},{"t":"eq","v":"2_l","vt":"str"},{"t":"eq","v":"3_l","vt":"str"},{"t":"eq","v":"4_l","vt":"str"}],"checkall":"true","repair":false,"outputs":8,"x":650,"y":180,"wires":[["96526187620458ee"],["d43ba3fe7fd6e4ec"],["262c90177e552fe9"],["9b0ac570712c7ef0"],["513ba31a8138cb36"],["513ba31a8138cb36"],["513ba31a8138cb36"],["513ba31a8138cb36"]]},{"id":"96526187620458ee","type":"api-call-service","z":"1fc09f5b46b25726","name":"Toggle CAM Bed","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"toggle","areaId":[],"deviceId":["ac68d62885e794e9d48184a4fa1e4de6"],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":910,"y":80,"wires":[[]]},{"id":"9b0ac570712c7ef0","type":"api-call-service","z":"1fc09f5b46b25726","name":"Toggle SAM Bed","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"toggle","areaId":[],"deviceId":["02f045e6841b681c321a412877f28e9c"],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":910,"y":260,"wires":[[]]},{"id":"d43ba3fe7fd6e4ec","type":"api-call-service","z":"1fc09f5b46b25726","name":"All Lights On","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["all"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":140,"wires":[[]]},{"id":"262c90177e552fe9","type":"api-call-service","z":"1fc09f5b46b25726","name":"All Lights Off","server":"eab218f1.7f8978","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["all"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":890,"y":200,"wires":[[]]},{"id":"65093ed83091c4ab","type":"comment","z":"1fc09f5b46b25726","name":"Yolink FlexFob - 2 Fobs Separate Programming","info":"","x":200,"y":40,"wires":[]},{"id":"9c88d6251990f939","type":"switch","z":"1fc09f5b46b25726","name":"Select Fob","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"e07","vt":"str"},{"t":"eq","v":"23c","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":310,"y":300,"wires":[["8bc46c2b2875c5e5"],["ae51489d38997581"]]},{"id":"ae51489d38997581","type":"switch","z":"1fc09f5b46b25726","name":"Fob 2","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1_s","vt":"str"},{"t":"eq","v":"2_s","vt":"str"},{"t":"eq","v":"3_s","vt":"str"},{"t":"eq","v":"4_s","vt":"str"},{"t":"eq","v":"1_l","vt":"str"},{"t":"eq","v":"2_l","vt":"str"},{"t":"eq","v":"3_l","vt":"str"},{"t":"eq","v":"4_l","vt":"str"}],"checkall":"true","repair":false,"outputs":8,"x":650,"y":420,"wires":[["2ebadf085f5e8588"],["2ebadf085f5e8588"],["2ebadf085f5e8588"],["2ebadf085f5e8588"],["2ebadf085f5e8588"],["2ebadf085f5e8588"],["2ebadf085f5e8588"],["2ebadf085f5e8588"]]},{"id":"2ebadf085f5e8588","type":"debug","z":"1fc09f5b46b25726","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":890,"y":420,"wires":[]},{"id":"513ba31a8138cb36","type":"debug","z":"1fc09f5b46b25726","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":890,"y":320,"wires":[]},{"id":"eab218f1.7f8978","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

I used just the first three characters of the ID as they were sufficiently unique. YMMV.

1 Like

Thank you for sharing!

I just tested the flow and it works. Fantastic!

I now have a flexfob that controls my backyard Sonos Music System. Next, Pause/Play, Volume UP or Down, and select from 4 four Sonos Favorites.

Add some stickers and here is my Sonos Music Player Fob
Front
Back

2 Likes

Does anyone know if there is a way to set the brightness level for a Yolink dimmer switch? The only entities I have available are to turn the switch on or off.

After continuing to search and research the yolink devices, It appears theres still no local control of yolink? We still “have” to use the cloud for integrations? No chance of being able to flash the hub with a different firmware like esphome or similar?

3 Likes

Alright, @Eric-YoLink , I just ordered lots of door/window, gate and leak sensors from Amazon with the assumption that these devices could be controlled locally. After a quick Google search, I landed on this thread and read through the end.

So, I’m going to go cancel this order now. Please let me know when you’ve made good on the promise of a local integration with HA. I’ll be happy to replace all of my sensors with Yolink devices once that happens.

2 Likes

@Eric-YoLink Anyone still having trouble with Yolink relays not working properly in Home Assistant automations? After they have been on for a while, an automation that turns them off sometimes does not turn them all off but only a couple of them (intermittently, different ones each time - and the Yolink hub is right near them)…

For what it’s worth, I am starting to RE the yolink hub. Since my post 5 days ago, I have ordered and received a hub, got debug access on the board, and have pulled the hub’s firmware.

2 Likes

This is very interesting. Which hub did you get, the original with the ethernet port or the speakerhub?

Please keep us updated on your progress.

1 Like

Ofc its a good idea but reading about LoRa it will always need a server to work, or do I misunderstand?

well if it needs a server it will never be possible to run it locally or…

The original with ethernet port. If I’m successful with that one, I can consider looking at the speaker hub. Based on what I am seeing thus far, I am hopeful for the possibility to at least get local mqtt following something similar to the emporia home energy monitor where instead of reporting to yolink’s mqtt endpoint, we could redirect to our own broker. But this is preliminary right now.

2 Likes

It looks like local mqtt might be possible given this article Reverse-engineering the Emporia Vue 2 and this entry found in the nvs partition of the flash dump I pulled.

Note: some information like device ID that looks like it might be identifiable/device specific is redacted until I know more about what it does.

I will need to set up an mqtt broker to test this (I don’t even have HA set up anywhere yet lol. Been wanting to and have plenty of stuff to integrate. But when I saw this, being a cybersecurity engineer myself, I was intrigued to see if I could pull it off.)

2 Likes

I have both hubs. I’m using the original hub connected via ethernet but bought the speaker hub as it was part of a package with the temp / humidity sensors.

I see Mark Watt has just released a video on Yolink devices and in it he mentions he has spoken to Yolink about local control. They told him they are working on a local hub which they hope to release later this year but as I understand it this has been the case for a long time.

1 Like