Prérequis : Base de données
Le système « Supervision de salles » permet un affichage de l’état de salles équipées de sonde ESP32-Weather.
Il y a plusieurs possibilités pour le stcokage de la configuration des salles :
config.inc.php
Remarque : Le choix est effectué dans le fichier config.inc.php
.
<?php
...
$config['bd'] = "array"; // Choix possible : "sqlite" ou "mysql" ou "array"
...
?>
La base de données monitoring est un ensemble de données permettant l’exploitation d’un réseau de salles. Dans cette version, ces données concernent la configuration des salles :
Ces données sont mémorisées dans la base de données MySQL du serveur.
SQL : monitoring.zip
Le programme d’installation installe automatiquement l’application web mais pas la base de données monotoring.
Il faut ensuite paramétrer le fichier config.inc.php
:
<?php
$config['bd'] = "mysql";
$config['dbname'] = "monitoring";
$config['host'] = "localhost";
$config['username'] = "root";
$config['passwd'] = "password";
?>
Vérifier si les paquetages mysql (mysql-server
, etc …) sont installés sur votre machine :
$ dpkg -l | grep -i mysql
Sinon pour installer le SGBDR MySQL, il faut faire :
$ sudo apt install mysql-server
Vérifier si le serveur mysql est démarré sur votre machine :
$ sudo service mysql status
$ sudo systemctl status mysql.service
Pour démarrer le serveur MySQL :
$ sudo service mysql start
$ sudo systemctl start mysql.service
Pour redémarrer le serveur MySQL :
$ sudo service mysql restart
$ sudo systemctl restart mysql.service
Pour arrêter le serveur MySQL :
$ sudo service mysql stop
$ sudo systemctl stop mysql.service
Démarrer la console mysql :
$ mysql -uroot -ppassword -hlocalhost
mysql>
Lister les bases de données :
mysql> show databases;
Sélectionner une base de données :
mysql> use monitoring;
Lister les tables d’une base de données :
mysql> show tables;
Sélectionner des données d’une table :
mysql> select * from salles;
Lien : https://doc.ubuntu-fr.org/mysql
Si votre application s’exécute sur la même machine que votre serveur de base de données, vous pourrez indiquer localhost
comme nom de machine. Sinon, il vous faudra préciser le nom réseau ou l’adresse IP du serveur à joindre et configurer un accès distant pour cette application.
Éditer le fichier le fichier /etc/mysql/my.cnf
ou /etc/mysql/mysql.conf.d/mysqld.cnf
: dans la section [mysqld]
, indiquer pour le paramétre bind-address
l’adresse IP de votre interface d’écoute ou la valeur 0.0.0.0
pour toutes les interfaces réseau de votre serveur.
Exemple :
Ajouter un utilisateur (ici rpi) pour lequel vous autorisez l’accès distant (% = pour tous les hôtes) à cette base de données :
mysql> use mysql;
mysql> select Host, User from user;
mysql> CREATE USER 'rpi'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON monitoring.* TO 'rpi'@'%';
mysql> FLUSH PRIVILEGES;
Et pour supprimer l’utilisateur rpi :
mysql> DROP USER 'rpi'@'%'
Il faudra ensuite redémarrer le service MySQL :
$ sudo systemctl restart mysql.service
Remarque : en cas de problème, vérifier si un pare-feu (firewall) est actif et si les connexions entrantes sur le port 3306 (port d’écoute par défaut du serveur MySQL) ne sont pas bloquées (vous pouvez utiliser l’outil nmap
).
// pare-feu actif ?
$ systemctl status ufw.service
// tables de filtrage ?
$ sudo iptables -L
// scan du port d'écoute MySQL ?
$ nmap -A -p3306 -T4 localhost
Pour installer la base de données monitoring, il faut :
CREATE DATABASE monitoring
)CREATE TABLE salles ...
etc …)INSERT INTO salles ...
etc …)L’ensemble des commandes peut être sauvegardé dans un fichier .sql
:
DROP DATABASE IF EXISTS `monitoring`;
CREATE DATABASE `monitoring` DEFAULT CHARACTER SET utf8;
USE `monitoring`;
--
-- Structure de la table `salles`
--
CREATE TABLE IF NOT EXISTS `salles` (
`idSalle` int(11) unsigned NOT NULL AUTO_INCREMENT,
`nom` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`ip` varchar(15) DEFAULT NULL,
`port` int(11) DEFAULT NULL,
`etat` int(11) DEFAULT NULL,
PRIMARY KEY (`idSalle`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Contenu de la table `salles`
--
INSERT INTO `salles` (`idSalle`, `nom`, `description`, `ip`, `port`, `etat`) VALUES
(1, 'B20', 'salle BTS SN', '192.168.52.30', 5000, 1),
(2, 'B22', 'salle BTS SN', '192.168.52.31', 5000, 1);
Pour installer la base de données monitoring, il suffit de faire :
$ mysql -uroot -ppassword -hlocalhost < monitoring-mysql.sql
SQL : monitoring.zip
Démarrer la console mysql :
$ sudo mysql -uroot -ppassword -hlocalhost monitoring
mysql>
Liste les noms des salles :
select nom from salles;
Donner les requêtes et résulats pour les cas suivants :
La base de données monitoring est un ensemble de données permettant l’exploitation d’un réseau de salles. Dans cette version, ces données concernent la configuration des salles :
Ces données sont mémorisées dans une base de données SQLite sur le serveur.
SQL : monitoring.zip
Le programme d’installation installe automatiquement l’application web mais pas la base de données monotoring.
Il faut ensuite paramétrer le fichier config.inc.php
:
<?php
$config['bd'] = "sqlite";
$config['dbname'] = "monitoring";
?>
Le fichier de base de données est stockée à la racine de l’application Web (/var/www/html/monitoring/
). Il faudra vérifier les droits d’accès à ce fichier.
$ sudo apt-get install sqlite3
Pour installer la base de données monitoring, il faut :
CREATE DATABASE monitoring
)CREATE TABLE salles ...
etc …)INSERT INTO salles ...
etc …)Lien : sqlite.org/cli.html
L’ensemble des commandes peut être sauvegardé dans un fichier .sql
:
CREATE TABLE salles (
"idSalle" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"nom" VARCHAR(255) NOT NULL UNIQUE,
"description" VARCHAR(255),
"ip" VARCHAR(15) NOT NULL UNIQUE,
"port" INTEGER NOT NULL,
"etat" INTEGER NOT NULL
);
INSERT INTO salles (idSalle, nom, description, ip, port, etat) VALUES
(1, 'B20', 'salle BTS SN', '192.168.52.30', 5000, 1),
(2, 'B22', 'salle BTS SN', '192.168.52.31', 5000, 1),
(3, 'C12', 'salle', '192.168.52.32', 5000, 1);
Pour installer la base de données monitoring, il suffit de faire :
$ sqlite3 monitoring < monitoring-sqlite.sql
Ou :
$ sqlite3 monitoring
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> create table salles (idSalle INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,nom VARCHAR(255) NOT NULL UNIQUE,description VARCHAR(255),ip VARCHAR(15) NOT NULL UNIQUE,port INTEGER NOT NULL,etat INTEGER NOT NULL);
sqlite> insert into salles (idSalle, nom, description, ip, port, etat) values (1, 'B20', 'salle BTS SN', '192.168.52.30', 5000, 1);
sqlite> insert into salles (idSalle, nom, description, ip, port, etat) values (2, 'B22', 'salle BTS SN', '192.168.52.31', 5000, 1);
sqlite> insert into salles (idSalle, nom, description, ip, port, etat) values (3, 'C12', 'salle', '192.168.52.32', 5000, 1);
sqlite> .exit
Lien : sqlite.org/cli.html
$ sqlite3 monitoring
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> select * from salles;
1|B20|salle BTS SN|192.168.52.30|5000|1
2|B22|salle BTS SN|192.168.52.31|5000|1
3|C12|salle|192.168.52.34|5000|1
sqlite> .mode line
sqlite> select * from salles;
idSalle = 1
nom = B20
description = salle BTS SN
ip = 192.168.52.30
port = 5000
etat = 1
idSalle = 2
nom = B22
description = salle BTS SN
ip = 192.168.52.31
port = 5000
etat = 1
idSalle = 3
nom = C12
description = salle
ip = 192.168.52.34
port = 5000
etat = 1
sqlite> .exit
Donner les requêtes et résulats pour les cas suivants :
Le programme d’installation installe automatiquement l’application web mais pas les bases de données MySQL et SQLite. C’est donc le mode de fonctionnement par défaut.
Il vous faudra fournir la configuration des salles directement dans le fichier config.inc.php
:
<?php
...
$config['bd'] = "array";
...
$config['salles'] = array (
0 => array('idSalle' => 1,'nom' => "B20",'description' => "salle BTS SN",'ip' => "192.168.52.30",'port' => 5000, 'etat' => 1),
1 => array('idSalle' => 2,'nom' => "B22",'description' => "salle BTS SN",'ip' => "192.168.52.31",'port' => 5000,'etat' => 1),
2 => array('idSalle' => 3,'nom' => "C12",'description' => "salle",'ip' => "192.168.52.34",'port' => 5000,'etat' => 1)
);
?>