Skip to content

fairecasoimeme/LiXee-Box

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LiXee-Box

Description

LiXee-Box est une passerelle multi-protocole pour appareils Zigbee, conçue pour être un hub central de gestion de l'énergie et de domotique. Cette application transforme votre LiXee-ZiWifi32 en une passerelle complète capable de gérer vos appareils Zigbee, votre Linky, compteur de production, gaz, eau, et d'intégrer le tout dans votre système domotique.

Matériel Compatible

Cette application fonctionne avec :

Note : Vous pouvez également utiliser ce code avec d'autres cartes ESP32S3, selon les connexions de broches de votre carte.

Schéma de fonctionnement

Installation

Tutoriel Installation LiXee-Box

Cas d'Usage Typiques

  • Relais longue distance : Linky (ZLinky) ↔ Zigbee ↔ LiXee-Box ↔ WiFi ↔ MQTT ↔ Home-Assistant/Jeedom/Domoticz
  • Passerelle cloud : Relayer les données des appareils Zigbee vers des services web via API
  • Gestion énergétique avancée : Surveillance, délestage de charge, routage énergétique

✨ Fonctionnalités Principales

La fonctionnalité principale est de relayer les données des appareils Zigbee vers un site web ou un service MQTT

L'appareil peut être configuré via un site web local

🔧 Gestion des Appareils Zigbee

  • Création et gestion d'objets Zigbee
  • Modèles personnalisables pour différents types d'appareils
  • Gestion des états et actions
  • Historique des données pour les appareils de puissance et d'énergie
  • Mises à jour OTA (Over-The-Air) automatiques et manuelles

📊 Surveillance et Tableau de Bord

  • Tableau de bord énergétique avec jauges et graphiques
  • Surveillance de la consommation en temps réel
  • Graphiques de tendance et historiques
  • Données Linky intégrées

🌐 Connectivité

  • MQTT : Serveur/port/utilisateur/mot de passe personnalisables
  • MQTT Discovery compatible avec Home Assistant
  • WebPush API : URL/utilisateur/mot de passe

⚡ Gestion de l'Énergie

  • Règles automatisées pour le délestage de charge et le routage énergétique
  • Seuils configurables avec actions automatiques
  • Gestion de la production et distribution d'énergie
  • Gestion tarifaire pour l'énergie, la production, le gaz et l'eau

🔄 Mises à Jour et Maintenance

  • Sauvegarde/restauration de configuration
  • Mode développeur pour le débogage

📱 Interface Utilisateur

Mise à Jour du Firmware

Mise à Jour du Firmware

L'interface de mise à jour vous permet de maintenir votre LiXee-Box à jour avec les dernières fonctionnalités.

Appairage d'Appareils

Appairage d'Appareils Appairage LiXee-Box Recherche d'Appareils

Le processus d'appairage est simplifié avec un assistant pas à pas pour connecter vos appareils Zigbee.

Gestion des Appareils

Configuration des Appareils Zigbee État des Appareils

Interface complète pour configurer et surveiller tous vos appareils Zigbee connectés.

Tableau de Bord Énergétique

État Énergétique Interface Mobile

Tableau de bord complet avec visualisation en temps réel de votre consommation énergétique, graphiques historiques et interface mobile responsive.

Production d'énergie et Injection

Mode Producteur

La LiXee-Box permet de récupérer la production d'énergie.
Au travers du ZLinky, il est possible de récupérer les données d'injection et l'index de production dans les cas suivant :

  • Le Linky est en mode standard
  • vous avez un contrat avec EDF OA Ces conditions sont nécessaires pour que votre Linky soit en mode Producteur

Graphe producteur Jauge_producteur

Il suffit donc de paramétrer dans Config --> Energie puis sélectionner dans l'onglet Production le ZLinky qui est mode production.

PS : Dans certaines configurations, il y a 2x Linky dont 1x Linky dédié à la production. Il faudra alors brancher et jumeler un autre ZLinky que celui dédié à la consommation

Mode Autoconsommation

Si vous possédez des panneaux photovoltaïques sans contrat, le Linky ne pourra pas être paramétrer en mode Producteur par votre fournisseur d'énergie.
Cependant, il sera possible de détecter une sur production lorsque votre production sera supérieure à votre consommation. Dans ce cas, la LiXee-Box pourra déterminer la puissance d'injection sur le réseau et agir en conséquence. En effet, cette information vous permettra de lancer des machines, enclencher votre chauffe-eau ou encore recharger votre véhicule électrique.

