omegawatt's People
omegawatt's Issues
Création d'un daemon Node pour faire du polling sur les logs du serveur FTP
On veut changer la logique de déclenchement du parsing des fichiers (fichiers de mesures et fichiers de commandes Influx - voir #21) pour ne plus les faire via un cron à heures fixes, mais plutôt sur la base de l'arrivée d'un nouveau fichier via le FTP.
Il faut donc parser les logs du serveur FTP utilisé par le projet (vsFTP), catégoriser les arrivées de fichiers (Mesures, Devices, Autres) et parser chaque fichier en conséquence (voir #22).
Passer les variables d'env aux fichiers de provisioning de grafana
Passer les variables d'env aux fichiers de provisioning de grafana
Changer l'emplacement des répertoires _done et _error
Pierre a dit :
Juste pour dire que je vois que les répertoires _done et _error sont au
niveau du rép 0001. Ca ne m'arrange pas, car on ne saura plus à quel SN
système ils correspondent (et potentiellement, il y a le risque qu'il y
ait des noms de fichiers identiques car 2 systèmes peuvent appeler à la
même date/heure.
Je préfère que ces répertoires soient au niveau de chaque SN ( 02000015..)
Idéalement, le _error ne serait créé que lorsqu'un fichier doit y être
mis (ce qui permet de savoir rapidement s'il y a des fichiers en erreur
ou pas)
Parse des fichiers Omégawatt
Pour le parse des fichiers Omégawatt, je souhaite ajouter en 2ème ligne colonne 1 un code permettant de connaitre le format du fichier et de parser en conséquence.
Code: MV_Txx_Vyyy
xx: numéro du type de fichier (correspond à une sélection à faire dans une liste pour l'envoi automatique des fichiers sur le serveur FTP par nos appareils)
yyy: numéro de version du fichier pour ce type.
Évolution parsing Socomec
Pierre a dit :
Je remarque qu'il y a aussi des données à 10 minutes (de puissance
active P+), qui sont dans les fichiers * LoadCurve* tels queWESTRUP_LoadCurve_2021-07-14_00-00-13.csv
Le format est du genre:
"Device name","IP Address","Modbus Address","Begin date","End date"
WESTRUP,0.0.0.0,5,2021-07-12T23:54:59,2021-07-13T23:55:00,
Load Name,WESTRUP,
Usage,"Heating",
Nature,"Elec",
Measured value,"P+",
Unit,"W",
Scale,1.0000000,
Date,"Values","Flags"
2021-07-13T23:50:00,200,"Full integration period and date/time set"
2021-07-13T23:40:00,200,"Full integration period and date/time set"
2021-07-13T23:30:00,200,"Full integration period and date/time set"
ce qui serait intéressant, c'est de parser aussi ces fichiers et
mettre dans "P+" les valeurs (ici 200 W)
Je vois dans le bucket qu'il y a déjà des données de ce type (entre
2020/03 et 2020/06 pour Gene TRANSFO par exemple) donc le parser a du
être fait ? (je n'ai pas vérifié les sources pour voir)
Ca m'arrangerait que ça puisse se faire, car les données sont plus
fines, et ça permet aussi de voir le temps que prennent des requêtes
avec cette granularité (mais sans dérivative).
Après, ce n'est pas explicitement demandé par l'Herbier, si ça pose
soucis, on laisse tomber.
Gestion des emails
Pierre a dit :
je propose de laisser tomber si ok pour vous -
je devrais pouvoir faire un dashboard d'état des arrivées de data, et il
existe dans Grafana des possibilités de gestion d'alertes avec envois
d'Emails..
Gestion des repertoires des clients
Il faut gérer un répertoire par client et savoir s'il faut utiliser le parsing socomec ou omegawatt
Parsing selon Type Txyy
Pour le parsing, j'aimerais bien qu'on puisse parser selon le codage des fichiers.
Actuellement, Txyy indique:
- x: pas de temps des données x=0 données à 1 seconde - 1: 3 secondes, 2: 1 minute, 3: 10 minutes, 4: 2 heures (certaines données peuvent ne pas respecter le pas de temps si coupure secteur..)
- yy: type de données. yy=0 : mesures de puissance active et mesures de puissance réactive (----R) pour chaque voie
01 : debug
02 : mesures de puissance active uniquement
03 : toutes mesures
En mode active (02), on a les colonnes:
MV_T201_V001: date heure
Ph 1: Tension phase 1 -> à mettre en base _measurement "V"
Ph 2: idem
Ph 3: idem
Voie1: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie2: Puissance active phase 1 -> à mettre en base _measurement "P", voie "2"
Voie3: Puissance active phase 1 -> à mettre en base _measurement "P", voie "3"
Voie1: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1" // Esclave 1
...
Voie6: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1" // Esclave 1
...
En mode debug (01), on a les colonnes:
MV_T201_V001: date heure
us: micro seconde --> pourrait être utilisé pour affiner la précision de l'heure dans la base
frequency: fréquence -> à mettre en base _measurement "F"
nb demip: demi-périodes
nb samples: nombre d'échantillons
PQ label: label événement -> à mettre en base _measurement "PQ"
PQ id: ID evenement
Ph 1: Tension phase 1 -> à mettre en base _measurement "V"
Ph 2: idem
Ph 3: idem
U1U2: Tension phase 1 -> à mettre en base _measurement "U", voie "1"
U2U3: idem
U3U1: idem
Voie1: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie1 A: Ampères phase 1 -> à mettre en base _measurement "A", voie "1"
Voie1 VAR: Puissance réactive phase 1 -> à mettre en base _measurement "Var", voie "1"
Voie1 VA: Puissance apparente phase 1 -> à mettre en base _measurement "VA", voie "1"
Voie2: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie2 A: ...
..
Voie3 VA: idem
Puis colonnes des esclaves:
date heure
us: micro seconde --> (théoriquement égales à date heure maitre)
Voie1: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie1 A: Ampères phase 1 -> à mettre en base _measurement "A", voie "1"
Voie1 VAR: Puissance réactive phase 1 -> à mettre en base _measurement "Var", voie "1"
Voie1 VA: Puissance apparente phase 1 -> à mettre en base _measurement "VA", voie "1"
Voie2: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie2 A: ...
..
Voie6 VA: idem
En mode full (04), on a les colonnes:
MV_T204_V001: date heure
us: micro seconde --> pourrait être utilisé pour affiner la précision de l'heure dans la base
frequency: fréquence -> à mettre en base _measurement "F"
PQ label: label événement -> à mettre en base _measurement "PQ"
Ph 1: Tension phase 1 -> à mettre en base _measurement "V"
Ph 2: idem
Ph 3: idem
U1U2: Tension phase 1 -> à mettre en base _measurement "U", voie "1"
U2U3: idem
U3U1: idem
Voie1: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie1 A: Ampères phase 1 -> à mettre en base _measurement "A", voie "1"
Voie1 VAR: Puissance réactive phase 1 -> à mettre en base _measurement "Var", voie "1"
Voie1 VA: Puissance apparente phase 1 -> à mettre en base _measurement "VA", voie "1"
Voie2: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie2 A: ...
..
Voie3 VA: idem
Puis colonnes des esclaves: (pas de date/heure)
Voie1: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie1 A: Ampères phase 1 -> à mettre en base _measurement "A", voie "1"
Voie1 VAR: Puissance réactive phase 1 -> à mettre en base _measurement "Var", voie "1"
Voie1 VA: Puissance apparente phase 1 -> à mettre en base _measurement "VA", voie "1"
Voie2: Puissance active phase 1 -> à mettre en base _measurement "P", voie "1"
Voie2 A: ...
..
Voie6 VA: idem
Peuplement de la table device à partir d'un Excel
Entamer une réflexion sur le sujet.
Faire un reset de la base
Parsing Mono et Triphasé
Le type de mesureur (mono ou tri) ne figure pas dans le Type de fichier (Txyy).
Pour savoir quel type on a, il faut compter le nombre de "Volts" dans la première ligne d'entête.
Si 3 ---> triphasé
Si 1 ----> Monophasé.
Changements dans les colonnes pour le Monophasé:
Au lieu de 3 tensions (et éventuellement 3 tensions composées U pour les type debug et full); plus qu'une seule tension (pas de tension composée quel que soit le type).
Au lieu de 3 voies de puissance, 5 voies de puissances (avec les colonnes supplémentaires éventuelles, A, Var, VA selon le type)
Par exemple, Type T202 en monophasé avec 1 esclave :
MV_T202_V001:
Ph 1:
Voie1:
Voie2:
Voie3:
Voie4:
Voie5:
Voie1:
Voie2:
Voie3:
Voie4:
Voie5:
Voie6:
Cas particulier: pour question de compatibilité, on a été obligé d'ajouter 2 colonnes vides de tension pour le Tx00 en monophasé:
Par exemple, Type T200 en monophasé avec 1 esclave :
MV_T202_V001:
Ph 1:
Ph 2: -> non utilisée, mais ajoutée pour compatibilité
Ph 3: -> non utilisée, mais ajoutée pour compatibilité
Voie1:
Voie1 R:
Voie2:
Voie2 R:
...
Nom des Tags base influxDB
Je vois qu'il y a un tag "_measurement", et un autre "measured_value" qui semblent contenir presque la même chose.
A priori, le "measured_value" peut être supprimé
En testant, je n'ai pas vu de différence de performance entre les 2 pour les requêtes.
Actuellement, les SN (des mesureurs Omegawatt) sont dans la colonne "device_name" et les noms des voies sont dans "nature". Je préfèrerais avoir des Tags "SN" et "Channel" dans la base InfluxDB.
Ensuite, il faudrait remplir le Tag "device_name" à partir du SN et Channel (voir "Peuplement de la table device")
Il faudrait à la fois changer le parser, et mettre à jour la base pour les data déjà parsées (ou effacer/reparser les fichiers)
Bug de traitement de fichiers Omegawatt
Le 16 août, Pierre a dit :
Je vois que le CRON ne semble pas fonctionner, alors que les fichiers arrivent bien sur le serveur.
À reproduire et corriger.
Pouvoir envoyer des requêtes directes à InfluxDB via un fichier
- lire un fichier "quelque part" (à spécifier par @pf26)
- récupérer son contenu (en théorie une requête InfluxDB) et l'exécuter
Voir ici par exemple, pour une ébauche d'interaction avec InfluxDB :
https://docs.influxdata.com/influxdb/v2.0/write-data/delete-data/#delete-data-using-the-api
Gestion du fuseau horaire des horodatages
Pour l'instant les horodatages omegawatt sont interprétés comme étant en UTC/GMT, ce qui n'est peut-être pas le cas.
Reprendre la mécanique des traitements des fichiers
- itération sur les fichiers
- parsing d'un fichier
- sauvegarde des mesures
- si ok - déplacement du fichier dans le repertoire done
- si ko - déplacement du fichier dans le repertoire failed
Automatiser le parsing (via un cron ou équivalent) + possibilité de déclenchement manuel
Enregistrement des données dans influxdb
la sauvegarde des données échoue sur le serveur d'omegawatt. Il faut sauvegarder les données en lot et non une à une
Configuration des droits des fichiers uploadés sur le ftp
Configuration des droits des fichiers uploadés sur le ftp:
https://phoenixnap.com/kb/install-ftp-server-on-ubuntu-vsftpd
Gestion du champs "V"
Actuellement, on a les measured_values (EA+, EA-, ER+, ER-, ES - dans la pratique, seuls EA+ et dans une moindre mesure, EA- seront intéressants - les autres servent éventuellement de controle)
Pour Omegawatt, on pourra envoyer les colonnes de tension vers un champs "V" (tension simple), les premières colonnes vers "P", les colonnes finissant en .. R vers "Q".
Parser les logs du serveur FTP et catégoriser les fichiers
À compléter
Sauvegarde des fichiers traités
On souhaite conserver les fichiers traités. Une fois traité, renommer le fichier avec un "_" devant par exemple
Pouvoir donner au client des accès en lecture sur les dashboards de ses données
Gestion du fuseau horaire des horodatages SOCOMEC
L'herbier me dit qu'un décalage de 2 heures est également présent pour les données SOCOMEC.
Il est nécessaire de faire la même correction de timezone que pour les données OMEGAWATT (en espérant que ce sera encore valable au chgt d'horaire)
écrire une procédure pour l'ajout d'un client
écrire une procédure pour l'ajout d'un client
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.