git404hub

what is fanctl fr?

ardacelep/fanctl — explained in plain English

Analysis updated 2026-05-18

0PythonAudience · generalComplexity · 3/5LicenseSetup · moderate

tl;dr

A Python app with desktop, web, and CLI interfaces for controlling Levoit VeSync tower fans without the phone app, with token auth and auto-syncing state.

vibe map

mindmap
  root((fanctl))
    Fan Controls
      Power Toggle
      Speed 1 to 12
      Mode Selection
      Oscillation and Mute
    Interfaces
      Flet Desktop and Web
      tkinter Desktop
      macOS Menu Bar
    Backend
      VeSync API Auth
      Token Session
      State Polling
    Distribution
      macOS Bundle
      Windows Bundle
      Linux Bundle

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

what do people make with this?

VIBE 1

Control a Levoit LTF-F422S tower fan from a desktop or browser interface instead of the VeSync phone app.

VIBE 2

Automate fan control from the command line as part of a home automation script.

VIBE 3

Run a local web interface for your fan accessible from any device on your home network.

VIBE 4

Extend the controller to support another VeSync device by subclassing the FanController.

what's the stack?

PythonFlettkinterpyvesync

how it stacks up fr

ardacelep/fanctl0xhassaan/nn-from-scratch3ks/embedoc
Stars00
LanguagePythonPythonPython
Last pushed2023-06-08
MaintenanceDormant
Setup difficultymoderatemoderatehard
Complexity3/54/51/5
Audiencegeneraldeveloperdeveloper

Figures from each repo's GitHub metadata at analysis time.

how do i run it?

Difficulty · moderate time til it works · 30min

Requires a Levoit LTF-F422S fan and a VeSync account, other VeSync devices are not supported without additional code.

Use freely for any purpose, including commercial use, as long as you keep the copyright notice.

in plain english

Fanctl is a Python application that lets you control Levoit tower fans (specifically the LTF-F422S model) from your desktop, browser, or the command line, without using the official VeSync mobile app. It talks to the VeSync cloud API using your existing account credentials and gives you a local interface to turn the fan on or off, change its speed (1 to 12), switch modes (Normal, Turbo, Auto, Sleep), toggle oscillation and display, and see the current room temperature. The app has three different interfaces that share the same underlying logic. The primary one uses a framework called Flet, which can run as a desktop app or be opened in a web browser from the same code. There is also a traditional desktop window built with tkinter, and a macOS menu bar icon. Each interface subscribes to state and calls methods on the backend, which handles authentication, device communication, and keeping the state in sync. You log in once with your VeSync email and password. The session token is saved so you are not asked again. The app polls the device's state from the cloud every ten seconds, so changes made elsewhere (from the phone app or the physical fan) appear automatically. End users who do not want to install Python can download a prebuilt bundle from the GitHub releases page for macOS, Windows, or Linux. First-time launches show a security warning because the app is not code-signed, but the README explains clearly how to bypass it on each platform. The app is limited to the one specific fan model it was tested on. The architecture is designed to make adding support for other VeSync devices possible with a new controller subclass. The project is MIT-licensed.

prompts (copy fr)

prompt 1
I want to control a VeSync smart home device from Python using pyvesync. Show me how to authenticate with email and password, list my devices, and toggle power.
prompt 2
Help me build a Flet desktop app in Python with a slider that sends its value to a backend on release and shows a status indicator while the command is processing.
prompt 3
I want my Python app to poll a cloud API every 10 seconds and update the UI when the state changes. Show me how to do this with asyncio and a background polling loop.
prompt 4
How do I use PyInstaller to bundle a Python desktop app with Tkinter into a standalone executable for macOS and Windows?

Frequently asked questions

what is fanctl fr?

A Python app with desktop, web, and CLI interfaces for controlling Levoit VeSync tower fans without the phone app, with token auth and auto-syncing state.

What language is fanctl written in?

Mainly Python. The stack also includes Python, Flet, tkinter.

What license does fanctl use?

Use freely for any purpose, including commercial use, as long as you keep the copyright notice.

How hard is fanctl to set up?

Setup difficulty is rated moderate, with roughly 30min to a first successful run.

Who is fanctl for?

Mainly general.

peek the repo → explain another one

This repo across BitVibe Labs

double-check against the repo, no cap.