21. Mon installation

image1655

21.0 Routeur & Box internet

21.0.1 Routeur Beryl AX (GL-MT3000)

image1850

  • Interfaces
    • 1 x WAN Ethernet port

    • 1 x LAN Ethernet port

    • 1 x USB 3.0 port

    • 1 x Type-C Power Input

    • 1 x Reset button

    • 1 x Toggle button

  • CPU : MT7981B Dual-core Processor @1.3GHz

  • Memory/Storage : DDR4 512MB / NAND Flash 256MB

  • Protocol: IEEE 802.11a/b/g/n/ac/ax

  • Wi-Fi Speed: 574Mbps (2.4GHz), 2402Mbps (5GHz)

  • Antennes: 2 x retractable external Wi-Fi antennes

  • Ethernet Speed WAN Port: 10/100/1000/2500Mbps

  • LAN Port :10/100/1000 Mbps

  • Power Input: type-C, 5V/3A

  • Power Consumption : <8W

  • Operating Temperature : 0 ~ 40°C (32 ~ 104°F)

  • Storage Temperature : -20 ~ 70°C (-4 ~ 158°F)

  • Dimension / Weight :120 x 83 x 34mm / 196g

Firmware Version: Native OpenWrt 24.10

image1933

https://dl.gl-inet.com/router/mt3000/open

image1851

21.0.2 BOX Free Pop

image1852

21.0.3 Installation du routeur

accès à Luci

image1863

ou : http://<IP_ROUTEUR>/cgi-bin/luci/#

image1864

21.0.3.1 Connexion à la Box internet

mode : « Routeur » (RQ:c’est la configuration de base)

image1890

image1970

image1857

le DHCP de la box

image1971

21.0.3.2 Connexion en IPv4

Au premier démarrage, rendez-vous à l’adresse 192.168.8.1.

image1931

Modification du réseau

image1932

le Routeur va redémarrer

21.0.3.3 Connexion en IPv6

Lien pour comprendre l’IPv6: https://caleca.developpez.com/tutoriels/ip-v6/

Récupération de l’IPv6 du lien local d’OpenWRT

l’adresse d’une passerelle commence par fe80::/64

Avec Luci, on récupère le nom de l’interface

image1865

Avec Putty:

ifconfig INTERFACE| grep "Scope:Link"

image1854

Configuration de la Box:

délégation de préfixe IPv6 :

  • coller dans le « Next hop » du premier nœud de délégation de préfixe l’adresse récupérée précédemment dans le routeur

  • vérifier que le Firewall est désactivé

image1853

Notez ces 2 informations qui seront utilisées par la suite :

  • Le préfixe de la délégation que vous venez de mettre en place.

  • L’adresse IPv6 du lien local.

Désactiver le DHCPv6

image1858

Désaciver le DNS IPv6 ou ajouter l’adresse de votre serveur DNS préféré

image1859

Si on veut utiliser le Port Forwarding du routeur, il faut mettre la FreeBox en DMZ vers l’adresse du routeur (exemple : 192.168.0.1).

image1861

Configuration du routeur:

Interfaces WAN & WAN6

image1866

WAN

image1860

  • WAN6 :
    • Protocole : Client DHCPv6

    • Demander une adresse IPv6 : try

    • Demander le préfixe IPv6 de la longueur (Request IPv6-prefix) : Automatique

image1862

L’option « Préfixe IPv6 délégué personnalisé » n’est plus présent dans LuCi, il va falloir passer par la ligne de commande :

Mettre à jour les packages , installer les packages ci-dessous s’ils ne sont pas installés et activer uci

opkg update
opkg install luci-theme-material luci-i18n-base-fr luci-i18n-firewall-fr luci-i18n-opkg-fr luci-i18n-attendedsysupgrade-fr \
ipset curl diffutils speedtest-netperf \
kmod-ipt-nat6
uci set network.wan.disabled=0

image1884

Note

Pour désactiver uci: uci set network.wan.disabled=1

Mettre à jour le préfixe

uci delete network.wan6.ip6prefi
uci add_list network.wan6.ip6prefix='2a01:e34:xxxx:xxxx::/64'
uci commit

image1883

  • Paramètres Internet du routeur
    • Type de connexion : Static IP (si serveur DHCP désactivé sur Freebox)

    • Adresse IP : 192.168.0.1

    • Masque : 255.255.255.0

    • Passerelle : 192.168.0.254

    • DNS 1 : (voir la liste des DNS de FREE)

    • DNS 2 : (voir la liste des DNS de FREE)

  • Paramètres Réseau du routeur
    • Adresse IP : 192.168.1.1

    • Masque : 255.255.255.0

  • Paramètres Réseau des PC
    • Adresse IP : 192.168.1.xxx (si serveur DHCP désactivé sur routeur)

    • Masque : 255.255.255.0

    • Passerelle : 192.168.1.1

    • DNS : 192.168.1.1

Interfaces LAN

image1885

image1886

LAN/DHCP:

image1887

image1888

Appliquer les changement

image1889

21.0.3.4 Connexion au smartphone en USB

Brancher un smartphone en USB sur le routeur qui se réveille et se met en charge Après avoir validé l’autorisation si nécessaire, retourner sur l’interface d’administration du MT-3000 et activer, si ce n’est déjà fait, le mode partage de connexion par câble USB qui est opérationnel immédiatement.

image1856

image1855

21.0.4 VPN Vireguard

21.0.4.1 Client Vireguard

image1904

21.0.4.1 Serveur Vireguard

Le serveur et les options:

image1892

image1893

image1897

Configuration d’un client:

image1898

image1899

image1900

21.0.5 Ventilateur

Version openwrt : 24.10

image1896

Installer le package

opkg update
opkg install kmod-hwmon-pwmfan

image1895

Désactiver le ventilateur

/bin/echo '0' > /sys/class/hwmon/hwmon2/pwm1_enable

Activer le ventilateur

/bin/echo '1' > /sys/class/hwmon/hwmon2/pwm1_enable

** Controle de la vitesse**

image1894

/bin/echo 'xxx' > /sys/class/hwmon/hwmon2/pwm1

21.0 6 Serveur de fichiers (ex: samba)

image1901

image1902

image1903

21.0 7 Batterie externe pour le Beryl AX

Le GL-MT3000 fonctionne correctement avec une batterie externe Anker.

21.1 Proxmox

C’est la base du système, il doit être installé en premier, ensuite :

  • Un conteneur ou une VM pour Lemp & Monitor

  • Ensuite LEMP

  • En dernier monitor

Avertissement

Installation de Proxmox : assurez-vous que la virtualisation UEFI est activée dans le BIOS

Pour l’installation: http://domo-site.fr/accueil/dossiers/1

Pour terminer le processus de post-installation de Proxmox VE 8 (évite de modifier manuellement les fichiers sources.list d’apt,) vous pouvez exécuter la commande suivante dans pve Shell. bash -c « $(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh) »; Il est recommandé de répondre « oui » (y) à toutes les options présentées au cours du processus.

image1716

21.1.1 installation de VM ou CT par l’interface graphique : IP :8006

image1028

21.1.2 installation automatique de VM ou CT : https://github.com/tteck/Proxmox

choisir le fichier d’installation : ex Conteneur LXC Debian 11

image1029

Copier le lien : image1030

Ici : https://github.com/tteck/Proxmox/raw/main/ct/debian.sh

  • Télécharger le script

wget <LIEN>
  • Modifier les droits du fichier

chmod 777 debian.sh
  • Lancer le script et répondre aux questions

image1033

21.1.3 installation automatique d’un conteneur LXC,LEMP & Monitor

Voir le § 0.1.1 installation automatique d’un conteneur LXC +LEMP+ monitor

21.1.4 Aperçu des VM et CT installés

image1034

Note

Plex est installé sur un autre mini PC

sous Proxmox également, en conteneur, voir le site http://domo-site.fr/accueil/dossiers/53

21.1.5 Update Version Debian

Exemple , updater Bullseye vers Bookworm

Voir aussi

https://www.debian.org/releases/stable/amd64/release-notes/ch-upgrading.fr.html#system-status

Mettre à jour la dernière version:

apt update && apt full-upgrade

image1065

Supprimer les paquets (si ils existent):

  • ne provenant pas de Debian

  • Les composants non-free et non-free-firmware

Le fichier sources.list doit ressembler à ceci:

image1066

pour trouver les paquets indésirables

find /etc -name '*.dpkg-*' -o -name '*.ucf-*' -o -name '*.merge-error'

image1067

Important

APT a besoin de gpgv , il est normalement installé, sinon apt install gpgv

Avant de commencer la mise à niveau, vous devez reconfigurer les listes de sources d’APT (/etc/apt/sources.list et les fichiers situés dans /etc/apt/sources.list.d/) pour ajouter les sources pour Bookworm et supprimer celles pour Bullseye.

/etc/apt/sources.list

image1068

/etc/apt/sources.d/nodesource.list

image1069

Mise à jour vers une nouvelle version:

apt update
apt upgrade --without-new-pkgs

image1070

image1071

Entrée ou la flèche pour défiler; pour quitter et poursuivre : q

apt full-upgrade

image1073

apt purge '~o'

image1072

cat /etc/debian_version

image1074

21.1.6 Datacenter Manager

un seul affichage pour gérer lusieurs serveurs Proxox

image1681

Installation : https://community-scripts.github.io/ProxmoxVE/scripts?id=proxmox-datacenter-manager

