16 KiB
VoCat
English | العربية | 简体中文 | 繁體中文 | Français | Русский | Español | 日本語
Vocat est un panneau de contrôle web open-source et une boîte à outils d'ingénierie pour les modems cellulaires Quectel de classe EC20/EC25. Il réunit, dans un service autonome unique, la découverte de modems, l'état radio en direct, les terminaux AT et USSD, les SMS, la WiFi Calling, la gestion eSIM, la sélection de réseau, le routage par proxy, les notifications, les journaux d'audit et l'automatisation des versions.
Le backend est écrit en Go, l'interface est construite avec React et TypeScript, et le frontend de production est intégré dans le binaire Go. Un seul exécutable contient l'application web et utilise SQLite pour l'état persistant.
Fonctionnalités
| Domaine | Ce que Vocat fournit |
|---|---|
| Gestion des appareils | Découverte série/USB automatique, prise en charge de plusieurs modems, noms d'appareils conviviaux, mises à jour en direct de la vue d'ensemble, redémarrage du module, mode avion et contrôles du mode réseau USB. |
| Radio et réseau | État d'enregistrement, opérateur, métriques de signal, RSRP/RSRQ/SINR, mode réseau, bande, canal, recherche d'opérateurs et sélection de réseau automatique ou manuelle. |
| AT et USSD | Terminal AT interactif, historique des commandes, réponses brutes du modem, flux de démarrage/poursuite/annulation USSD et rapport d'erreurs modem clair. |
| SMS | Envoi direct de SMS cellulaires et IMS, synchronisation entrante, gestion des messages multiparties, rapports de livraison, historique des conversations, état non lu, horodatages et statut de livraison par message. |
| WiFi Calling | Établissement de tunnel IKEv2/ePDG, authentification EAP-AKA, enregistrement IMS, SMS IMS, contrôles de reconnexion, diagnostics d'état et routage par appareil. |
| eSIM et eUICC | Découverte eUICC, EID et informations de production, métadonnées de certificat, inventaire multi-eUICC, liste des profils installés, opérations d'activation/désactivation/commutation, ainsi que téléchargement, renommage et suppression lorsque la carte le permet. |
| Politique de carte | Comportement WiFi Calling et mode avion basé sur l'ICCID avec application immédiate de la politique. |
| Routage par proxy | Routage SOCKS amont, liaisons d'appareils, règles par pays, vérifications d'accessibilité TCP et vérifications UDP Associate pour les chemins de données WiFi Calling. |
| Notifications | Transfert des nouveaux SMS entrants via Telegram, Bark, e-mail, Pushplus et webhooks signés. Chaque SMS est livré comme une notification individuelle. |
| Bot Telegram | État de l'appareil, liste et commutation des profils installés, contrôles WiFi Calling et envoi de SMS. Les actions sensibles nécessitent une confirmation de l'administrateur. |
| Exploitation | Authentification, protection CSRF, politiques d'accès, événements d'audit, journaux en direct, rétention des journaux, vérifications de santé, mise en page réactive, mode sombre et interface utilisateur en anglais/chinois. |
| Distribution | Binaires Linux statiques, script d'installation systemd, auto-mise à jour avec vérification SHA-256, image Docker, publication GHCR et builds de version GitHub Actions. |
Matériel pris en charge
Vocat cible les modules Quectel à base Qualcomm qui exposent des interfaces AT, QMI, série et réseau USB compatibles, notamment :
- Quectel EC20
- Quectel EC25
- Famille Quectel EG25
- Modules EG600 compatibles et apparentés
Les fonctionnalités disponibles dépendent du firmware du module, de la composition USB, des capacités SIM/eSIM, des pilotes hôtes, du réseau radio et de la configuration de l'opérateur.
Installation
Installation Linux en un clic
En tant que root (y compris OpenWrt/Kwrt, où sudo est normalement absent) :
curl -fsSL https://raw.githubusercontent.com/MengMengCode/VoCat/master/scripts/install.sh | bash
Depuis un utilisateur normal sur une distribution disposant de sudo :
curl -fsSL https://raw.githubusercontent.com/MengMengCode/VoCat/master/scripts/install.sh | sudo bash
Vérifier les prérequis VoWiFi/XFRM de l'hôte sans installer VoCat :
curl -fsSL https://raw.githubusercontent.com/MengMengCode/VoCat/master/scripts/install.sh | bash -s -- --check-env
Installer une version spécifique :
curl -fsSL https://raw.githubusercontent.com/MengMengCode/VoCat/master/scripts/install.sh -o install.sh
sudo bash install.sh 0.0.2
VoWiFi IMS nécessite Linux XFRM/IPsec. Sur OpenWrt/Kwrt, le programme d'installation tente
d'installer les paquets correspondants ip-full, kmod-ipsec, kmod-ipsec4/6,
kmod-crypto-authenc, AES-CBC et SHA1 depuis le dépôt du firmware lui-même.
Si des modules noyau correspondants ne sont pas disponibles, utilisez un firmware qui les inclut ;
ne forcez jamais l'installation de kmods compilés pour un noyau différent.
Le programme d'installation :
- détecte
amd64,386,arm64,aarch64ouarmv7; - télécharge le binaire GitHub Release correspondant ;
- le vérifie par rapport à
SHA256SUMS; - installe Vocat sous
/opt/vocat; - crée un service systemd renforcé disposant des accès matériel et réseau requis par Vocat ;
- stocke la configuration d'exécution dans
/etc/vocat/env; - génère un mot de passe administrateur initial aléatoire lors de la première installation.
Après l'installation, ouvrez :
http://<adresse-du-serveur>:7575
Installation manuelle du binaire
Téléchargez le binaire correspondant et SHA256SUMS depuis GitHub Releases :
| Plateforme | Fichier de version |
|---|---|
| Linux x86-64 | vocat-linux-amd64 |
| Linux x86 32 bits | vocat-linux-386 |
| Linux ARM64 | vocat-linux-arm64 |
| Linux AArch64 | vocat-linux-aarch64 |
| Linux ARMv7 | vocat-linux-armv7 |
Vérifiez-le et installez-le :
sha256sum -c SHA256SUMS --ignore-missing
sudo install -d -m 0755 /opt/vocat/bin /opt/vocat/data
sudo install -m 0755 vocat-linux-amd64 /opt/vocat/bin/vocat
sudo env \
VOCAT_DATABASE_PATH=/opt/vocat/data/vocat.db \
VOCAT_ADMIN_PASSWORD=change-this-password \
/opt/vocat/bin/vocat serve
Cette commande manuelle exécute Vocat au premier plan. Utilisez vocat serve pour que le
processus démarre directement le serveur ; exécuter vocat sans argument en tant que root
sur un TTY ouvre plutôt le menu de gestion interactif. Utilisez le programme d'installation
en un clic lorsqu'un service systemd géré et un redémarrage automatique sont requis.
Docker
Pour un hôte Linux qui doit découvrir chaque modem Quectel pris en charge connecté et continuer à voir les événements de branchement à chaud USB, exécutez Vocat en mode d'accès matériel :
docker pull ghcr.io/mengmengcode/vocat:latest
docker run -d \
--name vocat \
--restart unless-stopped \
--network host \
--privileged \
--user 0:0 \
-e VOCAT_ADMIN_PASSWORD=change-this-password \
-v vocat-data:/opt/vocat/data \
-v /dev:/dev \
-v /sys:/sys:ro \
ghcr.io/mengmengcode/vocat:latest
Ouvrez http://<adresse-du-serveur>:7575 après le démarrage du conteneur. Le réseau de l'hôte
est requis pour que les interfaces réseau QMI restent visibles par Vocat, tandis que l'accès
privilégié aux périphériques est requis pour les ports série, les nœuds de contrôle QMI, les
interfaces TUN, la configuration réseau et les périphériques ajoutés après le démarrage du
conteneur. Le montage bind de /dev rend les nouveaux nœuds ttyUSB*, ttyACM* et cdc-wdm*
visibles sans recréer le conteneur.
Ce mode donne intentionnellement à Vocat un large accès aux périphériques et à la pile réseau
de l'hôte. Ne l'utilisez que sur un hôte Linux de confiance. La découverte automatique
identifie actuellement les modems USB Quectel pris en charge (ID fabricant USB 2c7c), et non
des marques de modems arbitraires. Le mappage de nœuds individuels uniquement avec --device,
comme /dev/ttyUSB2 et /dev/cdc-wdm0, limite le conteneur à ces nœuds fixes et ne fournit
pas une découverte multi-périphériques ou à chaud complète.
L'image GHCR est publiée pour linux/amd64 et linux/arm64.
Configuration
Vocat lit un fichier de configuration JSON optionnel depuis VOCAT_CONFIG, puis applique les variables d'environnement VOCAT_*. Les variables d'environnement ont la priorité.
| Variable d'environnement | Par défaut | Description |
|---|---|---|
VOCAT_ADDR |
0.0.0.0:7575 |
Adresse d'écoute HTTP. |
VOCAT_DATABASE_PATH |
./data/vocat.db |
Chemin de la base de données SQLite. |
VOCAT_ADMIN_USERNAME |
admin |
Nom d'utilisateur administrateur initial. |
VOCAT_ADMIN_PASSWORD |
admin |
Mot de passe administrateur initial. Modifiez-le avant d'exposer le service. |
VOCAT_SESSION_TTL |
24h |
Durée de vie de la session d'authentification. |
VOCAT_SECURE_COOKIES |
false |
Marque les cookies de session comme sécurisés lorsque HTTPS est utilisé. |
VOCAT_SHUTDOWN_TIMEOUT |
10s |
Délai d'arrêt gracieux. |
VOCAT_MAX_REQUEST_BODY_BYTES |
1048576 |
Taille maximale du corps de requête API. |
VOCAT_REPO |
MengMengCode/VoCat |
Dépôt GitHub de confiance utilisé par l'auto-updater, au format owner/name. |
GITHUB_TOKEN |
vide | Jeton GitHub optionnel pour les dépôts privés ou des limites d'API plus élevées. |
Ne stockez pas de jetons Telegram, mots de passe SMTP, secrets de webhook, identifiants SIM ou autres données privées dans le dépôt. Configurez-les via les paramètres de l'application ou des fichiers d'environnement protégés.
Bot Telegram
Lorsque les notifications Telegram sont activées et que le Chat ID et l'Admin ID sont configurés, le bot prend en charge :
/status [appareil]
/esim <appareil>
/switch <appareil> <iccid>
/wfc <appareil> <status|on|off|reconnect>
/sms <appareil> <numéro> <message>
La commutation de profil et l'envoi de SMS utilisent des boutons de confirmation à usage unique. Le bot n'expose pas les commandes de téléchargement, de suppression ou de renommage eSIM.
Mise à jour
Vérifier l'existence d'une GitHub Release plus récente :
vocat update --check --repo MengMengCode/VoCat
Installer la dernière version :
sudo vocat update --repo MengMengCode/VoCat
L'updater télécharge le binaire correspondant à l'architecture Linux actuelle, le vérifie avec le SHA256SUMS publié, remplace l'exécutable de manière atomique et redémarre le service systemd vocat lorsqu'il est disponible.
Pour les installations Docker :
docker pull ghcr.io/mengmengcode/vocat:latest
Recréez le conteneur après avoir tiré la nouvelle image.
Développement
Prérequis :
- Go 1.25 ou plus récent
- Node.js 20 ou plus récent
- npm
Lancer le serveur de développement frontend :
cd web
npm install
npm run dev
Construire le frontend intégré et démarrer le backend :
cd web
npm run build
cd ..
go run ./cmd/vocat
Exécuter tous les tests :
go test ./...
Construire un binaire de production :
go build -trimpath -ldflags "-s -w" -o vocat ./cmd/vocat
Automatisation des versions
Pousser un tag de version déclenche deux workflows GitHub Actions :
release-binariesconstruit et publie les binairesamd64,386,arm64,aarch64etarmv7ainsi queSHA256SUMS.dockerconstruit et publie une image multi-architecture vers GitHub Container Registry.
git tag v0.2.0
git push origin v0.2.0
Structure du projet
cmd/vocat/ Point d'entrée de l'application et CLI
internal/device/ Découverte de modems et contrôle des appareils
internal/modem/ Session AT et gestion des réponses
internal/server/ API HTTP, notifications et serveur web intégré
internal/store/ Persistance SQLite
internal/update/ Auto-updater GitHub Release
internal/vowifi/ Runtime IKE, EAP-AKA, IMS et WiFi Calling
scripts/install.sh Installeur et updater Linux
web/src/ Frontend React et TypeScript
.github/workflows/ Automatisation des versions binaires et Docker
Utilisation responsable
Les opérations sur les modems cellulaires et les eSIM peuvent affecter le service de l'abonné, les profils stockés, l'enregistrement réseau et l'état du matériel. Effectuez des sauvegardes, examinez attentivement les actions destructrices et n'utilisez le logiciel que dans des environnements légaux où vous êtes autorisé à exploiter le matériel et les ressources réseau connectés.
Vocat ne contourne ni l'authentification de l'opérateur, ni la politique réseau, ni la sécurité matérielle, ni les exigences de confiance eSIM. La prise en charge d'une opération signifie que Vocat peut la demander au modem ou à l'eUICC ; l'appareil, le profil, le réseau ou l'opérateur peut toujours la refuser.
Contribution
Les issues et pull requests sont les bienvenues. Gardez des changements ciblés, incluez des tests lorsque c'est possible, évitez de committer des identifiants ou des données d'abonnés, et documentez clairement les comportements spécifiques au matériel.
Avant de soumettre un changement :
go test ./...
cd web && npm run build
Remerciements
- Nodeseek.com — Une communauté dédiée aux serveurs
- Linux.do — Une communauté technologique inspirante
- iniwex5 — Directives de style et de fonctionnalité
Offrez-moi un café
| Réseau | Adresse |
|---|---|
| USDT-TRON (TRC20) | TQQAbboBoU8h5xX4YCA1rqWJU2WjK3seSg |
| USDT-BSC (BEP20) | 0xdbfcd4a462550d6ff06d09cbd89026c6b145d9c4 |
| USDT-Polygon | 0xdbfcd4a462550d6ff06d09cbd89026c6b145d9c4 |
Licence
Voir LICENSE.