Voici les conditions permettant de détecter une surproduction sur votre Linky

  • une puissance apparente à 0 VA
  • une intensité > 0 A

Si ce cas arrive, vous aurez sur le graphique de puissance les données d'injection.

Injection

Les règles (automatismes)

Pour accéder à toutes les règles, il faut suivre Config --> Règles
La page permet de suivre la liste des règles avec leur état et la date de dernière exécution.
Vous pourrez créer, modifier ou supprimer une règle.

Liste des règles

Comment créer des règles

  • Les règles sont stockées dans un fichier JSON.
  • Une règle peut contenir une ou plusieurs conditions.
  • Une règle peut contenir une ou plusieurs actions.
  • Une règle peut intégrer une plage horaire (Optionnel)

Ajouter/modifier une règles

Structure

Voici la structure :

├── Rule     
│   ├── name   
|   ├── TimeRanges
│   │   ├── startTime   
│   │   ├── endTime   
│   │   ├── days[...]  //1,2,3,4,5,6,7
│   ├── conditions   
│   │   ├── type   
│   │   ├── IEEE   
│   │   ├── cluster  
│   │   ├── attribut  
│   │   ├── operator   
│   │   ├── value  
│   │   ├── logic  
│   ├── actions   
│   │   ├── type   
│   │   ├── IEEE  
│   │   ├── endpoint  
│   │   ├── value    

Paramètres de Condition

Paramètre Obligatoire Type Valeur Commentaire
type String "device"
IEEE String Adresse MAC sans ':' ou '-'
cluster Decimal ID du cluster en décimal
attribut Decimal Numéro d'attribut
operator String "<", ">", "==", "!=", ">=", "<="
value Decimal/String Valeur de comparaison Peut être un String sur les opérateurs == ou != uniquement
logic String "AND", "OR" Uniquement pour conditions multiples

Paramètres d'Action

Paramètre Obligatoire Type Valeur Commentaire
type String "onoff" / "notification"
IEEE String Adresse MAC sans ':' ou '-'
endpoint Decimal ID du point de terminaison
value String Valeur de l'action

Paramètres plage horaire (Optionnel)

Paramètre Obligatoire Type Valeur Commentaire
startTime String "HH:mm"
endTime String "HH:mm"
days Array [1,2,3,4,5,6,7] Chaque chiffre correspond au numéro du jour

Par exemple :

{
   "rules":[
    {
        "name":"rule_1",
        "conditions" : [
		{
		   "type" : "device",
		   "IEEE" : "00158d0006204fcf",
		   "cluster" : 2820,
		   "attribute" : 1295,
		   "operator" : "<",
		   "value" : 1000,
		   "logic" : "AND"
		}
        ],
        "actions" : [
		{
		   "type" : "onoff",
		   "IEEE" : "a4c138bb23185d2c",
                   "endpoint":1,
		   "value": "1"
		}
        ]
    }, {
        "name":"rule_2",
        "conditions" : [
		{
		   "type" : "device",
		   "IEEE" : "00158d0006204fcf",
		   "cluster" : 2820,
		   "attribute" : 1295,
		   "operator" : ">",
		   "value" : 1000,
		   "logic" : "AND"
		}
        ],
        "actions" : [
		{
		   "type":"notification",
           "IEEE":"",
           "endpoint":0,
           "value":"",
           "title":"🚨⚡puissance > 1000",
           "message":"🚨⚡puissance > 1000"
		}
        ]
    }
   ]
}

Notifications

Les notifications permettent d'être informé ou alerté des évènements de votre habitat selon vos besoins

Exemple configuration

Configuration notifications

Exemple d'évènements

Evènements

🚀 Installation et Configuration

Configuration Initiale

À partir de la v2.2a

avec LiXee-Assist https://github.com/fairecasoimeme/LiXee-Assist
Veuillez télécharger l'application pour procéder

Get it on Google Play Download on the App Store

Scannez simplement l'appareil (avec BLE) et complétez l'appairage avec vos identifiants WiFi locaux

Avant la v2.2a

