Création d'un point d'accès wifi et supervision sur Atlas et matériel compatible

Bonjour,
Je vous propose , prêt à l’emploi, un AP et un client wifi. Il est fonctionnel sur Atlas et probablement d’autres matériels compatibles NetworkManager.
Il permet d’installer, de désinstaller le point d’accès et le client wifi.
Contrôle de la radio wifi, de la connexion, de son type, scan du réseau wifi.
Il affiche le device wifi, les connexions, les IP, la passerelle et états.

Il fait une large utilisation du plugin officiel Script.

L’interface peut ressembler à cela (18/02/2026) :

Il y a trois fichiers à transférer dans /var/www/html/plugins/script/data/ à l’aide de l’outil des commandes de script.


puis

Le fichier HotspotConfig.sh permet de personnaliser les paramètres de connexion et réseaux.

# Recherche automatique des devices wifi
WIFI_IF=$(nmcli -t -f DEVICE,TYPE device | awk -F: '$2=="wifi"{print $1}')

# Constantes symboliques

# Ne pas toucher si cela fonctionne
# Mettre "wlan0" sur Atlas ou "perso" trouvé avec <nmcli device> si plusieurs interfaces réseaux
# en SSH ou avec le menu Réglages/Système/Configuration/_OS/DB/Administration Système/>_Ouvrir
HOTSPOT_IF=$WIFI_IF			

HOTSPOT_SSID="hotspot"		        # Nom du point d'accès wifi	
HOTSPOT_PWD="MotDePasseWifi"	# Mot de passe wifi du point d'accès
HOTSPOT_IP="192.168.200.1"	        # Adresse IP du point d'accès

CLIENT_WIFI_IF=$WIFI_IF						# Ne pas toucher si cela fonctionne, idem HOTSPOT_IF
CLIENT_WIFI_SSID="MaisonWifi"                            	# Nom du point d'accès wifi à connecter
CLIENT_WIFI_PWD="MotDePasseWifi"			# Mot de passe du wifi

Le fichier HotspotInstall.sh contient les fonctions pour installer ou désinstaller le point d’accès.

# Fonction d'installation
Install(){}
# Fonction de désinstallation
Remove(){}

# Appel de la fonction si Install ou Remove
if([ $1 = Install ] || [ $1 = Remove ]); then
	$1
else
    echo Install ou Remove attendu
fi

Le fichier HotspotCommandes.sh contient les fonctions de commande.

ScanWifi(){}
ListeWifi(){}
ActiverRadio(){}
DesactiverRadio(){}
Radio(){}
Eth0(){}
ActiverEth0(){}
Connecter(){}
Deconnecter(){}
DeviceWifi(){}
EtatDevice(){}
ActiverHotspot(){}
ActiverClientWifi(){}
Hotspot(){}
ClientWifi(){}
Devices(){}
Connexions(){}
Adresses(){}
IPPasserelle(){}
Routes(){}
PasserelleConnectee(){}

# Appel de la fonction
$1

Le lien entre les commandes Jeedom et les fonctions se fait avec l’outil Script et l’outil parcourir


Il faut ensuite ajouter la fonction voulue à la suite du fichier. Attention, pas d’espaces et d’accents!
Et ce pour toutes les commandes.

Télécharger les 3 fichiers, transférer les sur Jeedom et changer l’extension .txt en .sh .
HotspotConfig.txt (1,1 Ko)
HotspotInstall.txt (2,6 Ko)
HotspotCommandes.txt (2,0 Ko)

1 « J'aime »

Les fichiers.

HotspotConfig.sh

#!/bin/bash
#############################################################
# Fichier de configuration du client et point d'accès wifi  #
# Stefjm le 16/02/20265										#
#															#
# Renseignement des paramètres réseaux						#
#############################################################

# Recherche automatique des devices wifi
WIFI_IF=$(nmcli -t -f DEVICE,TYPE device | awk -F: '$2=="wifi"{print $1}')

# Constantes symboliques

# Ne pas toucher si cela fonctionne
# Mettre "wlan0" sur Atlas ou "perso" trouvé avec <nmcli device> si plusieurs interfaces réseaux
# en SSH ou avec le menu Réglages/Système/Configuration/_OS/DB/Administration Système/>_Ouvrir
HOTSPOT_IF=$WIFI_IF			

HOTSPOT_SSID="JeedomAP"			# Nom du point d'accès wifi	
HOTSPOT_PWD="MotDePasseWifiAP"	# Mot de passe wifi du point d'accès
HOTSPOT_IP="192.168.200.1"		# Adresse IP du point d'accès

CLIENT_WIFI_IF=$WIFI_IF				# Ne pas toucher si cela fonctionne, idem HOTSPOT_IF
CLIENT_WIFI_SSID="MaisonWifi"		# Nom du point d'accès wifi à connecter
CLIENT_WIFI_PWD="MotDePasseWifi"	# Mot de passe du wifi

