The story starts on a hot summer on the Côte d’Azur ca. two years ago, where I noticed that every single apartment had two things in common: 1) they did not have an A/C; and 2) they were all equipped with ceiling fans. There I realized how much a gentle breeze of a ceiling fan can improve one’s comfort on a hot day or night.
One particular apartment in Menton had a completely silent ceiling fan that did not rattle or vibrate. It had summer and winter modes and came with a functional remote. It also had a high-quality look. A quick search revealed that it was a Create Wind Calm ceiling fan, available for purchase with optional light and Wi-Fi capabilities. The latter caught my attention immediately — could it be integrated into the HomeKit ecosystem?
I’ve already been running a Homebridge instance to integrate my Dyson air purifier into HomeKit, and a quick research confirmed that this Create fan had indeed Homebridge plugins available.
If you’re in the HomeKit ecosystem, you might have noticed that there aren’t many HomeKit-compatible ceiling fans available on the market. The ones that are available usually cost more than 500€. So I thought: is this a robust, silent, good-looking ceiling fan with a built-in lamp, summer and winter modes, and the ability to integrate it into HomeKit with a bit of hacking — all for ca. 120€? That would be a no-brainer!
Fast-forward to this summer: after the first heatwave, I decided to purchase this ceiling fan for the bedroom to make the hot summer nights bearable. The installation was easy (there’s even a montage video available online) and the fan worked flawlessly right from the start. But my geeky side was not yet satisfied — it was still missing the HomeKit integration.
After some initial trials, my motivation quickly turned into frustration. Essentially all of the plugins available could be classified into one (or more) of the following categories: 1) does not work 2) outdated/not maintained 3) lack documentation 4) works but not user-friendly 5) works but constantly has communication issues.
My frustration wouldn’t let me drop the topic (I felt after all very close to the finish line), so I started looking into the existing plugins; how could I make them work? Even though the last time I wrote proper JavaScript code was more than 15 years ago for a summer job, I thought it couldn’t be that difficult…
One thing led to another, and I quickly realized that if I wanted a plugin that exposed the ceiling fan to HomeKit in a user-friendly way and had robust device communication, then I would need to write my own. So I did. Here’s the result.
This plugin allows integrating the CREATE ceiling fans into HomeKit via Homebridge.
Although there are several Homebridge plugins that provide similar functionality, this plugin aims to stand out via providing a smooth, user-friendly fan speed control mechanism in the HomeKit UI and a robust device communication mechanism with a mutex. It also reflects and updates the changes via the physical remote automatically in HomeKit.
Tested Devices:
Links:
akospasztor/homebridge-create-ceiling-fan
The TinyTuya project has great step-by-step instructions how to obtain the local key of a device.
In order to obtain the local key of a device, it needs to be paired with the Smart Life App or Tuya Smart App. If the device has already been paired with the CREATE app, you can reset the device with its remote the following way:
1h button on the remote until you hear a beep.Note from the CREATE app: if you do not hear a beep after 10 seconds, press and
hold the buttons 1h and 2h simultaneously at the same time.
It’s strongly recommended to set up a DHCP IP reservation for the device. This way the fan will always have a fixed IP address assigned. The TuyAPI library used for device communication works reliably when the IP address of the device is used alongside with the device ID.
Note: the device used for the initial plugin development is a CREATE Wind Calm purchased in 2025, and it refuses most connection attempts via the TuyAPI when the IP address is not supplied (connection requests with ID only).
Install the plugin either via the Homebridge UI by going to the Plugins tab and searching for the plugin.
Alternatively, the plugin can be installed directly from the command line interface:
hb-service add @akospasztor/homebridge-create-ceiling-fan
By default, one HomeKit tile is exposed in the Home application for a device. You can group or ungroup the different accessories of the fan (e.g. the fan slider and the light switch) in the group section of the accessory settings within the Home app.
The following UI slider inputs represent the different speed settings of the fan. The fan is turned off when the slider is set to zero.
| Device fan speed | Corresponding UI slider value | User input range on the slider |
|---|---|---|
| 1 | 10 | 1 - 19 |
| 2 | 30 | 20 - 39 |
| 3 | 50 | 40 - 59 |
| 4 | 70 | 60 - 79 |
| 5 | 90 | 80 - 94 |
| 6 | 100 | 95 - 100 |
Whenever the user operates the slider, a so-called debouncing timer is set. When the timer expires (without the user changing the slider), the current state of the slider value is converted to the nearest value that corresponds to the device fan speed. The purpose of the debounce timer is to provide great user experience: without the debounce timer, the slider would jump around immediately, without waiting for the user to finish adjusting the speed.
Demo:
The Home app shows a small icon below the fan speed slider representing the rotation direction of the fan. The implementation follows the general convention that the direction is represented from the perspective when the user looks at the fan; i.e. standing below and looking up in the case of a ceiling fan.
The counter-clockwise icon in the Home shows that the fan rotates counter-clockwise when looked at directly from below. In this mode the fan blows air downwards, called the “summer” mode. Changing the direction to clockwise rotation makes the fan rotate in the opposite direction, causing the air being pushed upwards. This mode is called the “winter” mode.
It appears that the color temperature of the CREATE Wind Calm ceiling fan (purchased in 2025) cannot be set properly. Regardless of using the physical remote, the mobile application or manually sending the commands via TinyTuya, the device simply cycles through the 3 different color temperatures and it does not remember it’s previously set state. This issue has also been observed here: https://github.com/velzend/create_ikohs_fan
Therefore, this plugin does not support setting the color temperature until this has been fixed by CREATE.
https://akospasztor.github.io/homebridge-create-ceiling-fan/
Please note that the Tuya IoT cloud platform registration is still needed to obtain the local keys for the device. After obtaining the keys, the device can be blocked from accessing the internet. ↩︎