Zwift Sensor Component - Feedback and Testers Needed

Ok, so it looks updates are every 10mins coinciding with the last saved event. Once saved, the avg Watts g figure appears. Not ideal, but probably the best at the moment.

Hey sorry for the dumb question but I was wondering if someone could post the YAML for an automation that listens out for ride-on events? I want to make the lights flash when it happens but I’m not enormously familiar with HA events or how to access attributes, so it’s all a bit over my head. Cheers!

Is anyone having issues after updating to 2023.4.5?
I had it all working until this morning.

Now I am getting this message in the log:
Could not create Zwift sensor named ‘Zwift’!

Thanks for letting me know, than I will wait with updating :slightly_smiling_face:

i have installed zwift on home assistant and include the code in configuration.yaml, but only the update sensor turns up; anything that i need to do over at zwift before it works?

i am running on a rpi4

this is the log:

This error originated from a custom integration.

Logger: custom_components.zwift.sensor
Source: custom_components/zwift/sensor.py:341
Integration: zwift (documentation)
First occurred: 15:52:21 (1 occurrences)
Last logged: 15:52:21

Could not create Zwift sensor named ‘Zwift’!
Traceback (most recent call last):
File “/config/custom_components/zwift/sensor.py”, line 124, in async_setup_platform
await zwift_data._connect()
File “/config/custom_components/zwift/sensor.py”, line 341, in _connect
from zwift import Client as ZwiftClient
File “/usr/local/lib/python3.10/site-packages/zwift/init.py”, line 4, in
from .client import Client
File “/usr/local/lib/python3.10/site-packages/zwift/client.py”, line 5, in
from .world import World
File “/usr/local/lib/python3.10/site-packages/zwift/world.py”, line 2, in
from . import zwift_messages_pb2
File “/usr/local/lib/python3.10/site-packages/zwift/zwift_messages_pb2.py”, line 35, in
_descriptor.FieldDescriptor(
File “/usr/local/lib/python3.10/site-packages/google/protobuf/descriptor.py”, line 561, in new
_message.Message._CheckCalledFromGeneratedFile()
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:

  1. Downgrade the protobuf package to 3.20.x or lower.
  2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

More information: Changes made on May 6, 2022 | Protocol Buffers Documentation

hey all, I’ve released an update for this issue:

for the details:

  1. a newer version of protobuf was released
  2. the zwift-client library did not pin to a specific version of protobuf
  3. the compiled data structure for zwift in the library is not compatible with the new version of protobuf

the upstream library will need to be updated eventually but this work around seems functional for now. there may be some concerns with performance, so please keep me updated if the updates seem to lag or be slow from the integration)

1 Like

Thanks for the great work on fixing the issue and also for this awesome integration!
Ride On! :+1:

Running HA on 2023.4.6 and using Release V3.3.1
but still have this error im my logs:

Could not create Zwift sensor named ‘Zwift’!

