Description de l'application

Application web progressive (PWA) de supervision et de contrôle d'installations industrielles de traitement de surface, communiquant en temps réel via MQTT.

Aperçu

VKQVWebApp permet de visualiser et piloter des machines industrielles depuis un navigateur web. L'application se connecte à un broker MQTT pour recevoir les données en temps réel et envoyer des commandes aux équipements.

Version : 2.6.6 Éditeur : VK Vision SA


Fonctionnalités

Supervision

Contrôle

Mode Tableau de bord

Mode d'affichage automatique en rotation, conçu pour les écrans de supervision sans interaction :

Internationalisation (i18n)

Système


Architecture technique

Technologies

Composant Technologie
UI HTML5, CSS3, Bootstrap 5
Logique JavaScript (ES5, IIFE modules)
Communication MQTT over WebSocket
Authentification JWT (jose)
Dessin 2D Canvas API
Dessin 3D Three.js r134 (WebGL)
Icônes FontAwesome 6
PWA Service Worker, manifest.json

Structure des fichiers

TestSynopticViewer/
├── app.html                     Page principale
├── manifest.json                Manifest PWA
├── sw.js                        Service Worker
├── assets/
│   ├── css/
│   │   ├── app.css              Styles applicatifs
│   │   ├── user.css             Styles personnalisés
│   │   ├── bootstrap.min.css    Bootstrap 5
│   │   └── all.min.css          FontAwesome
│   ├── js/
│   │   ├── VKApp.js             Logique principale (navigation, MQTT, pages)
│   │   ├── VKI18n.js            Internationalisation (FR / DE / EN)
│   │   ├── VKMachine3D.js       Vue 3D de la machine (Three.js)
│   │   ├── VKDialogs.js         Dialogues modaux (slider, clavier, popups)
│   │   ├── VKDrawing.js         Moteur de rendu canvas des synoptiques
│   │   ├── VKConnection.js      Gestion des connexions MQTT
│   │   ├── VK.js                Variables globales et utilitaires
│   │   └── machine.js           Configuration machine
│   └── img/                     Logos, icônes, favicons
└── Spec/
    ├── Specifications.md        Spécifications fonctionnelles
    ├── Json/                    Données JSON de test
    └── img/                     Maquettes et captures de référence

Modules JavaScript

Module Rôle
VKApp Application principale : navigation, connexion MQTT, gestion des pages, graphiques, mode tableau de bord
VKI18n Internationalisation : dictionnaires FR/DE/EN, t(key) pour traduire, apply() pour mettre à jour le DOM
VKMachine3D Vue 3D interactive de la machine (Three.js) : cuves creuses, charges, robots, orbite souris, clic-synoptique
VKDialogs Boîtes de dialogue : slider vertical interactif avec curseurs d'alarme/sécurité, clavier numérique, menus popup
VKDrawing Rendu graphique des synoptiques sur canvas HTML5
VKConnection Persistance et gestion des connexions MQTT (localStorage)

Communication MQTT

Topics souscrits en permanence

Topic Variable JS Description
{base}Apps/{clientId}/Login VKQVLogin Réponse d'authentification (access, lang, jwtoken)
{base}Status/Connection VKQVConnectionStatus État de connexion machine (Online/Offline)
{base}Status/Databanks/# VKQVDatabanks[] Registres de données temps réel
{base}Configuration/Synoptics/# VKQVSynoptics[] Définitions des synoptiques (winjson)
{base}Configuration/Machine VKQVMachine Configuration de la machine (positions, robots)
{base}Alarms VKQVAlarms Liste des alarmes actives
{base}Messages VKQVMessages Liste des messages actifs
{base}LiftLower VKQVLiftLower Types de montées/descentes des robots
{base}Dailydata Statistiques journalières (tableau de bord)

Topics souscrits par page

Topic Page Variable JS
{base}Status/Rectifiers Redresseurs VKQVRectifiers
{base}Status/Dosing Pompes doseuses VKQVDosing
{base}Status/Machine Machine / Robots VKQVMachineData
{base}Status/Timetable Informations charges VKQVTimetable
{base}Status/DaysClock Horloge hebdomadaire VKQVDaysClock
{base}Configuration/Recorders Courbes de tendance VKQVRecorders
{base}Status/Recorder/{ionum} Courbes de tendance VKQVRecorderData