Un tuto : https://belginux.com/installer-proxmox-datacenter-manager/#%F0%9F%94%91-premi%C3%A8re-connexion

21.1.7 HA: haute disponibilité

avec un stockage distribuée et redondant Ceph

Il faut pour cela au minimum 2 noeuds + 1 raspberry ou 3 noeuds; j’utilise 2 minis PC, avec des processeurs I5 et I7 et un NUC chinois.

Modification matériel pour Ceph

sur les mini PC , les disques durs sont des SSD SATA, j’ai ajouté dans l’emplacement msata un ssd de 256 Go (un nouveau SSD et le SSD msata récupéré dans le nuc chinois);

Dans le NUC chinois , un seul SSD un msata ,un nouveau de 512 GO remplace celui de 256 Go placé dans un des mini PC

image1725

Note

Ceph se sert d’une partition toute simple et non d’un disque entier, il est donc possible sur le NUC chinois de créer avant l’installation de Proxmox 1 partitions de 256 Go, ce qu’il reste d’espace étant utilisé par Ceph

Mieux vaut que la taille restante du disque soit proche de celle des autres disques du cluster; sur cette installation les ssd ont une capacité de 240 Go et la partition restante est aussi de 240 Go

Important

Un seul des noeuds peut lors de l’installation contenir des CT ou des VM

21.1.7.1 Créer la grappe de serveur(Cluster)

image1719

image1720

Copier les informations de jonction:

image1721

21.1.7.2 Sur le 2eme Noeud et le 3eme Noeud

image1722

Statut de la grappe:

image1723

21.1.7.3 3eme Noeud sur un Raspberry

un RPI3 suffit

https://jon.sprig.gs/blog/post/2885

Activer l’accès SSH root sur le PI

echo "PermitRootLogin yes" | tee /etc/ssh/sshd_config.d/root_login.conf >/dev/null && systemctl restart ssh.service

Installer le paquet « corosync-qnetd » sur le PI

sudo apt update && sudo apt install -y corosync-qnetd

Installer le package « corosync-qdevice » sur les 2 Noeuds Proxmox

apt update && apt install -y corosync-qdevice

Exécuter sur le 1er noeud Proxmox :

Pour confirmer que le quorum de 3 noeuds est atteint , exécuter:*

pvecm status

image1724

21.1.7.4 Patitionnement du cluster équipé d’un seul SSD

image1726

On crée une ème partition, de type CAFECAFE-9B03-4F30-B4C6-B4B80CEFF106, utilisant tout le reste du disque nommée celph block; On utilise sgdisk car c’est l’outil de configuration qu’utilise aussi ceph quand il prépare un disque complet.

image1728

On utilise aussi partpobe , il faut donc installer le paquet :

apt install parted

image1727

Création de la partition ceph block

sgdisk --largest-new=4 --change-name="4:ceph block"   --typecode=4:CAFECAFE-9B03-4F30-B4C6-B4B80CEFF106 -- /dev/sda
partprobe

image1729

image1730

21.1.7.5 Ceph

Installer Ceph

image1731

image1732

image1733

21.1.7.6 Créer Ceph Monitor & Manager

image1735

image1736

image1753

21.1.7.7 Créer Ceph OSD sur les 3 clusters

Créer les disques OSD sur les 3 Clusters

image1734

image1760

Si une erreur apparait alors que tout semble normal, voir le § 21.1.8.2 HEALTH_WARN ,daemons have recently crashed

image1780

21.1.7.8 Créer Ceph Pools

image1754

21.1.7.9 Créer CephFS

Une fois que vous disposez d’un cluster Ceph fonctionnel incluant Ceph mgr, Ceph mon, Ceph OSD, et le Pool de stockage, installation de CephFS:

image1755

image1756

La case cochée pour la crétion du stockage:

image1779

21.1.7.10 Cluster HA

Répartition de charges des CT et VM dans un cluster HA

  • créer un groupe , sélectionner les noeuds et leur priorité

Note

Plus c’est élevé plus c’est prioritaire, aussi si vous définissez un nœud sur la priorité 1 et un autre sur 2, celui avec 2 sera préféré, s’il est en ligne.

image1782

image1783

  • créer un second groupe

image1784

Note

en cas d’erreur: image1787

voir ce § 21.1.8.3 unable to read lrm status

  • Associer les VM ou CT aux noveaux groupes

image1785

image1786

Groupe : le groupe dans lequel la ressource (VM ou CT) doit s’exécuter

Started : la ressource restera dans l’état démarré

Stopped : L’HA garantit que la ressource reste dans l’état arrêté.

Ignored : HA ignore cette ressource et n’effectue aucune action dessus.

Disabled : L’HA garantit que la ressource reste dans l’état arrêté et ne tente pas de migrer vers d’autres nœuds

copie d’écran de HA

image1794

21.1.8 Commandes shell

21.1.8.1 supprimer Disk–old

Si l’on veut supprimer une partition ou la nettoyer et qu’elle n’est pas vide:

Pour éviter cette erreur:

image1717

utiliser :

dmsetup remove <NAME OLD-DISK>

image1718

21.1.8.2 HEALTH_WARN ,daemons have recently crashed

image1781

Pour afficher une liste de messages :

ceph crash ls

Si vous souhaitez lire le message :

ceph crash info <id>

puis pour supprimer le ou les messages:

ceph crash archive <id>
ceph crash archive-all

21.1.8.3 unable to read lrm status

systemctl reset-failed pve-ha-lrm.service
systemctl start pve-ha-lrm.service

image1788

21.1.8.4 Remplacer un ssd utilisé pour Ceph

systemctl stop ceph-osd@<id#>
ceph osd destroy osd.#
ceph osd crush remove osd.#
wait active+clean state
ceph osd rm osd.#
# replace physical HDD/SDD
ceph-disk zap /dev/...
pveceph createosd /dev/...
systemctl start ceph-osd@#

21.1.8.5 /etc/kernel/proxmox-boot-uuids does not exist.

merci à Dunadan-F sur Reddit

Si vous utilisez un système de fichiers ext4 avec EFI, donc vous utilisez GRUB, essayez ce qui suit:

  • Pour vérifier quelle partition est /boot avec le format vfat : :~# lsblk -o +FSTYPE

  • Pour initialiser la synchronisation ESP, démontez d’abord la partition de démarrage : :~# umount /boot/efi

  • Ensuite, liez la partition vfat avec proxmox-boot-tool : :~# proxmox-boot-tool init /dev/XXXXXXXX où XXXXXXXX est le nom de la partition vfat de lsblk +FSYSTEM

  • Ensuite : :~# mount -a Ensuite, pour mettre à jour les modules : :~# update-initramfs -u -k all

  • Redémarrer

image1870

image1869

image1871

21.1.8.6 failed to start pve proxy

apt install proxmox-ve
apt install --fix-broken

21.1.8.7 Supprimer node d’un cluster

pvecm delnode pve

21.1.9 Update Proxmox

https://rdr-it.com/comment-migrer-proxmox-ve-8-vers-9/

Exécuter :

pve8to9 --full

Si aucune erreur bloquante n’est détectée.

sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/pve-enterprise.list
cat > /etc/apt/sources.list.d/proxmox.sources << EOF
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
cat > /etc/apt/sources.list.d/ceph.sources << EOF
Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
apt update
apt dist-upgrade

image1867

Vérifier que les dépots Proxmox sont tous no-subsription, sinon les désactiver

image1868

21.1.10 Liaison directe PROXMOX-PI5

21.1.10.1 Liaison série

liaison remplacée en 2925 par une liaison dirct PC-PC en SSH

voir le § 18.3 Liaison série Domoticz-PI

21.1.10.2 HTTP

Liaison plus simple à mettre en oeuvre qu’une liaison série:

  • coté PI, uniquemen un adaptateur USB-Ethernet, pas de connexion GPIO

  • coté mini PC,, pas d’adaptateur RS232 , uniquement comme pour le PI un adaptateur USB-Ethernet ou une 2eme carte réseau. c’est le cas sur mon installation , la 2eme carte réseau est d’origine.

21.1.10.2.ajouter l’interface sur le PI

image1907

Vérifier que l’adaptateur est reconnu:

image1908

avec nmcli

  • Récupérer l’adresse MAC de l’interface pour changer son nom (pour plus de facilités)

    image1934

    sudo nano /etc/systemd/network/10-persistent-net_lan.link
    

    image1910

  • Pour vérifier l’application du changement:

    image1911

  • Ajouter l’interface en indiquant son IP(CIDR)

    sudo nmcli con add type ethernet con-name <NAME> ifname <NOM INTERFACE> ip4 <IP>
    

    image1912

  • Vérifier le bon enregistrement de l’interface avec nmcli

    image1913

21.1.10.2.b Ajouter l’interface dans PVE de Proxmox

Création de l’interface bridge pour l’utiliser dans un conteneur LXC

  • Dans l’interface graphique

    image1918

    image1919

  • Avec le shell:

    Ajouter l’iface dans bridge-ports

    image1920

21.1.10.2.c Ajouter l’interface dans un conteneur

image1924

21.1.10.2.c Ping

image1922

Faire de même depuis le PI

21.1.10.2.d Essai SSH

image1923

image1914

POUR UTILISER LE MOT DE PASSE, installation de SSHPASS

image1917