Traceback (most recent call last):
File “/config/custom_components/zwift/sensor.py”, line 124, in async_setup_platform
await zwift_data._connect()
File “/config/custom_components/zwift/sensor.py”, line 343, in _connect
from zwift import Client as ZwiftClient
File “/usr/local/lib/python3.10/site-packages/zwift/init.py”, line 4, in
from .client import Client
File “/usr/local/lib/python3.10/site-packages/zwift/client.py”, line 5, in
from .world import World
File “/usr/local/lib/python3.10/site-packages/zwift/world.py”, line 2, in
from . import zwift_messages_pb2
File “/usr/local/lib/python3.10/site-packages/zwift/zwift_messages_pb2.py”, line 35, in
_descriptor.FieldDescriptor(
File “/usr/local/lib/python3.10/site-packages/google/protobuf/descriptor.py”, line 561, in new
_message.Message._CheckCalledFromGeneratedFile()
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:

  1. Downgrade the protobuf package to 3.20.x or lower.
  2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

hey @bedee, not sure if you saw this post above:

if you update to 3.3.1 in HACS you should see this error disappear.

Hi @snicker
Thanks for your reply. Yes i’ve seen your note and upgrade to 3.3.1 is done. But unfortunately i still have this error.

Just to check, does anyone else also have this error? Because then I wait with updating :slightly_smiling_face:

@Fleshi
so far i face still same issue. all updated but not working anymore. Unfortunately, I didn’t get any other feedback so far…

All errors disappeared for me after updating. Everything working as expected.

I also updated and for me everything is also working fine :slightly_smiling_face:.

Now steering has been made available in Zwift, is there any possibility of this integration adding triggers for Left/Right, which could be linked in HA to say zigbee push buttons or a mini joystick for free turning?

I installed this integration a while ago and reinstalled it today (vs 3.3.1) but i never get the zeift_online sensor. The only sensors i have are zwift_cadence, zwift_distance, zwift_gradient, zwift_heart_rate, zwift_power, zwift_speed and zwift_sensors_update

how do i get the zwift_online sensor?

Hi there, first of all thanks for the possibility of showing zwift infos and the work.
I am a complete newbie and have installed hass on a linux system, running on a dell wyse thin client.
i have 2023.7.2 core, hacs installed and running. zwift package seems also be installed.
I now have to proceed to installing an sensor with the following information:
sensor:

  • platform: zwift
    username: !secret my_zwift_username
    password: !secret my_zwift_password
    players:
    • !secret my_friends_zwift_player_id

Now my questions:

  1. is this still running without problems on hass
  2. how do i proceed (which steps are to do on hass) and is there a video which shows the basic installation of zwift sensor?
    sorry for the newb questions…

i am sorry to see, that there seems noone try to help me?

Hi, yep the sensor is still working fine. I make use of it every time I’m Zwifting :slight_smile:

About the configuration in Home Assistant. In configuration.yaml file I added the platform like you already mentioned in your message. After that I added the following entities in my dashboard (there a more entities availably):

type: entities
entities:
  - entity: sensor.zwift_online_4431663
    name: Zwift online
  - entity: sensor.zwift_cadence_4431663
    name: Cadans
  - entity: sensor.zwift_heart_rate_4431663
    name: Heart rate
  - entity: sensor.zwift_power_4431663
    name: Wattage
  - entity: sensor.zwift_speed_4431663
    name: Speed
  - entity: sensor.zwift_distance_4431663
    name: Distance
  - entity: sensor.zwift_level_4431663
    name: Level
  - entity: sensor.zwift_cycle_progress_4431663
    name: Cycle progress
title: Zwift
state_color: true

I also made in Node Red (which I do my automations in) the following automation (see below). This automation controls my fans based on my heartrate in Zwift.

[{"id":"e6dcfb8ea25b1e24","type":"server-state-changed","z":"edbfabe1c95de39e","name":"Zwift cadance <=40","server":"480f0ad4.89a784","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.zwift_cadence_4431663","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"40","halt_if_type":"num","halt_if_compare":"lte","outputs":2,"output_only_on_state_change":true,"for":"60","forType":"num","forUnits":"seconds","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":90,"y":570,"wires":[["49e2421c8c2c27d4"],[]]},{"id":"49e2421c8c2c27d4","type":"api-current-state","z":"edbfabe1c95de39e","name":"Zwift speed <= 10","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"10.0","halt_if_type":"num","halt_if_compare":"lte","entity_id":"sensor.zwift_speed_4431663","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":300,"y":570,"wires":[["7796c675d9160253"],[]]},{"id":"a7741dbf5bc3514c","type":"function","z":"edbfabe1c95de39e","name":"Set text to number","func":"msg.payload = Number(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1080,"y":555,"wires":[["809971767d09657c","f0db4f9bbe3f102b","c8da7738c333eccd","0aab647246bf633d"]]},{"id":"c8da7738c333eccd","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - hoog - Off","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_high"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1420,"y":570,"wires":[[]]},{"id":"f0db4f9bbe3f102b","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - middel - Off","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_middel"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1420,"y":525,"wires":[[]]},{"id":"809971767d09657c","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - laag - Off","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_low"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1420,"y":480,"wires":[[]]},{"id":"6e4ecba18eb82bd7","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep (Off)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1575,"y":615,"wires":[[]]},{"id":"7796c675d9160253","type":"api-current-state","z":"edbfabe1c95de39e","name":"Zwift power <= 10","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"10","halt_if_type":"num","halt_if_compare":"lte","entity_id":"sensor.zwift_power_4431663","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":510,"y":570,"wires":[["a7741dbf5bc3514c"],[]]},{"id":"bd02c70091a1cf75","type":"comment","z":"edbfabe1c95de39e","name":"Zwift -> 60 sec. klaar met fietsen","info":"","x":130,"y":525,"wires":[]},{"id":"0aab647246bf633d","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1365,"y":615,"wires":[["6e4ecba18eb82bd7","1a5c8a878e4c05bb","65cdc652c5268632","b40948021496d9b8"]]},{"id":"65cdc652c5268632","type":"api-call-service","z":"edbfabe1c95de39e","name":"Verlichting kantoor Melloh spotjes (verl.) (OFF)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.kantoor_melloh_spotjes_groep"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1630,"y":705,"wires":[[]]},{"id":"b40948021496d9b8","type":"api-call-service","z":"edbfabe1c95de39e","name":"Kastje kantoor Melloh (verl.) (OFF)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.candle_gold"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"none","x":1600,"y":750,"wires":[[]]},{"id":"1a5c8a878e4c05bb","type":"api-call-service","z":"edbfabe1c95de39e","name":"Fototoestel verlichting - kantoor Melloh (verl.) (OFF)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.fototoestel_verlichting_kantoor_melloh"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1645,"y":660,"wires":[[]]},{"id":"ad26c0fb5fe7eee5","type":"api-current-state","z":"edbfabe1c95de39e","name":">=90: Zwift Fan - laag is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_low","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1130,"y":30,"wires":[[],["d8bb79bb2cee702a"]]},{"id":"d8bb79bb2cee702a","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - laag - On","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_low"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1405,"y":30,"wires":[["1be23e96e2aaa4d3"]]},{"id":"caee75668c74550a","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"125","vt":"num"},{"t":"btwn","v":"126","vt":"num","v2":"148","v2t":"num"},{"t":"btwn","v":"149","vt":"num","v2":"162","v2t":"num"},{"t":"btwn","v":"163","vt":"num","v2":"300","v2t":"num"}],"checkall":"true","repair":false,"outputs":4,"x":720,"y":180,"wires":[["4677c94a79578a7c","302ba3f6c4fafef5","e609251919d17ce9"],["dcd7f96935b35e4c"],["13f1d6fb1cd467cd"],["daebe235a4b83c87"]]},{"id":"4e732172cb0160ba","type":"api-current-state","z":"edbfabe1c95de39e","name":">=166: Zwift Fan - hoog is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_high","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1130,"y":390,"wires":[[],["2cb3667bfebfc878"]]},{"id":"2cb3667bfebfc878","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - hoog - On","server":"480f0ad4.89a784","version":5,"debugenabled":true,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_high"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1415,"y":390,"wires":[["5b797c12b845da7f"]]},{"id":"302ba3f6c4fafef5","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"90","vt":"num"},{"t":"lte","v":"89","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":915,"y":30,"wires":[["ad26c0fb5fe7eee5"],["8831c667a65c8690"]]},{"id":"4e11efd843d5ae82","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - laag - Off","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_low"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1405,"y":75,"wires":[["6e452db052ab6a8a"]]},{"id":"8831c667a65c8690","type":"api-current-state","z":"edbfabe1c95de39e","name":"<=89: Zwift Fan - laag is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_low","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1130,"y":75,"wires":[["4e11efd843d5ae82"],[]]},{"id":"daebe235a4b83c87","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"163","vt":"num"},{"t":"lte","v":"162","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":910,"y":390,"wires":[["4e732172cb0160ba"],["4677c94a79578a7c"]]},{"id":"4677c94a79578a7c","type":"api-current-state","z":"edbfabe1c95de39e","name":"<=164: Zwift Fan - hoog is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_high","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1130,"y":435,"wires":[["fb90fc71926c6faa"],[]]},{"id":"fb90fc71926c6faa","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - hoog - Off","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_high"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1415,"y":435,"wires":[["698ddccab3a74761"]]},{"id":"c0fce1f5e0092850","type":"api-current-state","z":"edbfabe1c95de39e","name":"Zwift heart rate >= 80","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"80","halt_if_type":"num","halt_if_compare":"gte","entity_id":"sensor.zwift_heart_rate_4431663","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":320,"y":180,"wires":[["d122ae79e84f0e65"],[]]},{"id":"94f2df0e10576ecc","type":"server-state-changed","z":"edbfabe1c95de39e","name":"Zwift cadance >=40","server":"480f0ad4.89a784","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.zwift_cadence_4431663","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"40","halt_if_type":"num","halt_if_compare":"gte","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":100,"y":180,"wires":[["c0fce1f5e0092850"],[]]},{"id":"d122ae79e84f0e65","type":"function","z":"edbfabe1c95de39e","name":"Set text to number","func":"msg.payload = Number(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":180,"wires":[["caee75668c74550a"]]},{"id":"9dc8be5be983c0f4","type":"comment","z":"edbfabe1c95de39e","name":"Hartslag Zwift -> snelheid fan","info":"","x":130,"y":135,"wires":[]},{"id":"dcd7f96935b35e4c","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"138","vt":"num"},{"t":"lt","v":"138","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":910,"y":120,"wires":[["a3bbc646638c3005","2484ce2904ec705b"],["e609251919d17ce9"]]},{"id":"a3bbc646638c3005","type":"api-current-state","z":"edbfabe1c95de39e","name":">=152: Zwift Fan - middel is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_middel","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1140,"y":120,"wires":[[],["781e0c148f24db89"]]},{"id":"781e0c148f24db89","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - middel - On","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_middel"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1410,"y":120,"wires":[["a6d698c22514bbf7"]]},{"id":"644a1d52bd192224","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - middel - Off","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_middel"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1415,"y":210,"wires":[["3488153aaaa35b15"]]},{"id":"e609251919d17ce9","type":"api-current-state","z":"edbfabe1c95de39e","name":"<=151: Zwift Fan - middel is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_middel","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1140,"y":210,"wires":[["644a1d52bd192224"],[]]},{"id":"7a3b351bf855ccef","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep - E14 WIZ rood (ON)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"{\"transition\":150.0,\"rgb_color\":[255,0,0],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1905,"y":390,"wires":[[]]},{"id":"7f54a54d6db363e9","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep - E14 WIZ groen (ON)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"{\"transition\":150.0,\"rgb_color\":[80,191,0],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1905,"y":30,"wires":[[]]},{"id":"90d9754a827b07ea","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep - E14 WIZ groen (Off)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1905,"y":75,"wires":[[]]},{"id":"9b9cb4c292497135","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"90","payloadType":"str","x":515,"y":255,"wires":[["caee75668c74550a"]]},{"id":"a0020fe4f2c2598b","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"155","payloadType":"str","x":515,"y":375,"wires":[["caee75668c74550a"]]},{"id":"8cf8b48d20bc45bf","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"168","payloadType":"str","x":515,"y":495,"wires":[["caee75668c74550a"]]},{"id":"cb1672e7658f0099","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"65","payloadType":"str","x":515,"y":225,"wires":[["caee75668c74550a"]]},{"id":"1be23e96e2aaa4d3","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"300","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1625,"y":30,"wires":[["7f54a54d6db363e9"]]},{"id":"6e452db052ab6a8a","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"300","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1625,"y":75,"wires":[["90d9754a827b07ea"]]},{"id":"a6d698c22514bbf7","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"300","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1620,"y":120,"wires":[["64899e8f6a10c0b0"]]},{"id":"5b797c12b845da7f","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"300","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1625,"y":390,"wires":[["7a3b351bf855ccef"]]},{"id":"698ddccab3a74761","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"300","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1625,"y":435,"wires":[["eb6ae63d70f91eb5"]]},{"id":"13f1d6fb1cd467cd","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"149","vt":"num"},{"t":"lt","v":"149","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":910,"y":255,"wires":[["9b4fe3e38fd1c3e6","33461e0c49692e27","b4442058633740a6"],[]]},{"id":"9b4fe3e38fd1c3e6","type":"api-current-state","z":"edbfabe1c95de39e","name":">=158: Zwift Fan - middel is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_middel","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1140,"y":255,"wires":[[],["4e1c28e152e4192e"]]},{"id":"4e1c28e152e4192e","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - middel - On","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_middel"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1410,"y":255,"wires":[["b65d0a28d3cc6bcc"]]},{"id":"b65d0a28d3cc6bcc","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"300","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1630,"y":255,"wires":[["8012554def7ca0fd"]]},{"id":"8012554def7ca0fd","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep - E14 WIZ paars (ON)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"{\"transition\":150.0,\"rgb_color\":[155, 0, 155],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1915,"y":300,"wires":[[]]},{"id":"64899e8f6a10c0b0","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep - E14 WIZ blauw (ON)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"{\"transition\":150.0,\"rgb_color\":[20,3,252],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1910,"y":165,"wires":[[]]},{"id":"e5748e388a21662b","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"140","payloadType":"str","x":515,"y":315,"wires":[["caee75668c74550a"]]},{"id":"df71d386a2d299ae","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"152","payloadType":"str","x":515,"y":345,"wires":[["caee75668c74550a"]]},{"id":"acf6dfd9e2b752d8","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"130","payloadType":"str","x":515,"y":285,"wires":[["caee75668c74550a"]]},{"id":"eb6ae63d70f91eb5","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep - E14 WIZ paars (ON)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"{\"transition\":150.0,\"rgb_color\":[155, 0, 155],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1915,"y":435,"wires":[[]]},{"id":"a1ba1a7cbf904734","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift verlichting groep - E14 WIZ groen (ON)","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.zwift_verlichting_groep_2"],"data":"{\"transition\":150.0,\"rgb_color\":[80,191,0],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1920,"y":210,"wires":[[]]},{"id":"3488153aaaa35b15","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"300","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1630,"y":210,"wires":[["a1ba1a7cbf904734"]]},{"id":"1ed21a653465d3e5","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"159","payloadType":"str","x":515,"y":405,"wires":[["caee75668c74550a"]]},{"id":"251df908859f7fa4","type":"api-current-state","z":"edbfabe1c95de39e","name":"<=164: Zwift Fan - hoog is (aan)","server":"480f0ad4.89a784","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"switch.fan_zwift_high","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1445,"y":345,"wires":[["fcbecb7ec82ee00e"],[]]},{"id":"fcbecb7ec82ee00e","type":"api-call-service","z":"edbfabe1c95de39e","name":"Zwift fan - hoog - Off","server":"480f0ad4.89a784","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.fan_zwift_high"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1715,"y":345,"wires":[[]]},{"id":"a3f9a0e8258b7be7","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"162","payloadType":"str","x":515,"y":435,"wires":[["caee75668c74550a"]]},{"id":"0051c17f4e31938e","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"163","payloadType":"str","x":515,"y":465,"wires":[["caee75668c74550a"]]},{"id":"33461e0c49692e27","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1075,"y":345,"wires":[["251df908859f7fa4"]]},{"id":"b4442058633740a6","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"700","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1070,"y":300,"wires":[["8012554def7ca0fd"]]},{"id":"2484ce2904ec705b","type":"delay","z":"edbfabe1c95de39e","name":"","pauseType":"delay","timeout":"700","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1070,"y":165,"wires":[["64899e8f6a10c0b0"]]},{"id":"480f0ad4.89a784","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}]

Hey guys.

Please, please advice me if I’m not missing any instalation step.

  1. HACS → addon instalation
  2. in /config/configuration.yaml add
sensor:
  - platform: zwift
    username: !secret zwift_user
    password: !secret zwift_password
    players:
      - !secret zwift_yaro_user_id
  1. in /config/secrets.yaml add
zwift_yaro_user_id: 123456

# dummy zwift API account
zwift_user: [email protected]
zwift_password: ComplexPass
  1. HAAS restart

Did I miss any vital step? I belive I should see some sensor.zwift* entities in haas.lan:8123/config/entities page while there is none…

Also there no warnings nor errors in home assistant log (other than info that "custom integration zwift has not been tested by Home Assistant)…