Topics publiés

Topic Description
{base}Apps/{clientId}/Status/Connection État de l'application (Connected / Disconnected)
{base}Apps/{clientId}/Login Envoi des credentials utilisateur
{base}Apps/{clientId}/Commands Commandes envoyées aux équipements

Internationalisation (VKI18n)

Le module VKI18n est un IIFE exposant deux fonctions :

VKI18n.t('key')      // Retourne la chaîne traduite dans la langue active
VKI18n.apply()       // Met à jour tous les éléments DOM marqués data-i18n

Les éléments HTML sont annotés avec :

Flux de résolution de la langue :

  1. Démarrage → FR (défaut)
  2. Sélection d'une connexion dans le dropdown → langue de la connexion (defaultLang)
  3. Connexion MQTT → langue de la connexion
  4. Login QuickView → langue du profil utilisateur (lang 100=FR, 101=DE, 102=EN)
  5. Logout → retour à la langue de la connexion

Mode Tableau de bord

Activé depuis la page Maintenance. L'application tourne en boucle sur une liste de pages configurées, chacune affichée pendant une durée définie.

Pages disponibles dans la rotation :

En mode tableau de bord, les synoptiques individuels sont mis à l'échelle pour occuper toute la page (contain-scaling), avec le titre affiché au-dessus. Si l'option plein écran est activée, le navigateur passe automatiquement en plein écran au démarrage du mode (via clic utilisateur ou au premier contact pour le démarrage automatique).


Vue Machine 3D

La vue 3D (VKMachine3D) est un rendu WebGL temps réel basé sur Three.js r134.

Navigation à la souris

Geste Action
Clic gauche + glisser Orbite (rotation autour de la machine)
Shift + clic gauche + glisser Panoramique horizontal
Molette Zoom avant / arrière
Pinch (tactile) Zoom

Éléments dessinés

Élément Description
Cuves Boîtes creuses à 5 parois (fond + 4 côtés). Couleur : vert si actif, rouge si alarme, gris si hors process. Étiquettes numéro + nom.
Charges Cubes colorés à l'intérieur des cuves selon le statut du job (js 0–7). Numéro affiché sur le dessus.
Robots Structure en L/Γ jaune (style monorail). Numéro affiché en sprite face caméra. Charge portée dessinée sous le bras.
Rails Monorails horizontaux en hauteur, un par ligne de machine.

Clic sur une cuve

Un clic gauche simple ouvre le synoptique de la cuve dans la zone sous la vue 3D. Le bouton × ferme le synoptique.


Page Horloge hebdomadaire

Affiche la programmation horaire de démarrage/arrêt de la machine, organisée en 3 onglets :

Onglet Contenu
Semaine Jours 2 à 6 (lundi → vendredi)
Weekend Samedi (jour 7) et dimanche (jour 1)
Modes spéciaux Tableau des actions programmées (jour, heure, mode, actif)

Pour chaque jour : nom complet du jour (le jour courant affiché en rouge), section Start (badge + heure + schéma + timeline), section Stop (badge + heure + schéma + timeline). Les détails ne s'affichent que si le démarrage/arrêt est activé. Les données sont rechargées à chaque visite de la page (pas de cache).

Source MQTT : {base}Status/DaysClock


Page Maintenance


Format des couleurs

Les couleurs provenant de la configuration utilisent le format #AARRGGBB (alpha + rouge + vert + bleu) et sont converties en #RRGGBB pour le CSS.


Démarrage

  1. Héberger les fichiers sur un serveur web (ou ouvrir app.html localement)
  2. Configurer une connexion MQTT (host, port, path, SSL, langue par défaut)
  3. Se connecter au broker
  4. Naviguer entre les pages via la barre latérale

Licence

© 2026 VK Vision SA — Tous droits réservés.


Revision #2
Created 2026-04-13 15:53:04 UTC by Jean-Noël Voirol
Updated 2026-04-13 15:54:54 UTC by Jean-Noël Voirol