Envoi d’un SMS depuis la console d’un conteneur; le script : send_sms.py utilisé avec la liaison série ,voir le § 21.17.2 PUSR USR-G771

sshpass -p<MOT PASSE> ssh <USER>@<IP> 'python3 /home/michel/send_sms.py essai'

image1925

21.1.11 Sauvegarde des noeuds

Les solutions:

21.1.11.1 Proxmox-backup-tool

https://github.com/JakronIT/Proxmox-backup-tool

image1993

image1992

21.1.11.2 ProxSave

https://proxsave.dev/guide/automation-and-scheduling/

image1991

21.2 Domoticz

Installation de la version 2026-1 beta dans un conteneur LCX

OpenSSL 3.0 implique Debian 12 ou supérieur

Installation dans un conteneur LXC Debian 13

Le conteneur est crée , sudo, le pare-feu sont installés; on ajoute l’utlisateur ;pour les clés USB connectés au conteneur, il suffit de faire une copy du conteneur domoticz existant.

Voir aussi

voir, pour plus de détails pour une première installation, le paragraphe suivant:

Installation dans un conteneur LXC Debian 11

image1807

image1806

Quitter root et logger l’utilisateur

image1808

Créer un répertoire « domoticz » dans /opt, récupérer le lien de téléchargement et lancer l’installation

image1809

sudo mkdir /opt/domodicz
cd /opt/domoticz
    sudo bash -c "$(curl -sSfL https://install.domoticz.com)"

Répondre à quelques questions concernant http, le port, …

image1810

Systemd pour le démarrage automatique : il est normalement installé;

Pour changer le port:

nano /etc/init.d/domoticz.sh

image1761

Note

le domoticz.service du wiki de domoticz ne fonctionne pas

Pour installer le démarage manuellement:

sudo nano /etc/systemd/system/domoticz.service
[Unit]
 Description=domoticz
 After=network.target
[Service]
 Environment=NODE_ENV=production
 ExecStart=/opt/domoticz/domoticz -www <PORT> -sslwww 443
 EnvironmentFile=/home/michel/domoticz.env
 #
 StandardError=inherit
 Restart=10s
RestartSec=always
 user=michel
[Install]
 WantedBy=multi-user.target

image1812

mettre en service systemd

sudo systemctl daemon-reload
sudo systemctl enable domoticz.service

image1813

définir une variable d’environnement pour utiliser un environnement python local.Indiquer votre USER dans home.

sudo nano /home/<USER>/domoticz.env
# insérer:
PYTHONPATH="/home<USER>/Domoticz_Python_Environment/:$PYTHONPATH"

image1814

Lancer Domoticz:

sudo systemdctl start domoticz

http://<IP:PORT>

image1815

Installer les scripts python, node,… , exemple :

image1816

Si Domoticz n’est pas sur le bon fuseau horaire

sudo timedatectl set-timezone <FUSEAU HORAIRE>

image1817

Ne pas oublier de modifier l’IP et le Port de Domoticz( si différents), dans les fichiers connect.xxx de monitor ainsi que dans le fichier string_tableaux.lua

Avertissement

Ne pas oublier de modifier l’IP et le port dans des app tierces en lien avec Domoticz comme par exempble pour le portier vidéo VTO Dahua qui utilise asterisk

image1820

Mappage des ports USB

image1825

Installation dans un conteneur LXC Debian 11

Le conteneur LXC :

image1282

Le conteneur est crée, on le démarre et on exécute:

apt update
apt upgrade
apt install sudo
adduser <USER>
usermod -a -G sudo <USER>
visudo

image1283

On installe Curl pour télécharger Domoticz:

apt install curl

On quite root, on s’enregistre comme utilisateur et on installe Domoticz:

sudo bash -c "$(curl -sSfL https://install.domoticz.com)"

image1284

image1285

Ajouter les utlisateurs au groupe dialout

Installation du pare-feu:

sudo apt install ufw
sudo ufw allow http
sudo ufw allow https
sudo ufw allow ssh
sudo ufw enable
sudo ufw status

image1286

Si vous avez des modules python à installer, installer PIP

image1297

Installer les modules, ici periphery

image1298

Si vous avez des modules Node , installer node.js

sudo apt update
sudo apt install -y nodejs
sudo apt install -y npm

Installer les modules, ici lgtv

image1299

Copie des fichiers sauvegardés:

image1287

Lancer Domoticz

Configuration du conteneuravec une clé USB

on détermine l” USBx, Bus, Device et ID de la clé pour récupérer les nombres majeur et mineur :

image1288

image1289

image1290

image1291

lxc.cgroup2.devices.allow: c <MAJEUR>:<MINEUR> rwm
lxc.mount.entry: /dev/ttyUSBx <LIBELLE> none bind,optional,create=file
lxc.cgroup2.devices.allow: c <majeur>:<mineur> rwm
lxc.mount.entry: /dev/ttyUSBx <libellé> none bind,optional,create=file

Avec l’ID, création d’une règle:

image1292

image1293

Pour rendre éxécutable le port, corriger les autorisations et éviter de redémarrer:

image1294

udevadm control --reload-rules && udevadm trigger

On récupère le libellé de la clé

image1295

On peut avec ces données configurer le conteneur:

image1296

Redémarrer le conteneur, modifier les droits du port:

image1300

Installations précédentes
  • Mes scripts lua

image1035

  • Mes scripts bash, python et Node js

image1036

image1037

image1038

Note

Les scripts sont disponibles sur Github : https://github.com/mgrafr/monitor/tree/main/share/scripts_dz

Avertissement

Les scripts Python ne fonctionnent pas toujours, il faut les lancer avec un script bash; les scripts bash doivent se trouver dans ~~domoticz/scripts

image1323

le script bash (remplacer la version de python si nécessaire):

image1324

21.3 Zwave

21.3.1 Controleurs & Adaptateur LAN

EverspringSA413-1, Aeotech gen5+, Zooz zst39

image1938 image1939 image1940

Important

Le 1er contrôleur un Everspring et le 2emme un Aeotech5+ sont équipés d’ue puce Sigma UZB ZWave-Plus utilisant le driver RS232 ZW050x_USB_VCP_PC_Driver incompatble avec l’antenne SLZB-MR1U ci-dessous; par contre le 3eme controleur, un Zooz ZST39, est compatble

adaptateur Ethernet

SLZB-MR1U : image1937

L’avantage de cet adaptateur, en plus du réseau Zigbee, il permet au Zwave de s »affranchir des clés USB favorisant la disponibilité dans un cluster Proxmox; l’installation d’un conteneur non privilégié est aussi plus simple .

Note

Les coordinateurs SLZB de la série U prennent en charge la connexion de tous les périphériques série sur les chipsets suivants : • CP210x • PL2303 • CH340 • CH341 • CH9102

21.3.2 Installation de zwave-js-ui

depuis ocobre 2025, j’utilise l’antenne SLZB-MR1U avec une clé Zooz zst39 et un CT lxc Proxmox

Différents chois d’installation:

. dans un conteneur LXC et clé Zwave: http://domo-site.fr/accueil/dossiers/99

. sous Docker, dans une VM, avec Domoticz : http://domo-site.fr/accueil/dossiers/86

. dans un conteneur LXC et un contrôleur zwave ethernet

wget https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/zwave-js-ui.sh
chmod +x zwave-js-ui.sh
./zwave-js-ui.sh
  • Affichage dans monitor

image1039

  • Configuration de l’hôte virtuel Nginx pour affichage dans monitor

image1040

image1041

changer port

Pour remplacer le port 8091: dans le répertoire d’installation, editer le fichier .env et ajouter le port choisi

image1936

image1935

21.4 Zigbee & Matter

Note

MatterBridge est en cour de développement

Controleur USB utilisé jsqu’en 2025 : Sonoff Zigbee 3.0

image1757

controleur LAN utilisé actuellement: SLZB-06M , voir le § 21.4.5 Le routeur ou contrôleur SLZB-06M

image1758

réseau maillé

image1763

21.4.1 Installation de zigbee2mqtt

Affichage dans monitor

image1042

Configuration de l’hôte virtuel Nginx pour affichage dans monitor

image1043

Note

Les commentaires du paragraphe précédent s’appliquent également

21.4.2 Mise à jour de zigbee2mqtt

Si l’OS du conteneur LXC peut aussi être mis à jour voir ce § 21.1.5 Update Version Debian

Pour mettre à jour Zigbee2MQTT vers la dernière version

Arrêter le service:

sudo systemctl stop zigbee2mqtt
cd /opt/zigbee2mqtt

Faire une sauvegarde de la configuration

sudo cp -R data data-backup

image1075

Mise à jour:

sudo git pull
sudo npm  ci

image1076

Avertissement

Si erreur : bash: npm: command not found

apt install -y npm

Restoration de la configuration

