Base de données Supervision de Salles

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 :

  • dans une base de données MySQL
  • dans une base de données SQLite
  • directement dans le fichier 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 MySQL

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 :

  • nom : le nom de la salle (B20, B22, etc ..)
  • description : une description (Salle de travaux pratiques, …)
  • ip : une adresse IP
  • port : un numéro de port
  • etat : 1 pour actif sinon 0

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";
?>

Séquence 1 : installation de MySQL

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

Séquence 2 : configuration de 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

Séquence 3 : installation de la base de données monitoring

Pour installer la base de données monitoring, il faut :

  • créer la base de données monitoring (CREATE DATABASE monitoring)
  • créer les tables (CREATE TABLE salles ... etc …)
  • insérer des données dans les tables (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

Séquence 4 : exécution de requêtes SQL

Démarrer la console mysql :

$ sudo mysql -uroot -ppassword -hlocalhost monitoring
mysql>

Liste les noms des salles :

select nom from salles;

Questions de révisions MySQL

  1. Quel est le nom du fichier de configuration du serveur MySQL ? Où se situe-t-il ?
  2. Quel est le port d’écoute par défaut du serveur MySQL ?
  3. Quelle option interdit l’accès à distance au serveur MySQL ?
  4. Quelle option permet l’accès à distance au serveur MySQL ? Donner un exemple pour un intranet.
  5. Dans quelle base de données et quelle table sont stockées les comptes utilisateur de MySQL ?
  6. Donner les commandes MySQL qui vérifient que les tables de la base de données monitoring ont bien été créées ?
  7. Donner les requêtes et résulats pour les cas suivants :

    1. liste des salles pour cette version
    2. nombre de salles pour cette version

La base de données SQLite

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 :

  • nom : le nom de la salle (B20, B22, etc ..)
  • description : une description (Salle de travaux pratiques, …)
  • ip : une adresse IP
  • port : un numéro de port
  • etat : 1 pour actif sinon 0

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.

Séquence 1 : installation de SQLite

$ sudo apt-get install sqlite3

Séquence 2 : installation de la base de données monitoring

Pour installer la base de données monitoring, il faut :

  • créer la base de données monitoring (CREATE DATABASE monitoring)
  • créer les tables (CREATE TABLE salles ... etc …)
  • insérer des données dans les tables (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

Séquence 3 : exécution de requêtes SQL

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

Questions de révisions SQLite

  1. Quelles sont les différences entre MySQL et SQLite ?
  2. Donner les commandes SQLite qui vérifient que les tables de la base de données monitoring ont bien été créées ?
  3. Donner les requêtes et résulats pour les cas suivants :

    1. liste des salles pour cette version
    2. nombre de salles pour cette version

Sans base de données

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)
);
?>

Retour au sommaire