Installation des paquets
Version de Raspbian : Bookworm
Installation du SSD en 64 bits sans interface utilisateur avec l'utilitaire raspberry pi imager.
Configuration, lors de la préparation avec le logiciel, d'un utilisateur avec mot de passe et activation du ssh pour une gestion à distance.
Il est également possible de modifier le nom du raspberry pi pour la connexion en ssh.
Dans mon cas, après l'allumage du RPI, l'adresse est restée en
http://raspberrypi.local
L'adresse changera à l'installation de la partie allsky, en
http://allsky.loca
Le script qui me permet de récupérer les différentes données capteurs a été réalisé par ChatGPT, en python. Mes maigres connaissances en programmation ont permis quelques débogages mais l'essentiel a été réalisé par l'IA.
Les données collectées sont enregistrées dans un fichier JSON local. L’emplacement de l’enregistrement est fait dans un dossier particulier du logiciel car cela permet de récupérer les données de mon script, pour les afficher sur la surcouche de l’image du ciel.
Le script est lancé à intervalle régulier par un cron.
Le cron lance le script allsky.sh toutes les 3 minutes, pour créer l'environnement python et lancer le script allsky.py dans cet environnement. A la fin de l'exécution du script allsky.py, allsky.sh désactive l'environnement.
Installation des paquets Influxdb, Grafana et création des scripts
Installation des paquets :
# Mise à jour et installation des paquets nécessaires
Code : Tout sélectionner
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y curl wget gnupg i2c-tools python3-smbus python3-pip git virtualenv python3-virtualenv
# Configuration de la France comme pays pour le Wi-Fi
# Configuration Timezone
# Activation de l'interface I2C
# Téléchargement et installation d'InfluxDB
Code : Tout sélectionner
curl -LO https://download.influxdata.com/influxdb/releases/influxdb2_2.7.6-1_arm64.deb
sudo dpkg -i influxdb2_2.7.6-1_arm64.deb
# Téléchargement et installation du CLI InfluxDB
Code : Tout sélectionner
wget https://download.influxdata.com/influxdb/releases/influxdb2-client-2.7.5-linux-arm64.tar.gz
tar xvzf ./influxdb2-client-2.7.5-linux-arm64.tar.gz
sudo cp ./influx /usr/local/bin/
# Suppression des fichiers téléchargés
Code : Tout sélectionner
rm influxdb2_2.7.6-1_arm64.deb
rm influxdb2-client-2.7.5-linux-arm64.tar.gz
rm README.md
rm LICENSE
# Configuration du dépôt Grafana
Code : Tout sélectionner
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
# Mise à jour des paquets et installation de Grafana
# Activation et démarrage du service Grafana
Code : Tout sélectionner
sudo /bin/systemctl enable grafana-server
sudo /bin/systemctl start grafana-server
# Création du script
Code : Tout sélectionner
mkdir -p /home/quep/script
cd /home/quep/script
nano allsky.py
Code : Tout sélectionner
import smbus2
import bme280
import json
import os
import datetime
import psutil
from influxdb_client import InfluxDBClient, Point, WriteOptions
from influxdb_client.client.write_api import SYNCHRONOUS
import RPi.GPIO as GPIO
import re
# Define the I2C bus number
bus_number = 1
# Define the addresses of the two sensors
sensor1_address = 0x77
sensor2_address = 0x76
# Initialize the I2C bus
bus = smbus2.SMBus(bus_number)
# Read data from the first sensor
calibration_params = bme280.load_calibration_params(bus, sensor1_address)
data1 = bme280.sample(bus, sensor1_address, calibration_params)
temperature1 = round(data1.temperature, 2)
pressure1 = round(data1.pressure, 2)
# Read data from the second sensor
calibration_params = bme280.load_calibration_params(bus, sensor2_address)
data2 = bme280.sample(bus, sensor2_address, calibration_params)
temperature2 = round(data2.temperature, 2)
pressure2 = round(data2.pressure, 2)
# Read disk usage
disk_usage = psutil.disk_usage("/")
total_size = round(disk_usage.total / (1024 ** 3), 2) # Convert to GB
used_space = round(disk_usage.used / (1024 ** 3), 2) # Convert to GB
free_space = round(disk_usage.free / (1024 ** 3), 2) # Convert to GB
# Read network I/O counters
net_io = psutil.net_io_counters()
download = net_io.bytes_recv
upload = net_io.bytes_sent
# Convert bytes to MB and round to integer
download_mb = int(download / (1024 ** 2)) # Convert to MB and cast to integer
upload_mb = int(upload / (1024 ** 2)) # Convert to MB and cast to integer
# Read CPU temperature
cpu_temp = psutil.sensors_temperatures().get('cpu_thermal')[0].current
# Read system uptime
uptime_seconds = int((datetime.datetime.now() - datetime.datetime.fromtimestamp(psutil.boot_time())).total_seconds())
uptime_hours = uptime_seconds // 3600
uptime_minutes = (uptime_seconds % 3600) // 60
uptime_days = uptime_seconds // 86400 # Corrected this line (1 day = 86400 seconds)
uptime_years = uptime_days // 365 # Approximation (1 year = 365 days)
# Define the dictionary to store the sensor data
sensor_data = {
'measurement': 'allsky',
'tags': {},
'fields': {
'AS_TEMPEXT': temperature1,
'AS_PRESSEXT': pressure1,
'AS_TEMPINT': temperature2,
'AS_PRESSINT': pressure2,
'AS_CPUTEMP': cpu_temp,
'AS_TOTALSIZE': total_size,
'AS_USEDSPACE': used_space,
'AS_FREESPACE': free_space,
'AS_CPUUSAGE': psutil.cpu_percent(interval=1),
'AS_RAMUSAGE': psutil.virtual_memory().percent,
'AS_UPTIME_HOURS': uptime_hours,
'AS_UPTIME_MINUTES': uptime_minutes,
'AS_DOWNLOAD': download_mb,
'AS_UPLOAD': upload_mb,
'AS_UPTIME_YEARS': uptime_years,
'AS_UPTIME_DAYS': uptime_days
}
}
# Load dew control data from allskydew.json
allskydew_path = '/home/quep/allsky/config/overlay/extra/allskydew.json'
if os.path.exists(allskydew_path):
with open(allskydew_path, 'r') as dew_file:
dew_data = json.load(dew_file)
sensor_data['fields']['AS_DEWCONTROLDEW'] = float(dew_data['AS_DEWCONTROLDEW'])
sensor_data['fields']['AS_DEWCONTROLHEATER'] = dew_data['AS_DEWCONTROLHEATER']
# Configure the InfluxDB connection
influxdb_url = 'http://localhost:8086'
influxdb_token = 'XXXXXXXXXX'
influxdb_org = 'XXXXXXXXX'
influxdb_bucket = 'XXXXXXXXX'
# Create the InfluxDB client
client = InfluxDBClient(url=influxdb_url, token=influxdb_token, org=influxdb_org)
# Write the data to InfluxDB
write_api = client.write_api(write_options=SYNCHRONOUS)
point = Point(sensor_data['measurement']).tag("location", "allsky")
for key, value in sensor_data['fields'].items():
point.field(key, value)
write_api.write(bucket=influxdb_bucket, org=influxdb_org, record=point)
# Define the directory path
directory_path = os.path.expanduser('/home/quep/allsky/config/overlay/extra/')
# Create the directory if it does not exist
os.makedirs(directory_path, exist_ok=True)
# Save the sensor data to a JSON file
file_path = os.path.join(directory_path, 'allsky_quep.json')
with open(file_path, 'w') as file:
json.dump(sensor_data['fields'], file, indent=4)
print(f"Sensor data saved to {file_path}")
# Création du cron
Code : Tout sélectionner
(crontab -l 2>/dev/null; echo "*/3 * * * * /home/quep/script/allsky.sh") | crontab -
ou
et insérer la ligne
# création de l'environnement venv
# remonter à la racine de l'utilisateur
# Création de l'environnement dans le dossier
#Activation de l'environnement dans le dossier
# Installation des librairies
Code : Tout sélectionner
pip install rpi.bme280 influxdb-client psutil adafruit-circuitpython-bme280 adafruit-circuitpython-mlx90614 smbus2
# Désactivation de l'environnement
# Création de allsky.sh
Code : Tout sélectionner
#!/bin/bash
# Activate the virtual environment
. /home/quep/script/bin/activate
# Change directory to the script location
cd /home/quep/script
# Run the Python script
python3 allsky.py
# Deactivate the virtual environment
deactivate
# Ajout des droits d'execution
# Installation de samba
# Définition du block de partage Samba
Code : Tout sélectionner
CONFIG_BLOCK="[allsky]
path = /home/quep
writeable = yes
browseable = yes
public = no
"
# Ajout du block à la fin du fichier smb.conf
Code : Tout sélectionner
echo "$CONFIG_BLOCK" | sudo tee -a /etc/samba/smb.conf > /dev/null
# Redémarrage de samba
#Téléchargement de allsky
Code : Tout sélectionner
git clone --recursive https://github.com/AllskyTeam/allsky.git
L'installation est à suivre avec la documentation de
Allsky
#Téléchargement de allsky modules
L'installation est à suivre sur la documentation de
Allsky modules