Coder Social home page Coder Social logo

omegawatt's People

Contributors

augustin82 avatar tglatt avatar

Watchers

 avatar  avatar

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).

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 que WESTRUP_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..

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

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.

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".

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.