Files
varlog/_cache/articles/7c9dd319-44c3-4784-b587-9def71d1e4b5.json
T
2026-05-15 10:37:48 +02:00

1 line
9.0 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"uuid":"7c9dd319-44c3-4784-b587-9def71d1e4b5","slug":"cote-informatique","title":"Coté informatique","author":"cedric@abonnel.fr","published":true,"published_at":"2021-01-01 15:30:17","created_at":"2021-01-01 15:30:17","updated_at":"2021-01-01 15:30:17","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# Coté informatique\n\nVoici le principe de fonctionnement que je voulais faire initialement :\n1. lecteur des informations sur le port série (coté local)\n1. envoie sur serveur de base de données SGBD (coté serveur)\n\nOn y reviendra plus tard.\n\nPour l'instant j'installe tout sur le raspberyPi.\n\n### Installer PHP\nLa lecture sur des informations va s'effectuer en PHP. C'est le plus simple pour moi parce que c'est très proche du langage C.\nDans un premier temps il faut installer linterpréteur PHP :\n\n sudo apt-get install php\n\nOn saperçoit que l'installation du package PHP intègre d'autres composants.\n\nOn retrouve Apache2 et des fonctions associées à SQLite3, LDAP et JSON.\n\nPlusieurs fichiers de configuration sont créés :\n- `/etc/php/7.0/apache2/php.ini`\n- `/etc/php/7.0/cli/php.ini`\n- fichiers présents dans `/etc/php/7.0/mods-available/`\n\nDeux binaires sont accessibles :\n- `php`\n- `phar`\n\n```\nLecture des listes de paquets... Fait\nConstruction de l'arbre des dépendances \nLecture des informations d'état... Fait\nThe following additional packages will be installed:\n apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.0 libapr1 libaprutil1\n libaprutil1-dbd-sqlite3 libaprutil1-ldap php-common php7.0 php7.0-cli php7.0-common php7.0-json\n php7.0-opcache php7.0-readline ssl-cert\nPaquets suggérés :\n apache2-doc apache2-suexec-pristine | apache2-suexec-custom php-pear openssl-blacklist\nLes NOUVEAUX paquets suivants seront installés :\n apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.0 libapr1 libaprutil1\n libaprutil1-dbd-sqlite3 libaprutil1-ldap php php-common php7.0 php7.0-cli php7.0-common php7.0-json\n php7.0-opcache php7.0-readline ssl-cert\n0 mis à jour, 18 nouvellement installés, 0 à enlever et 0 non mis à jour.\nIl est nécessaire de prendre 4 582 ko dans les archives.\nAprès cette opération, 17,0 Mo d'espace disque supplémentaires seront utilisés.\nSouhaitez-vous continuer ? [O/n]\n```\n\n### Installer le SGBD PostgreSQL\nJ'ai installé le SGBD PostgreSQL ainsi que le bibliothèque de connexion PHP.\n\nUne fois installé, les programmes n'occuperont que 30 Mo. Je n'ai pas l'habitude d'avoir une installation prenant aussi peu de place.\n\n sudo apt-get install php-pgsql postgresql\n \nRésultat :\n\n```\nLecture des listes de paquets... Fait\nConstruction de l'arbre des dépendances \nLecture des informations d'état... Fait\nThe following additional packages will be installed:\n libpq5 php7.0-pgsql postgresql-9.6 postgresql-client-9.6 postgresql-client-common postgresql-common\n postgresql-contrib-9.6 sysstat\nPaquets suggérés :\n postgresql-doc locales-all postgresql-doc-9.6 libdbd-pg-perl isag\nLes NOUVEAUX paquets suivants seront installés :\n libpq5 php-pgsql php7.0-pgsql postgresql postgresql-9.6 postgresql-client-9.6\n postgresql-client-common postgresql-common postgresql-contrib-9.6 sysstat\n0 mis à jour, 10 nouvellement installés, 0 à enlever et 0 non mis à jour.\nIl est nécessaire de prendre 6 281 ko dans les archives.\nAprès cette opération, 30,2 Mo d'espace disque supplémentaires seront utilisés.\nSouhaitez-vous continuer ? [O/n]\n```\n\n### Paramétrer le SGBD PostgreSQL\nVoilà comment je fais pour me connecter au moteur de SGBD PostgreSQL. J'effectue ces manipulations depuis le compte `pi`.\n\n1. Je me connecte avec le compte du SGBD qui se nomme `postgres` :\n sudo su postgres\n\n2. Je me connecte au SGBD :\n psql\n \nOh joie ! L'invite `postgres=#` apparaît.\n\n### Créer la base de données\nJe vais utiliser les informations suivantes :\n- base de données : `ampere`\n- utilisateur de la base de données (rôle) : `r_ampere`\n\nIl faut créer l'utilisateur de la base de données. De manière schématique, l'utilisateur de connexion à la base de données s'appelle un `rôle`.\n\nCréation du rôle `r_ampere`\n CREATE ROLE r_ampere PASSWORD 'This1sN0tAnPwd' LOGIN VALID UNTIL 'infinity'; \n\nIl faut créer la base de données qui va accueillir les données.\n\nJ'ai choisi d'utiliser l'encodage `UTF-8` dans la base de données, et l'utilisation des règles de la langue Française (`fr_FR`).\n\n CREATE DATABASE \"ampere\"\n WITH OWNER \"r_ampere\"\n ENCODING 'UTF8'\n LC_COLLATE = 'fr_FR.UTF-8'\n LC_CTYPE = 'fr_FR.UTF-8';\n\nIl faut autoriser les connexions. Pour cela, le fichier de configuration des clients authentifié doit être adapté. Lors de l'installation du SGBD, il a été créé dans `/etc/postgresql/9.6/main/pg_hba.conf`\n\nIl faut l'adapter suivant le schéma suivant :\n\n host database user address auth-method\n \n\nOn s'identifie avec l'utilisateur `postgres` :\n pi: $ sudo su - postgres\n \nOn ajoute dans le fichier `/etc/postgresql/9.6/main/pg_hba.conf` :\n local ampere r_ampere trust\n\nOn sort de l'environnement `postgres` :\n postgres: $ exit\n \nUne fois le paramétrage terminé, il faut redémarrer le SGBD :\n pi: $ sudo service postgresql reload\n \nOn teste la connexion :\n pi: $ psql -U r_ampere -W -d ampere\n \n\n### Principe de fonctionnement\nUn programme doit sans cesse boucler pour effectuer cette action :\n 1. lire une trame sur /dev/ttyAMA0 readTrame\n 2. ajouter un timestamp dans la trame \n 3. mémoriser la trame brute avec timestamp dans une mémoire tampon - saveTrameTampon\n\nsaveTrameBdd\n\nsaveTrameCsv\n\n### Insérer une fichier CSV dans une table MySQL\n```PHP\n<?php\n$databasehost = \"localhost\"; \n$databasename = \"telereleve_elec\"; \n$databasetable = \"tr_journalier\"; \n$databaseusername=\"Utilisateur\"; \n$databasepassword = \"motDePasse\"; \n$fieldseparator = \",\"; \n$lineseparator = \"\\n\";\n$csvfile = \"releves/teleinfo_20181219.csv\";\n\nif(!file_exists($csvfile)) {\n die(\"File not found. Make sure you specified the correct path.\\n\");\n}\n\ntry {\n $pdo = new PDO(\"mysql:host=$databasehost;dbname=$databasename\", \n $databaseusername, $databasepassword,\n array(\n PDO::MYSQL_ATTR_LOCAL_INFILE => true,\n PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION\n )\n );\n} catch (PDOException $e) {\n die(\"database connection failed: \".$e->getMessage());\n}\n\n$affectedRows = $pdo->exec(\"\n LOAD DATA LOCAL INFILE \".$pdo->quote($csvfile).\" INTO TABLE `$databasetable`\n FIELDS TERMINATED BY \".$pdo->quote($fieldseparator).\"\n LINES TERMINATED BY \".$pdo->quote($lineseparator));\n\necho \"Loaded a total of $affectedRows records from this csv file.\\n\";\n\n?>\n```\n\n### Transformer une donnée timestamp unix en format date et heure\n SELECT FROM_UNIXTIME(`TIMESTAMP`) FROM `tr_journalier`\n\n### Bibliothèque PHP\nLe programme sera écrit en PHP. On va au maximum utiliser des méthodes afin d'obtenir des informations sur la consommation :\n- quelle est la consommation Intensité instantannée ? - getIINST\n- quelle est la valeur du compteur HC ? - getHCHC\n- quelle est la valeur du compteur HP ? - getHCHP\n- quelle est la période tarifaire en cours ? - getPTEC\n- quelle est la puissance apparente ? - getPAPP\n\net obtenir des informations sur l'abonnement :\n- quelle est le N° didentification du compteur ? - getADCO\n- quelle est l'Option tarifaire ? - getOPTARIF\n- quelle est l'Intensité souscrite ? - getISOUSC\n\nJe pense également à des méthodes d'analyse :\n- quelle est la consommation HC/HP de la période tarifaire actuelle ? - getConsoPeriodeNow(tarif)\n- quelle est la consommation HC/HP de la période précédente ? - getConsoPeriodePrev(tarif)\n- quelle est la consommation HC/HP des 24 dernières heures ? - getConsoPeriode24(tarif)\n- quelle est la consommation HC/HP d'une période de 7 jours X ? - getConsoPeriode7jours(tarif, dateHeureDebut)\n- quelle est la consommation HC/HP de la minute X ? - getConsoMinute(tarif, dateHeure)\n- quelle est la consommation HC/HP de l'heure X ? - getConsoHeure(tarif, dateHeure)\n- quelle est la consommation HC/HP du jour X ? - getConsoJour(tarif, dateHeure)\n- quelle est la consommation HC/HP de la semaine X ? - getConsoSemaine(tarif, date)\n- quelle est la consommation HC/HP du mois X ? - getConsoMois(tarif, date)\n- quelle est la consommation HC/HP de l'année X ? - getConsoAnnee(tarif, date)\n\nEt ensuite on pourra partir sur des statistiques :\n- moyenne\n- tendance\n- ...\n\n#### Projets\nhttp:*vesta.homelinux.free.fr/wiki/demodulateur_teleinformation_edf.html\n\nhttp:*lhuet.github.io/blog/2014/01/montage-teleinfo.html\n\nProjet de http:*www.magdiblog.fr/gpio/teleinfo-edf-suivi-conso-de-votre-compteur-electrique/\n\nLe relevé d'info compatible http:*hallard.me/teleinfo-emoncms/","featured":false,"tags":[]}