aboutsummaryrefslogtreecommitdiff
path: root/weshd.x
diff options
context:
space:
mode:
Diffstat (limited to 'weshd.x')
-rw-r--r--weshd.x775
1 files changed, 345 insertions, 430 deletions
diff --git a/weshd.x b/weshd.x
index 4294a00..d407fbf 100644
--- a/weshd.x
+++ b/weshd.x
@@ -30,7 +30,8 @@
/* Ce fichier est une évolution du protocole vers une utilisation des
* `union switch()` pour regrouper des objets entre eux. Puisque le protocole,
* de pair avec le logiciel, est en cours de développement, celui-ci utilise
- * toujours la version 1 (WESHD_VERS1).
+ * toujours la version 1 (WESHD_VERS1), puisque celle-ci n'est pas encore
+ * posée (et ne le sera pas avant la version 1.0).
*
* Pour retrouver d'anciennes versions du protocole, reculez dans l'historique
* du dépôt git de développement, disponible via l'URL suivante :
@@ -87,17 +88,16 @@ struct wespdt_t {
/* Adresse IP (avec version). */
-enum wespiptype_t {
- WESPIPTYPE_4 = 4,
- WESPIPTYPE_6 = 6
+enum wespaddrtype_t {
+ WESPADDRTYPE_IP = 1,
+ WESPADDRTYPE_IP6 = 2
};
-union wespip_t switch (wespiptype_t type) {
-case WESPIPTYPE_4:
- unsigned char addr4[4];
-
-case WESPIPTYPE_6:
- unsigned char addr6[16];
+union wespaddr_t switch (wespaddrtype_t type) {
+case WESPADDRTYPE_IP:
+ unsigned char ip[4];
+case WESPADDRTYPE_IP6:
+ unsigned char ip6[16];
};
/* ---
@@ -113,10 +113,11 @@ case WESPIPTYPE_6:
* - `MIS`: mismatch entre ce qu'on a et ce qui est attendu par le client,
* utilisé pour les compteurs.
*
- * - `NOW`: la ressource n'existe pas.
- * - `CON`: le serveur n'a pas pu être joint.
+ * - `NOR`: la ressource n'existe pas.
+ * - `CON`: le serveur où est hébergée la ressource n'a pas pu être joint.
* - `LRG`: la période pour la récupération de données est trop large,
- * le statut de la (sous-)ressource a changé entretemps. */
+ * le statut de la (sous-)ressource a changé entretemps (e.g.
+ * tarif appliqué à un compteur via téléinfo, BASE puis HCHP). */
enum wespret_t {
WESPRET_OK = 0,
@@ -125,7 +126,7 @@ enum wespret_t {
WESPRET_VAL = 3,
WESPRET_MIS = 4,
- WESPRET_NOW = 10,
+ WESPRET_NOR = 10,
WESPRET_CON = 11,
WESPRET_LRG = 12
};
@@ -143,9 +144,10 @@ typedef int wespid_t;
/* Type de l'objet. */
enum wesptype_t {
- WESPTYPE_WES = 0,
- WESPTYPE_METER = 1,
- WESPTYPE_SENSOR = 2
+ WESPTYPE_NONE = 0,
+ WESPTYPE_WES = 1,
+ WESPTYPE_METER = 2,
+ WESPTYPE_SENSOR = 3
};
/* Sous-type de l'objet pour un objet de type `WESTYPE_WES`.
@@ -182,55 +184,16 @@ enum wesptype_sensor_t {
};
/* ---
- * Objets de type WES (regroupement de compteurs et capteurs).
- * --- */
-
-/* Propriétés d'enregistrement spécifiques au serveur WES connecté par IP. */
-
-struct wespoptions_ip_t {
- /* Propriétés spécifiques au serveur WES connecté par IP.
- * `ip`: adresse IP.
- * `http_username`: utilisateur HTTP.
- * `http_password`: mot de passe HTTP.
- * `ftp_username`: utilisateur FTP.
- * `ftp_password`: mot de passe FTP. */
-
- wespip_t addr;
- string http_username<>;
- string http_password<>;
- string ftp_username<>;
- string ftp_password<>;
-};
-
-/* Propriétés d'enregistrement de la ressource selon son type. */
-
-union wespoptions_t switch (wesptype_t type) {
-case WESPTYPE_DUMMY:
- /* À vrai dire, rien. C'est factice quoi. */
-case WESPTYPE_IP:
- wespoptions_ip_t ip;
-};
-
-/* ---
- * Ressources de type WES.
+ * Objets de type serveurs WES.
* --- */
-/* Drapeaux pour savoir quoi définir. */
-
-const WESP_NAME = 1;
-const WESP_TIME = 2;
+/* Propriétés supplémentaires concernant les serveurs WES connectés via IP. */
-const WESP_DHCP = 4;
-const WESP_IP = 8;
-const WESP_MASK = 16;
-const WESP_GW = 32;
-const WESP_DNS1 = 64;
-const WESP_DNS2 = 128;
-const WESP_MAC = 256;
+struct wespcfg_wes_ip_t {
+ /* Heure locale du WES. */
-/* Propriétés pour les serveurs WES connectés via IP. */
+ wespdt_t current_time;
-struct wespipmore_t {
/* Propriétés réseau. */
bool dhcp_enabled;
@@ -242,77 +205,27 @@ struct wespipmore_t {
unsigned char mac[6]; /* read-only! */
};
-/* Propriétés diverses selon le type. */
+/* Propriétés supplémentaires concernant les serveurs WES en général, inclus
+ * dans la définition de l'objet général. */
-union wespmore_t switch (wesptype_t type) {
-case WESPTYPE_DUMMY:
- /* Toujours rien. */
-case WESPTYPE_IP:
- wespipmore_t ip;
+union wespcfg_wesmore_t switch (wesptype_wes_t type) {
+case WESPTYPE_WES_NONE:
+ /* Propriétés génériques uniquement. */
+case WESPTYPE_WES_DUMMY:
+ /* Rien pour le moment, mais l'on pourrait imaginer des tweaks
+ * de simulation. */
+case WESPTYPE_WES_IP:
+ wespcfg_wes_ip_t ip;
};
-/* Serveur WES. */
-
-struct wesp_t {
- /* Propriétés à définir lors d'une affectation. */
-
- unsigned long to_set;
-
- /* Propriétés de base.
- * `name`: nom de la ressource.
- * `current_time`: temps actuel sur la ressource. */
-
- string name<>;
- wespdt_t current_time;
-
- /* Autres propriétés dépendant du type. */
-
- wespmore_t more;
+struct wespcfg_wes_t {
+ wespcfg_wesmore_t more;
};
/* ---
- * Énumérations et sous-types divers concernant les compteurs.
+ * Objets de type compteur.
* --- */
-/* Mode de consommation/production de chaque compteur.
- * `CONSO`: consommation.
- * `PROD`: production (panneaux solaires, …). */
-
-enum wespmetermode_t {
- WESPMETERMODE_CONSO = 0,
- WESPMETERMODE_PROD = 1
-};
-
-/* Grandeur mesurée par le compteur.
- * `UNKNOWN`: inconnu.
- * `WATER`: eau froide/chaude.
- * `GAS`: gaz.
- * `ELEC`: électricité.
- * `FUEL`: fioul. */
-
-enum wespmeterwhat_t {
- WESPMETERWHAT_UNKNOWN = 0,
- WESPMETERWHAT_WATER = 1,
- WESPMETERWHAT_GAS = 2,
- WESPMETERWHAT_ELEC = 3,
- WESPMETERWHAT_FUEL = 4
-};
-
-/* Unité utilisée pour les valeurs du compteur.
- * `UNKNOWN`: Inconnu.
- * `WH`: Watts par heure (Wh).
- * `KWH`: Kilo-watts par heure (kWh).
- * `LITER`: Litres (L).
- * `CUBICMETER`: Mètres cube (m³). */
-
-enum wespmeterunit_t {
- WESPMETERUNIT_UNKNOWN = 0,
- WESPMETERUNIT_WH = 1,
- WESPMETERUNIT_KWH = 2,
- WESPMETERUNIT_LITER = 3,
- WESPMETERUNIT_CUBICMETER = 4
-};
-
/* Type de tarif pour le protocole télé-informatique d'ERDF.
* `BASE`: forfait Base (toutes heures), le prix du kWh ne varie pas en
* fonction de la période de consommation ;
@@ -368,70 +281,9 @@ enum wespticperiod_t {
WESPTICPERIOD_PM = 2
};
-/* Méthode de mesure pour les compteurs à impulsions.
- * `ILS`: impulsions mécaniques.
- * `ELEC`: impulsions électroniques. */
-
-enum wespplsmethod_t {
- WESPPLSMETHOD_ILS = 0,
- WESPPLSMETHOD_ELEC = 1
-};
+/* Propriétés supplémentaires pour un compteur relié via téléinfo. */
-/* Drapeaux pour savoir quoi définir ou ce qui est défini. */
-
-const WESPMETER_NAME = 1;
-const WESPMETER_READ = 2;
-const WESPMETER_MODE = 4;
-const WESPMETER_WHAT = 8;
-const WESPMETER_TYPE = 16;
-const WESPMETER_FIXED_COSTS = 32;
-const WESPMETER_PRORATA = 64;
-
-const WESPMETER_COST = 128;
-const WESPMETER_VOLTAGE = 256;
-
-const WESPMETER_METHOD = 256;
-const WESPMETER_GROUP = 512;
-
-const WESPMETER_COSTS_BASE = 128;
-const WESPMETER_COSTS_HCHP = 256;
-const WESPMETER_COSTS_TEMPO = 512;
-const WESPMETER_COSTS_EJP = 1024;
-const WESPMETER_BDPV_ENABLED = 2048;
-const WESPMETER_BDPV_IDS = 4096;
-const WESPMETER_BDPV_TIME = 8192;
-
-/* ---
- * Structures concernant les compteurs.
- * --- */
-
-struct wespmetermore_amper_t {
- /* Propriétés relatives aux compteurs de type pinces ampèremétriques.
- * `voltage`: voltage (en V). */
-
- int voltage;
-
- /* Propriétés tarifaires.
- * `cost`: coût de l'unité. */
-
- double cost;
-};
-
-struct wespmetermore_pulse_t {
- /* Propriétés relatives aux compteurs de type impulsions.
- * `method`: méthode de comptage d'impulsions.
- * `group_size`: taille d'un groupe d'impulsions pour faire une unité. */
-
- wespplsmethod_t method;
- int group_size;
-
- /* Propriétés tarifaires.
- * `cost`: coût de l'unité. */
-
- double cost;
-};
-
-struct wespmetermore_teleinfo_t {
+struct wespcfg_meter_teleinfo_t {
/* Propriétés relatives aux compteurs branchés via
* le protocole télé-information défini par Enedis.
* `cost_<abo>_<période>`: coût du kWh pendant une période lorsqu'un
@@ -459,152 +311,96 @@ struct wespmetermore_teleinfo_t {
string bdpv_password<>;
};
-union wespmetermore_t switch (wespmetertype_t type) {
-case WESPMETERTYPE_NONE:
- /* Aucun paramètre supplémentaire. */
-case WESPMETERTYPE_AMPER:
- wespmetermore_amper_t amper;
-case WESPMETERTYPE_PULSE:
- wespmetermore_pulse_t pulse;
-case WESPMETERTYPE_TELEINFO:
- wespmetermore_teleinfo_t teleinfo;
-};
+/* Propriétés supplémentaires concernant un compteur de type
+ * pinces ampèremétriques. */
-/* Structure représentant un compteur (branché via télé-informatique,
- * pinces ampèremétriques, impulsions). */
+struct wespcfg_meter_amper_t {
+ /* `voltage`: voltage (en V). */
-struct wespmeter_t {
- /* Propriétés de base de tout compteur.
- * `name`: nom du compteur tel que défini par le système distant.
- * `rd`: le compteur est-il lu ou ignoré par le système ?
- * `mode`: mode de consommation/production du compteur.
- * `what`: grandeur mesurée. */
-
- string name<>;
- bool rd;
- wespmetermode_t mode;
- wespmeterwhat_t what;
-
- /* Informations concernant le coût.
- * `fixed_cost`: coût fixe de l'abonnement, à l'année.
- * `prorata`: l'abonnement est-il au prorata du prix de l'unité ? */
-
- double fixed_cost;
- bool prorata;
-
- /* Informations dépendant du type. */
-
- wespmetermore_t more;
-};
-
-/* Valeurs du compteur pour une période donnée. */
-
-struct wespmetermorevalues_index_base_t {
- unsigned long th;
-};
+ int voltage;
-struct wespmetermorevalues_index_hchp_t {
- unsigned long hc;
- unsigned long hp;
-};
+ /* Propriétés tarifaires.
+ * `cost`: coût de l'unité. */
-struct wespmetermorevalues_index_tempo_t {
- unsigned long hcjb;
- unsigned long hpjb;
- unsigned long hcjw;
- unsigned long hpjw;
- unsigned long hcjr;
- unsigned long hpjr;
+ double cost;
};
-struct wespmetermorevalues_index_ejp_t {
- unsigned long hn;
- unsigned long pm;
-};
+/* Méthode de mesure pour les compteurs à impulsions.
+ * `ILS`: impulsions mécaniques.
+ * `ELEC`: impulsions électroniques. */
-union wespmetermorevalues_index_t switch (wesptictarif_t tarif) {
-case WESPTICTARIF_BASE:
- wespmetermorevalues_index_base_t base;
-case WESPTICTARIF_HCHP:
- wespmetermorevalues_index_hchp_t hchp;
-case WESPTICTARIF_TEMPO:
- wespmetermorevalues_index_tempo_t tempo;
-case WESPTICTARIF_EJP:
- wespmetermorevalues_index_ejp_t ejp;
+enum wespplsmethod_t {
+ WESPPLSMETHOD_ILS = 0,
+ WESPPLSMETHOD_ELEC = 1
};
-struct wespmetermorevalues_teleinfo_t {
- /* Données relatives à un compteur branché via TÉLÉINFO.
- * Si plusieurs compteurs ou plusieurs forfaits ont été connus
- * sur la période donnée, l'erreur `WESPRET_LRG` sera renvoyée.
- *
- * `adco`: numéro ADCO du compteur (un chiffre direct par case).
- * `phases`: nombre de phases (monophasé : 1, triphasé : 3).
- * `period`: périodes tarifaires sur la période.
- * `isousc`: intensité souscrite.
- * `pa`: puissance apparente (en VA).
- * `iinst`: intensité instantanée pour chaque phase.
- * `imax`: intensité maximale pour chaque phase. */
-
- unsigned char adco[12];
- int phases;
- wespticperiod_t period;
+/* Propriétés supplémentaires concernant un compteur d'impulsions. */
- unsigned int isousc;
- unsigned int pa;
- unsigned int iinst[3];
- unsigned int imax[3];
+struct wespcfg_meter_pulse_t {
+ /* Propriétés relatives aux compteurs de type impulsions.
+ * `method`: méthode de comptage d'impulsions.
+ * `group_size`: taille d'un groupe d'impulsions pour faire une unité. */
- /* Index pour chacun des tarifs, avec le tarif en vigueur. */
+ wespplsmethod_t method;
+ int group_size;
- wespmetermorevalues_index_t indexes;
-};
+ /* Propriétés tarifaires.
+ * `cost`: coût de l'unité. */
-union wespmetermorevalues_t switch (wespmetertype_t type) {
-case WESPMETERTYPE_TELEINFO:
- wespmetermorevalues_teleinfo_t teleinfo;
+ double cost;
};
-struct wespmetervalues_t {
- /* Valeur avec unité récupérée pour cette période.
- * `active`: le compteur a-t-il été actif (branché, envoyant des valeurs)
- * pour cette période ?
- * `count`: nombre d'unités détectées pendant cette période.
- * `unit`: unité de mesure pour la valeur précédente. */
-
- bool active;
- double count;
- wespmeterunit_t unit;
-
- /* Davantage de valeurs selon le type. */
+/* Mode de consommation/production de chaque compteur.
+ * `CONSO`: consommation.
+ * `PROD`: production (panneaux solaires, …). */
- wespmetermorevalues_t more;
+enum wespmetermode_t {
+ WESPMETERMODE_CONSO = 0,
+ WESPMETERMODE_PROD = 1
};
-/* ---
- * Configuration d'un objet.
- * --- */
-
-/* Objet de type ressource WES. */
+/* Grandeur mesurée par le compteur.
+ * `UNKNOWN`: inconnu.
+ * `WATER`: eau froide/chaude.
+ * `GAS`: gaz.
+ * `ELEC`: électricité.
+ * `FUEL`: fioul. */
-union wespcfg_wesmore_t switch (wesptype_wes_t type) {
-case WESPTYPE_WES_NONE:
-case WESPTYPE_WES_DUMMY:
-case WESPTYPE_WES_IP:
- wespcfg_wes_ip_t ip;
+enum wespmeterwhat_t {
+ WESPMETERWHAT_UNKNOWN = 0,
+ WESPMETERWHAT_WATER = 1,
+ WESPMETERWHAT_GAS = 2,
+ WESPMETERWHAT_ELEC = 3,
+ WESPMETERWHAT_FUEL = 4
};
-struct wespcfg_wes_t {
- wespcfg_wesmore_t more;
+/* Unité utilisée pour les valeurs du compteur.
+ * `UNKNOWN`: Inconnu.
+ * `WH`: Watts par heure (Wh).
+ * `KWH`: Kilo-watts par heure (kWh).
+ * `LITER`: Litres (L).
+ * `CUBICMETER`: Mètres cube (m³). */
+
+enum wespmeterunit_t {
+ WESPMETERUNIT_UNKNOWN = 0,
+ WESPMETERUNIT_WH = 1,
+ WESPMETERUNIT_KWH = 2,
+ WESPMETERUNIT_LITER = 3,
+ WESPMETERUNIT_CUBICMETER = 4
};
-/* Objet de type compteur. */
+/* Propriétés supplémentaires concernant un compteur en général, utilisé dans
+ * la définition d'un objet. */
union wespcfg_metermore_t switch (wesptype_meter_t type) {
case WESPTYPE_METER_NONE:
+ /* Paramètres génériques uniquement. */
case WESPTYPE_METER_TELEINFO:
+ wespcfg_meter_teleinfo_t teleinfo;
case WESPTYPE_METER_AMPER:
+ wespcfg_meter_amper_t amper;
case WESPTYPE_METER_PULSE:
+ wespcfg_meter_pulse_t pulse;
};
struct wespcfg_meter_t {
@@ -627,23 +423,57 @@ struct wespcfg_meter_t {
wespcfg_metermore_t more;
};
-/* Objet de type capteur. */
+/* ---
+ * Objets de type capteur.
+ * --- */
+
+/* Types de capteurs reconnus par weshd. */
+
+enum wespsensorwhat_t {
+ WESPSENSORTYPE_TEMP = 1
+};
+
+/* Unité pouvant être utilisées par les capteurs. */
+
+enum wespsensorunit_t {
+ WESPSENSORUNIT_CELSIUS = 1
+};
+
+/* Propriétés supplémentaires pour un capteur relié via le bus 1-Wire. */
+
+struct wespcfg_sensor_onewire_t {
+ unsigned char id[8];
+};
+
+/* Propriétés supplémentaires pour un capteur en général. */
union wespcfg_sensormore_t switch (wesptype_sensor_t type) {
case WESPTYPE_SENSOR_NONE:
+ /* Paramètres génériques uniquement. */
case WESPTYPE_SENSOR_ONEWIRE:
+ wespcfg_sensor_onewire_t onewire;
};
struct wespcfg_sensor_t {
+ /* Propriétés de base de tout capteur.
+ * `what`: ce qui est mesuré par le capteur.
+ * `more`: plus d'informations par rapport au type de capteur. */
+
+ wespsensorwhat_t what;
wespcfg_sensormore_t more;
};
-/* Objet général de configuration.
- * Les types sont donnés en plus dans `type` et `subtype` puisque ce n'est pas
+/* ---
+ * Définition générale d'un objet dans le protocole pour weshd.
+ * --- */
+
+/* Les types sont donnés en plus dans `type` et `subtype` puisque ce n'est pas
* parce qu'on informe le client de ceux-ci que les données suivent
* derrière. */
union wespcfgmore_t switch (wesptype_t type) {
+case WESPTYPE_NONE:
+ /* Propriétés génériques uniquement. */
case WESPTYPE_WES:
wespcfg_wes_t wes;
case WESPTYPE_METER:
@@ -661,180 +491,265 @@ struct wespcfg_t {
};
/* ---
- * Structures pour utilisation par le programme.
+ * Drapeaux pour la configuration.
* --- */
-struct wespid_with_flags_t {
- wespid_t id;
- wespflags_t flags;
-};
+/* Propriétés générales. */
-struct wespid_with_flags_and_cfg_t {
- wespid_t id;
- wespflags_t flags;
- wespcfg_t cfg;
-};
+const WESPCFG_NAME = 1;
-struct wespquery_t {
- wespid_t parent;
- int offset;
- int count;
-};
+/* Propriétés d'un serveur WES connecté par IP. */
-struct wespid_and_span_t {
- wespid_t id;
- wespdt_t begin;
- wespdt_t end;
-};
+const WESPCFG_WES_IP_TIME = 2;
+const WESPCFG_WES_IP_DHCP = 4;
+const WESPCFG_WES_IP_ADDR = 8;
+const WESPCFG_WES_IP_MASK = 16;
+const WESPCFG_WES_IP_GW = 32;
+const WESPCFG_WES_IP_DNS1 = 64;
+const WESPCFG_WES_IP_DNS2 = 128;
+const WESPCFG_WES_IP_MAC = 256;
-struct wespret_with_cfg_t {
- wespret_t ret;
- wespcfg_t cfg;
-};
+/* Propriétés générales d'un compteur. */
-struct wes
+const WESPCFG_METER_READ = 2;
+const WESPCFG_METER_MODE = 4;
+const WESPCFG_METER_WHAT = 8;
+const WESPCFG_METER_FIXED_COSTS = 16;
+const WESPCFG_METER_PRORATA = 32;
-struct wespret_with_list_t {
+/* Propriétés concernant un compteur branché via téléinfo. */
-};
+const WESPCFG_METER_TELEINFO_COSTS_BASE = 64;
+const WESPCFG_METER_TELEINFO_COSTS_HCHP = 128;
+const WESPCFG_METER_TELEINFO_COSTS_TEMPO = 256;
+const WESPCFG_METER_TELEINFO_COSTS_EJP = 512;
+const WESPCFG_METER_TELEINFO_BDPV_ENABLED = 1024;
+const WESPCFG_METER_TELEINFO_BDPV_IDS = 2048;
+const WESPCFG_METER_TELEINFO_BDPV_TIME = 4096;
-struct wespret_with_id_t {
+/* Propriétés concernant les pinces ampèremétriques. */
-};
+const WESPCFG_METER_AMPER_VOLTAGE = 64;
+const WESPCFG_METER_AMPER_COST = 128;
-struct wespret_with_data_t {
+/* Propriétés concernant un compteur d'impulsions. */
-};
+const WESPCFG_METER_PULSE_METHOD = 64;
+const WESPCFG_METER_PULSE_GROUP = 128;
+const WESPCFG_METER_PULSE_COST = 256;
-/* Gestion des serveurs WES. */
+/* Propriétés concernant un capteur branché via 1-Wire. */
-struct wespid_with_wes_t {
- wespid_t id;
- wesp_t wes;
-};
+const WESPCFG_SENSOR_ONEWIRE_ID = 2;
-struct wespid_with_wes_flags_t {
- wespid_t id;
- unsigned long to_get;
-};
+/* ---
+ * Objets de données.
+ * --- */
-struct wespquery_t {
- int offset;
- int count; /* min. 1, max. 10 ! */
-};
+/* Propriétés concernant les compteurs branchés via téléinfo. */
-struct wespret_with_id_t {
- wespret_t ret;
- wespid_t id;
- string name<>;
-};
+#define bbr_hcjb tempo_hcjb
+#define bbr_hpjb tempo_hpjb
+#define bbr_hcjw tempo_hcjw
+#define bbr_hpjw tempo_hpjw
+#define bbr_hcjr tempo_hcjr
+#define bbr_hpjr tempo_hpjr
-struct wespret_with_wes_t {
- wespret_t ret;
- wesp_t wes;
-};
+struct wespdata_meter_teleinfo_t {
+ /* Données relatives à un compteur branché via téléinfo.
+ * Si plusieurs compteurs ou plusieurs forfaits ont été connus
+ * sur la période donnée, l'erreur `WESPRET_LRG` sera renvoyée.
+ *
+ * `adco`: numéro ADCO du compteur (un chiffre direct par case).
+ * `phases`: nombre de phases (monophasé : 1, triphasé : 3).
+ * `isousc`: intensité souscrite.
+ * `pa`: puissance apparente (en VA).
+ * `iinst`: intensité instantanée pour chaque phase.
+ * `imax`: intensité maximale pour chaque phase. */
-struct wespret_with_wes_list_t {
- wespret_t ret;
- wesp_t wes<>;
-};
+ unsigned char adco[12];
+ int phases;
-/* Gestion des compteurs. */
+ unsigned int isousc;
+ unsigned int pa;
+ unsigned int iinst[3];
+ unsigned int imax[3];
-struct wespid_with_meter_id_t {
- wespid_t id;
- wespmeterid_t meter_id;
- wespmetertype_t expected_type;
- unsigned long to_get;
+ /* `<forfait>_<période>`: nombre d'unités (partie commune) consommées
+ * par période tarifaire. */
+
+ double base_th;
+ double hchp_hc;
+ double hchp_hp;
+ double tempo_hcjb;
+ double tempo_hpjb;
+ double tempo_hcjw;
+ double tempo_hpjw;
+ double tempo_hcjr;
+ double tempo_hpjr;
+ double ejp_hn;
+ double ejp_pm;
};
-struct wespid_with_meter_t {
- wespid_t id;
- wespmeterid_t meter_id;
- wespmeter_t meter;
+/* Propriétés concernant les compteurs. */
+
+union wespdata_metermore_t switch (wesptype_meter_t type) {
+case WESPTYPE_METER_AMPER:
+ /* Aucune donnée supplémentaire à fournir. */
+case WESPTYPE_METER_PULSE:
+ /* Aucune donnée supplémentaire à fournir. */
+case WESPTYPE_METER_TELEINFO:
+ wespdata_meter_teleinfo_t teleinfo;
};
-struct wespid_with_meter_id_and_span_t {
- wespid_t id;
- wespmeterid_t meter_id;
- wespdt_t from;
- wespdt_t to; /* non inclus ! */
+struct wespdata_meter_t {
+ /* Un compteur est un objet qui compte le nombre d'unités consommées
+ * d'une énergie donnée, e.g. des litres d'eau ou des kVA d'électricité.
+ *
+ * `count`: nombre total d'unités consommées sur la période.
+ * `unit`: unité de la valeur précédente. */
+
+ double count;
+ wespmeterunit_t unit;
+
+ wespdata_metermore_t more;
};
-struct wespid_with_meter_query_t {
- wespid_t id;
- wespmetertype_t of_type;
- int offset;
- int count; /* min. 1, max. 10 ! */
+/* Propriétés concernant les capteurs. */
+
+struct wespdata_sensor_t {
+ /* Un capteur est un objet dont seules les valeurs instantanées nous
+ * intéressent, et pour lesquels nous produirons donc des statistiques.
+ *
+ * `min`: valeur minimale sur la période.
+ * `avg`: moyenne sur la période.
+ * `max`: valeur maximale sur la période.
+ * `unit`: unité des valeurs précédentes. */
+
+ double min;
+ double avg;
+ double max;
+ wespsensorunit_t unit;
};
-struct wespret_with_meter_t {
- wespret_t ret;
- wespmeter_t meter;
+/* Objet général de données. */
+
+union wespdatamore_t switch (wesptype_t type) {
+case WESPTYPE_METER:
+ wespdata_meter_t meter;
+case WESPTYPE_SENSOR:
+ wespdata_sensor_t sensor;
};
-struct wespret_with_meter_data_t {
- wespret_t ret;
- wespmetervalues_t val;
+struct wespdata_t {
+ /* Valeurs avec unité consommée pendant la période.
+ * `active`: temps cumulé d'activité (« uptime ») de la ressource,
+ * de 0 (jamais en activité) à 10000 (toujours en activité).
+ * `more`: plus d'informations selon le type de la ressource, compteur
+ * ou capteur. */
+
+ int active;
+ wespdatamore_t more;
};
-struct wespmeter_list_element_t {
- wespmeterid_t id;
- wespmetertype_t type;
+/* ---
+ * Propriétés d'enregistrement pour `GATHER_WES()`.
+ * --- */
+
+struct wespgopts_ip_t {
+ /* Propriétés d'instanciation spécifiques au serveur WES connecté par IP.
+ * `addr` : adresse IP.
+ * `http_user`: utilisateur HTTP.
+ * `http_pass`: mot de passe HTTP.
+ * `ftp_user`: utilisateur FTP.
+ * `ftp_pass`: mot de passe FTP. */
+
+ wespaddr_t addr;
+ string http_user<>;
+ string http_pass<>;
+ string ftp_user<>;
+ string ftp_pass<>;
};
-struct wespret_with_meter_list_t {
- wespret_t ret;
- wespmeter_list_element_t meters<>;
+/* Type général. */
+
+union wespgopts_t switch (westype_wes_t type) {
+case WESPTYPE_WES_NONE:
+ /* Ce type ne peut pas être instancié. */
+case WESPTYPE_WES_DUMMY:
+ /* Ce type ne prend aucun paramètre. */
+case WESPTYPE_WES_IP:
+ wespgopts_ip_t ip;
};
-/* Gestion des capteurs. */
+/* ---
+ * Arguments.
+ * --- */
-struct wespid_with_sensor_id_t {
+struct wespid_with_flags_t {
wespid_t id;
- wespsensorid_t sensor_id;
- wespmetertype_t expected_type;
- unsigned long to_get;
+ wespflags_t flags;
};
-struct wespid_with_sensor_t {
+struct wespid_with_flags_and_cfg_t {
wespid_t id;
- wespsensorid_t sensor_id;
- wespsensor_t sensor;
+ wespflags_t flags;
+ wespcfg_t cfg;
};
-struct wespid_with_sensor_id_and_span_t {
- wespid_t id;
- wespsensorid_t sensor_id;
- wespdt_t from;
- wespdt_t to; /* non inclus ! */
+struct wespquery_t {
+ wespid_t parent;
+ int offset;
+ int count; /* 30 max. */
};
-struct wespid_with_sensor_query_t {
+struct wespid_and_span_t {
wespid_t id;
- wespsensortype_t of_type;
- int offset;
- int count; /* min. 1, max. 10 */
+ wespdt_t begin;
+ wespdt_t end;
};
-struct wespret_with_sensor_t {
- wespret_t ret;
- wespsensor_t sensor;
+/* ---
+ * Réponses.
+ * --- */
+
+/* Type de la réponse.
+ * `NONE`: aucune donnée n'accompagne le code de retour.
+ * `ID`: un identifiant accompagne le code de retour.
+ * `CFG`: la configuration d'une ressource accompagne la réponse.
+ * `DATA`: des données (compteurs, capteurs) accompagnent la réponse.
+ * `LIST`: une liste de configurations avec identifiants accompagne
+ * la réponse. */
+
+enum wespresp_type_t {
+ WESPRESPTYPE_NONE = 0,
+ WESPRESPTYPE_ID = 1,
+ WESPRESPTYPE_CFG = 2,
+ WESPRESPTYPE_DATA = 3,
+ WESPRESPTYPE_LIST = 4
};
-struct wespret_with_sensor_data_t {
- wespret_t ret;
- wespsensorvalues_t val;
+struct wesplistelt_t {
+ wespid_t id;
+ wespcfg_t cfg;
};
-struct wespsensor_list_element_t {
- wespsensorid_t id;
- wespsensortype_t type;
+union wespresp_more_t switch (wespresp_type_t type) {
+case WESPRESPTYPE_NONE:
+ /* Code de retour uniquement. */
+case WESPRESPTYPE_ID:
+ wespid_t id;
+case WESPRESPTYPE_CFG:
+ wespcfg_t cfg;
+case WESPRESPTYPE_DATA:
+ wespdata_t data;
+case WESPRESPTYPE_LIST:
+ wesplistelt_t elements<30>;
};
-struct wespret_with_sensor_list_t {
+struct wespresp_t {
wespret_t ret;
- wespsensor_list_element_t sensors<>;
+ wespresp_more_t more;
};
/* ---
@@ -849,21 +764,21 @@ program WESHD_PROG {
/* Récupération, suppression d'un ou plusieurs éléments. */
- wespret_with_cfg_t GET(wespid_with_flags_t args) = 1;
- wespret_t SET(wespid_with_flags_and_cfg_t args) = 2;
+ wespresp_t GET(wespid_with_flags_t args) = 1;
+ wespresp_t SET(wespid_with_flags_and_cfg_t args) = 2;
- wespret_with_list_t QUERY(wespquery_t args) = 3;
- wespret_t REMOVE(wespid_t id) = 4;
+ wespresp_t QUERY(wespquery_t args) = 3;
+ wespresp_t REMOVE(wespid_t id) = 4;
/* Opérations spécifiques aux serveurs WES.
* `GATHER_WES()`: récupération (voire initialisation) d'un WES. */
- wespret_with_id_t GATHER_WES(wespoptions_t args) = 5;
+ wespresp_t GATHER_WES(wespgatheroptions_t args) = 5;
/* Opérations spécifiques aux compteurs et capteurs.
* `GET_DATA()`: récupération de données. */
- wespret_with_data_t GET_DATA(wespid_and_span_t args) = 6;
+ wespresp_t GET_DATA(wespid_and_span_t args) = 6;
/* TODO: interactions avec le LCD */
} = 1;