HotspotInstall.sh

#!/bin/bash
#############################################################
# Script pour configurer un point d'accès et client wifi	#
# sur device HOTSPOT_IF avec DHCP et NAT					#
# Compatible Atlas Jeedom et NetworkManager					#				#
# Ne modifie pas eth0 (WAN)									#
# Stefjm le 16/02/20265										#
#															#
# 1 paramètre Install ou Remove								#
#############################################################

# Inclusion du fichier de configuration HotspotConfig.sh
source /var/www/html/plugins/script/data/HotspotConfig.sh

# Fonction d'installation
Install(){
	echo "Manager device wifi"
	sudo nmcli device set $HOTSPOT_IF managed yes

	echo "Activation de l'IP forwarding..."
	sudo sysctl -w net.ipv4.ip_forward=1

	echo "Activation de la radio Wifi"
	sudo nmcli radio wifi on

	echo "Destruction du hotspot $HOTSPOT_SSID"
	sudo nmcli connection delete hotspot

	echo "Création du hotspot $HOTSPOT_SSID..."
	sudo nmcli connection add 		\
		type 			wifi 		\
		ifname 			$HOTSPOT_IF \
		con-name 		hotspot 	\
		autoconnect 	yes 		\
		ssid 			$HOTSPOT_SSID
        
	sudo nmcli connection modify hotspot 					\
		802-11-wireless.mode 				ap 				\
		802-11-wireless.band 				bg 				\
		802-11-wireless.channel 			1 				\
		802-11-wireless-security.key-mgmt 	wpa-psk 		\
		802-11-wireless-security.psk 		$HOTSPOT_PWD 	\
		ipv4.method							shared 			\
		ipv4.addresses 						$HOTSPOT_IP/24	

	echo "Activation du hotspot..."
	sudo nmcli connection up hotspot

	echo "Hotspot $HOTSPOT_SSID actif sur $HOTSPOT_IF avec NAT et DHCP."

	echo "Destruction du client-wifi $CLIENT_WIFI_SSID"
	sudo nmcli connection delete client-wifi

	echo "Création du client wifi $CLIENT_WIFI_SSID..."
	sudo nmcli connection add 					\
		type 				wifi 				\
		ifname 				$CLIENT_WIFI_IF 	\
		con-name 			client-wifi			\
		autoconnect 		no 					\
		ssid 				$CLIENT_WIFI_SSID 	\
		wifi-sec.key-mgmt 	wpa-psk 			\
		wifi-sec.psk 		$HOTSPOT_PWD

	sudo nmcli connection modify client-wifi 					\
		802-11-wireless.mode 				infrastructure		\
    	802-11-wireless-security.key-mgmt 	wpa-psk 			\
    	802-11-wireless-security.psk 		$HOTSPOT_PWD 		\
		ipv4.method							auto

	echo "Client wifi $CLIENT_WIFI_SSID créé sur $HOTSPOT_IF."
}

# Fonction de désinstallation
Remove(){
	echo "Destruction du hotspot $HOTSPOT_SSID"
	sudo nmcli connection delete hotspot
	echo "Destruction du client-wifi $CLIENT_WIFI_SSID"
	sudo nmcli connection delete client-wifi
	echo "Hotspot $HOTSPOT_SSID et Client wifi $CLIENT_WIFI_SSID désinstallé."
}

# Appel de la fonction si Install ou Remove
if([ $1 = Install ] || [ $1 = Remove ]); then
	$1
else
    echo Install ou Remove attendu
fi

HotspotCommandes.sh

#!/bin/bash
#############################################################
# Script de commande du point d'accès et client wifi		#
# sur device HOTSPOT_IF avec DHCP et NAT					#
# Compatible Atlas Jeedom et networkManager					#
# Stefjm le 16/02/20265										#
# 1 paramètre pour la fonction à appeler					#
#############################################################

# Inclusion du fichier de configuration HotspotConfig.sh
source /var/www/html/plugins/script/data/HotspotConfig.sh

ScanWifi(){
	sudo nmcli dev wifi rescan
}

ListeWifi(){
	nmcli -f IN-USE,SSID,CHAN,RATE,SIGNAL device wifi list
}

ActiverRadio(){
	sudo nmcli radio wifi on
}

DesactiverRadio(){
	sudo nmcli radio wifi off
}

Radio(){
	sudo nmcli radio wifi | awk '{if($1=="enabled") print 1; else print 0;}'
}

Eth0(){
	nmcli device | grep '^eth0'
}

ActiverEth0(){
	sudo nmcli con up id 'ethernet-eth0'
}

Connecter(){
	sudo nmcli device connect $HOTSPOT_IF
}

