Server web en python

Botlle est un framework web simple et léger (documentation)

Ouvrer le terminal et entrer la commandes suivante permettant d'installer bottle :

1
sudo apt install python3-bottle

Après une lecture générale de la documentation vous pouvez : Tester le premier exemple proposé dans la doc

Une fois le script exécuté, ouvrir un navigateur sur le raspberry et connecter vous au serveur.

Pour pouvoir vous connecter depuis un autre poste, il faut configurer l'adresse IP du serveur à 0.0.0. Dans le contexte d'un serveur, 0.0.0.0 signifie "toutes les adresses IPv4 de la machine locale". Si un hôte a deux adresses IP 192.168.1.1 et 10.1.2.1, et qu'un serveur du réseau en cours d'exécution écoute sur 0.0.0.0, il sera accessible sur ces deux IP.

Depuis votre RPI400, se connecter au réseau wifi. Puis taper dans un navigateur l'adresse IP et le port du serveur.

Complément : IP du server

Connaître l'adresse IP du Rasperry dans un terminal : ip a ou

1
sudo ip -4 addr show | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

Il est possible en python de créer une chaîne de caractère sur plusieurs lignes en utilisant les triples guillemets. C'est ce qui est utilisé dans le programme ci-dessous :

1
from bottle import route, run
2
3
@route('/')
4
def hello():
5
    return """
6
<!DOCTYPE html>
7
<html lang="en">
8
<head>
9
    <meta charset="UTF-8">
10
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
    <title>Station metéo </title>
12
</head>
13
<body>
14
    <h2>Infomations reçues par la station météo :</h2>
15
    <table>
16
        <tbody>
17
          <tr>
18
            <th scope="row">Humidité(%) = </th>
19
            <td>50</td>
20
          </tr>
21
          <tr>
22
            <th scope="row">Température(°C) =</th>
23
            <td>19</td>
24
          </tr>
25
        </tbody>
26
      </table>
27
      
28
</body>
29
</html>
30
31
"""
32
run(host='0.0.0.0', port=8585, debug=True)

On peut donc envoyer directement du code html dans le script python.

Valeurs aléatoires

On remplace les valeurs par une variable aléatoire générées par la fonction randint. L'opérateur + avec 2 chaînes de caractère en python permet de les concaténer. La fonction str(20) convertie le nombre 20 en une chaîne de caractère :

Tester le programme suivant et tenter de comprendre son fonctionnement :

1
from bottle import route, run
2
from random import randint
3
@route('/')
4
def hello():
5
    return """
6
<!DOCTYPE html>
7
<html lang="en">
8
<head>
9
    <meta charset="UTF-8">
10
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
11
    <title>Station metéo </title>
12
</head>
13
<body>
14
    <h2>Infomations reçues par la station météo :</h2>
15
    <table>
16
        <tbody>
17
          <tr>
18
            <th scope="row">Humidité(%) = </th>
19
            <td>"""+str(randint(0,100)) +"""</td>
20
          </tr>
21
          <tr>
22
            <th scope="row">Température(°C) =</th>
23
            <td>"""+str(randint(17,30))+""" </td>
24
          </tr>
25
        </tbody>
26
      </table>
27
      
28
</body>
29
</html>
30
31
"""
32
run(host='0.0.0.0', port=8585, debug=True)

FUSION UART et serveur web :

Question

Faire la fusion du programme de l'activité précédente et du programme ci dessus, et ainsi permettre l'affichage des valeurs de la température et de l'humidité.,envoyés par l'Arduino.

Amélioration du code de la page web

Question

Pour permettre au site de suivre l'évolution des données, on insère un script javascript

1
<script>
2
  // Recharge la page toutes les 30 secondes
3
  setInterval(() => {
4
    console.log("Rechargement...");
5
    location.reload();
6
  }, 30000);
7
</script>
8

Amélioration du code de la page web

Pour permettre au site de suivre l'évolution des données, on insère un script javascript

1
<script>
2
  // Recharge la page toutes les 30 secondes
3
  setInterval(() => {
4
    console.log("Rechargement...");
5
    location.reload();
6
  }, 30000);
7
</script>
8

Analyser les trames des clients et du serveur

Wireshark est un logiciel permettant d'analyser les trames qui circulent sur un interface réseau. Pour le lancer en mode administrateur :

Filtrer et analyser les trames web lors d'une connexion au serveur.