From 1267d09d9d2543a01ffb5acec135909dd958203c Mon Sep 17 00:00:00 2001 From: root Date: Tue, 5 Dec 2023 01:07:36 +0100 Subject: [PATCH] premier commit --- .gitignore | 3 ++ README.md | 44 ++++++++++++++++++++++++++++ code/telecinfo_func.php | 65 +++++++++++++++++++++++++++++++++++++++++ code/teleinfo.php | 50 +++++++++++++++++++++++++++++++ code/trameAnalyse.php | 22 ++++++++++++++ scripts/infoelec.sh | 29 ++++++++++++++++++ scripts/install.sh | 50 +++++++++++++++++++++++++++++++ scripts/upload.sh | 40 +++++++++++++++++++++++++ 8 files changed, 303 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 code/telecinfo_func.php create mode 100644 code/teleinfo.php create mode 100644 code/trameAnalyse.php create mode 100755 scripts/infoelec.sh create mode 100755 scripts/install.sh create mode 100755 scripts/upload.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9778410 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/data +/logs + diff --git a/README.md b/README.md new file mode 100644 index 0000000..4260492 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Projet Téléinfo + +## Description +Ce projet consiste en un système de traitement de trames d'informations de télérelevé (Téléinfo). Les données reçues sont stockées dans des fichiers CSV pour analyse ultérieure. + +## Prérequis +- Un système Linux pour exécuter le script. +- PHP installé sur votre système. +- Les privilèges nécessaires pour exécuter le script en tant qu'utilisateur root (ou en tant qu'un autre utilisateur ayant accès aux ports série). + +## Installation +1. Clonez ce dépôt dans le répertoire de votre choix : + ``` + git clone https://git.abonnel.fr/cedricAbonnel/ampere.teleinfo.git + ``` + +2. Accédez au répertoire du projet : + ``` + cd ampere.teleinfo + ``` + +3. Exécutez le script d'installation pour configurer le service systemd : + ``` + sudo ./install.sh + ``` + +4. Le service sera démarré automatiquement et configuré pour un démarrage au démarrage du système. + +## Configuration +- Le chemin du script à exécuter se trouve dans le fichier de service systemd `teleinfo.service`. Vous pouvez le personnaliser selon vos besoins. + +## Utilisation +- Le service exécute le script `/opt/ampere.teleinfo/scripts/teleinfo.sh`. Vous pouvez personnaliser ce script pour traiter les données Téléinfo selon vos besoins spécifiques. + +## Documentation +Pour en savoir plus sur le projet et son utilisation, veuillez consulter la documentation fournie dans le dossier `docs`. + +## Licence +Ce projet est sous licence MIT - voir le fichier [LICENSE](LICENSE) pour plus de détails. + +--- + +**Auteur :** Cédric Abonnel +**Contact :** https://git.abonnel.fr/cedricAbonnel/ampere.teleinfo diff --git a/code/telecinfo_func.php b/code/telecinfo_func.php new file mode 100644 index 0000000..9313fd6 --- /dev/null +++ b/code/telecinfo_func.php @@ -0,0 +1,65 @@ + $message) { + $message = explode (' ', $message, 3); // on separe l'etiquette, la valeur et la somme de controle de chaque message + if(!empty($message[0]) && !empty($message[1])) { + $etiquette = $message[0]; + $valeur = $message[1]; + $datas[$etiquette] = $valeur; // on stock les etiquettes et les valeurs de l'array datas + } + } + + $datas["timestamp"] = time(); + + return $datas; + */ + return $trame; + } + + + while(true) { + $dateJour = date('Ymd'); + + $trame = lireTrameConso(); // recupere une trame teleinfo + + print $trame; + +// if (count($trame) == 11 ) { +// $fp = fopen('teleinfo_'.$dateJour.'.csv', 'a'); +// fputcsv($fp, $trame); +// fclose($fp); +// } + } + +?> diff --git a/code/teleinfo.php b/code/teleinfo.php new file mode 100644 index 0000000..092f648 --- /dev/null +++ b/code/teleinfo.php @@ -0,0 +1,50 @@ + diff --git a/code/trameAnalyse.php b/code/trameAnalyse.php new file mode 100644 index 0000000..830adc7 --- /dev/null +++ b/code/trameAnalyse.php @@ -0,0 +1,22 @@ +0) { + $prop = explode(" ", $propriete); + if (count($prop) > 1) { + $edf_proprietes[] = array($prop[0], $prop[1]); + } + } + } + + return $edf_proprietes; +} + +print_r(explode_edfTrame($trame)); diff --git a/scripts/infoelec.sh b/scripts/infoelec.sh new file mode 100755 index 0000000..6ec7e33 --- /dev/null +++ b/scripts/infoelec.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# infoelec.sh - Script pour exécuter le script PHP teleinfo.php + +# Définir le chemin complet vers le script PHP teleinfo.php +script_php="$(dirname "$0")/../code/teleinfo.php" + +# Vérifier si le script PHP existe +if [ -e "$script_php" ]; then + # Afficher un message indiquant le début de l'exécution + echo "Exécution du script PHP teleinfo.php..." + + # Configuration du port série + stty -F /dev/ttyAMA0 1200 sane evenp parenb cs7 -crtscts + + # Exécuter le script PHP + php "$script_php" + + # Vérifier le code de retour de PHP + if [ $? -eq 0 ]; then + echo "Le script PHP teleinfo.php s'est terminé avec succès." + else + echo "Erreur : Le script PHP teleinfo.php a rencontré une erreur." + fi +else + echo "Erreur : Le script PHP teleinfo.php n'existe pas dans le chemin spécifié : $script_php" +fi + + + diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..503968b --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Vérifier si l'utilisateur a les droits d'administration +if [ "$EUID" -ne 0 ]; then + echo "Ce script doit être exécuté en tant qu'administrateur (root)." + exit 1 +fi + +# Le chemin complet du script teleinfo.sh +SCRIPT_PATH="/opt/ampere.teleinfo/scripts/infoelec.sh" + +# Le nom d'utilisateur sous lequel le service sera exécuté +SERVICE_USER="root" + +# Le groupe sous lequel le service sera exécuté +SERVICE_GROUP="root" + +# Le nom du fichier de service systemd +SERVICE_NAME="teleinfo.service" + +# Le chemin complet du fichier de service systemd +SERVICE_FILE="/etc/systemd/system/$SERVICE_NAME" + +# Créer le fichier de service systemd +echo "[Unit] +Description=Service de téléinfo + +[Service] +Type=simple +ExecStart=/bin/bash -c '$SCRIPT_PATH' +WorkingDirectory=$(dirname "$SCRIPT_PATH") +User=$SERVICE_USER +Group=$SERVICE_GROUP + +[Install] +WantedBy=multi-user.target" > "$SERVICE_FILE" + +# Recharger la configuration de systemd +systemctl daemon-reload + +# Activer le service pour le démarrage automatique +systemctl enable "$SERVICE_NAME" + +# Démarrer le service +systemctl start "$SERVICE_NAME" + +# Afficher l'état du service +systemctl status "$SERVICE_NAME" + +echo "Le service a été installé et démarré avec succès." diff --git a/scripts/upload.sh b/scripts/upload.sh new file mode 100755 index 0000000..a472392 --- /dev/null +++ b/scripts/upload.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Chemin vers le répertoire contenant les fichiers CSV +csv_dir="$(dirname \"$0\")/../data" + +# Exclure le fichier CSV modifié le jour même +exclude_today="-not -newermt $(date +%Y-%m-%d)" + +# Trouver tous les fichiers CSV dans le répertoire, à l'exception de celui modifié le jour même +csv_files=$(find "$csv_dir" -maxdepth 1 -type f -iname '*.csv' $exclude_today) + +# URL du script PHP qui gère les fichiers CSV +php_script="http://ampere.rpiluc001.acegrp.lan/upload.php" + +# Vérifier si le dossier "done/" existe +if [ ! -d "$csv_dir/done" ] +then + # Créer le dossier "done/" + mkdir "$csv_dir/done" +fi + +# Parcourir le répertoire des fichiers CSV +for file in $csv_files +do + # Calculer le CRC du fichier + crc=$(sha1sum "$file" | awk '{print $1}') + + # Envoyer le fichier CSV et le CRC au script PHP via cURL + output=$(curl -F "file=@$file" $php_script) + + # Vérifier la réponse du script PHP + if [ "$output" = "$crc" ] + then + # Déplacer le fichier CSV dans le dossier "done/" + mv "$file" "$csv_dir/done/" + echo "Le fichier $file a été correctement traité." + else + echo "Une erreur s'est produite lors du traitement du fichier $file." + fi +done