Avec un navigateur web

  1. Alimentation : Branchez l'appareil sur une alimentation USB
  2. WiFi : Scannez les réseaux WiFi disponibles avec votre mobile/ordinateur
  3. Connexion : Connectez-vous au SSID LIXEEGW-XXXX (XXXX = partie de l'adresse MAC)
  4. Authentification : Mot de passe par défaut adminXXXX (XXXX = suffixe du SSID)
  5. Configuration : Ouvrez http://lixee-gw dans votre navigateur
  6. WiFi Principal : Configurez votre réseau WiFi principal
  7. Redémarrage : L'appareil redémarre et se connecte à votre réseau

Configuration Zigbee

  1. Allez dans le menu RéseauZigbee
  2. Cliquez sur Ajouter un Appareil pour démarrer l'appairage (30 secondes)
  3. La LED bleue clignote lentement pendant l'appairage
  4. Exécutez la procédure d'appairage sur votre appareil Zigbee

⚠️ Si un appareil est appairé, une alerte verte apparaît. Vous pouvez rafraîchir pour voir les propriétés de l'appareil.

Comment créer un modèle pour un nouvel appareil Zigbee

Un fichier modèle est une structure JSON qui définit les états et actions d'un type d'appareil. Le nom du fichier modèle correspond à l'identification de l'appareil (en décimal). Lorsqu'un appareil Zigbee rejoint le réseau, LiXee-Box crée un objet suivant le modèle correspondant avec les états et actions, effectue les liaisons et configure les rapports si nécessaire.

Structure du Modèle

Voici la structure :

├── Modèle d'appareil ou 'default'    
│   ├── status   
│   │   ├── name   
│   │   ├── cluster  
│   │   ├── attribut  
│   │   ├── type   
│   │   ├── unit  
│   │   ├── coefficient   
│   │   ├── visible  
│   │   ├── jauge     
│   │   ├── min  
│   │   ├── max  
│   │   ├── poll  
│   │   ├── mqtt_device_class  
│   │   ├── mqtt_state_class  
│   │   ├── mqtt_icon 
│   ├── action   
│   │   ├── name   
│   │   ├── command  
│   │   ├── endpoint  
│   │   ├── value    
│   │   ├── visible   
│   ├── bind  
│   ├── report  
│   │   ├── cluster   
│   │   ├── attribut  
│   │   ├── type  
│   │   ├── min   
│   │   ├── max  
│   │   ├── timeout   
│   │   ├── change  

Vous pouvez trouver des exemples de modèles dans le répertoire data/tp
Exemple de fichier 24321.json pour l'appareil id (5F01 Hex) :

{
	"lumi.sensor_switch.aq2" : [
	{
		"status" : [
			{
				"name" : "Clic",
				"cluster" : "0006",
				"attribut" : 0
			},
			{
				"name" : "MultiClic",
				"cluster" : "0000",
				"attribut" : 32768
			}
		]
	}
       ],
        "default" : [
	{
		"status" : [
			{
				"name" : "Clic",
				"cluster" : "0012",
				"attribut" : 85
			},
			{
				"name" : "MultiClic",
				"cluster" : "0012",
				"attribut" : 1293
			}
		]
	}
	]
}

Paramètres de Status

Paramètre Obligatoire Type Description
name String Nom d'affichage
cluster String ID du cluster (hex)
attribut Decimal Numéro d'attribut
type String "numeric", "float"
unit String Unité de mesure
coefficient Float Coefficient multiplicateur
jauge String "Gauge", "Battery", "text"
visible Decimal 1 (visible) ou 0 (masqué)
poll Decimal Intervalle d'interrogation (sec)
mqtt_device_class String Classe de périphérique MQTT pour HA
mqtt_state_class String Classe d'état MQTT pour HA
mqtt_icon String Icône MQTT pour HA

Action

Paramètres d'Action

Paramètre Obligatoire Type Description
name String Nom de l'action
command Decimal ID de commande
endpoint Decimal Numéro de point de terminaison
value Decimal Valeur à envoyer
visible Decimal 1 (visible) ou 0 (masqué)

Bind

Liste des clusters (en numérique) qui seront liés exemple : bind : "1026;1029;1794"

Report

Commande Obligatoire Type Valeur Commentaire
cluster String ID du cluster en hexadécimal
attribut Decimal Numéro d'attribut en décimal
type Decimal Correspond au type numérique de l'attribut
min Decimal Temps minimum (en secondes) pour envoyer un rapport
max Decimal Temps maximum (en secondes) pour envoyer un rapport
timeout Decimal En millisecondes
change Decimal Valeur de changement pour envoyer un rapport

🔌 API WEB

Pour accéder aux commandes de l'API, allez sur http:///

Liste des Commandes

Méthodes

getSystem

Requête
curl -X GET 'https://<HOST>/getSystem'\
    -u <username>:<password> \
    -H 'Content-Type: application/json' \
Réponse
{
  "network": {
    "wifi": {
      "enable": 1,
      "connected": 1,
      "mode": 0,
      "ip": "192.168.0.144",
      "netmask": "255.255.255.0",
      "gateway": "192.168.0.254"
    }
  },
  "system": {
    "mqtt": {
      "enable": 1,
      "connected": 1,
      "url": "192.168.0.21",
      "port": 1883
    },
    "webpush": {
      "enable": 0,
      "auth": 0,
      "url": ""
    },
    "marstek": {
      "enable": 1,
      "connected": 0,
      "ip": ""
    },
    "infos": {
      "t": 48.1
    }
  }
}

getDevices

Requête
curl -X GET 'https://<HOST>/getDevices'\
    -u <username>:<password> \
    -H 'Content-Type: application/json' \
Réponse
{
  "00158d0006203a63": {
    "1": {
      "IN": "0,1,3,1026,1794",
      "OUT": "4,3,1794"
    },
    "INFO": {
      "shortAddr": "38694",
      "LQI": "66",
      "device_id": "263",
      "lastSeen": "2025-03-14 14:40",
      "Status": "00",
      "manufacturer": "LiXee",
      "model": "ZiPulses",
      "software_version": "4000-0008"
    },
    "0702": {
      "0": "000000000036"
    },
    "0402": {
      "0": "09F8"
    },
    "0001": {
      "32": "23",
      "33": "C8"
    }
  }
}

getDevice

Requête
curl -X GET 'https://<HOST>/getDevice?id=04cf8cdf3c79ce2b'\
    -u <username>:<password> \
    -H 'Content-Type: application/json' \
Réponse
{
  "04cf8cdf3c79ce2b": {
    "1": {
      "IN": "0,2,3,4,5,6,9,1794,2820",
      "OUT": "10,25"
    },
    "242": {
      "IN": "",
      "OUT": "33"
    },
    "INFO": {
      "shortAddr": "5561",
      "LQI": "5C",
      "device_id": "97",
      "lastSeen": "2025-03-13 19:30",
      "Status": "00",
      "manufacturer": "LUMI",
      "model": "lumi.plug.maeu01",
      "software_version": "22"
    }
  }
}

getLinky

Requête
curl -X GET 'https://<HOST>/getLinky'\
    -u <username>:<password> \
    -H 'Content-Type: application/json' \
Réponse
{
  "65382_768": 0,
  "1794_0": 28870881,
  "1794_256": 28870881,
  "1794_258": 0,
  "1794_260": 0,
  "1794_262": 0,
  "1794_264": 0,
  "1794_266": 0,
  "2820_1295": 1560,
  "2820_1293": 0,
  "1794_32": "TH..",
  "1794_776": "022161823588",
  "2817_13": 45,
  "2817_14": 0,
  "2820_1288": 6,
  "2820_1290": 90,
  "65382_0": "BASE",
  "65382_1": "",
  "65382_2": "00",
  "65382_3": 0,
  "65382_4": 0,
  "65382_5": 0
}

getTemplates

Requête
curl -X GET 'https://<HOST>/getTemplates'\
    -u <username>:<password> \
    -H 'Content-Type: application/json' \
Réponse
{
  "24321.json": {
    "lumi.sensor_switch.aq2": [
      {
        "status": [
          {
            "name": "Clic",
            "cluster": "0006",
            "attribut": 0
          },
          {
            "name": "MultiClic",
            "cluster": "0000",
            "attribut": 32768
          }
        ]
      }
    ],
    "default": [
      {
        "status": [
          {
            "name": "Clic",
            "cluster": "0012",
            "attribut": 85
          },
          {
            "name": "MultiClic",
            "cluster": "0012",
            "attribut": 1293
          }
        ]
      }
    ]
  },.........
}

📦 Installation du Firmware

Installez simplement esptools et exécutez cette commande

Windows

esptool.py.exe --chip esp32s3 --port "COMXX" \
	 --baud 460800 \
	 --before default_reset --after hard_reset write_flash -z \
	 --flash_mode dio --flash_freq 40m --flash_size 16MB \
	 0x0 bootloader.bin \
	 0x8000 partitions.bin \
	 0xe000 boot_app0.bin \
	 0x10000 firmware.bin \
	 0x910000 littlefs.bin

Linux

esptool.py --chip esp32s3 \
--port /dev/ttyUSB0 \
--baud 460800 \
--before default-reset \
--after hard-reset \
write-flash -z \
--flash-mode dio \
--flash-freq 40m \
--flash-size 16MB \
0x0 bootloader.bin \
0x8000 partitions.bin \
0xe000 boot_app0.bin \
0x10000 firmware.bin \
0x910000 littlefs.bin

🏠 Intégration Home Assistant

LiXee-Gateway est compatible avec la découverte MQTT de Home Assistant.

Allez simplement dans le menu Passerelle --> MQTT et activez la fonctionnalité

Remplissez le formulaire :

  • Serveur MQTT
  • Port MQTT
  • Nom d'utilisateur MQTT
  • Mot de passe MQTT

Puis cliquez sur Home-Assistant et Sauvegarder
Attendez un moment et si tout est correct, l'icône de connexion deviendra verte.

Ensuite, allez dans le menu Réseau --> Zigbee

Pour chaque appareil Zigbee, un nouveau bouton MQTT Discover apparaît. Veuillez cliquer dessus pour créer un nouveau périphérique sur HA. Et voilà.

Attendez un moment et allez dans vos périphériques MQTT HA :

Crédits

Merci à tous les auteurs des bibliothèques tierces utilisées dans ce projet :

Merci à ZigStar pour la mise à jour OTA

Journal des modifications

V2.9

  • Intégration graphique des règles
    • Liste et statut des règles
    • Ajout / modification / suppression
  • Correction sur la RAZ des données de puissances temps réels
  • Ajout de la gestion de tous les tarifs (abonnement + taxes) dans les graphes
  • Optimisation des fichiers de fonctions javascript
  • Correction de la progressBar pour une meilleure compatibilité mobile
  • Correction du menu. Informations systèmes dans le menu A propos
  • Correction divers bugs

V2.8

  • Ajout de la gestion de l'injection avec panneaux photovoltaïques en mode autoconsommation
    • Si la production > Consommation, l'injection apparaitra dans le graphe de puissance et la jauge
    • Notification paramétrage pour être averti
  • Mise à jour de la librairie graphique pour plus de fonction et stabilité
  • Ajout de notifications manquantes
  • Correction sur la reconnexion WiFi
  • Correction bug sur le budget
  • Correction RAZ de l'injection
  • Correction bugs mineurs

V2.7

  • Ajout étiquette énergétique dans le tableau d'énergie
  • Ajout des aides dans le tableau d'énergie
  • Restructuration du tableau d'énergie
  • Ajout de la gestion des notifications
  • Ajout des notifications :
    • Production à Zéro
    • Production > consommation
    • Couleur du lendemain
    • Jour rouge
    • Préavis EJP
    • Surtension et sous-tension d'une phase
    • Dépassement de budget
  • Optimisation des process (PSRAM et restructurations)
  • Optimisation et correction client MQTT
  • Fix Bugs

V2.5a

  • Ajout de la valeur SHON
  • Ajout d'une nouvelle fonction pour obtenir l'énergie totale
  • Correction du statut de connexion WiFi
  • Correction du bug de message d'alerte
  • Changement vers la langue française
  • Correction de bugs

V2.2a

  • Modification de l'approvisionnement (uniquement BLE avec LiXee-Assist)
  • Ajout de l'OTA pour les appareils Zigbee
  • Meilleure gestion du réseau
  • Correction de bugs

V2.0j

  • Correction des valeurs signées pour MQTT HA
  • Correction de la déconnexion MQTT
  • Correction des problèmes de redémarrage
  • Correction du graphique de puissance en temps réel
  • Correction de bugs

V1.2

  • Ajout du service mDNS pour lixee-assist
  • Ajout d'API pour configurer le WiFi
  • Ajout d'une page web de sondage
  • Correction du bug d'activation WiFi
  • Correction du scan des réseaux WiFi
  • Correction du chargement de fichier JSON vers PSRAM
  • Redémarrage lors de la configuration WiFi
  • Correction de fuite mémoire
  • Amélioration de l'utilisation de la mémoire

V1.1

  • Ajout de commandes API
  • Ajout de la compatibilité Marstek
  • Ajout de la capacité de règles
  • Ajout de la fonctionnalité Tableau de bord
  • Correction de la découverte MQTT HA
  • Correction de la gestion des fichiers
  • Optimisation de certains traitements
  • Correction de bugs

V1.0 (version stable initiale)

Version stable initiale

  • État du réseau
  • État des appareils
  • Configuration WiFi
  • Configuration Zigbee
  • Passerelle MQTT
  • Passerelle API WebPush
  • Client NTP
  • Sécurité HTTP
  • Sauvegarde / Restauration
  • Mise à jour

Appareils compatibles

  • ZLinky
  • ZiPulses
  • Prise électrique
  • Tous les autres (nécessitent une mise à jour du modèle)

V1.0a

  • Source init