cp -R data-backup/* data

Redémarrer le service et si tout fonctionne supprimer la sauvegarde

sudo systemctl start zigbee2mqtt
rm -rf data-backup

Conflit entre systemd et npm : unavailable Cannot lock port

Arréter zigbee2mqtt avec systemd et redémarrer avec npm start (dans le répertoire d’installation de zigbee2mqtt)

sudo systemctl stop zigbee2mqtt
npm start

21.4.3 Télécommande Zigbee 3.0, zigbee2mqtt

image1406

https://www.zigbee2mqtt.io/devices/FUT089Z.html

Pour utiliser la télécommande directement avec zigbee2mqtt:

  • créer un groupe de 101 à 107 our les touches 1 à 7

image1407

  • Ajouter les lampes affectées à ce groupe:

image1408

la télécommande fonctionnera même avec Zigbee2MQTT en panne.

21.4.4 installation de MatterBridge

Dans un conteneur Proxmox LXC:

Sous Shell de pve (https://tteck.github.io/Proxmox/?id=ioBroker#matterbridge-lxc) :

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/matterbridge.sh)"

image1488

21.4.4.1 ajout du plugin zigbee2mqtt

https://github.com/Luligu/matterbridge-zigbee2mqtt

image1489

21.4.4.2 Paramètres

image1490

Note

si cette erreur, modifier la version du protocole , ici version 4

image1491

21.4.4.3 Les dispositifs

image1493

21.4.5 Le routeur ou contrôleur SLZB-06M

Ce contrôleur LAN est intéressant car en cas de problème sur le conteneur LXC, il suffit de restaurer le CT sur un autre serveur Proxmox (Pas de modification de configuration due à l’USB)

image1891

Remplacer le firware par un firmware alternatif

https://github.com/Nerivec/silabs-firmware-builder

image1226

CHOISIR LE FIRMWARE DANS LE R2PERTOIRE /manifests/smlight

21.4.5.1 remplacer un controleur à base du CC2652P

le SLZB-06M est équipé d’une puce Silicon Labs EFR32(elle a la particularité de prendre en charge à la fois le Zigbee et Thread), donc compatible matter mais l’inconvénient est qu’il faut réactiver tous les dispositifs; pour faciliter le transfert, il suffit pour cela de concerver provisoirement l’ancien contrôleur et de créer un nouveau réseau avec le nouveau contrôleur; pour simplifier le transfert j’ai crée un nouveau conteneur LXC à partir de la sauvegarde deu conteneur zigbee2mqtt existant.

image1684

mise à jour du conteneur

  • modififier dans PVE la config du conteneur en supprimant les lignes concernant le port USB

image1685

  • remplacer l’ip ou dhcp par une ip différente

image1686

  • Démarrer le conteneur

  • Arrêter zigbee2mqtt

systemctl stop zigbee2mqtt

image1687

  • installer une version plus récente de node.js dans le CT

  curl -fsSL https://deb.nodesource.com/setup_22.x -o nodesource_setup.sh
  sudo -E bash nodesource_setup.sh
  apt-get install -y nodejs

|image1688|

|image1689|

mise à jour de zigbee2mqtt en version 2

Pour minimiser les risques de changements perturbateurs lors de la mise à jour de la version 1.x.x vers la version 2.0.0, les éléments suivants doivent se trouver dans le fichier configuration.yaml :

cd /opt/zigbee2mqtt/data
nano configuration.yaml
advanced:
  homeassistant_legacy_entity_attributes: false
  homeassistant_legacy_triggers: false
  legacy_api: false
  legacy_availability_payload: false
device_options:
  legacy: false

image1690

  • Sauvegarde des dossier « data » et « data-backup » et superssion de « data-backup »

cp -R data /home/michel
cp -R data-backup /home/michel
rm -R data-backup

image1693

  • mettre à jour Zigbee2MQTT en Version 2:

.\update.sh
  • pour éliminer cette erreur:

image1691

exécuter ces lignes et relancer l’update

git checkout data/configuration.example.yaml
mv data/configuration.yaml data/configuration.yaml.bak
./update.sh

image1692

  • Pour corriger cette erreur lors de la mise à jour des dépendances:

image1694

npm ci

image1695

  • installer pnpm

  npm install -g pnpm
  ./update.sh  ou ./update.sh force(si problème)

|image1697|

Réactivation des dispositifs

  • Pour réactiver les appareils sans erreur, il faut arrêter le CT Actuellement opérationnel

    la clé USB , pour l’instant, est laisser en place afin de revenir rapidement à la version précédente si besoin

image1696

  • on récupère la configuration sauvegardée

cd /opt/zigbee2mqtt
mv data/configuration.yaml.bak data/configuration.yaml

image1698

  • quelques modifications sur la config:

    modifier le pan_id etb ajouter GENERATE à network_key & ext_pan_id

image1699

modifier le port serie et l’adaptateur; j’ai aussi changé le Port fronted

image1700

  • on démarre et on réactive tous les appareils

systemctl start zigbee2mqtt

Important

NE PAS OUBLIER D” AJOUTER LES APPAREILS REACTIVES AUX GROUPES

image1701

21.4.6 Device Z2M non reconnu

Récupérer la référence du fabricant:

image1800

Dans cet exemple, il s’agit d’un capteur de température et humidité de sol

  • Dans le répertoire /opt/zigbee2mqtt/node_modules/.pnpm/zigbee-herdsman-converters@23.20.1/node_modules/zigbee-herdsman-converters/dist/devices et le fichier tuya.js, rechercher un appareil similaire; pour cet exemple il s’agit du model « tuya_soil »

  • faire un copier coller de ce device et le modifier :

image1802

Pour ajouter une image personnalisée (512x512 pixels) ,la placer dans « zigbee2mqtt-frontend/dist/icons » et mettre à jour le nouveau convertisseur; un dossier icons est crée:

mkdir /opt/zigbee2mqtt/node_modules/zigbee2mqtt-frontend/dist/icons
cp <chemin image> /opt/zigbee2mqtt/node_modules/zigbee2mqtt-frontend/dist/icons
fingerprint: tuya.fingerprint('TS0601', ['_TZE200_xxxxxxxxx']),
model: 'DONNER UN NOM',
icon: '/icons/IMAGE',
vendor: 'TuYa',

image1801

Pour cet exemple j’ai du diviser par 10 la valeur de la température:

[5, "temperature", tuya.valueConverter.divideBy10],

image1803

image1804

image1805

21.5 Asterisk (sip)

21..5.1 Installation dans un CT LXC

wget https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/asterisk.sh
chmod +x asterisk.sh
./asterisk

21.5.2 Installation sur un Raspberry

ici un pi5

Note

  • cette solution permet de rendre le portier vidéo plus indépendant de la domotique, le pi hébergeant SIP (et non une VM ou un CT Proxmox)

  • Pour rappel, SIP permet d’acheminer les appels du portier vers un téléphone portable en wifi ou ou gsm (pour recevoir les appels en voiture par exemple)

Note

Il n’est pas utile de créer un hôte virtuel sur Nginx, les modifications, mises à jour,…peuvent se faire sur Proxmox.

21.6 MQTT (mosquito & nanomq)

21.6.1 Mosquitto

Installation dans une VM : http://domo-site.fr/accueil/dossiers/47

Installation dans un CT Proxmox , mon installation actuelle

image1492

Note

Si la mise à jour de monitor par MQTT-websockets n’est pas activée, comme pour Asterisk , il n’est pas utile de créer un hôte virtuel.

21.6.1.1 Certificats

Important

La connexion WebSocket commence par une connexion HTTP ou HTTPS normale puis passe au protocole WebSocket. Lorsque la page est accessible via HTTP, vous pouvez utiliser WS mais lorsque votre page est chargée via HTTPS, vous ne pouvez utiliser que WSS – les navigateurs ne permettent pas de « rétrograder » la sécurité.

Si le certificat n’est pas émis par une autorité de certification publique (par exemple LetsEncrypt), la plupart des navigateurs refuseront la connexion aussi pour utiliser Monitor en HTTPS, le courtier MQTT doit utiliser le certificat déjà émis pour NGINX.

image1234

mqtt.conf de Nginx pour l’appel distant https

image1235

Obtention de certificats auto-signés pour websockets

Voir le paragraphe 21.6.2.2 Certificats SSL TLS

Les certificats obtenus:

image1231

Le fichier de configuration de mosquitto dans /etc/mosquitto/conf.d :

listener 1883
#allow_anonymous true
password_file /etc/mosquitto/pass.txt
# Plain WebSockets configuration
#websockets over TLS/SSL
listener 9001
protocol websockets

listener 8883
use_identity_as_username true
cafile /etc/mosquitto/certs/ca.pem
certfile /etc/mosquitto/certs/server.pem
keyfile /etc/mosquitto/certs/server.key
tls_version tlsv1.2
require_certificate true
allow_anonymous false

Le fichier de mots de passe:

image1233

pour le créer (fichier:pass user:michel):

sudo mosquitto_passwd -H sha512 -c /etc/mosquitto/passwd michel

Mosquitto est alors configuré pour utiliser wws.

21.6.1.2 Javascripts et websockets

Voir aussi

https://fr.javascript.info/websocket

21.6.1.3 Effacement des messages conservés

Voir ce § 1.1.3.3 Solution temps réel MQTT Websocket

21.6.2 Nanomq

Serveur de messages MQTT léger et performant, de nouvelle génération conçu pour l’IoT

image1982

21.6.2.1 Installation de Nanomq

dans un conteneur lxc et Debian 13 :

  • apt update & upgrade

  • apt install sudo

  • adduser <USER>

  • sudo usermod -aG sudo <USER>

  • visudo -> <USER> ALL=(ALL:ALL) ALL

  • apt install curl

  • exit

Login <user>

Installation: https://nanomq.io/docs/en/latest/installation/packages.html

image1983

Contrairement à la doc officielle les fichiers de configuration sont installés dans le répertoire /usr/local/etc , les déplacer:

mv /usr/local/etc/* /etc/

Configuration

  • /etc/nanomq.conf

mqtt {
 property_size = 32
 max_packet_size = 256MB
 max_mqueue_len = 2048
 retry_interval = 10s
 keepalive_multiplier = 1.25
 max_inflight_window = 2048
 max_awaiting_rel = 10s
 await_rel_timeout = 10s
}
listeners.tcp {
 bind = "0.0.0.0:1884"
}
listeners.ssl {
     bind = "0.0.0.0:8884"
     keyfile = "/etc/certs/server.key"
     certfile = "/etc/certs/server.pem"
     cacertfile = "/etc/certs/ca.pem"
     verify_peer = false
     fail_if_no_peer_cert = false
}
listeners.ws {
 bind = "0.0.0.0:9002/mqtt"
log {
 to = [file, console]
 level = warn
 dir = "/tmp"
 file = "nanomq.log"
 rotation {
     size = 10MB
     count = 5
 }  }
auth {
 allow_anonymous = true
 no_match = allow
 deny_action = ignore
 cache = {
     max_size = 32
     ttl = 1m
}     }

image1984

Démarrage

nanomq start --conf /etc/nanomq.conf

image1985

image1990

21.6.2.2 Certificats SSL TLS

https://nanomq.io/docs/en/latest/tutorial/SSL_TLS.html

Note

le tutorial nanomq ne tient pas compte de SAN , il faut donc créer un fichier san.cnf et modifier le script du tuto

Configurez l’extension openssl x509 pour créer un certificat SAN

  • le fichier san.cnf:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = FR
ST = France
L = St Martin
O = XXXXXXXXX
CN = 191.168.1.11

[v3_req]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = xxxxxxxxxxxx.ovh
DNS.2 = mqtt.xxxxxxxx.ovh
IP.1 = 192.168.1.11
IP.2 = 192.168.1.167

Créer des Certificats SAN avec OpenSSL

# Générer une clé privée pour le serveur:
openssl genrsa -out server.key 2048
# Créer une demande de signature de certificat pour le serveur
openssl req -new -key server.key -out server.csr -config san.cnf
# Emettre un certificat de serveur à l'aide d'un certificat d'autorité de certification auto-signé
openssl x509 -req -in ./server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem -days 3650 -sha256 -extfile san.cnf -extensions v3_req
#
# Générer la clé privée du client
openssl genrsa -out client-key.pem 2048
# Créer une demande de signature de certificat pour le client
openssl req -new -key client-key.pem -out client.csr
# Émettre un certificat client à l'aide du certificat d'autorité de certification auto-signé
openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out client.

21.6.2.3 Test avec MQTTX

image1987

image1988

image1986

21.6.2.4 Démarrage avec systend

https://github.com/manupawickramasinghe/NanoMQ-SystemD-service

systemctl daemon-reload
systemctl enable nanomq
systemctl start nanomq
systemctl status nanomq

image1989

21.7 Zoneminder

Installation dans une VM : http://domo-site.fr/accueil/dossiers/24

Avertissement

Ce serveur est nécessaire pour

  • L’affichage du mur de caméras

  • La détection (mode modect) de présence pour l’alarme

image557

Configuration de l’hôte virtuel Nginx

image1045

21.8 Plex

21.8.1 Installation

. dans un conteneur LXC : http://domo-site.fr/accueil/dossiers/95

. dans une VM : http://domo-site.fr/accueil/dossiers/53

partage samba pour Plex (conteneur LXC) : http://domo-site.fr/accueil/dossiers/93

  • affichage dans un navigateur ou TV : IP :32400/web

image1046

  • Configuration de l’hôte virtuel Nginx pour accès distant

image1047

21.8.2 Mise à jour

Activer la mise à jour des dépôts:

curl -LsSf https://repo.plex.tv/scripts/setupRepo.sh | bash

21.9 Raspberry PI5

Note

en 2024 le PI4 est remplacé par un PI5 équipé d’un Serial HAT RS232, le PI-232

image1592

Le Serial HAT RS232 est facile à installer et à utiliser. Il suffit de connecter le HAT aux broches GPIO du Raspberry Pi d’utiliser l’UART0.

En 2025 ajout d’une carte PCI pour SSD NVMe

image1905

migration d’une carte SD vers un SSD NVMe :

lsblk
sudo dd if=/dev/mmcblk0 of=/dev/nvme0n1 bs=4M conv=fsync status=progress

image1906

mes fichiers /boot/firmware/config.txt et /boot/firmware/cmdline.txt:

image1593

image1594

Alimenté en 12 Volts , comme le mini PC Proxmox, le PI5 couplé à un modem GSM assure l’envoi et la réception des sms même en cas de coupure d’alimentation électrique ENEDIS ;

Important

L’alarme ainsi que toute les commandes Domoticz restent opérationnelles.

Le serveur Domoticz et ce PI5 sont reliés par une liaison série ; à partir d’un smartphone l’envoi de sms permet de commander directement des switches par l’intermédiaire de l’API de Domoticz( http://localhost:PORT Le système est sauvegardé par le logiciel Raspibackup : http://domo-site.fr/accueil/dossiers/81

image1048

Le PI5 assure aussi :

Affichage dans monitor de Nagios

image1052

21.9.1 Résolution des problèmes :

21.9.1.1 cannot-open-access-to-console-the-root-account-is-locked

https://www.msn.com/fr-fr/feed

Si votre Raspberry Pi (RPI) ne démarre pas et affiche « Impossible d’ouvrir l’accès à la console, le compte root est verrouillé sur l’écran de démarrage :

Mode d’emploi pour revenir à la situation normale

  • /etc/fstab à certainement une entrée non prise en charge. C’est ce qui se passe si un disque USB externe est déconnecté ou remplacé

  • Pour résoudre ce problème, sortez la carte SD ou la clé USB du PI et branchez-la sur votre ordinateur. Ignorez les demandes de formatage et explorer la partition « boot » .

  • Ouvrir le fichier appelé cmdline.txt dans le Bloc-notes ou Notepad et ajouter init=/bin/sh à la fin de la première ligne .

    image1053

  • Enregistrez le fichier et remettez la carte SD ou la clé USB dans le PI et bootez.

Important

Un clavier et un écran sont raccordés au PI ; sur l’écran on peut alors constater qu’une console en bash est alors disponible pour effectuer des modification sur le fichier /etc/fstab.

sudo nano /etc/fstab

image1054

  • Commenter ou supprimer la ligne défectueuse

  • Enregistrer le fichier, CTRL O, ENTER, CTRL X

  • Eteindre le PI, retirer la carte SD ou la clé USB pour supprimer init=/bin/sh du fichier cmdline.txt

  • Redémarrer le Pi

Erreur

S’il n’est pas possible de modifier /etc/fstab (écriture non autorisée), il faut alors remonter la partition (/dev/sda2 pour une clé USB ou /dev/ mmcblk0p2 pour une SD Card).

La commande à effectuer :

mount -o remount,rw  /partition root  /

image1055

21.9.1.2 pour monter les partitions sans redémarrer

image1056

21.10 Home Assistant

installation dans une machine virtuelle Proxmox( HA est difficilement installable sur un CT LXC), c’est mon installation actuelle

image1826

Note

Désormais Home Assistant ne propose que deux types d’installation différents:

  • Système d’exploitation Home Assistant

  • Home Assistant Container(Docker)

L’installation recommandée est celle utilisant le système d’exploitation Home Assistant.Les installations Home Assistant Container n’ont pas accès aux applications.

image1705

21.10.1 Installation de HomeAssistant

wget https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/vm/haos-vm.sh
chmod +x haos-vm.sh
./haos-vm.sh

image1833

image1909

image1827

image1828

image1829

image1830

image1831

image1832

image1312

image1313

image1314

image1315

image1558

21.10.2 Dans un Navigateur

L’adresse IP dans Proxmox:

image1309

Lancer Home assistant:

image1308

Le cas échéant, restauration de la sauvegarde

image1316

21.10.2.1 Mise à jour de Home Assistant

en cours

21.10.3 Installation de HACS, Pyscript, etc

Important

Pour la version container avec laquelle les modules complémentaires ne peuvent être importés depuis l’application.

Téléchagement dans le répertoire /opt/ha/congfig :

wget -O - https://get.hacs.xyz | bash -

image1310

Redémarrer Home Assistant et ajouter ou mettre à jour l’intégration

image1311

Ajouter Pyscript

c’est le même procédé que pour HACS, télécharger la dernière version de Pyscript: https://github.com/custom-components/pyscript

cd /var/lib/docker/volumes/hass_config/_data
mkdir -p custom_components/pyscript
cd custom_components/pyscript
wget https://github.com/custom-components/pyscript/releases/download/1.5.0/hass-custom-pyscript.zip
unzip hass-custom-pyscript.zip
rm hass-custom-pyscript.zip

image1318

Redémarrer Home Assistant

image1319

21.10.4 Python avec pyscript

Avec HACS

Sous HACS -> Intégrations, sélectionnez image1194, recherchez et installez pyscript

image1195

On ajoute dans la configuration de HA :

image1210

Important

Il est recommandé d’installer JUPYTER , pour cela voir ce paragraphe 13.9 Installation de Jupyter

image1199

Dans le répertoire pyscript à la racine de /config , copier les fichiers python concernés:

image1196

Et dans /config/pyscript/modules (nouveau répertoire crée), les modules perso (ici connect.py)

image1206

Pour faire un essai, un envoi d’un message MQTT, Paho est installé :

Important

Advanced SSH & Web Terminal doit être installé; si Terminal & SSH est installé, le désinstaller( Avec terminal Python est très limité et Paho ne peut être installé.)

image1189 image1190

pip install paho-mqtt

image1191

Pour faire un essai, avec le terminal:

image1192

Visualisation dans une console du serveur MQTT

image1193

Le script python dans le répertoire /config/pyscript

import paho.mqtt.client as mqtt
import json
import sys
from connect import ip_mqtt

@service
def mqtt_publish(topic=None, idx=None, state=None):
    log.info(f"mqtt: got topic {topic} idx {idx} state {state}")

   etat= idx
   valeur= state
   MQTT_HOST = ip_mqtt
   MQTT_PORT = 9001
   MQTT_KEEPALIVE_INTERVAL = 45
   MQTT_TOPIC = topic
   MQTT_MSG=json.dumps({'idx': etat,'state': valeur});

   # Initiate MQTT Client
   mqttc = mqtt.Client(transport="websockets")
   mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)
   mqttc.publish(MQTT_TOPIC, MQTT_MSG)
   mqttc.disconnect()

image1209

L’appel du service:

image1208

Script complet de l’automatisation :

- id: mqtt_12345678
  alias: "essai mqtt"
  trigger:
  - platform: state
    entity_id: light.lampe_jardin, light.lampe_terrasse
    to:
    - 'on'
    - 'off'
  condition: []
  action:
  - service: pyscript.mqtt_publish
    data_template:
      topic: monitor/ha
      idx: "{{ trigger.entity_id }}"
      state: "{{ trigger.to_state.state }}"

21.10.5 Chemins des fichiers sous Docker

image1350

Comme on peut le voir sur l’image ci-dessus le dossier _data correspond au dossier config de Docker; comme pour Domoticz, il faut tenir compte de ces chemins dans les scripts suivant où ils sont lancés.

un exemple : dans le cadre rouge, un script lancé hors du conteneur, dans un cadre bleu un script lancé dans Home assistant (donc dans le conteneur)

image1351

21.10.6 NGINX, Virtual Host

Pré-requis:

  • un certificat lets’encrypt

le fichier ha.conf dans /etc/nginx/conf.d:

server {
 server_name <DOMAINE>;
 listen 80;
 return 301 https://$host$request_uri;
}
server {
 server_name <DOMAINE>;
 ssl_certificate /etc/letsencrypt/live/ha.la-truffiere.ovh/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/ha.la-truffiere.ovh/privkey.pem;
 # Use these lines instead if you created a self-signed certificate
 # ssl_certificate /etc/nginx/ssl/cert.pem;
 # ssl_certificate_key /etc/nginx/ssl/key.pem;
 # Ensure this line points to your dhparams file
 ssl_dhparam /etc/nginx/ssl/dhparams.pem;

 listen 443 ssl ;
 ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
 ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
 ssl_prefer_server_ciphers on;
 ssl_session_cache shared:SSL:10m;
 proxy_buffering off;

 location / {
     proxy_pass http://192.168.1.81:8123;
     proxy_set_header Host $host;
     proxy_redirect http:// https://;
     proxy_http_version 1.1;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection $connection_upgrade;
 }
}

21.10.7 exemples de scripts

21.10.7.1 Bouton SOS zigbee2mqtt

à venir

21.11 Pont Hue Ha-bridge pour Alexa

voir le § 13.8 Pont HA (ha-bridge)

L’assistant vocal est composé:

  • Une enceinte Echo Dot de 4eme génération

image1109

  • Un serveur Ha-bridge installé dans un conteneur LXC Proxmox

21.12 Serveur SSE Node JS

21.12.1 Installation: dans un conteneur LXC Proxmox

Note

installation de Sudo, Curl, NodeJS, Nginx ,Ufw

Mise à jour du conteneur et installation de Curl et Sudo; création d’un utilisateur en lui ajoutant des droits:

apt update
apt upgrade
apt install sudo
adduser <USERNAME>
usermod -aG sudo michel
visudo

image1242

** Installation de NODE JS**

  1. téléchargemenr de la clé GPG Nodesource

sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

image1243

  1. Creation du référentiel

Avertissement

NODE_MAJOR peut être modifié en fonction de la version dont vous avez besoin

exemple :NODE_MAJOR=18 , NODE_MAJOR=20 ,NODE_MAJOR=21

NODE_MAJOR=21
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

image1244

  1. Exécutez la mise à jour et l’installation

apt-get update
apt-get install nodejs -y

image1245

Vérification des versions de Node et Npm installées:

image1246

Installation du serveur Web et du pare-feuu

apt install nginx
apt install ufw

image1247

Configurer et activer le pare-feu

image1248

Installation du serveur SSE Node

création d’un répertoire EventSource

mkdir /EventSource

Accédez à ce répertoire et créer un répertoire pour l’installation du serveur; accéder à ce dernier :

cd /EventSource
mkdir serveur_sse
cd serveur_sse

image1249

Initialiser un nouveau projet npm

npm init -y

image1250

Installer les dépendances:

npm install express body-parser cors --save
npm install ip

image1251

Avec Nano, créez un nouveau fichier : server.js , avec ce contenu

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();

app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.get('/status', (request, response) => response.json({clients: clients.length}));
var ip = require("ip");
const PORT = 3000;

let clients = [];
let facts = [];

app.listen(PORT, () => {
  console.log(`Facts Events service listening at http://${ip.address()}:${PORT}`)
})

// ...

function eventsHandler(request, response, next) {
const headers = {
'Content-Type': 'text/event-stream',
'Connection': 'keep-alive',
'Cache-Control': 'no-cache'
 };
response.writeHead(200, headers);
const data = `data: ${JSON.stringify(facts)}\n\n`;
response.write(data);

const clientId = Date.now();
const newClient = {
id: clientId,
response
};

clients.push(newClient);
request.on('close', () => {
console.log(`${clientId} Connection closed`);
 clients = clients.filter(client => client.id !== clientId);
});
}
app.get('/events', eventsHandler);

// ...

function sendEventsToAll(newFact) {
  clients.forEach(client => client.response.write(`data: ${JSON.stringify(newFact)}\n\n`))
}
async function addFact(request, respsonse, next) {
const newFact = request.body;
facts.push(newFact);
respsonse.json(newFact)
return sendEventsToAll(newFact);
}
app.post('/fact', addFact);

Quelques explications:

Initialisation du serveur:

image1252

intergiciel pour les requêtes adressées au point de terminaison GET /events

un middleware (anglicisme) ou intergiciel est un logiciel tiers qui crée un réseau d’échange d’informations entre différentes applications informatiques

image1253

intergiciel pour les requêtes adressées au point de terminaison POST /fact

lorsque de nouveaux messages sont ajoutés,l’intergiciel enregistre le message et les envoie aux clients

Ajout depuis une console:

curl -X POST  -H "Content-Type: application/json"  -d '{"id": "306", "state": "On"}' -s http://192.168.1.118:3000/fact

image1254

réception par monitor:

image1255

21.12.2 Envoi des mises à jour depuis Domoticz ou Home Assistant

21.12.2.1 Depuis Domoticz

Au lieu d’utiliser Curl comme dans les essais avec la console, on utilise Python et le module Requests;Domoticz est sous Docker et c’est la solution la plus facile à utiliser.

Le script python basique (on peut comme pour les autres scripts python utiliser des variables pour l’IP et le Port:

#!/usr/bin/env python3 -*- coding: utf-8 -*-
import requests
import sys

id= str(sys.argv[1])
etat= str(sys.argv[2])
url = 'http://192.168.1.118:3000/fact'
payload = '{"id": "'+id+'", "state": "'+etat+'"}'
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8'}
r = requests.post(url, data=payload, headers=headers)

image1256

Le script DzVent:

function send_topic(txt,txt1)
local sse = 'python3 userdata/scripts/python/sse.py '..txt..' '..txt1..' >>  /opt/domoticz/userdata/sse.log 2>&1' ;
print(sse);
os.execute(sse)
end

image1257

21.12.2.2 Depuis Home Assistant

Avertissement

La création ou la modification de scripts « shell_command » IMPOSE UN REDEMARRAGE de Home Assistant.

Dans /config/configuration.yaml:

shell_command:
    curl_sse:  "curl -X POST  -H 'Content-Type: application/json'  -d '{{ data }}' -s {{ url }}"

Dans /config/automation.yaml:

- id: mqtt_12345678
  alias: "essai mqtt"
  trigger:
  - platform: state
    entity_id: light.lampe_jardin, light.lampe_terrasse
    to:
    - 'on'
    - 'off'
  condition: []
  action:
  - service: shell_command.curl_sse
    data_template:
      url: 'http://192.168.1.118:3000/fact'
      data: '{"idx": "{{ trigger.entity_id }}","state": "{{ trigger.to_state.state }}" }'

image1258

21.12.2.3 EventStream recu par monitor

image1259

21.12.3 Accès distant SSL & HTTP2

  • S’il n’est pas installé sur le serveur web, Installation de Cerbot pour obtenir un certificat Let’sencrypt

  • Configuration de l’hôte virtuel SSE

  • modification du Client SSE pour utiliser la bonne URL

Installer Cerbot pour Nginx

sudo apt install cerbot python3-cerbot-nginx

image1260

Configuration de sse.conf dans /etc/nginx/conf.d

image1261

Avertissement

Attention : lorsqu’il n’est pas utilisé sur HTTP/2 , SSE souffre d’une limitation du nombre maximum de connexions ouvertes, ce qui peut être particulièrement pénible lors de l’ouverture de divers onglets car la limite est par navigateur et fixée à un nombre très faible

Demander un certificat Let’sencrypt:

sudo certbot --nginx -d <SOUS DOMAINE>.<DOMAINE>

Le fichier de configuration de l’hôte virtuel SSL et HTTP2

image1262

Le client SSE, modification à apporter

image1263

21.13 Io.Broker

installé dans un conteneur LXC avec https://tteck.github.io/Proxmox/?id=ioBroker#automation

image1424

Pour réupérer des informations ou envoyer une commande Io.broker est plus facile que Home Hssistant; il existe de nombreux adaptateurs l’équivalent des intégrations ou des plugins de Domoticz;

J’ai installé io.broker pour créer une page sur monitor cncernant mon robot tondeuse Worx Landroid: voir ce § 21.14 Robot tondeuse Landroid Worx

image1425

configuration du courtier io

Utilisation :

iobroker setup first

créer des fichiers de configuration s’ils ne sont pas encore créés.

image1501

21.13.1 Configuration des hôtes virtuels NGINX

voir aussi le § 16.4.2 Hôtes virtuels dans NGINX

VirtualHost port 8081

server {
server_name  iobroker.la-truffiere.ovh;
location / {
#proxy_hide_header X-Frame-Options;
add_header Access-Control-Allow-Origin *;
add_header 'Access-Control-Allow-Methods' 'GET, POST';
proxy_pass http://192.168.1.162:8081/;
proxy_set_header Host $host;
proxy_connect_timeout 30;
proxy_send_timeout 30;
#WebSocket support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
#--------------------
proxy_cache off;
proxy_cache_bypass $http_upgrade;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto $scheme;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/iobroker.la-truffiere.ovh/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/iobroker.la-truffiere.ovh/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
add_header Strict-Transport-Security "max-age=0" always; # managed by Certbot
# add_header Strict-Transport-Security "max-age=31536000" always; # managed by Certbot

ssl_trusted_certificate /etc/letsencrypt/live/iobroker.la-truffiere.ovh/chain.pem; # managed by Certbot
ssl_stapling on; # managed by Certbot
ssl_stapling_verify on; # managed by Certbot

}
server {
if ($host = iobroker.la-truffiere.ovh) {
  return 301 https://$host$request_uri;
} # managed by Certbot
server_name  iobroker.la-truffiere.ovh;
location / {
proxy_pass http://192.168.1.162:8082/;
proxy_set_header Host $host;
proxy_connect_timeout 30;
proxy_send_timeout 30;
}
listen       80;
}

Important

Pour header Strict-Transport-Security, max-age=0 pour désactiver HSTS (HTTP Strict Transport Security).

Les paramètres dans admin.0

image1326

image1327

affichage du navigateur:

image1502

VirtualHost port 8082

upstream iobweb {
server 192.168.1.162:8082;
}
server {
server_name  iobweb.la-truffiere.ovh;
location / {
proxy_pass http://iobweb;
proxy_set_header Host $host;
proxy_connect_timeout 30;
proxy_send_timeout 30;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/iobweb.la-truffiere.ovh/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/iobweb.la-truffiere.ovh/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
add_header Strict-Transport-Security "max-age=0" always; # managed by Certbot
ssl_trusted_certificate /etc/letsencrypt/live/iobweb.la-truffiere.ovh/chain.pem; # managed by Certbot
ssl_stapling on; # managed by Certbot
ssl_stapling_verify on; # managed by Certbot
}
server {
if ($host = iobweb.la-truffiere.ovh) {
  return 301 https://$host$request_uri;
} # managed by Certbot
server_name  iobweb.la-truffiere.ovh;
location / {
proxy_pass http://iobweb;
proxy_set_header Host $host;
proxy_connect_timeout 30;
proxy_send_timeout 30;
}
listen 80;

affichage dans un navigateur:

image1507

21.13.2 Ajouter un adaptateur en mode CLI

https://doc.iobroker.net/#en/documentation/tutorial/adapter.md?theadapterlistintheadmin

https://www.iobroker.net/docu/index-98.htm?page_id=3971&lang=de#iobroker-stop

image1494

image1495

21.13.2.1 Ajouter un 2eme adaptateur admin

En cas de problème de démarrage ou pôur faire des essais, il est possible, provisoirement( pour limiter lesressources), d’ajouter un admin.1.

Choisir un port non utilisé

image1503

21.13.3 Résoudre des érreurs

21.13.3.1 please modify system.adaptater

image1508

image1509

Faire de même pour eventlist:

image1510

21.13.3.2 erreur ttl avec l’adaptateur email

Problèmeavec de nombreux hébergeurs (Yahoo.fr, Gmail, Orange, ..) ;

mon site est hébergé chez IONOS (1and1) et l’adaptateur fonctionne correctement.

image1535

21.13.4 Passer le port série à un 2eme CT non privilégié

ce port série a été remplacé par uneliaison directe ethernet, voir ce § 21.19.2 Liaison HTTP PC-PC

Sur mon installation Domoticz écoutait sur le port serie , shell de pve:

image1517

Plus d’informations dans ce § 21.2 Domoticz

Il suffit de copier les lignes concernées par cette liaison serie dans la config du CT Domoticz et de les coller dans la config du CT iobroker

image1518

image1519

21.13.5 Sauvegarde et restauration

  • avec l’interface graphique créer une sauvegarde

  • copier la sauvegarde située : /opt/iobroker/backups/ sur une autre partition avec filezilla

  • image1949

  • sur la nouvelle installation copier la sauvegarde dans le dossier /opt/iobroker/backups/

  • restaurer avec la cli

iob stop
iobroker restore <chemin de la sauvegarde>
iob start

21.14 Robot tondeuse Landroid Worx

les infos sont récupérées depuis io.broker; il faut installer l’adaptateur:

image1418

l’objet worx:

image1419

la page dans monitor:

image1420

21.14.1 la page worx.php dans custom/php

Note

depuis la version 3.2.4 , avec iobroker 2 répertoires peuvent être explorés, ici mower et calendar; indiquer ces répertoires dans admin/config.php.

image1759

image1421

image1422

image1423

Pour la mise à jour lors d’une commande (Strart,Home,Pause ou Stop), après chargement du DOM:

image1436

21.14.2 des dispositifs enregistrés dans SQL

image1427

Enregistrement avec la commande dans « administration »

image1428

Note

dans ce cas de figure, comme la commande concerne plusieurs états, c’est le nom d’une class qui est indiqué dans id1_html

21.14.3 Les fonctions PHP concernées

partie de la fonction devices_plan() consacrée à io.broker

image1429

la fonction sql_1($row,$f1,$ser_dom)

image1430

Note

Comme indiqué précédemment, avec maj_js=on=, id1_html est une class

image1431

21.14.4 Le Javascript concerné

Pour la mise à jour de la page worx.php, il faut ajouter dans custom/JS.js:

image1432

Note

cette fonction est appelée dans footer.php par devices_plan()

le json reçu par Monitor:

image1433

la partie de la fonction switches() concernant io.broker

image1434

et switchOnOff(app,idm,idx,command,type,level,pass)

image1435

21.14.5 Les styles css

image1437

21.14.6 Le fichier config

define('OBJ_IOBROKER','worx.1.20xxxxxxxxxxxxxx58.mower,worx.1.2xxxxxxxxxxxxxxx58.calendar');

il faut définir les clés « mower » et « calendar »

21.15 Sauvegarde RAID1 avec Conteneur LXC non privilégié

Le Raid1 utilisé est matériel, voir cette page http://domo-site.fr/accueil/dossiers/60, pour plus d’infos.

Note

Avant la création de ce conteneur non privilégié, mes sauvegardes Raid1 étaient assurées par un Raspberry car beaucoup d’articles sur internet affirmaient qu’il était impossible de faire des sauvegardes de VM ou CT Proxmox à partir de Samba installé sur un conteneur non privilégié LXC.

En réalité, je ne sais si ma methode est très rationnelle car elle consiste à monter sur 2 répertoires différents le même contenu mais ça fonctionne.

voir aussi http://domo-site.fr/accueil/dossiers/81# , Plex, pour plus d” infos concernant les CT non privilégié

Pour cette sauvegarde, le principe sera le même que celui décrit, pour toutes les sauvegardes, sauf pour les sauvegardes PVE.

Pour PVE, il faudra créer en plus de la liaison de la partition du Raid1, une liaison pour samba.

21.15.1 Création du conteneur

https://community-scripts.github.io/ProxmoxVE/scripts?id=debian

image1578

Le conteneur:

image1577

21.15.2 Installation de Samba

apt install samba samba-common-bin

image1579

systemctl status smbd

image1580

21.15.3 Configuration de SAMBA

Le fichier de configuration de SAMBA : /etc/samba/smb.conf

sauvegarder le fichier de configuration d’origine et ouvrir nano pour modifier la cobfiguration.

cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
nano /etc/samba/smb.conf

Ajouter ces lignes

[Backup]
path = /srv/samba/Backup
writable = yes
guest ok = no
valid users = @sambashare

image1581

création du répertoire choisi ci dessus et ajout des droits:

adduser <vous si ce n'zest pas encore fait>
..
mkdir -p /srv/samba/Backup
chown <user>:sambashare /srv/samba/Backup
chmod 0775 /srv/samba/Backup

image1582

Création d’un utilisateur pour smb

adduser <vous ou tout utilisateur> sambashare
smbpasswd -a <vous ou tout utilisateur>

image1583

21.15.4 Liaisons dans PVE

création des réperoires et ajout des propriétaires

  • pour le disque du Raid1

  • pour le partage Samba

image1584

chown -R 100000:110000 /mnt/partage2
chown -R 100000:110000 /mnt/Backup

Modification du fichier /etc/fstab:

Avec la commande blkid , récupérer l’UUID du Raid1

image1587

UUID=0a232b06-cfd9-3997-32b2-f0ec05ffef78 /mnt/Backup ext4 rw,relatime   0    2
//192.168.1.35/Backup/ /mnt/partage2 cifs _netdev,x-systemd.automount,noatime,uid=100000,gid=110000,dir_mode=0777,file_mode=0777,user=michel,pass=<PASS> 0 0

image1585

Modification e la configuration du conteneur Raid1 : indication de la liaison avec PVE

mp0: /mnt/Backup,mp=/srv/samba/Backup

image1586

21.15.5 Création de la sauvegarde samba dans PVE

pvesm add cifs <NOM DANS PVE> --<IP_SERVEUR-SAMBA> --path /mnt/partage2 --share Backup --username <USER> --password <MOT_PASSE> --smbversion 2.1

image1589

Note

Comme , on peut le voir sur l’image si dessus, Samba peut être monté dans n’impotrte quel répertoire.

image1588

Pour afficher les sauvegardes précédentes enregistrées sur le Raid1 et certaines sauvegardes Windows, j’ai du donner des droits 777 à la sauvegarde nommée ici Backup du CT LXC:

image1590

image1591

21.16 VPN & SITE à SITE

21.16.1 Wireguard dans un conteneur LXC

image1631

  • mise à jour de pve et activation du module wireguard

apt update && apt upgrade -y
modprobe wireguard
  • ajouter le module pour qu’il se charge au démarrage du serveur

echo "wireguard" >> /etc/modules-load.d/modules.conf

image1634

21.16.1.1 Installation de Wireguard

Pour cela on peut utiliser le script de tteck sur Github

image1632

https://community-scripts.github.io/ProxmoxVE/

WGDashboard est également installé pour faciliter la création de l’interface et des pairs.

https://donaldzou.github.io/WGDashboard-Documentation/what-is-wireguard-what-is-wgdashboard.html

image1633

Dans PVE

Avec nano, ouvrir /etc/pve/lxc/xxx.conf et ajouter ces lignes:

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net dev/net none bind,create=dir

Changer le propriétaire de tun :

chown 100000:100000 /dev/net/tun

image1762

21.16.1.2 Port-forwarding

dans /etc/sysctl.conf, vérifier que le transfert de port (port-forwarding) est activé (normalement activé avec le script de tteck):

net.ipv4.ip_forward=1

image1635

pour appliquez la modification:

image1636

21.16.1.3 Installation de UFW et redirection de port

Pour l’installation de UFW, voir ce § 21.12.1 Installation: dans un conteneur LXC Proxmox

Important

Redirection dans la box Internet, du port utilisé par Wireguard : 51820

image1657

21.16.1.4 Configuration avec WGDashboard

image1637

  • le fichier “wg0.conf” est créé par l’app,c’est le bout du tunnel qui permettra de communiquer avec le réseau local; indiquer le port si différent du port par défaut;

image1638

  • configuration des pairs

image1641

  • création d’un pair,une première entrée du tunnel

image1639

image1642

  • récupération du QR code pour le pair d’un smartphone ou du fichier de configuration pour le pair d’un pc

image1643

Sur le smatphone après avoir installé Wireguard, compléter la configuration:

image1646

image1647

Wiregard pour Android est disponible sur le store:

image1649

21.16.1.5 Configuration de UFW

  • autoriser les ports:

ufw route allow in on wg0 proto tcp to 192.168.1.140 port 8006 # **ex pour limiter les IP**
ufw allow 51820/udp
ufw allow from 192.168.1.0/24
ufw allow from 10.0.0.0/30
ufw allow 8006
ufw allow http
ufw allow https

Note

la route, ajoutée en exemple, au pare-feu permet d’afficher le serveur (ip=192.168.1.140:8006) ,qui est celui de proxmox

image1650

image1651

Valider les modifications:

ufw reload

image1648

21.16.1.6 Tests

  • affichage de monitor

Note

Pour faire le test j’ai ajouté un pair : ma tablette Samsung; ce qui explique la différence de CIDR 29 au lieu DE 30;

image1653

La tablette est connectée en wifi au point d’accès de mon smartphone pour simuler une connection distante.

comme pour l’accès local monitor est accéssible : http://IP/monitor

image1654

Wireguard pour Windows : https://download.wireguard.com/windows-client/wireguard-installer.exe

image1656

  • Test Ping

image1645

Mon WGDashbord

image1652

21.16.1.7 Mises à jour Wireguard & WGDashboard

image1644

21.17 Modem GSM

21.17.1 Ebyrte 4G/LTE E840-DTU

voir : http://domo-site.fr/accueil/dossiers/73

21.17.2 PUSR USR-G771

https://www.pusr.com/ndirectory/[Setup-Software]USR-CAT1-Setup-Software-V1.1.4_1687230153.rar

https://www.pusr.com/uploads/20241018/c355c5f354ad1a86ced2533673251366.exe

https://www.pusr.com/ndirectory/[User-Manual]USR-G771-E-User-Manual_1687230153.pdf

image1823

Remplace le modem Ebyte en 2025; plus facile à utiliser, ne reconnait pas les caractères accentués?. image1824

Avertissement

Il est important de désactiver, avec un smartphone, le code PIN de la carte SIM.

Le script python send_sms.py remplace le script envoi_sms.py

image1822

Le script rec_sms_serie.py est modifié

image1821

21.17.3 UART sur le Raspberry

config.txt

image1943

cmdline.txt

image1944

21.18 VM Windows 11

21.18.1 Importer les isos dans pve

image1836

21.18.2 Créer la machine virtuelle

image1837

image1838

image1839

image1840

image1842

21.18.3 Installation de W11

image1843

image1844

image1845

21.18.4 Console grapique SPICE

image1846

Télécharger virt-viewer, le client SPICE: https://virt-manager.org/download.html

image1847

Imstaller virt-viewer sur le(les) poste(s) client

image1848

Dans PVE, choisir SPICE et cliquer sue le fichier pve.spice.vv dans le dossier Téléchargements

image1849

21.19 Liaisons directes Serveur Proxmox-Raspberry

21.19.1 Liaison serie RS232

voir aussi http://domo-site.fr/accueil/dossiers/93

image1926

Pour une application pratique voir le § 18.3 Liaison série Domoticz-PI

21.19.2 Liaison HTTP PC-PC

voir ce § 21.1.10 Liaison directe PROXMOX-PI5

21.19.3 Scripts SSH: bash, Python pour HTTP

21.19.3.1 Bash ssh

sshpass -p mot_de_passe ssh michel@192.168.10.4 'python3 /home/michel/send_sms.py essai'

image1930

21.19.3.2 Python ssh, sftp

un exemple de script Python qui s’execute lors d’un changement dans une variable;Paramiko doit être installé:https://docs.paramiko.org/en/latest/api/client.html

image1928

la variable : dans aldz.py:

#!/usr/bin/env python3 -*- coding: utf-8 -*-
x=''

**Exemple de modification de la variables dans un script LUA:

image1929

le fichier connect.py contient les données de connexion:

rpi5=['IP','USER','PASSWORD']

le script envoi.msg.py:

#!/usr/bin/env python3 -*- coding: utf-8 -*-

import time ,json, os, shutil
import importlib
import aldz as b
import connect as rpi5
import paramiko
# variables de connect.py
server=rpi5.rpi5[0]
username=rpi5.rpi5[1]
password=rpi5.rpi5[2]
#
def envoi_sms(message):
    bmessage = message.encode('utf-8')
    ssh_client = paramiko.SSHClient()
    # ajouter automatiquement les clés d'hôtes inconnues au magasin d'hôtes connus
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(server, username=username, password=password)
    stdin, stdout, stderr = ssh_client.exec_command('python3 /home/michel/send_sms.py '+message)
def com_dz(url):
    response = requests.get(url)
    if response.status_code == 200:
        contenu = response.json()
        message = contenu['title']
        envoi_sms(message)
    else:
        print('URL absente')
        envoi_sms('url_absente')
def raz_dz():
    src=r'/opt/domoticz/scripts/python/aldz.bak.py'
    des=r'/opt/domoticz/scripts/python/aldz.py'
    shutil.copy(src, des)
#
while True:
        b = importlib.reload(b)
        message=b.x
        if message != "0":
            sms=message
            print(sms)
            envoi_sms(sms)
            time.sleep(5)
        raz_dz()
        time.sleep(10)

script systemd pour démarrage automatique

Unit]
Description=commande envoi message par sms
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3 /opt/domoticz/scripts/python/envoi_msg.py > /home/michel/envoi_msg.log
[Install]
WantedBy=multi-user.target

image1927