← Retour aux projets

TECKIN TC100 / Anyka AK3918

Une extension firmware sur MicroSD pour reprendre le contrôle d’une caméra Teckin TC100 / Teckin Click et l’intégrer localement à Frigate et Home Assistant, sans dépendance au cloud constructeur.

WIP v1.8.2 Anyka AK3918 v300 Frigate + HA Cloud-free

Le projet part d’une caméra IP grand public très limitée par son firmware d’origine. L’objectif est de conserver le matériel — capteur, encodeur, Wi‑Fi, LEDs, infrarouge et MicroSD — tout en remplaçant l’usage cloud par un fonctionnement local, observable et automatisable.

La base matérielle est un Anyka AK3918 v300, un SoC embarqué monocœur avec environ 33 Mo de RAM. Cette contrainte change complètement la manière de développer : chaque daemon, fork shell, handshake TLS et buffer compte.

Frigate et Home Assistant sans cloud

Le profil Frigate + Home Assistant désactive les services inutiles, conserve les flux nécessaires et expose la caméra localement. Le flux principal et le sous-flux passent par RTSP via v4l2rtspserver, avec compatibilité ONVIF et des presets adaptés à l’ingestion Frigate.

MQTT sur une plateforme qui ne veut pas vraiment faire du MQTT

Une des parties les plus intéressantes du projet est le bridge MQTT. Le curl embarqué ne sait pas publier comme attendu sur cette plateforme. Le firmware construit donc directement les paquets MQTT en shell et les envoie au broker via nc. Le chemin inverse utilise également un abonnement persistant pour recevoir les commandes Home Assistant sans fenêtre de polling fragile.

C’est typiquement le genre de contrainte que ce projet documente : il ne suffit pas de savoir qu’un outil « existe » dans BusyBox, il faut vérifier qu’il se comporte réellement comme le code le suppose.

Dashboard local et administration

Une interface web locale regroupe Dashboard, Video, ISP, Automation, Network et System. Le premier démarrage passe par un wizard qui configure le profil, la sécurité, le Wi‑Fi, le hostname et MQTT sans avoir à modifier la carte SD manuellement.

Sécurité et vie privée

Le firmware peut fonctionner entièrement sur le LAN. Un Privacy Shield / Stealth Mode coupe les sorties réseau vers l’extérieur. Les endpoints qui modifient l’état utilisent une protection CSRF par token généré au boot, et un mode de durcissement peut désactiver Telnet et réduire la surface CGI.

L’interface HTTPS utilise actuellement un certificat auto-signé ECDSA P‑256. Le renouvellement du certificat expiré a aussi été traité dans les versions récentes, avec une validité longue adaptée à un petit équipement embarqué local.

Optimiser pour ~33 Mo de RAM

Le AK3918 impose des choix peu visibles sur une machine moderne : probing de services sans fork inutile, keep-alive HTTP pour éviter de refaire un handshake RSA/ECDSA à chaque poll, hot paths sans jq, surveillance mémoire et profil Frigate qui libère plusieurs mégaoctets de RAM en arrêtant les daemons inutiles.

Le projet inclut même une sonde de capacités au boot qui vérifie le comportement des outils, pas seulement leur présence. C’est ce qui a permis d’identifier des cas comme tr présent dans BusyBox mais absent du PATH, ou timeout disponible avec une syntaxe ancienne incompatible.

Ce qui reste ouvert

La majorité des problèmes remontés pendant le bring-up matériel d’août 2026 sont corrigés et testés sur deux caméras réelles. Le principal point encore ouvert documenté dans le dépôt est le push-to-talk audio : les contrôles logiciels et l’upload ont été corrigés, mais le chemin matériel/driver reste silencieux et entre en conflit avec le périphérique audio utilisé par le pipeline RTSP.

Le projet reste donc volontairement marqué en cours : la vidéo, le MQTT, Home Assistant, Frigate et l’administration locale sont déjà largement fonctionnels, mais le travail continue sur les contraintes plus profondes du SoC et de ses drivers.

État du projet

La version actuelle est la 1.8.2. Le dépôt est le payload runtime : son contenu est copié à la racine d’une MicroSD FAT32, puis autorun.sh initialise l’extension au démarrage de la caméra. Le projet reste destiné à un usage LAN/local et ne nécessite pas le cloud constructeur.

Voir le projet et le code sur GitHub ↗