Aller au contenu

Raspberry Pi 3 - Gateway IoT

Vue d'ensemble

Raspberry Pi 3 dédié à deux fonctions IoT critiques : passerelle SMS (alertes domotiques) et contrôle des volets Somfy RTS via RFLink.

graph TB
    subgraph rpi3["Raspberry Pi 3 - 192.168.1.26"]
        direction TB

        subgraph services["🔧 Services"]
            SMS[Gammu-SMSD<br/>Gateway SMS]
            RFLink[RFLink TCP<br/>Port 8844]
        end

        subgraph hardware["📟 Matériel USB"]
            GSM[Modem GSM<br/>SIM800 CH340<br/>/dev/sms]
            RF[RFLink Arduino<br/>Mega 2560<br/>/dev/volets]
        end
    end

    subgraph boot["🖥️ Boot Réseau"]
        LXC141[LXC 141<br/>pxe-rpi<br/>TFTP + DHCP]
        NFS[Proxmox<br/>NFS Server<br/>/srv/nfs/rpi3]
    end

    subgraph integration["🏠 Intégration"]
        HA[Home Assistant<br/>VM 100]
        Somfy[Volets Somfy<br/>433.42 MHz]
    end

    LXC141 --> |PXE Boot| rpi3
    NFS --> |Root NFS| rpi3
    SMS --> |Webhook| HA
    RFLink --> |TCP 8844| HA
    RF --> |RF 433.42 MHz| Somfy

Spécifications matérielles

Ressource Valeur
Modèle Raspberry Pi 3 Model B
CPU ARM Cortex-A53 (4 cores @ 1.2 GHz)
RAM 1 GB
Stockage Boot réseau (NFS)
OS Raspberry Pi OS Bookworm (ARM64)

Informations système

Propriété Valeur
IP 192.168.1.26 (DHCP réservé)
Boot PXE via LXC 141 (192.168.1.191)
Root NFS depuis Proxmox (192.168.1.32:/srv/nfs/rpi3)

Accès

SSH

ssh root@192.168.1.26

Depuis Proxmox (rootfs NFS)

# Accès direct aux fichiers du Pi
ls /srv/nfs/rpi3/

# Éditer config sans reboot
nano /srv/nfs/rpi3/etc/gammu-smsdrc

Architecture Boot Réseau

┌─────────────────────────────────────────────────────────────────┐
│                        Proxmox (.32)                            │
│  ┌────────────────────────────────────────────────────────────┐ │
│  │  LXC 141 - pxe-rpi (.191)                                  │ │
│  │  ├─ dnsmasq : TFTP + Proxy DHCP (PXE options)              │ │
│  │  └─ /srv/tftp : bootloader + kernel Pi3                    │ │
│  └────────────────────────────────────────────────────────────┘ │
│                                                                 │
│  ├─ NFS Server : /srv/nfs/rpi3 (rootfs Raspberry Pi OS)        │
│  └─ IP Proxmox : 192.168.1.32                                  │
└─────────────────────────────────────────────────────────────────┘
                              │ PXE Boot + NFS Root
┌─────────────────────────────────────────────────────────────────┐
│                    Raspberry Pi 3 (.26)                         │
│  ├─ Boot TFTP : récupère kernel + initramfs depuis .191        │
│  ├─ Root NFS : monte /srv/nfs/rpi3 depuis .32                  │
│  ├─ /dev/sms (ttyUSB0) : Modem GSM CH340 (Gammu)               │
│  └─ /dev/volets (ttyUSB1) : RFLink CH340 → TCP:8844            │
└─────────────────────────────────────────────────────────────────┘

Périphériques USB

Port USB Device Symlink Usage
1-1.3 CH340 (1a86:7523) /dev/sms Modem GSM SIM800
1-1.5 CH340 (1a86:7523) /dev/volets RFLink Arduino Mega
1-1.2.4 SIM7600 (1e0e:9001) /dev/smsbackup Modem 4G backup

Règles udev

# /srv/nfs/rpi3/etc/udev/rules.d/90-usb-serial.rules

# RFLink (CH340 sur port USB 1-1.5) -> /dev/volets
SUBSYSTEM=="tty", KERNELS=="1-1.5:1.0", SYMLINK+="volets", MODE="0666"

# Modem SMS SIM800 (CH340 sur port USB 1-1.3) -> /dev/sms
SUBSYSTEM=="tty", KERNELS=="1-1.3:1.0", SYMLINK+="sms", MODE="0666"

# SIM7600 Modem 4G (backup) -> /dev/smsbackup
SUBSYSTEM=="tty", ATTRS{idVendor}=="1e0e", ATTRS{idProduct}=="9001", \
  ATTR{bInterfaceNumber}=="02", SYMLINK+="smsbackup", MODE="0666"

Services

1. Gateway SMS (Gammu-SMSD)

Envoi et réception de SMS pour alertes domotiques.

Propriété Valeur
Service gammu-smsd.service
Config /etc/gammu-smsdrc
Port modem /dev/sms
Numéro 0685397996

Configuration (/etc/gammu-smsdrc) :

[gammu]
port = /dev/sms
connection = at
synchronizetime = yes

[smsd]
PhoneId = 0685397996
Service = files
RunOnReceive = /var/www/html/sms/receive.sh
RunOnFailure = /var/www/html/sms/error.sh

# Répertoires spool
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

Service systemd :

