Below the Node Red flow which I am using. I also use this flow to control my fans, based on my heartbeat the will blow harder.
Good luck with implementing! And when you have questions please let me know.
[{"id":"fd2e2d87c2b3b999","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":1120,"y":30,"wires":[[],["0da5a3451c489a70"]]},{"id":"0da5a3451c489a70","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":1395,"y":30,"wires":[["9b8e64ce537994b7"]]},{"id":"d6b41c854dd28107","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"lte","v":"125","vt":"num"},{"t":"gte","v":"145","vt":"num"},{"t":"gte","v":"160","vt":"num"}],"checkall":"true","repair":false,"outputs":3,"x":710,"y":165,"wires":[["b28cb96a9b0486b7","c21fd51d19eab39c","eaf5890278ce3718"],["24cbaa43ad1b6bcd","6aa63744d0f6a8e1"],["6aa63744d0f6a8e1"]]},{"id":"3ccd194ecc70c9fb","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":1120,"y":240,"wires":[[],["e9aeb32bc2970d80"]]},{"id":"e9aeb32bc2970d80","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":1405,"y":240,"wires":[["ad9b922701857f7d"]]},{"id":"c21fd51d19eab39c","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":905,"y":30,"wires":[["fd2e2d87c2b3b999"],["6f1a38c1cfe7cc78"]]},{"id":"48ccf46c31aca74a","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":1395,"y":75,"wires":[["d1c6fb8cfb405a92"]]},{"id":"6f1a38c1cfe7cc78","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":1120,"y":75,"wires":[["48ccf46c31aca74a"],[]]},{"id":"6aa63744d0f6a8e1","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"166","vt":"num"},{"t":"lte","v":"164","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":905,"y":240,"wires":[["3ccd194ecc70c9fb"],["b28cb96a9b0486b7"]]},{"id":"b28cb96a9b0486b7","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":1120,"y":285,"wires":[["4ea3989853ed7ad5"],[]]},{"id":"4ea3989853ed7ad5","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":1405,"y":285,"wires":[["614ac7bfe29ea16a"]]},{"id":"2136525fccc529ba","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":310,"y":165,"wires":[["e29cb1aafd45ae4f"],[]]},{"id":"515b508b50c8d752","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":90,"y":165,"wires":[["2136525fccc529ba"],[]]},{"id":"e29cb1aafd45ae4f","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":540,"y":165,"wires":[["d6b41c854dd28107"]]},{"id":"15bc20f7008b49ee","type":"comment","z":"edbfabe1c95de39e","name":"Hartslag Zwift -> snelheid fan","info":"","x":120,"y":120,"wires":[]},{"id":"24cbaa43ad1b6bcd","type":"switch","z":"edbfabe1c95de39e","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"152","vt":"num"},{"t":"lte","v":"151","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":905,"y":135,"wires":[["9e7ae02b82f2ae22"],["eaf5890278ce3718"]]},{"id":"9e7ae02b82f2ae22","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":1130,"y":135,"wires":[[],["8674f0a71d22960a"]]},{"id":"8674f0a71d22960a","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":1405,"y":135,"wires":[["219df86bb813180a"]]},{"id":"334c2cd94a1ca943","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":1405,"y":180,"wires":[[]]},{"id":"eaf5890278ce3718","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":1130,"y":180,"wires":[["334c2cd94a1ca943"],[]]},{"id":"982718f3bcf88616","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"],"data":"{\"transition\":150.0,\"rgb_color\":[255,0,0],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1895,"y":240,"wires":[[]]},{"id":"5b579bbc19bc44d5","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"],"data":"{\"transition\":150.0,\"rgb_color\":[20,3,252],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1895,"y":135,"wires":[[]]},{"id":"84e784c5b078a7d7","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"],"data":"{\"transition\":150.0,\"rgb_color\":[80,191,0],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1895,"y":30,"wires":[[]]},{"id":"b09562d93e0157fe","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"],"data":"{\"transition\":150.0,\"rgb_color\":[20,3,252],\"brightness_step_pct\":100}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1895,"y":285,"wires":[[]]},{"id":"a5ac1d4eb7dbd911","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"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"first","x":1895,"y":75,"wires":[[]]},{"id":"2312d18221b61d56","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"90","payloadType":"str","x":500,"y":60,"wires":[["d6b41c854dd28107"]]},{"id":"191ce25bb4517837","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"155","payloadType":"str","x":500,"y":90,"wires":[["d6b41c854dd28107"]]},{"id":"b40effdeb2e9a496","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"168","payloadType":"str","x":500,"y":120,"wires":[["d6b41c854dd28107"]]},{"id":"5b9388c4f42b6719","type":"inject","z":"edbfabe1c95de39e","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"65","payloadType":"str","x":500,"y":30,"wires":[["d6b41c854dd28107"]]},{"id":"9b8e64ce537994b7","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":1615,"y":30,"wires":[["84e784c5b078a7d7"]]},{"id":"d1c6fb8cfb405a92","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":1615,"y":75,"wires":[["a5ac1d4eb7dbd911"]]},{"id":"219df86bb813180a","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":1615,"y":135,"wires":[["5b579bbc19bc44d5"]]},{"id":"ad9b922701857f7d","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":1615,"y":240,"wires":[["982718f3bcf88616"]]},{"id":"614ac7bfe29ea16a","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":1615,"y":285,"wires":[["b09562d93e0157fe"]]},{"id":"480f0ad4.89a784","type":"server","name":"Home Assistant","version":4,"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"}]