Deconnecter(){
	sudo nmcli device disconnect $HOTSPOT_IF
}

DeviceWifi(){
	echo $HOTSPOT_IF
}

EtatDevice(){
	nmcli -t -f TYPE,STATE device | grep -q '^wifi:connected' && echo 1 || echo 0
}

ActiverHotspot(){
	sudo nmcli connection up hotspot
}

ActiverClientWifi(){
	sudo nmcli connection up client-wifi
}

Hotspot(){
	nmcli connection | grep wlan0 | awk '{if($3=="wifi" && $1=="hotspot") print 1;else print 0;}'
}

ClientWifi(){
	nmcli connection | grep wlan0 | awk '{if($3=="wifi" && $1=="client-wifi") print 1;else print 0;}'
}

Devices(){
	echo Devices
	nmcli device 
}

Connexions(){
	echo Connexions 
	nmcli -f NAME,TYPE,DEVICE connection
}

Adresses(){
	echo Adresses IP
	ip addr show | grep "inet " | cut -d'/' -f1 | cut -d't' -f2 | grep -v "127."
}

IPPasserelle(){
	echo IP Passerelle
	ip route show default | grep -m1 -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'
}

Routes(){
	echo Routes
	ip route  | grep -v "169.254."
}

PasserelleConnectee(){
	 ping -c 1 -W 1 $(ip route show default | grep -m1 -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') >/dev/null 2>&1 && echo 1||echo 0
}

# Appel de la fonction
$1

Bonjour,

Ajout d’une liste déroulante dynamique des réseaux wifi disponibles, suite au scan du réseau.


Puis dans la configuration de la commande, en post-exécution, appel d’un scénario et refresh :

Ajout des fonctions ListeWifiSSID() , ConfigurerClientWifi() et d’un paramètre $2 lors de l’appel de fonction.

ListeWifiSSID(){
	nmcli -g SSID device wifi list
}

# Paramètre $1 SSID à connecter
ConfigurerClientWifi(){
	echo "Configuration du client wifi..."
	sudo nmcli connection modify client-wifi 					\
    	802-11-wireless.ssid $1
	echo "Client wifi $1 congiguré sur $HOTSPOT_IF."
}

# Appel de la fonction
$1 $2

Ajout de la commande Info ListeWifiSSID


et lien vers la fonction

/var/www/html/plugins/script/data/HotspotCommandes.sh ListeWifiSSID

Ajout du scénario avec un bloc code PHP:

// $ListeWifi : Récupération de la liste des réseaux wifi et mise en forme
// $ListeDerCmd : Type Commande Action Liste déroulante
try{
  	$ListeWifi=	cmd::byString('#[Réseau][Script-Hotspot][ListeWifiSSID]#')->execCmd();
  	$ListeWifi = str_replace("\n",';',$ListeWifi);
  	$ListeWifi = str_replace(";;",';',$ListeWifi);
  	$scenario->setLog($ListeWifi);
  
  	$ListeDerCmd = cmd::byString('#[Réseau][Script-Hotspot][ListeDeroulante]#');
  	$ListeDerCmd->setType('action');
  	$ListeDerCmd->setSubType('select');
  	$ListeDerCmd->setConfiguration('listValue',$ListeWifi);
	$ListeDerCmd->save();
  
  	// Force la mise à jour côté interface
  	$ListeDerCmd->event(null);
	$ListeDerCmd->getEqLogic()->refreshWidget();
}
catch (Exception $e){
  	$scenario->setLog($e);
}

et enfin choix avec la liste déroulante.


avec

/var/www/html/plugins/script/data/HotspotCommandes.sh ConfigurerClientWifi #select#

Nouveau Fichier à renommer en .sh
HotspotCommandes.txt (2,3 Ko)

Avec cela, je remplace le plugin Atlas pour la partie réseau Wifi.

Have fun!

Petit RETEX de l’utilisation de ce client ou point d’accès wifi.

Marche bien mais le client wifi se déconnecte régulièrement chaque jour sans que je ne le lui demande.
Le device wlan0 se déconnecte « tout seul » (nmcli device).
La connexion client-wifi (nmcli connnection) aussi.

Et ce sans le plugin Atlas que j’ai désinstallé pour tout faire à la main avec le plugin Script.

Quelqu’un aurait une idée sur comment Jeedom (ou Debian 11) gère le wifi?

Que faut-il que je regarde pour comprendre ce qu’il se passe?

J’avais regardé.

sudo iwconfig wlan0
wlan0     IEEE 802.11  ESSID:"xxxxxxxxxr"
          Mode:Managed  Frequency:2.437 GHz  Access Point: 00:1E:80:7F:8A:B8
          Bit Rate=5.5 Mb/s   Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=38/70  Signal level=-72 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:20868  Invalid misc:0   Missed beacon:0