[Unit]
Description=Gammu SMS Daemon
After=network.target dev-sms.device
Wants=dev-sms.device
StartLimitIntervalSec=300
StartLimitBurst=5

[Service]
Type=simple
ExecStartPre=/bin/sleep 3
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu-smsdrc
Restart=on-failure
RestartSec=30

[Install]
WantedBy=multi-user.target

Intégration Home Assistant :

rest_command:
  send_sms:
    url: "http://192.168.1.26/sms/send.php"
    method: GET
    params:
      numero: "{{ numero }}"
      texte: "{{ message }}"

Bridge série→TCP pour RFLink Arduino contrôlant les volets Somfy RTS.

Propriété Valeur
Service rflink-tcp.service
Port série /dev/volets (57600 baud)
Port TCP 8844
Protocole Somfy RTS (433.42 MHz)

Service systemd :

[Unit]
Description=RFLink to TCP Bridge (socat)
After=network.target dev-volets.device
Wants=dev-volets.device

[Service]
Type=simple
ExecStart=/usr/bin/socat /dev/volets,b57600,raw,echo=0 TCP-LISTEN:8844,reuseaddr,fork
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Volets configurés :

Volet ID RTS Entité Home Assistant
Bureau RTS_FAF22D_0 cover.volet_bureau
Chambre RTS_7DCE35_0 cover.volet_chambre
Studio RTS_E32A50_0 cover.volet_studio
Groupe - cover.volets_bas

Configuration Home Assistant (rflink.yaml) :

host: 192.168.1.26
port: 8844
tcp_keepalive_idle_timer: 600

Commandes utiles

Diagnostic général

# Connexion SSH
ssh root@192.168.1.26

# Statut des services
systemctl status gammu-smsd rflink-tcp

# Vérifier les devices USB
lsusb
ls -la /dev/sms /dev/volets

Gateway SMS

# Statut service
systemctl status gammu-smsd

# Envoi SMS manuel
gammu-smsd-inject TEXT 0612345678 -text "Test SMS"

# Vérifier le modem
gammu --identify

# Logs
journalctl -u gammu-smsd -f

# Qualité signal GSM
gammu --getsignal

Contrôle volets

# Test connexion RFLink (pas d'émission RF)
echo -e '10;PING;\r\n' | nc localhost 8844
# Réponse attendue : 20;XX;PONG;

# Lister les devices RTS enregistrés
echo -e '10;RTSSHOW;\r' | nc localhost 8844

# Commander un volet (ATTENTION: actionne le volet!)
echo -e '10;RTS;FAF22D;0;UP;\r' | nc localhost 8844    # Monter
echo -e '10;RTS;FAF22D;0;DOWN;\r' | nc localhost 8844  # Descendre
echo -e '10;RTS;FAF22D;0;STOP;\r' | nc localhost 8844  # Stop

Boot réseau

# Vérifier le montage NFS (depuis le Pi)
mount | grep nfs

# Accès rootfs depuis Proxmox
ls /srv/nfs/rpi3/

# Modifier config sans reboot du Pi
nano /srv/nfs/rpi3/etc/gammu-smsdrc
ssh root@192.168.1.26 systemctl restart gammu-smsd

Dépannage

Pi ne boot pas

  1. Vérifier LXC 141 (pxe-rpi) est démarré
  2. Vérifier le service dnsmasq dans LXC 141
  3. Vérifier le serveur NFS sur Proxmox
  4. Brancher écran/clavier pour voir les erreurs boot
# Sur Proxmox
pct status 141
pct exec 141 -- systemctl status dnsmasq
exportfs -v | grep rpi3

SMS non envoyés

  1. Vérifier signal GSM : gammu --getsignal
  2. Vérifier carte SIM active et avec crédit
  3. Vérifier le device : ls -la /dev/sms
  4. Redémarrer le service : systemctl restart gammu-smsd

Volets ne répondent pas

  1. Tester le PING RFLink
  2. Vérifier rolling code (peut être désynchronisé)
  3. Réappairer si nécessaire (commande PAIR)
# Test RFLink
echo -e '10;PING;\r\n' | nc localhost 8844

# Si désynchronisé : appuyer 3s sur PROG télécommande Somfy, puis :
echo -e '10;RTS;FAF22D;0;PAIR;\r' | nc localhost 8844

Maintenance

Sauvegarde

Le rootfs est sur NFS, donc sauvegardé avec Proxmox :

# Depuis Proxmox
tar -czvf /backup/rpi3-rootfs-$(date +%Y%m%d).tar.gz /srv/nfs/rpi3/

Mise à jour

# SSH sur le Pi
apt update && apt upgrade -y

# Ou depuis Proxmox (chroot)
chroot /srv/nfs/rpi3 apt update

Redémarrage

# Reboot propre
ssh root@192.168.1.26 reboot

# Si bloqué, reboot électrique
# (boot PXE reprendra automatiquement)

Notes

  • Boot NFS : Pas de carte SD, tout est sur le réseau
  • Dépendance LXC 141 : Le Pi ne boot pas sans le serveur PXE
  • Dépendance Proxmox NFS : Le Pi ne boot pas sans le NFS
  • Deux CH340 identiques : Différenciés par port USB physique (règles udev)
  • Rolling code RFLink : Stocké dans l'EEPROM Arduino, incrémente automatiquement
  • Criticité moyenne : Alertes SMS et volets, mais pas critique pour la domotique de base