premier commit
This commit is contained in:
commit
1267d09d9d
|
@ -0,0 +1,3 @@
|
||||||
|
/data
|
||||||
|
/logs
|
||||||
|
|
|
@ -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
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$sqlite = 'teleinfo.sqlite';
|
||||||
|
|
||||||
|
//
|
||||||
|
// renvoie une trame teleinfo complete sous forme d'array
|
||||||
|
//
|
||||||
|
function lireTrameConso () {
|
||||||
|
|
||||||
|
$handle = fopen ('/dev/ttyAMA0', "r"); // ouverture du flux
|
||||||
|
|
||||||
|
while (fread($handle, 1) != chr(2)); // on attend la fin d'une trame pour commencer avec la trame suivante
|
||||||
|
|
||||||
|
$char = '';
|
||||||
|
$trame = '';
|
||||||
|
$datas = '';
|
||||||
|
|
||||||
|
while ($char != chr(2)) { // on lit tous les caracteres jusqu'a la fin de la trame
|
||||||
|
$char = fread($handle, 1);
|
||||||
|
if ($char != chr(2)){
|
||||||
|
$trame .= $char;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose ($handle); // on ferme le flux
|
||||||
|
|
||||||
|
$trame .= 'TIMESTAMP ' . time() . ' ';
|
||||||
|
|
||||||
|
/*
|
||||||
|
$trame = chop(substr($trame,1,-1)); // on supprime les caracteres de debut et fin de trame
|
||||||
|
|
||||||
|
$messages = explode(chr(10), $trame); // on separe les messages de la trame
|
||||||
|
|
||||||
|
foreach ($messages as $key => $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);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* teleinfo - traite des trames d'informations de télérelevé
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Obtenez le chemin absolu du répertoire courant
|
||||||
|
$basePath = __DIR__;
|
||||||
|
|
||||||
|
// Inclure le fichier de configuration
|
||||||
|
|
||||||
|
function lireTrameConso($handle)
|
||||||
|
{
|
||||||
|
$currentChar = '';
|
||||||
|
$currentTrame = '';
|
||||||
|
$trameData = '';
|
||||||
|
|
||||||
|
while ($currentChar != chr(2)) {
|
||||||
|
$currentChar = fread($handle, 1);
|
||||||
|
if ($currentChar == chr(10)) {
|
||||||
|
$currentTrame .= ',';
|
||||||
|
} elseif ($currentChar != chr(2) && $currentChar != chr(13)) {
|
||||||
|
$currentTrame .= $currentChar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$currentTrame .= 'TIMESTAMP ' . time() . "\n";
|
||||||
|
return $currentTrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
$handle = fopen('/dev/ttyAMA0', "r");
|
||||||
|
|
||||||
|
if ($handle) {
|
||||||
|
while (true) {
|
||||||
|
$dateJour = date('Ymd');
|
||||||
|
$trame = lireTrameConso($handle);
|
||||||
|
|
||||||
|
// Utiliser le chemin du fichier CSV à partir de la configuration
|
||||||
|
$fp = fopen($basePath . '/../data/teleinfo_' . $dateJour . '.csv', 'a');
|
||||||
|
if ($fp) {
|
||||||
|
fwrite($fp, $trame);
|
||||||
|
fclose($fp);
|
||||||
|
} else {
|
||||||
|
echo "Erreur : Impossible d'ouvrir le fichier CSV pour écriture.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose($handle);
|
||||||
|
} else {
|
||||||
|
echo "Erreur : Impossible d'ouvrir le fichier /dev/ttyAMA0.";
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$trame = ",ADCO 020122037669 =,,OPTARIF HC.. <,,ISOUSC 45 ?,,HCHC 140779009 +,,HCHP 097287521 <,,PTEC HP.. ,,IINST 011 Y,,IMAX 045 H,,PAPP 02470 .,,HHPHC C .,,TIMESTAMP 1575210073";
|
||||||
|
|
||||||
|
|
||||||
|
function explode_edfTrame($trame) {
|
||||||
|
$edf_proprietes = array();
|
||||||
|
|
||||||
|
foreach(explode(",", $trame) as $propriete) {
|
||||||
|
// on ignore les lignes vides
|
||||||
|
if (strlen($propriete)>0) {
|
||||||
|
$prop = explode(" ", $propriete);
|
||||||
|
if (count($prop) > 1) {
|
||||||
|
$edf_proprietes[] = array($prop[0], $prop[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $edf_proprietes;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_r(explode_edfTrame($trame));
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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."
|
|
@ -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
|
Loading…
Reference in New Issue