aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas "Cakeisalie5" Touhey <thomas@touhey.fr>2018-04-10 20:54:55 +0200
committerThomas "Cakeisalie5" Touhey <thomas@touhey.fr>2018-04-10 20:54:55 +0200
commite1bdcc57717505f9c9071976a2b7d054b04ba1e0 (patch)
treed76d721231efcf5d869256d0b4a785759617d380
parent3b9f3abff960176dcd57460c2b42e9d8784faca1 (diff)
Continuing.
-rwxr-xr-xMakefile16
-rwxr-xr-xMakefile.msg65
-rwxr-xr-xMakefile.vars19
-rw-r--r--client/args.cpp89
-rw-r--r--client/internals.hpp11
-rw-r--r--client/main.cpp66
-rw-r--r--daemon/dummy/if.c51
-rw-r--r--daemon/error.c3
-rw-r--r--daemon/internals.h177
-rw-r--r--daemon/ip/if.c58
-rw-r--r--daemon/ip/internals.h1
-rw-r--r--daemon/server.c100
-rw-r--r--daemon/wes.c131
-rw-r--r--doc/CGI.rst831
-rw-r--r--include/wesh.hpp37
-rw-r--r--lib/dummy_wes.cpp10
-rw-r--r--lib/wes.cpp82
-rw-r--r--lib/wes_base.cpp84
-rwxr-xr-xtools/testclient.sh2
-rw-r--r--weshd.x24
20 files changed, 1396 insertions, 461 deletions
diff --git a/Makefile b/Makefile
index d83bd07..73ba72b 100755
--- a/Makefile
+++ b/Makefile
@@ -17,11 +17,13 @@ clean:
# Une target pour remettre à zéro.
-mrproper: clean
+distclean: clean
$(call rmsg,Removing configuration and tarballs.)
$(call qcmd,$(RM) Makefile.cfg)
$(call qcmd,$(RM) $(NAME)-*.tar*)
+ mrproper: distclean
+
# Une target pour tout refaire.
re: clean all
@@ -35,7 +37,7 @@ install: install-daemon install-lib install-client
nothing:
-.PHONY: all clean mrproper re nothing
+.PHONY: all clean distclean mrproper re nothing
# ---
# Dépendances de vérifications de la configuration.
@@ -213,7 +215,7 @@ $(eval $(call make-daemon-obj-rule,$(src))))
.PHONY: all-client install-client
# ---
-# Création de l'archive de distribution (tarball).
+# Création et téléversement de l'archive de distribution (tarball).
# ---
dist: mrproper
@@ -224,7 +226,13 @@ dist: mrproper
tar czf $(NAME)-$(VERSION).tar.gz --exclude .git $(NAME)-$(VERSION))
$(call qcmd,$(RM) -r $(NAME)-$(VERSION))
-.PHONY: dist
+ tarball: dist
+
+ upload-tarball: tarball
+ $(call msg,Uploading the tarball to the web server.)
+ $(call qcmd,scp $(NAME)-$(VERSION).tar.gz usimarit.touhey.org:pub)
+
+.PHONY: dist tarball upload-tarball
# ---
# Test du couple client/démon.
diff --git a/Makefile.msg b/Makefile.msg
index 63053c7..d675fef 100755
--- a/Makefile.msg
+++ b/Makefile.msg
@@ -1,63 +1,82 @@
#!/usr/bin/make -f
-# The Makefile message subsystem.
-# For nice logs. 5 dollars per log only.
-#*****************************************************************************#
-# Colors and misc #
-#*****************************************************************************#
-# Used colors ANSI modifiers escape codes
+# Sous-système de messages pour le Makefile.
+# Cinq dollars par message uniquement. En ce moment, promotion : pour sept
+# messages affichés, trois messages offerts. Alors profitez-en !
+
+# ---
+# Couleurs et divers utilitaires.
+# ---
+
+# Modifiers ANSI pour les séquences d'échappement concernant les couleurs
+# utilisées ci-dessous.
+
color_green := 32
color_red := 31
color_yellow := 33
-# Newline - comes handy in some situations
+# Retour à la ligne. Peut venir à bout de situations où le tirage de cheveux
+# est de mise.
+
define \n
endef
-#*****************************************************************************#
-# General messages #
-#*****************************************************************************#
-# Command message - display basic info about the command, and run it.
+# ---
+# “Who you're gonna call?”
+# Ces fonctions-là, qui sont derrière les autres.
+# ---
+
+# Message de commande — affiche diverses informations basiques concernant
+# la commande, avant de l'exécuter.
+
define _cmd
@$(if $(MAKE_FULL_LOG),,\
printf "\033[1;""$4""m>\033[0m \033[1m%s\033[0m %s\n" "$1" "$2";)
$(if $(MAKE_FULL_LOG),,@)$3
endef
-# Quiet command - make it non-quiet if full log is enabled.
+# Commande silencieuse — à rendre bavarde si le logging complet est activé.
+
define qcmd
$(if $(MAKE_FULL_LOG),,@)$1
endef
-# Normal message - display it.
+# Message normal — à afficher tel quel.
+
define _msg
$(if $(MAKE_FULL_LOG),,\
@printf "\033[1;""$2""m>\033[0m \033[1m%s\033[0m\n" "$1")
endef
-#*****************************************************************************#
-# Commands #
-#*****************************************************************************#
-# Build command
+# ---
+# Commandes.
+# ---
+
+# Commandes de construction.
+
define bcmd
$(call _cmd,$1,$2,$3,$(color_green))
endef
-#*****************************************************************************#
-# Messages #
-#*****************************************************************************#
-# Normal message.
+# ---
+# Messages.
+# ---
+
+# Message normal/générique.
+
define msg
$(call _msg,$1,$(color_green))
endef
-# Remove message
+# Message de suppression (en rouge).
+
define rmsg
$(call _msg,$1,$(color_red))
endef
-# Install message
+# Message d'installation (en jaune).
+
define imsg
$(call _msg,$1,$(color_yellow))
endef
diff --git a/Makefile.vars b/Makefile.vars
index 90e3a51..5e8448a 100755
--- a/Makefile.vars
+++ b/Makefile.vars
@@ -39,9 +39,12 @@
CWARN := -Weverything -Wno-disabled-macro-expansion \
-Wno-switch-enum -Wno-missing-field-initializers -Wno-format-nonliteral \
-Wno-reserved-id-macro -Wno-padded -Wno-covered-switch-default
- CFLAGS := -pedantic$(if $(DEBUG_SYMS), -g) $(CWARN)
+ CDEFS := -D WESHD_VERSION="\"$(VERSION)\"" -D WESHD_MAINT="\"$(MAINTAINER)\""
+
+ CFLAGS := -pedantic$(if $(DEBUG_SYMS), -g) $(CWARN) $(CDEFS)
CXXWARN := $(CWARN) -Wno-c++98-compat -Wno-c++98-compat-pedantic \
- -Wno-vla -Wno-vla-extension -Wno-weak-vtables -Wno-covered-switch-default
+ -Wno-vla -Wno-vla-extension -Wno-weak-vtables -Wno-covered-switch-default \
+ $(CDEFS)
CXX := clang++
LDXX := clang++
@@ -71,9 +74,14 @@
# libwesh, soit la bibliothèque client.
- DEP_lib_CFLAGS := -I include/
+ DEP_lib_CXXFLAGS := -I include/
DEP_lib_LIBS := -L build -l$(LIB)
+# boost tel qu'utilisé par le client.
+
+ DEP_boost_CXXFLAGS :=
+ DEP_boost_LIBS := -lboost_program_options
+
# ---
# Informations concernant les fichiers générés par SunRPC.
# ---
@@ -93,7 +101,6 @@
D_CFLAGS := $(CFLAGS) $(foreach x,$(D_DEPS),$(DEP_$(x)_CFLAGS)) \
-I $(S_OBJDIR) -D NOLOGO=$(NO_LOGO) -D DEFAULT_LOGLEVEL=WL$(LOG_LEVEL) \
- -D WESHD_VERSION="\"$(VERSION)\"" -D WESHD_MAINT="\"$(MAINTAINER)\"" \
-D DELETE_SCRIPTS="$(if $(DELETE_SCRIPTS),$(DELETE_SCRIPTS),1)" \
-D CURLHTTPVERBOSE="$(if $(CURL_HTTP_VERBOSE),$(CURL_HTTP_VERBOSE),0)L" \
-D CURLFTPVERBOSE="$(if $(CURL_FTP_VERBOSE),$(CURL_FTP_VERBOSE),0)L"
@@ -167,9 +174,9 @@
# Dépendances et options.
- C_DEPS := lib
+ C_DEPS := lib boost
- C_CXXFLAGS := $(CXXFLAGS) $(foreach x,$(C_DEPS),$(DEP_$(x)_CFLAGS))
+ C_CXXFLAGS := $(CXXFLAGS) $(foreach x,$(C_DEPS),$(DEP_$(x)_CXXFLAGS))
C_LIBS := $(foreach x,$(C_DEPS),$(DEP_$(x)_LIBS))
C_LDFLAGS := $(C_LIBS)
diff --git a/client/args.cpp b/client/args.cpp
new file mode 100644
index 0000000..e5a5319
--- /dev/null
+++ b/client/args.cpp
@@ -0,0 +1,89 @@
+/* ****************************************************************************
+ * args.cpp -- interface en ligne de commande, décodage des arguments.
+ * Copyright (C) 2018 Thomas Touhey <thomas@touhey.fr>
+ *
+ * This project is governed by the CeCILL license under French law and
+ * abiding by the rules of distribution of free software. You can use,
+ * modify and/or redistribute the software under the terms of the
+ * CeCILL license as circulated by CEA, CNRS and INRIA at the
+ * following URL: "http://www.cecill.info".
+ *
+ * As a counterpart to the access to the source code and rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty and the project's author, the holder of the
+ * economic rights, and the successive licensors have only limited liability.
+ *
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading, using, modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean that it is complicated to manipulate, and that also therefore
+ * means that it is reserved for developers and experienced professionals
+ * having in-depth computer knowledge. Users are therefore encouraged to load
+ * and test the software's suitability as regards their requirements in
+ * conditions enabling the security of their systems and/or data to be
+ * ensured and, more generally, to use and operate it in the same conditions
+ * as regards security.
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ * ************************************************************************* */
+#include "internals.hpp"
+#include <boost/program_options.hpp>
+
+namespace po = boost::program_options;
+
+/* ---
+ * Décodage des arguments de la ligne de commande.
+ * --- */
+
+int parse_args(int ac, const char *av[], args_t &args)
+{
+ po::variables_map vm;
+ po::options_description opts{"Options"};
+ po::positional_options_description params;
+
+ args.menu = MENU_QUIT;
+
+ /* Ajout des paramètres et options. */
+
+ opts.add_options()
+ ("help,h", "display this help message")
+ ("version,v", "display the version message");
+
+ /* Décodage et interprétation de la ligne de commande. */
+
+ try {
+ po::store(po::command_line_parser(ac, av)
+ .options(opts).positional(params).run(), vm);
+ po::notify(vm);
+ } catch (const std::exception &ex) {
+ std::cerr << "weshclient: " << ex.what() << std::endl;
+ return (1);
+ }
+
+ if (vm.count("version")) {
+ std::cerr << "weshclient v" WESHD_VERSION
+ << " (licensed under CeCILL 2.1)" << std::endl
+ << "Maintained by " << WESHD_MAINT << "." << std::endl << std::endl
+ << "This is free software; see he source for copying conditions."
+ << std::endl << "There is NO warranty; not even for "
+ << "MERCHANTABILITY" << std::endl << "or FITNESS FOR A "
+ << "PARTICULAR PURPOSE." << std::endl;
+
+ return (0);
+ }
+
+ if (vm.count("help")) {
+ std::cerr << "syntax: weshclient [OPTIONS..]" << std::endl << std::endl
+ << opts << std::endl
+ << "Report bugs to " WESHD_MAINT "." << std::endl;
+
+ return (0);
+ }
+
+ /* TODO */
+
+ args.menu = MENU_TEST;
+
+ return (0);
+}
diff --git a/client/internals.hpp b/client/internals.hpp
index 33d9ec0..4d1b995 100644
--- a/client/internals.hpp
+++ b/client/internals.hpp
@@ -32,6 +32,15 @@
# include <iostream>
# include <wesh.hpp>
-/* TODO: autres mécanismes internes pour le client */
+enum menu_t {
+ MENU_QUIT = 0,
+ MENU_TEST = 1
+};
+
+struct args_t {
+ menu_t menu;
+};
+
+extern int parse_args(int ac, const char *av[], args_t &args);
#endif /* INTERNALS_HPP */
diff --git a/client/main.cpp b/client/main.cpp
index 87e1182..d889838 100644
--- a/client/main.cpp
+++ b/client/main.cpp
@@ -29,61 +29,39 @@
* ************************************************************************* */
#include "internals.hpp"
-static void display_electricity_meter(int id, wesh::electricity_meter& em)
+static void test_things(void)
{
- std::cout << std::endl
- << "Compteur n°" << id + 1 << std::endl
- << "| Nom du compteur : " << em.name << std::endl
- << "| Mode du compteur : " << em.mode << std::endl
- << "| Période tarifaire : " << em.subscription << std::endl
- << "| Nombre de phases : " << em.phase_mode << std::endl
- << std::endl;
-}
-
-static void testwes(wesh::wes_base& wes)
-{
- struct tm dt;
+ wesh::dummy_wes wes;
- dt = wes.get_date();
- std::cout << std::endl
- << "Date actuelle : " << asctime(&dt)
- << std::endl;
+ wes.gather();
+ std::cout << wes << std::endl;
- {
- wesh::electricity_meter em = wes.get_electricity_meter(0);
+ wes.set_name("hello-world");
+ std::cout << wes << std::endl;
- display_electricity_meter(0, em);
- }
-
- {
- wesh::electricity_meter em;
+ wes.remove();
- em.gather(&wes, 1);
- display_electricity_meter(1, em);
- }
+ return ;
}
-static void tests(void)
+/* ---
+ * Point d'entrée du programme.
+ * --- */
+
+int main(int ac, const char *av[])
{
- const unsigned char ip[4] = {192, 168, 1, 111};
- wesh::dummy_wes dummy_wes;
- wesh::wes real_wes;
+ args_t args;
- dummy_wes.gather();
- testwes(dummy_wes);
+ if (parse_args(ac, av, args))
+ return (1);
- real_wes.gather(ip);
- testwes(real_wes);
-}
+ switch (args.menu) {
+ case MENU_QUIT:
+ break;
-int main(void)
-{
- try {
- tests();
- } catch (const std::exception &exc) {
- std::cerr << std::endl << "An exception occurred: "
- << exc.what() << std::endl << std::endl;
- return (1);
+ case MENU_TEST:
+ test_things();
+ break;
}
return (0);
diff --git a/daemon/dummy/if.c b/daemon/dummy/if.c
index 758cb67..a2a2650 100644
--- a/daemon/dummy/if.c
+++ b/daemon/dummy/if.c
@@ -51,6 +51,7 @@ static int free_dummy_wes(wes_t *wes)
int add_dummy_wes(weslist_t *list, wes_t **wesp, wescreatedata_t *data)
{
wes_t *wes;
+ char dummyname[20];
int err;
(void)data;
@@ -61,9 +62,13 @@ int add_dummy_wes(weslist_t *list, wes_t **wesp, wescreatedata_t *data)
if (!wes)
return (WRALLOC);
- /* Initialisons la base et ajoutons la ressource à la liste. */
+ /* Initialisons la base, définissons le nom du WES et
+ * ajoutons la ressource à la liste. */
+
+ sprintf(dummyname, "dummy-%04X", (unsigned int)wes);
if ((err = init_wes_base(wes, &dumif))
+ || (err = set_name(wes, dummyname))
|| (err = add_to_list(list, wes))) {
free_dummy_wes(wes);
return (err);
@@ -79,9 +84,21 @@ int add_dummy_wes(weslist_t *list, wes_t **wesp, wescreatedata_t *data)
* Interactions avec l'heure du faux serveur WES (heure locale).
* --- */
-static int getfaketime(wes_t *wes, westime_t **dtp)
+static int setfakename(wes_t *wes, const char *name)
{
- static westime_t dt;
+ /* En fait, on n'a pas d'appareil distant sur lequel définir le nom,
+ * donc du coup c'est bon directement. Le serveur va se charger
+ * de définir le nom dans la base de la ressource. */
+
+ (void)wes;
+ (void)name;
+
+ return (WROK);
+}
+
+static int getfaketime(wes_t *wes, westime_object_t **dtp)
+{
+ static westime_object_t dt;
time_t tp;
struct tm *tm;
@@ -94,16 +111,16 @@ static int getfaketime(wes_t *wes, westime_t **dtp)
/* Sauvegarde de l'heure */
- dt.cfg.year = tm->tm_year + 1900;
- dt.cfg.mon = tm->tm_mon + 1;
- dt.cfg.dom = tm->tm_mday;
- dt.cfg.hour = tm->tm_hour;
- dt.cfg.min = tm->tm_min;
- dt.cfg.sec = tm->tm_sec;
- dt.cfg.dow = tm->tm_wday ? tm->tm_wday - 1 : 6;
- dt.cfg.sum = tm->tm_isdst;
- dt.cfg.tzhour = 0;
- dt.cfg.tzmin = 0;
+ dt.cfg.dt.year = tm->tm_year + 1900;
+ dt.cfg.dt.mon = tm->tm_mon + 1;
+ dt.cfg.dt.dom = tm->tm_mday;
+ dt.cfg.dt.hour = tm->tm_hour;
+ dt.cfg.dt.min = tm->tm_min;
+ dt.cfg.dt.sec = tm->tm_sec;
+ dt.cfg.dt.dow = tm->tm_wday ? tm->tm_wday - 1 : 6;
+ dt.cfg.dt.sum = tm->tm_isdst;
+ dt.cfg.dt.tzhour = 0;
+ dt.cfg.dt.tzmin = 0;
/* On est bons ! */
@@ -115,9 +132,9 @@ static int getfaketime(wes_t *wes, westime_t **dtp)
* Interactions avec le faux compteur branché via TÉLÉINFO.
* --- */
-static int getfaketic(wes_t *wes, int id, westic_t **ticp)
+static int getfaketic(wes_t *wes, int id, westic_object_t **ticp)
{
- static westic_t tic;
+ static westic_object_t tic;
static char name[20];
(void)wes;
@@ -130,7 +147,7 @@ static int getfaketic(wes_t *wes, int id, westic_t **ticp)
sprintf(name, "Faux compteur #%d", id + 1);
tic.cfg.name = name;
tic.cfg.is_read = 1;
- tic.cfg.mode = id ? WESTICMODE_PROD : WESTICMODE_CONSO;
+ tic.cfg.mode = id ? WESMODE_PROD : WESMODE_CONSO;
tic.cfg.abo = 0.0;
tic.cfg.prorata = 0;
@@ -188,7 +205,7 @@ static int getfaketic(wes_t *wes, int id, westic_t **ticp)
static wesif_t dumif = {
free_dummy_wes,
- NULL, NULL,
+ setfakename,
NULL,
getfaketime, NULL,
NULL, NULL,
diff --git a/daemon/error.c b/daemon/error.c
index 49e2d06..76f5b9e 100644
--- a/daemon/error.c
+++ b/daemon/error.c
@@ -37,7 +37,8 @@ static const char *error_strings[] = {
"une allocation mémoire a échoué",
"espace insuffisant pour stocker la réponse",
"ce medium est indisponible",
- NULL, NULL, NULL,
+ "an argument was invalid",
+ NULL, NULL,
"le serveur n'a pas pu être atteint",
"la connexion a été réinitialisée",
diff --git a/daemon/internals.h b/daemon/internals.h
index 5baa094..5bbe2ea 100644
--- a/daemon/internals.h
+++ b/daemon/internals.h
@@ -37,10 +37,6 @@
# include <errno.h>
# include <curl/curl.h>
-/* Headers spécifiques POSIX pour le RPC. */
-
-# include <arpa/inet.h>
-
/* ---
* Codes de retour internes.
* --- */
@@ -53,6 +49,7 @@
# define WRALLOC 4 /* Une allocation mémoire a échoué. */
# define WRSPACE 5 /* Pas assez d'espace pour stocker quelque chose */
# define WRUNAVAIL 6 /* Ce medium est indisponible (éteint ?) */
+# define WRVAL 7 /* L'un des arguments est invalide. */
# define WRNOHOST 10 /* Le serveur n'a pas pu être atteint. */
# define WRCONN 11 /* La connexion a été réinitialisée. */
@@ -122,7 +119,7 @@ typedef int wesfreemem_t (void*);
* Temps et heure.
* --- */
-typedef struct westimecfg {
+typedef struct westime {
int year; /* e.g. 2018 */
int mon; /* 1 à 12 */
int dom; /* 1 à 31 */
@@ -133,15 +130,19 @@ typedef struct westimecfg {
int dow; /* 0 à 6 (lundi à dimanche) */
int sum; /* « summer time » (heure d'été), 0 si heure d'hiver */
int tzhour, tzmin; /* GMT+HH:MM, e.g. 1 puis 45 pour GMT+01:45 */
+} westime_t;
+
+typedef struct westimecfg {
+ westime_t dt;
/* TODO: NTP */
} westimecfg_t;
-typedef struct westime {
+typedef struct westime_object {
wesfreemem_t *free;
westimecfg_t cfg;
-} westime_t;
+} westime_object_t;
/* ---
* Propriétés réseau.
@@ -178,7 +179,7 @@ typedef struct wesnet {
wesnetcfg_t cfg;
wesnetdata_t data;
-} wesnet_t;
+} wesnet_object_t;
/* Services (pour les identifiants). */
@@ -197,9 +198,9 @@ typedef enum wessrvtype {
* Le mode de production est pour, par exemple, les panneaux solaires. */
typedef enum westicmode {
- WESTICMODE_CONSO,
- WESTICMODE_PROD
-} westicmode_t;
+ WESMODE_CONSO,
+ WESMODE_PROD
+} wesmode_t;
/* Type de tarif auquel un compteur électrique peut se soumettre. */
@@ -235,7 +236,7 @@ typedef struct westiccfg {
char *name;
int is_read;
- westicmode_t mode;
+ wesmode_t mode;
/* Propriétés tarifaire.
* `abo`: coûts fixes de l'abonnement actuel.
@@ -317,7 +318,129 @@ typedef struct westic {
westiccfg_t cfg;
westicdata_t data;
-} westic_t;
+} westic_object_t;
+
+typedef struct westicdata_object {
+ wesfreemem_t *free;
+
+ westicdata_t data;
+} westicdata_object_t;
+
+/* ---
+ * Pinces ampèremétriques.
+ * --- */
+
+typedef struct wespcecfg {
+ /* Propriétés de base :
+ * `name`: nom de la pince.
+ * `is_read`: la pince est-elle lue ?
+ * `mode`: mode consommation ou production du compteur. */
+
+ char *name;
+ int is_read;
+ wesmode_t mode;
+
+ /* Propriétés.
+ * `voltage`: tension en V ;
+ * `tic_id`: reprendre coûts d'un compteur ;
+ * `cost`: coût par kWh si `tic_id < 0`. */
+
+ int voltage;
+ int tic_id;
+ double cost;
+} wespcecfg_t;
+
+typedef struct wespcedata {
+ /* Index: énergie consommée en Wh (XXX: depuis quand ? */
+
+ unsigned long index;
+} wespcedata_t;
+
+typedef struct wespce_object {
+ wesfreemem_t *free;
+
+ wespcecfg_t cfg;
+ wespcedata_t data;
+} wespce_object_t;
+
+typedef struct wespcedata_object {
+ wesfreemem_t *free;
+
+ wespcedata_t data;
+} wespcedata_object_t;
+
+/* ---
+ * Compteurs d'impulsions.
+ * --- */
+
+typedef enum wesplstype {
+ WESPLSTYPE_WATER = 0, /* eau froide/chaude */
+ WESPLSTYPE_GAS = 1, /* gaz */
+ WESPLSTYPE_ELEC = 2, /* electricité */
+ WESPLSTYPE_FUEL = 3 /* fioul */
+} wesplstype_t;
+
+typedef enum wesplsmethod {
+ WESPLSMETHOD_ILS = 0, /* mécanique */
+ WESPLSMETHOD_ELEC = 1, /* électronique */
+} wesplsmethod_t;
+
+typedef enum wesplsunit {
+ WESPLSUNIT_LITER = 0, /* litres */
+ WESPLSUNIT_CUBEMETER = 1, /* m³ */
+ WESPLSUNIT_WH = 2, /* Wh */
+ WESPLSUNIT_KWH = 3 /* kWh */
+} wesplsunit_t;
+
+typedef struct wesplscfg {
+ /* Propriétés de base :
+ * `name`: nom du compteur d'impulsions.
+ * `is_read` le compteur est-elle lu ?
+ * `mode`: mode production ou consommation du compteur. */
+
+ char *name;
+ int is_read;
+ wesmode_t mode;
+
+ /* Propriétés.
+ * `type`: type d'impulsion (qu'est-ce qui est mesuré) ;
+ * `method`: méthode de mesure des impulsions ;
+ * `unit`: unité de mesure par unité de groupe d'impulsions ;
+ * `group`: nombre d'impulsions par groupe ;
+ * `tic_id`: reprendre coûts d'un compteur ;
+ * `cost_year`: coût par an en € si `tic_id < 0` ;
+ * `cost`: coût par unité si `tic_id < 0`. */
+
+ wesplstype_t type;
+ wesplsmethod_t method;
+ wesplsunit_t unit;
+ int group;
+ int tic_id;
+ double cost_year;
+ double cost;
+} wesplscfg_t;
+
+typedef struct wesplsdata {
+ /* Données variant.
+ * `index`: index actuel.
+ * `today`: impulsions aujourd'hui. */
+
+ unsigned long index;
+ int today;
+} wesplsdata_t;
+
+typedef struct wespls_object {
+ wesfreemem_t *free;
+
+ wesplscfg_t cfg;
+ wesplsdata_t data;
+} wespls_object_t;
+
+typedef struct wesplsdata_object {
+ wesfreemem_t *free;
+
+ wesplsdata_t data;
+} wesplsdata_object_t;
/* ---
* Définition des interfaces.
@@ -341,19 +464,19 @@ typedef struct wes wes_t;
typedef struct wesif {
int (*free)(wes_t *wes);
- int (*getname)(wes_t *wes); /* doit appeler `set_name()` ! */
int (*setname)(wes_t *wes, const char *name);
-
int (*setsrvids)(wes_t *wes, wessrvtype_t service,
const char *name, const char *pass);
- int (*gettime)(wes_t *wes, westime_t **dt);
+ int (*gettime)(wes_t *wes, westime_object_t **dt);
int (*settime)(wes_t *wes, westimecfg_t const *cfg);
- int (*getnet)(wes_t *wes, wesnet_t **net);
+ int (*getnet)(wes_t *wes, wesnet_object_t **net);
int (*setnet)(wes_t *wes, wesnetcfg_t const *cfg);
- int (*gettic)(wes_t *wes, int id, westic_t **tic);
+ int (*gettic)(wes_t *wes, int id, westic_object_t **tic);
+ int (*getticdata)(wes_t *wes, int id, westime_t const *dt,
+ westicdata_object_t **ticdata);
int (*settic)(wes_t *wes, int id, westiccfg_t const *cfg);
} wesif_t;
@@ -539,8 +662,22 @@ extern int deinit_wes_base(wes_t *wes);
extern void set_obj_to_free(wes_t *wes, void *obj);
-/* Définir le nom d'un serveur WES (dans sa base). */
-
+/* Définir le nom d'un serveur WES (dans sa base).
+ * - `prep_name()`: préparation d'un nom en sanitizant (sans validation,
+ * utilisé pour récupérer des données depuis les WES surtout ;
+ * - `prep_valid_name()`: préparation d'un nom en validant ou non,
+ * utilisé pour filtrer ce que donne le client ;
+ * - `free_name()`: suppression d'un nom préparé par `prep_name()` ou
+ * `prep_valid_name()` ;
+ * - `assign_name()`: assignation au nom de ce qu'on a fait juste avant ;
+ * - `set_name()`: définir le nom avec `prep_name()` et `assign_name()`,
+ * en faisant `free_name()` sur l'ancien nom. */
+
+extern int prep_name(char **dst, const char *src);
+extern int prep_valid_name(char **dst, const char *src);
+extern void free_name(char *name);
+
+extern int assign_name(wes_t *wes, char *name);
extern int set_name(wes_t *wes, const char *name);
/* ---
diff --git a/daemon/ip/if.c b/daemon/ip/if.c
index 061bba0..a46900e 100644
--- a/daemon/ip/if.c
+++ b/daemon/ip/if.c
@@ -111,6 +111,28 @@ static int make_ip_wes(wes_t **wesp, wescreatedata_t *data)
return (err);
}
+ /* Récupération du hostname. */
+
+ {
+ char hostname[33];
+ wescgi_t blocks[] = {
+ WESCGI("r n", "%s", hostname, 33)
+ };
+
+ if ((err = get_cgi(wes, 1, blocks))) {
+ msg((wlerror, "cgi error: %s", error_string(err)));
+ free_ip_wes(wes);
+ return (err);
+ }
+
+ if ((err = set_name(wes, hostname))) {
+ free_ip_wes(wes);
+ return (err);
+ }
+ }
+
+ /* TODO: récupération du hostname */
+
*wesp = wes;
return (WROK);
}
@@ -210,9 +232,9 @@ static int setwesids(wes_t *wes, wessrvtype_t service,
/* `getwestime()`: récupération de l'horodate actuelle d'un serveur WES */
-static int getwestime(wes_t *wes, westime_t **dtp)
+static int getwestime(wes_t *wes, westime_object_t **dtp)
{
- static westime_t dt;
+ static westime_object_t dt;
char datebuf[20], timebuf[20], gmtbuf[10], sumbuf[10],
sembuf1[5], sembuf2[5], sembuf3[5], sembuf4[5],
sembuf5[5], sembuf6[5];
@@ -245,30 +267,30 @@ static int getwestime(wes_t *wes, westime_t **dtp)
GETCGI(10, blocks)
if (blocks[0].lines != 1
- || sscanf(datebuf, "%d%d%d", &dt.cfg.dom, &dt.cfg.mon,
- &dt.cfg.year) < 3) {
+ || sscanf(datebuf, "%d%d%d", &dt.cfg.dt.dom, &dt.cfg.dt.mon,
+ &dt.cfg.dt.year) < 3) {
msgcgi("h d", "date");
return (WRUNKNOWN);
}
if (blocks[1].lines != 1
- || sscanf(timebuf, "%d%d%d", &dt.cfg.hour, &dt.cfg.min,
- &dt.cfg.sec) < 3) {
+ || sscanf(timebuf, "%d%d%d", &dt.cfg.dt.hour, &dt.cfg.dt.min,
+ &dt.cfg.dt.sec) < 3) {
msgcgi("h h", "hour");
return (WRUNKNOWN);
}
if (blocks[2].lines != 1
- || sscanf(gmtbuf, "%d", &dt.cfg.tzhour) < 1) {
+ || sscanf(gmtbuf, "%d", &dt.cfg.dt.tzhour) < 1) {
msgcgi("h G", "gmt");
return (WRUNKNOWN);
}
- dt.cfg.tzmin = 0;
+ dt.cfg.dt.tzmin = 0;
if (blocks[3].lines != 1) {
msgcgi("h e", "dst");
return (WRUNKNOWN);
}
- dt.cfg.sum = sumbuf[0] ? 1 : 0;
+ dt.cfg.dt.sum = sumbuf[0] ? 1 : 0;
if (blocks[4].lines != 1 || blocks[5].lines != 1
|| blocks[6].lines != 1 || blocks[7].lines != 1
@@ -276,7 +298,7 @@ static int getwestime(wes_t *wes, westime_t **dtp)
msgcgi("g [1-7]", "day of week");
return (WRUNKNOWN);
}
- dt.cfg.dow = sembuf1[0] ? 0 : sembuf2[0] ? 1 : sembuf3[0] ? 2 :
+ dt.cfg.dt.dow = sembuf1[0] ? 0 : sembuf2[0] ? 1 : sembuf3[0] ? 2 :
sembuf4[0] ? 3 : sembuf5[0] ? 4 : sembuf6[0] ? 5 : 6;
dt.free = NULL;
@@ -290,9 +312,9 @@ static int getwestime(wes_t *wes, westime_t **dtp)
/* `getwesnet()`: récupération de serveurs WES. */
-static int getwesnet(wes_t *wes, wesnet_t **netp)
+static int getwesnet(wes_t *wes, wesnet_object_t **netp)
{
- static wesnet_t net;
+ static wesnet_object_t net;
static wesnetcfg_t *cfg;
static wesnetdata_t *data;
char dhcpbuf[5], ipbuf[20], msbuf[20], gwbuf[20], dpbuf[20], dsbuf[20],
@@ -381,9 +403,9 @@ static int getwesnet(wes_t *wes, wesnet_t **netp)
/* `getwestic()`: récupération des données concernant le compteur. */
-static int getwestic(wes_t *wes, int tic_id, westic_t **ticp)
+static int getwestic(wes_t *wes, int tic_id, westic_object_t **ticp)
{
- static westic_t tic;
+ static westic_object_t tic;
static westiccfg_t *cfg;
static westicdata_t *data;
static char name[20];
@@ -593,8 +615,8 @@ static int getwestic(wes_t *wes, int tic_id, westic_t **ticp)
return (WRUNKNOWN);
}
- cfg->mode = prod2[0] ? WESTICMODE_PROD : WESTICMODE_CONSO;
- if (cfg->mode == WESTICMODE_CONSO)
+ cfg->mode = prod2[0] ? WESMODE_PROD : WESMODE_CONSO;
+ if (cfg->mode == WESMODE_CONSO)
cfg->bdpv_enabled = 0;
else
cfg->bdpv_enabled = bdpve[0] ? 1 : 0;
@@ -792,9 +814,9 @@ static int getwestic(wes_t *wes, int tic_id, westic_t **ticp)
static wesif_t ipif = {
free_ip_wes,
- NULL, NULL,
+ NULL,
setwesids,
getwestime, NULL,
getwesnet, NULL,
- getwestic, NULL
+ getwestic, NULL, NULL
};
diff --git a/daemon/ip/internals.h b/daemon/ip/internals.h
index 7ded767..ff90563 100644
--- a/daemon/ip/internals.h
+++ b/daemon/ip/internals.h
@@ -37,6 +37,7 @@
/* POSIX-specific headers */
# include <unistd.h>
+# include <arpa/inet.h>
# include <netinet/in.h>
# include <netinet/tcp.h>
# include <sys/socket.h>
diff --git a/daemon/server.c b/daemon/server.c
index c6078c9..9ad048d 100644
--- a/daemon/server.c
+++ b/daemon/server.c
@@ -30,9 +30,12 @@
#include "internals.h"
#include <signal.h>
#include <setjmp.h>
-#include <weshd.h> /* définitions du protocole depuis `weshd.x` */
+
+#include <arpa/inet.h>
#include <rpc/pmap_clnt.h>
+#include <weshd.h> /* définitions du protocole depuis `weshd.x` */
+
#define REQADDR inet_ntoa(svc_getcaller(req->rq_xprt)->sin_addr)
#define GETWES(ID, RET, RESP) { \
@@ -80,6 +83,8 @@ wespret_with_id_t *gather_1_svc(wespregopts_t *args,
resp.ret = WESPRET_INT;
+ msg((wlnotice, "(%s) register server", REQADDR));
+
/* On vérifie le type de ressource WES à créer. */
switch (args->type) {
@@ -101,7 +106,7 @@ wespret_with_id_t *gather_1_svc(wespregopts_t *args,
case WESPIPTYPE_4:
ip = args->ip.ipv4;
- msg((wlnotice, "(%s) address is IPv4 %hhu.%hhu.%hhu.%hhu", \
+ msg((wlnotice, "(%s) using IPv4 address %hhu.%hhu.%hhu.%hhu", \
REQADDR, ip[0], ip[1], ip[2], ip[3]));
addr->type = WINET;
@@ -113,7 +118,7 @@ wespret_with_id_t *gather_1_svc(wespregopts_t *args,
case WESPIPTYPE_6:
ip = args->ip.ipv6;
- msg((wlnotice, "(%s) address is IPv6 "
+ msg((wlnotice, "(%s) using IPv6 address "
"%02hhX%02hhX:%02hhX%02hhX:%02hhX%02hhX:%02hhX%02hhX:"
"%02hhX%02hhX:%02hhX%02hhX:%02hhX%02hhX:%02hhX%02hhX",
REQADDR, ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7],
@@ -160,6 +165,7 @@ wespret_with_id_t *gather_1_svc(wespregopts_t *args,
resp.ret = WESPRET_OK;
resp.id = wes->id;
+ resp.name = wes->name;
return (&resp);
}
@@ -169,8 +175,7 @@ wespret_t *unregister_1_svc(wespid_t *id, struct svc_req *req)
{
static wespret_t ret;
- msg((wlnotice, "(%s) delete server %d",
- REQADDR, *id));
+ msg((wlnotice, "(%s) delete server %d", REQADDR, *id));
ret = WESPRET_INT;
/* Suppression du WES en utilisant l'identifiant. */
@@ -204,13 +209,12 @@ wespret_with_hostname_t *get_host_name_1_svc(wespid_t *id, struct svc_req *req)
static wespret_with_hostname_t resp;
wes_t *wes;
- msg((wlnotice, "(%s) get hostname from server %d", REQADDR, *id));
- resp.ret = WESPRET_INT;
+ msg((wlnotice, "(%s) get hostname on server %d", REQADDR, *id));
GETWES(*id, resp.ret, &resp)
- resp.hostname = wes->name;
resp.ret = WESPRET_OK;
+ resp.hostname = wes->name;
return (&resp);
}
@@ -220,15 +224,46 @@ wespret_t *set_host_name_1_svc(wespid_with_hostname_t *args,
struct svc_req *req)
{
static wespret_t ret;
+ int err; wes_t *wes;
+ char *name;
msg((wlnotice, "(%s) set hostname on server %d", REQADDR, args->id));
+ ret = WESPRET_INT;
- /* TODO: validate LDH hostname (uppercase) with max. 16 chars? */
- /* TODO: dynamically allocate hostname */
- /* TODO: update on the WES server using the interface function */
- /* TODO: update in the wes_t structure */
+ GETWES(args->id, ret, &ret)
- ret = WESPRET_IMP;
+ /* Validation du hostname à définir. */
+
+ if ((err = prep_valid_name(&name, args->hostname))) switch (err) {
+ case WRVAL:
+ ret = WESPRET_VAL;
+ return (&ret);
+
+ default:
+ return (&ret);
+ }
+
+ msg((wlinfo, "hostname is '%s'", name));
+
+ /* Mettre à jour via l'interface. */
+
+ if (!wes->iface->setname) {
+ ret = WESPRET_IMP;
+ free_name(name);
+ return (&ret);
+ }
+
+ if ((err = (*wes->iface->setname)(wes, name))) {
+ free_name(name);
+ ret = WESPRET_INT;
+ return (&ret);
+ }
+
+ /* Tout a réussi, on définit le nom de la ressource. */
+
+ assign_name(wes, name);
+
+ ret = WESPRET_OK;
return (&ret);
}
@@ -269,7 +304,7 @@ wespret_t *set_ftp_ids_1_svc(wespid_with_ids_t *args, struct svc_req *req)
wespret_with_datetime_t *get_date_time_1_svc(wespid_t *id, struct svc_req *req)
{
static wespret_with_datetime_t resp;
- wes_t *wes; westime_t *dt;
+ wes_t *wes; westime_object_t *dt;
msg((wlnotice, "(%s) get datetime from server %d", REQADDR, *id));
@@ -299,15 +334,15 @@ wespret_with_datetime_t *get_date_time_1_svc(wespid_t *id, struct svc_req *req)
/* Conversion en les données du protocole. */
- resp.dt.year = dt->cfg.year;
- resp.dt.mon = dt->cfg.mon;
- resp.dt.dom = dt->cfg.dom;
- resp.dt.hour = dt->cfg.hour;
- resp.dt.min = dt->cfg.min;
- resp.dt.sec = dt->cfg.sec;
- resp.dt.dow = dt->cfg.dow;
- resp.dt.sum = dt->cfg.sum;
- resp.dt.tz = dt->cfg.tzhour * 60 + dt->cfg.tzmin;
+ resp.dt.year = dt->cfg.dt.year;
+ resp.dt.mon = dt->cfg.dt.mon;
+ resp.dt.dom = dt->cfg.dt.dom;
+ resp.dt.hour = dt->cfg.dt.hour;
+ resp.dt.min = dt->cfg.dt.min;
+ resp.dt.sec = dt->cfg.dt.sec;
+ resp.dt.dow = dt->cfg.dt.dow;
+ resp.dt.sum = dt->cfg.dt.sum;
+ resp.dt.tz = dt->cfg.dt.tzhour * 60 + dt->cfg.dt.tzmin;
/* Tout est bien qui finit bien ! */
@@ -339,7 +374,7 @@ wespret_t *set_date_time_1_svc(wespid_with_datetime_t *args,
wespret_with_net_t *get_network_1_svc(wespid_t *id, struct svc_req *req)
{
- static wespret_with_net_t resp; wesnet_t *net;
+ static wespret_with_net_t resp; wesnet_object_t *net;
wes_t *wes; int err;
msg((wlnotice, "(%s) get network info from server %d", REQADDR, *id));
@@ -408,7 +443,7 @@ wespret_with_tic_t *get_tic_1_svc(wespid_with_tic_id_t *args,
struct svc_req *req)
{
static wespret_with_tic_t resp;
- westic_t *tic; wes_t *wes;
+ westic_object_t *tic; wes_t *wes;
int err;
msg((wlnotice, "(%s) get teleinfo %d info from server %d", REQADDR,
@@ -495,6 +530,21 @@ wespret_with_tic_t *get_tic_1_svc(wespid_with_tic_id_t *args,
return (&resp);
}
+/* `get_tic_values_1_svc()`: récupérer des valeurs du compteur via TÉLÉINFO
+ * pour une date donnée. */
+
+wespret_with_ticdata_t *get_tic_values_1_svc(
+ wespid_with_tic_id_and_time_t *args, struct svc_req *req)
+{
+ static wespret_with_ticdata_t resp;
+
+ msg((wlnotice, "(%s) get teleinfo %d values on server %d",
+ REQADDR, args->tic_id, args->id));
+
+ resp.ret = WESPRET_IMP;
+ return (&resp);
+}
+
/* `set_tic_1_svc()`: Définition de la configuration d'un compteur branché
* via TÉLÉINFO. */
diff --git a/daemon/wes.c b/daemon/wes.c
index 1d34915..da260f4 100644
--- a/daemon/wes.c
+++ b/daemon/wes.c
@@ -30,6 +30,10 @@
#include "internals.h"
#include <unistd.h>
+/* Nom vide, afin d'éviter à avoir à allouer une chaîne vide pour avoir
+ * quelque chose de « mutable » globalement (en vrai on fait le maximum pour
+ * ne pas y toucher). */
+
static char *empty_name = "";
/* `init_wes_base()`: Initialiser les composants de base d'une ressource de
@@ -74,30 +78,123 @@ void set_obj_to_free(wes_t *wes, void *vobj)
wes->lastobj = (wesfreemem_t **)obj;
}
+/* ---
+ * Gestion d'un nom de serveur WES.
+ * --- */
+
+#define MAX_NAME_SIZE 16
+#define VALIDCAR(C) \
+ !!strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+ "0123456789-", (C))
+
+/* `name_valid_length()`: Longueur d'un nom après sanitization (prédiction). */
+
+static size_t name_valid_length(const char *s)
+{
+ size_t len = 0;
+
+ for (; *s && len < MAX_NAME_SIZE; s++)
+ len += VALIDCAR(*s);
+
+ return (len);
+}
+
+/* `prep_name()`: Duplication d'un nom en sanitizant. */
+
+int prep_name(char **dst, const char *src)
+{
+ char *name, *buf;
+ size_t len;
+
+ *dst = NULL;
+ len = name_valid_length(src);
+
+ if (!len) {
+ *dst = empty_name;
+ return (WROK);
+ }
+ if (!(name = malloc(len + 1)))
+ return (WRALLOC);
+ buf = name;
+
+ for (; len; len--, src++)
+ if (VALIDCAR(*src))
+ *buf++ = *src;
+ *buf = '\0';
+
+ *dst = name;
+ return (WROK);
+}
+
+/* `prep_valid_name()`: Duplication d'un nom avec _validation_, et non
+ * sanitization comme la fonction précédente. */
+
+int prep_valid_name(char **dst, const char *src)
+{
+ char *name, *s;
+ size_t len = 0;
+
+ *dst = NULL;
+
+ if (!(name = memchr(src, '\0', MAX_NAME_SIZE)))
+ return (WRVAL);
+ len = (size_t)(name - src);
+
+ if (!len) {
+ *dst = empty_name;
+ return (WROK);
+ }
+
+ if (!(name = malloc(len + 1)))
+ return (WRALLOC);
+ s = name;
+
+ for (; len; len--) {
+ if (!strchr("abcdefghijklmnopqrstuvwxyz0123456789-", *src)) {
+ free(name);
+ return (WRVAL);
+ }
+
+ *s++ = *src++;
+ }
+ *s = '\0';
+
+ *dst = name;
+ return (WROK);
+}
+
+/* `free_name()`: Suppression d'un nom. */
+
+void free_name(char *name)
+{
+ if (name != empty_name)
+ free(name);
+}
+
+/* `assign_name()`: Assigner un nom à un serveur WES. */
+
+int assign_name(wes_t *wes, char *name)
+{
+ free_name(wes->name);
+ wes->name = name;
+ return (WROK);
+}
+
/* `set_name()`: Définir le nom d'un serveur WES. */
int set_name(wes_t *wes, const char *name)
{
- size_t sz;
char *newname;
+ int err;
if (!strcmp(name, wes->name))
return (WROK);
+ if ((err = prep_name(&newname, name)))
+ return (err);
+ if ((err = assign_name(wes, newname))) {
+ free_name(newname);
+ return (err);
+ }
- if (*name) {
- sz = strlen(name);
- newname = malloc(sz + 1);
- if (!newname)
- return (WRALLOC);
-
- memcpy(newname, name, sz);
- newname[sz] = '\0';
- } else
- newname = empty_name;
-
- if (*wes->name)
- free(wes->name);
- wes->name = newname;
-
- return (0);
+ return (WROK);
}
diff --git a/doc/CGI.rst b/doc/CGI.rst
index 323e03c..dfcb558 100644
--- a/doc/CGI.rst
+++ b/doc/CGI.rst
@@ -7,8 +7,9 @@ Ces fichiers sont encodés en UTF-8 normalisés en NFC.
Ce langage permet d'avoir une sortie conditionnelle selon certaines variables.
Il est possible de téléverser un script au serveur via FTP, puis de l'exécuter
-via HTTP pour obtenir l'état de certaines variables difficilement accessibles
-par d'autres moyens, d'où l'intérêt de ce document pour le projet.
+via HTTP pour obtenir l'état de certaines variables non seulement
+difficilement accessibles mais aussi de façon trop instable par d'autres
+moyens (scraping), d'où l'intérêt de ce document pour le projet.
Dans ce langage, une ligne représente une instruction, commence par un
caractère désignant le type d'instruction suivi par un contenu optionnel
@@ -71,8 +72,8 @@ Les types pouvant être utilisés avec ce format ici sont les suivants :
Les variables décrites dans ce document peuvent être documentées ou non dans
le document ``CGI_WES.pdf`` fourni par Cartelectronic.
-Je les ajoute et détaille au gré de mes besoins, de ce que supporte ma
-version du firmware et de ma curiosité.
+Je les ajoute et détaille au gré de mes besoins, de ma curiosité et de ce
+que supporte les versions du firmware sur lesquelles je travaille.
Parmi les schémas récurrents dans les noms de variables, on note :
@@ -88,19 +89,22 @@ Parmi les schémas récurrents dans les noms de variables, on note :
Quelques valeurs selon le format :
- les éléments cachés ou non (selon s'ils ont été activés ou non dans
- l'interface associée) sont en “ style="display:none;"” si cachés,
- sinon en “” ;
-- les éléments cochés ou non sont en “ checked”/“checked” s'ils ont été cochés,
- sinon en “” ;
-- les éléments sélectionnés ou non sont en “ selected”/“selected” s'ils le
- sont, et en “” sinon ;
-- les éléments désactivés ou non sont en “ disabled”/“disabled” s'ils ont
- été désactivés, sinon en “” ;
-- les tableaux sont générés avec un ``<tr>``, sur une seule ligne dans le
- fichier HTML produit.
-
-Lorsque la commande est inconnue, la ligne est purement et simplement
-ignorée (au même titre qu'un commentaire).
+ l'interface associée, et souvent utilisés sur des éléments de type
+ ``<li>``) ont ``style="display:none;"`` précédés d'un espace si cachés,
+ et rien sinon ;
+- les éléments cochés ou non ont ``checked`` précédés d'un espace s'ils
+ ont été cochés, et rien sinon ;
+- les éléments sélectionnés ou non ont ``selected`` précédés d'un espace
+ s'ils le sont, et rien sinon ;
+- les éléments désactivés ou non ont ``disabled`` précédés d'un espace
+ s'ils ont été désactivés, et rien sinon ;
+- il y a également les tableaux générés avec un ``<tr>`` par ligne
+ dans le fichier HTML produit (la structure des tableaux est posée dans
+ les scripts avec des ``t ``).
+
+Lorsque la syntaxe d'une instruction est inconnue, ou lorsque la commande
+n'existe pas ou plus, la ligne est purement et simplement ignorée (au même
+titre qu'un commentaire).
-------------------------------------------------------
``[AaMmSsJj]`` : consommation par période des compteurs
@@ -109,12 +113,12 @@ ignorée (au même titre qu'un commentaire).
``a 1``, ``m 1``, ``s 1``, ``j 1``
::
-
+
Entier (kWh consommés), flottant (coût total)
-
+
Consommation sur l'année, le mois, la semaine ou la journée pour
les abonnements suivants :
-
+
- BASE
- H. Creuse H.P.
- EJP Heure normale
@@ -125,10 +129,10 @@ ignorée (au même titre qu'un commentaire).
::
Entier (kWh consommés), flottant (coût total)
-
+
Consommation sur l'année, le mois, la semaine ou la journée pour
les abonnements suivants :
-
+
- H. Creuse H.C.
- EJP Heure pointe mobile
- TEMPO jour Bleu Heure Pleine
@@ -138,10 +142,10 @@ ignorée (au même titre qu'un commentaire).
::
Entier (kWh consommés), flottant (coût total)
-
+
Consommation sur l'année, le mois, la semaine ou la journée pour
les abonnements suivants :
-
+
- TEMPO jour Blanc Heure Creuse
``a 4``, ``m 4``, ``s 4``, ``j 4``
@@ -149,10 +153,10 @@ ignorée (au même titre qu'un commentaire).
::
Entier (kWh consommés), flottant (coût total)
-
+
Consommation sur l'année, le mois, la semaine ou la journée pour
les abonnements suivants :
-
+
- TEMPO jour Blanc Heure Pleine
``a 5``, ``m 5``, ``s 5``, ``j 5``
@@ -160,10 +164,10 @@ ignorée (au même titre qu'un commentaire).
::
Entier (kWh consommés), flottant (coût total)
-
+
Consommation sur l'année, le mois, la semaine ou la journée pour
les abonnements suivants :
-
+
- TEMPO jour Rouge Heure Creuse
``a 6``, ``m 6``, ``s 6``, ``j 6``
@@ -171,10 +175,10 @@ ignorée (au même titre qu'un commentaire).
::
Entier (kWh consommés), flottant (coût total)
-
+
Consommation sur l'année, le mois, la semaine ou la journée pour
les abonnements suivants :
-
+
- TEMPO jour Rouge Heure Pleine
``a c``, ``m c``, ``s c``, ``j c``
@@ -186,7 +190,7 @@ ignorée (au même titre qu'un commentaire).
::
Flottant (coût total)
-
+
Prix total de la consommation sur l'année, le mois, la semaine ou la
journée, en euros.
@@ -202,7 +206,7 @@ ignorée (au même titre qu'un commentaire).
::
Entier (kWh consommés)
-
+
Consommation totale sur l'année, le mois, la semaine ou la journée,
en kWh.
@@ -224,7 +228,7 @@ ignorée (au même titre qu'un commentaire).
::
Flottant (?)
-
+
Prix en euros ?
``mT[1-2]``
@@ -232,7 +236,7 @@ ignorée (au même titre qu'un commentaire).
::
Flottant (?)
-
+
Conso° totale en kWh ?
-----------------------------------------
@@ -244,7 +248,7 @@ ignorée (au même titre qu'un commentaire).
::
Chaîne (?)
-
+
Date du graphique affiché.
``b p``
@@ -252,7 +256,7 @@ ignorée (au même titre qu'un commentaire).
::
Chaîne (?)
-
+
vAxis title?
``b w``
@@ -267,7 +271,7 @@ ignorée (au même titre qu'un commentaire).
::
Flottant (coût)
-
+
Coût fixe de l'abonnement en euros pour le compteur 1 branché via TELEINFO.
``A`` pour le compteur 2.
@@ -276,7 +280,7 @@ ignorée (au même titre qu'un commentaire).
::
Chaîne (checked ON)
-
+
Prorata abonnement au prix du kWh ou non pour le compteur 1.
``p2`` pour le compteur 2.
@@ -285,9 +289,9 @@ ignorée (au même titre qu'un commentaire).
::
Flottant (?)
-
+
c.f. prix de la consommation pour les compteurs
-
+
TRA[0-5]? (`t`)
TRB[0-5]? (`T`)
@@ -300,7 +304,7 @@ ignorée (au même titre qu'un commentaire).
::
Chaîne (?)
-
+
?
``c i[1-6]``, ``c I[1-6]``
@@ -308,7 +312,7 @@ ignorée (au même titre qu'un commentaire).
::
Entier (?)
-
+
IDXA[0-5]? (`i`)
IDXB[0-5]? (`I`)
``%09d``
@@ -328,7 +332,7 @@ Cette lettre est réservée à des usages de déboggage.
::
Chaîne (adresse e-mail)
-
+
Destinataire n° 1 à 4 des courriels.
``E e``
@@ -336,9 +340,9 @@ Cette lettre est réservée à des usages de déboggage.
::
Entier (?)
-
+
Statut du test du serveur SMTP :
-
+
- 0 : envoyé avec succès ;
- 1 : délai expiré ;
- 2 : erreur de configuration ;
@@ -350,7 +354,7 @@ Cette lettre est réservée à des usages de déboggage.
::
Chaîne (adresse e-mail)
-
+
Adresse de courriel de l'émetteur.
``E n``
@@ -358,7 +362,7 @@ Cette lettre est réservée à des usages de déboggage.
::
Chaîne (nom d'hôte)
-
+
Nom d'hôte du serveur SMTP.
``E p``
@@ -366,7 +370,7 @@ Cette lettre est réservée à des usages de déboggage.
::
Entier (numéro de port)
-
+
Numéro de port du service SMTP.
``E u``
@@ -374,7 +378,7 @@ Cette lettre est réservée à des usages de déboggage.
::
Chaîne (utilisateur)
-
+
Nom de l'utilisateur SMTP.
``E w``
@@ -382,7 +386,7 @@ Cette lettre est réservée à des usages de déboggage.
::
Chaîne (mot de passe)
-
+
Mot de passe de l'utilisateur SMTP.
-------------------------------------
@@ -396,7 +400,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (identifiant)
-
+
Numéro ADCO (adresse du concentrateur de téléport, soit le numéro de
série) du compteur 1. ``A`` pour le compteur 2.
@@ -405,7 +409,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom de l'abonnement pour le compteur 1. ``B`` pour le compteur 2.
Exemple : « H Pleines/Creuses »
@@ -414,7 +418,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Intensité souscrite pour le compteur 1. ``C`` pour le compteur 2.
``e d``, ``e D``
@@ -422,10 +426,10 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (numéro)
-
+
Numéro de l'abonnement pour le compteur 1. ``D`` pour le compteur 2.
Valeurs possibles :
-
+
- 0 : BASE
- 1 : Heure Creuse
- 2 : EJP
@@ -436,7 +440,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
« … en € » ?
``e n``, ``e N``
@@ -444,7 +448,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom donné via l'interface au compteur 1. ``N`` pour le compteur 2.
``e P``
@@ -452,7 +456,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
kWh? mode? CPT2_prodcons?
``eo[1-2]``
@@ -460,7 +464,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
OPTARIF? 1/2 pour compteur ?
----------------------------
@@ -484,27 +488,59 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (capacité)
-
+
Espace libre sur la carte micro-SD, en Go.
---------------------------------------
``G`` : configuration TIC - EAU - PINCE
---------------------------------------
+``G a``
+
+ ::
+ Chaîne (checked ON), chaîne (checked OFF)
+
+ Activer la lecture des pinces.
+
+``G A``
+
+ ::
+
+ Chaîne (checked ON), chaîne (checked OFF)
+
+ Activer l'enregistrement dans les fichiers CSV pour les pinces
+ ampèremétriques.
+
``G C``
::
Chaîne (checked ON)
-
+
Mode consommation activé pour le compteur 2.
+``G I``
+
+ ::
+
+ Chaîne (checked ON), chaîne (checked OFF)
+
+ Activer l'enregistrement dans des fichiers CSV pour les impulsions.
+
+``G i``
+
+ ::
+
+ Chaîne (checked ON), chaîne (checked OFF)
+
+ Activer le comptage.
+
``G l``
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Activer les entrées des capteurs.
``G p``
@@ -512,7 +548,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON)
-
+
Mode production activé pour le compteur 2.
``G t``, ``G T``
@@ -520,7 +556,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Statut de la lecture du TIC1 (``t``) ou du TIC2 (``T``).
``G v``
@@ -528,31 +564,31 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Afficher ou non le module sur les variables en page d'accueil.
``G W``
::
- Chaîne (?), chaîne (?)
-
- OWCSV ON/OFF?
+ Chaîne (checked ON), chaîne (checked OFF)
+
+ Enregistrer dans des fichiers CSV.
``G w``
::
Chaîne (checked ON), chaîne (checked OFF)
-
- OWACT ON/OFF?
+
+ Activer la lecture des sondes 1WIRE.
``GAa``
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Statut des entrées analogiques (activé ou désactivé).
``GAA``
@@ -560,7 +596,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Afficher ou non le module sur les entrées analogiques sur la page
d'accueil.
@@ -569,57 +605,176 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
TCSV ON/OFF?
+``GP[1-3][1-4]``
+
+ ::
+
+ Chaîne (checked ON)[, chaîne (nom)]
+
+ Lier les tarifs de la pince ampèremétrique numéro 1 à 4 à ceux d'un
+ compteur. Trois choix :
+
+ - Choix numéro 1 : lier la pince aux tarifs du compteur 1 (avec nom
+ du compteur 1 en second argument) ;
+ - Choix numéro 2 : lier la pince aux tarifs du compteur 2 (avec nom
+ du compteur 2 en second argument) ;
+ - Choix numéro 3 : ne pas lier la pince aux tarifs d'un compteur, et
+ définir le tarif manuellement (voir ``GPE[1-4]``).
+
``GPA``
::
Chaîne (caché OFF)
-
- Graphes ?
+
+ Selon si les pinces ampèremétriques 3 et 4 sont activées ou non.
+ Si elles sont désactivées toutes deux, la chaîne devient
+ ``style="display:none;"`` précédé d'un espace.
``GPA[1-4]``
::
Chaîne (caché OFF)
-
+
Compteur PLS[1-4] activé ou non.
-``GpA[1-4]``
+``GPa[1-4]``
::
- Chaîne (nom)
-
- Nom du compteur PLS[1-4]
+ Chaîne (checked ON), chaîne (checked OFF)
-``GpE2``
+ Activer la pince numéro 1 à 4.
+
+``GPC[1-4]``
::
- Flottant (?, 5 décimales ?)
+ Chaîne (checked ON)
- ?
+ Mode consommation pour la pince ampèremétrique numéro 1 à 4, par
+ opposition à ``GPP[1-4]``.
+
+``GPE[1-4]``
+
+ ::
+
+ Flottant (coût)
+
+ Coût du kWh en euros pour la pince ampèremétrique numéro 1 à 4.
``GPe2``
::
Flottant (?, 2 décimales ?)
-
+
?
+``GPP[1-4]``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Mode production pour la pince ampèremétrique numéro 1 à 4, par
+ opposition à ``GPC[1-4]``.
+
+``GPV``
+
+ ::
+
+ Chaîne (caché OFF)
+
+ Selon si la tension secteur doit être considérée comme une pince
+ ampèremétrique ou pas. Si ce n'est pas le cas, la chaîne est
+ l'attribut ``style="display:none;"`` précédé d'un espace.
+
+``GPv``
+
+ ::
+
+ Chaîne (checked ON), chaîne (checked OFF)
+
+ Activer la mesure de la tension secteur.
+
+``Gp[1-3][1-4]``
+
+ ::
+
+ Chaîne (checked ON)[, chaîne (nom du compteur)]
+
+ Calcul du coût en fonction d'un compteur TÉLÉINFO (choix 1 et 2 pour les
+ compteurs 1 à 2) ou manuellement (choix 3) pour le compteur d'impulsions
+ numéro 1 à 4. Pour les choix 1 et 2, le nom du compteur est rajouté
+ aux arguments.
+
+``GpA[1-4]``
+
+ ::
+
+ Chaîne (style)
+
+ Selon si le compteur d'impulsions est activé ou non. S'il est désactivé,
+ la chaîne est un attribut HTML qui s'applique par exemple à des éléments
+ ``<li>`` et qui donne ``style="display:none;"`` précédé d'un espace.
+
+``Gpa[1-4]``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Activer le compteur numéro 1 à 4.
+
+``GpC[1-4]``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Mode consommation pour le compteur numéro 1 à 4 (par opposition à
+ ``GpP[1-4]``).
+
+``GpE[1-4]``
+
+ ::
+
+ Flottant (coût)
+
+ Coût par unité défini manuellement pour le compteur d'impulsions
+ numéro 1 à 4, en euros.
+
+``Gpe[1-4]``
+
+ ::
+
+ Flottant (coût)
+
+ Coût fixe par an pour l'abonnement défini manuellement pour le compteur
+ d'impulsions numéro 1 à 4, en euros.
+
``Gpi[1-4]``
::
Entier (?)
-
+
PLSact[1-4]?
+``GpP[1-4]``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Mode production pour le compteur numéro 1 à 4 (par opposition à
+ ``GpP[1-4]``).
+
------------------------------
``g`` : configuration générale
------------------------------
@@ -629,9 +784,9 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (selected ON)
-
+
Jour de la semaine actuel :
-
+
- 1 : lundi
- …
- 7 : dimanche
@@ -641,7 +796,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (jour), entier (mois), entier (année)
-
+
"Date système" ?
``g j``
@@ -649,7 +804,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
jour_cgx?
---------------------
@@ -661,7 +816,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Envoi au service `BDPV`_ activé ou non.
``H h``
@@ -669,7 +824,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (heure)
-
+
Heure d'envoi.
``H i``
@@ -677,7 +832,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (identifiant)
-
+
Identifiant `BDPV`_.
``H m``
@@ -685,7 +840,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (minute)
-
+
Minute d'envoi.
``H P[1-5]``
@@ -693,7 +848,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (numéro de port)
-
+
Port pour la requête n°1 à 5 utilisée en programmation.
``H p``
@@ -701,7 +856,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (mot de passe)
-
+
Mot de passe `BDPV`_.
``H r``
@@ -709,7 +864,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (message)
-
+
Dernière réponse du service `BDPV`_.
``H S``
@@ -717,7 +872,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (message)
-
+
Dernière réponse au test de requête HTTP.
``H s``
@@ -725,7 +880,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (message)
-
+
Statut de la connexion au service `BDPV`_.
``H U[1-5]``
@@ -733,7 +888,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (URL)
-
+
URL pour la requête n°1 à 5 utilisée en programmation.
``HBa``
@@ -741,7 +896,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
BDPVAC? bssw?
``HBH``
@@ -749,7 +904,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?), entier (?)
-
+
pvH?
--------------------
@@ -761,7 +916,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (jour), entier (mois), entier (année)
-
+
Date du serveur.
``h e``
@@ -769,7 +924,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Selon si l'on est en heure d'été (activée) ou en heure
d'hiver (désactivée).
@@ -778,7 +933,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (fuseau horaire)
-
+
Décalage horaire par rapport à GMT (en nombre d'heures).
``h h``
@@ -786,7 +941,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (heures), entier (minutes), entier (secondes)
-
+
Heure du serveur.
``h I``
@@ -794,7 +949,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom d'hôte)
-
+
Nom d'hôte du serveur NTP. (**DEPRECATED** ?)
``h j``
@@ -803,7 +958,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
Chaîne (jour de la semaine), entier (jour du mois),
chaîne (mois), entier (année)
-
+
Date du serveur en français.
``h m``
@@ -811,9 +966,9 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (statut)
-
+
Statut de la mise à jour de la date/l'heure via NTP :
-
+
- 0 : non mis à jour ;
- 1 : mise à jour effectuée aujourd'hui ;
- 2 : configuration invalide.
@@ -823,7 +978,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Mise à l'heure automatique par NTP.
-------------------------------------------
@@ -835,7 +990,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Intensité instantanée de la phase n°1 à 3 (ou 1 si mono) en A.
``i [4-6]``
@@ -843,7 +998,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Intensité maximale de la phase n°1 à 3 (ou 1 si mono) en A.
``i M``, ``I M``
@@ -851,9 +1006,9 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
Numéro du mode mono ou triphasé :
-
+
- 0 : pas de détection ;
- 1 : monophasé ;
- 3 : triphasé.
@@ -863,7 +1018,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (valeur)
-
+
Mode mono ou triphasé du compteur 1. ``I`` pour le compteur 2.
``i p``, ``I p``
@@ -871,7 +1026,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Puissance apparente du compteur 1 en VA. ``I`` pour le compteur 2.
``i T``
@@ -885,16 +1040,16 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
sicon<num>?
``ii[0-3]``, ``Ii[0-3]``
Intensité instantanée pour la phase n° 1 à 3 (en A).
-
+
::
Entier (intensité)
-
+
En mode mono (non triphasé), seul ``ii0``/``Ii0`` présente un intérêt.
``I`` pour le compteur 2.
@@ -904,7 +1059,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
En mode mono (non triphasé), seul ``im0``/``Im0`` présente un intérêt.
``I`` pour le compteur 2.
@@ -949,7 +1104,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (statut)
-
+
"true" si allumée, "false" sinon.
``L a``
@@ -959,7 +1114,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (durée)
-
+
En secondes.
``L D``
@@ -977,7 +1132,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (durée)
-
+
En secondes.
------------------------
@@ -989,7 +1144,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Valeur de l'entrée analogique.
``l a[1-4]``
@@ -997,7 +1152,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom de l'entrée analogique.
``l E[1-2]``
@@ -1005,9 +1160,9 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (booléen)
-
+
État de l'entrée :
-
+
- 0 : entrée OFF
- 1 : entrée ON
@@ -1016,7 +1171,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (état)
-
+
Chaîne représentant l'état de l'entrée : "ON" ou "OFF".
``l N[1-8]``
@@ -1024,7 +1179,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom du switch virtuel donné par l'utilisateur.
``l n[1-2]``
@@ -1032,7 +1187,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom de l'entrée donné par l'utilisateur.
``l r[1-8]``
@@ -1040,7 +1195,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON)
-
+
État du switch virtuel.
``l V[1-8]``
@@ -1048,9 +1203,9 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (booléen)
-
+
État du switch virtuel :
-
+
- 0 : entrée OFF
- 1 : entrée ON
@@ -1059,7 +1214,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (état)
-
+
Chaîne représentant l'état du switch virtuel : "ON" ou "OFF".
-------------------------
@@ -1071,7 +1226,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON)
-
+
Statut du protocole M2M en TCP.
``Mtp``
@@ -1079,7 +1234,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (numéro de port)
-
+
Port utilisé pour le protocole M2M en TCP.
``Mua``
@@ -1087,7 +1242,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON)
-
+
Statut du protocole M2M en UDP.
``Mup``
@@ -1095,7 +1250,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (numéro de port)
-
+
Port utilisé pour le protocole M2M en UDP.
---------------------------
@@ -1107,7 +1262,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Afficher les relais sur la page d'accueil de l'interface.
``o E[1-2]``
@@ -1115,9 +1270,9 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (booléen)
-
+
État du relai :
-
+
- 0 : relai OFF
- 1 : relai ON
@@ -1126,7 +1281,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom du relai n°0 ou 1 donné par l'utilisateur.
``o R[1-2]``
@@ -1134,7 +1289,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (état)
-
+
État du relai : "ON" ou "OFF".
``o r[1-2]``
@@ -1142,7 +1297,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON)
-
+
État du relai.
``o s``
@@ -1150,7 +1305,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
État de la sauvegarde de l'état.
``o w``
@@ -1165,7 +1320,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (valeur)
-
+
Intensité mesurée de la pince ampèremétrique (lrms, en A).
``P C``, ``P c``
@@ -1173,15 +1328,24 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
coul_PCE puis coul_PCEV?
+``P i``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Mode graphique : intensité instantanée en ampères (contrairement à
+ ``P w``).
+
``P P[1-4]``
::
Entier (valeur)
-
+
Puissance apparente mesurée par la pince (lrms x tension, en Wh).
``P R``
@@ -1189,23 +1353,32 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
MGPCE ? (en A)
``P W[1-4]``
::
- Entier (valeur)
-
- Énergie consommée mesurée par la pince (lrms x tension, en VA).
+ Entier (index)
+
+ Index de début de journée concernant l'énergie consommée mesurée par
+ la pince ampèremétrique numéro 1 à 4 (lrms x tension, en VA).
+
+``P i``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Mode graphique : puissance en watts (contrairement à ``P i``).
``PCa[1-4]``, ``PCm[1-4]``, ``PCj[1-4]``
::
Flottant (valeur)
-
+
Consommation sur la journée, le mois ou l'année mesurée par la
pince X (en kWh).
@@ -1214,7 +1387,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (valeur)
-
+
Coût sur la journée, le mois ou l'année mesurée par la pince X (en euros).
``PG[1-4]``
@@ -1222,7 +1395,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (couleur), chaîne (?)
-
+
PCEC[1-4] ?
``PHM[1-4]``
@@ -1230,7 +1403,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?), flottant (consommation), flottant (prix en euros)
-
+
aff_cons ?
``Pia[1-4]``, ``Pim[1-4]``, ``Pij[1-4]``
@@ -1238,23 +1411,26 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (index)
-
- Index du début de l'année, du mois ou de la journée, pour la pince X. (?)
+
+ Index du début de l'année, du mois ou de la journée, pour la pince
+ ampèremétrique numéro 1 à 4.
``PJ[1-4]``
::
Entier (?)
-
+
MPCE[1-4]? PC[1-4]_gmax? (en A)
+ Donne "100" sur ``peval.cgi``, sauf pour la prise secteur (ne correspond
+ pas à une variable CGI) où ça devient "280".
``PMa[1-4]``, ``PMm[1-4]``, ``PMj[1-4]``
::
Flottant (valeur)
-
+
"Maxi journée" ? (en A)
``Pm [1-4]``
@@ -1262,25 +1438,33 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
"%s en €" ?
``Pn[1-4]``
::
- Chaîne (?)
-
- aff_cons: "%S totale"?
- NPC[1-4]_name ?
+ Chaîne (nom de la pince)
+
+ Nom de la pince ampèremétrique numéro 1 à 4.
+
+``Pt[1-4]``
+
+ ::
+
+ Entier (tension)
+
+ Tension du circuit parcourant la pince ampèremétrique numéro 1 à 4,
+ en volts (V).
``PVV``
::
- Entier (?)
-
- V_val? (en V)
+ Entier (tension)
+
+ Tension secteur (en volts).
-----------------------------
``p`` : compteur d'impulsions
@@ -1291,7 +1475,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Consommation en m³/kWh sur l'année pour le compteur 1.
``A`` pour le compteur 2.
@@ -1300,7 +1484,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
coul_PLS puis coul_PLSV?
``p d``, ``p D``
@@ -1308,7 +1492,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (nombre)
-
+
Nombre de pulses/L sur le compteur 1. ``D`` pour le compteur 2.
``p j``, ``p J``
@@ -1316,7 +1500,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Consommation en L/kWh sur la journée pour le compteur 1.
``J`` pour le compteur 2.
@@ -1325,7 +1509,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (valeur)
-
+
Consommation en m³/kWh sur le mois pour le compteur 1.
``M`` pour le compteur 2.
@@ -1334,7 +1518,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom du compteur 1 (``n``) ou 2 (``N``).
``pCa[1-4]``, ``pCm[1-4]``, ``pCj[1-4]``, ``pCh[1-4]``
@@ -1342,7 +1526,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
[Flottant (?), ] chaîne (?)
-
+
cons[AVJM][1-4]_val?
``PLS[1-4]_conso_(day|month)?``
@@ -1351,7 +1535,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (?)
-
+
debig[1-4]_val ?
``pea[1-4]``, ``pem[1-4]``, ``pej[1-4]``, ``peh[1-4]``
@@ -1359,7 +1543,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (?)
-
+
prix en euros ?
``pG[1-4]``
@@ -1367,7 +1551,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (couleur), chaîne (?)
-
+
PLSC[1-4] ?
``pg[1-4]``
@@ -1383,23 +1567,23 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?), flottant (consommation), flottant (prix en euros)
-
+
aff_cons ?
-``pIU[1-4]``
+``pIU[1-4]``, ``pIJ[1-4]``, ``pIM[1-4]`` ``pIA[1-4]``
::
- Flottant (?)
-
- actuel[1-4]_val? INDEX[1-4]?
+ Flottant (index)
+
+ Index actuel, en début de journée, en début de mois et en début d'année.
``pJ[1-4]``
::
Entier (?)
-
+
PLSj[1-4]? PLS[1-4]_gmax? débit max?
``pK[1-4]``
@@ -1407,7 +1591,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?), chaîne (?)
-
+
Couleurs ?
``pMg[1-4]``
@@ -1415,7 +1599,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
"%s en €" ?
``pMp[1-4]``
@@ -1423,24 +1607,23 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
"%s de l' Année"/"%s de la Veille" ?
``pn[1-4]``
::
- Chaîne (?)
-
- pulse4? npls[1-4]? (nom?)
- PLS[1-4]_name?
+ Chaîne (nom)
+
+ Nom du compteur d'impulsions numéro 1 à 4 (max. 18 caractères).
``po[1-4]``
::
Chaîne (?)
-
+
unitcpt[1-4]?
``pp[1-4]``
@@ -1448,17 +1631,65 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
- pulse[1-4]_val?
+
+ Nombre d'impulsions aujourd'hui pour le compteur d'impulsions numéro 1 à 4.
+
+``pR[1-4][0-1]``
+
+ ::
+
+ Chaîne (selected ON)
+
+ Type d'impulsion pour le compteur d'impulsions numéro 1 à 4.
+ Types :
+
+ - choix 0 : ILS (mécanique) ;
+ - choix 1 : électronique.
``ps[1-4]``
::
Chaîne (?)
-
+
?
+``pT[1-4][1-4]``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Type de compteur d'impulsions pour le numéro 1 à 4 (premier groupe).
+ Types existants :
+
+ - choix 1 : eau froide/chaude ;
+ - choix 2 : gaz ;
+ - choix 3 : électrique ;
+ - choix 4 : fioul.
+
+``pU[1-4][1-4]``
+
+ ::
+
+ Chaîne (checked ON)
+
+ Unité de mesure pour le compteur d'impulsions 1 à 4 (premier groupe).
+ Unités gérées :
+
+ - choix 1 : litres ;
+ - choix 2 : mètres cube ;
+ - choix 3 : Wh ;
+ - choix 4 : kWh.
+
+``pu[1-4]``
+
+ ::
+
+ Entier (nombre)
+
+ Nombre d'impulsions par unité.
+
------------------------------------------
``R`` : accès au serveur (identifiants, …)
------------------------------------------
@@ -1468,7 +1699,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom d'utilisateur)
-
+
Nom d'utilisateur pour se connecter via HTTP (``a``) ou FTP (``A``).
``R b``, ``R B``
@@ -1476,7 +1707,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne ("actif" ou "inactif")
-
+
Connexion activée ("Actif") ou désactivée via HTTP (``b``) ou FTP (``B``).
``R C``
@@ -1484,7 +1715,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (mot de passe)
-
+
Mot de passe du compte utilisateur.
``R c``
@@ -1492,7 +1723,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom d'utilisateur)
-
+
Nom d'utilisateur du compte utilisateur.
``R g``
@@ -1500,7 +1731,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Activer le compte invité (nom d'utilisateur "invite" ou "guest",
sans mot de passe).
@@ -1509,7 +1740,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (mot de passe)
-
+
Mot de passe pour se connecter via HTTP (``p``) ou via FTP (``P``).
``RM0``
@@ -1517,7 +1748,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Autoriser la programmation à l'utilisateur.
``RM1``
@@ -1525,7 +1756,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Autoriser le réglage de la date/de l'heure à l'utilisateur.
``RM2``
@@ -1533,7 +1764,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Autoriser le réglage des mails à l'utilisateur.
``RM3``
@@ -1541,7 +1772,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Autoriser le réglage des index à l'utilisateur.
``RM4``
@@ -1549,7 +1780,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Autoriser le réglage des coûts à l'utilisateur.
``RM5``
@@ -1557,7 +1788,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON), chaîne (checked OFF)
-
+
Autoriser le contrôle des switch et relais à l'utilisateur.
-------------------------
@@ -1569,7 +1800,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
6 entiers (octets de l'adresse)
-
+
Adresse MAC du serveur.
``r D``
@@ -1577,7 +1808,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked OFF)
-
+
Option DHCP.
``r d``
@@ -1585,7 +1816,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked ON)
-
+
Option DHCP (bis).
``r g``
@@ -1593,7 +1824,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
4 entiers (octets de l'adresse), chaîne (DHCP disabled ON)
-
+
Passerelle par défaut.
``r h``
@@ -1601,7 +1832,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (numéro de port)
-
+
Port du service HTTP du serveur WES.
``r i``
@@ -1609,7 +1840,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
4 entiers (octets de l'adresse), chaîne (DHCP disabled ON)
-
+
Adresse IPv4 actuelle.
``r m``
@@ -1617,7 +1848,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
4 entiers (octets du masque), chaîne (DHCP disabled ON)
-
+
Masque de sous-réseau.
``r n``
@@ -1625,12 +1856,12 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom d'hôte du serveur WES.
``r o``
Tableau HTML avec un ``<tr>`` par ligne, et dans l'ordre :
-
+
- le numéro de socket (1 à 20) ;
- l'état de la socket ;
- l'IP distante ;
@@ -1643,7 +1874,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
4 entiers (octets de l'adresse), chaîne (DHCP disabled ON)
-
+
Serveur DNS primaire.
``r s``
@@ -1651,7 +1882,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
4 entiers (octets de l'adresse), chaîne (DHCP disabled ON)
-
+
Serveur DNS secondaire.
------------------------------
@@ -1663,7 +1894,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (couleurs)
-
+
Couleurs en CSS pour la légende des graphes concernant le compteur 1.
``C`` pour le compteur 2.
@@ -1672,7 +1903,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom de la période tarifaire en cours sur le compteur 1.
``N`` pour le compteur 2.
@@ -1681,7 +1912,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (période)
-
+
Période tarifaire en cours sur le compteur 1.
``P`` pour le compteur 2.
@@ -1690,7 +1921,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
PMAX ? MGTIC ? (en VA)
``T t``, ``T T``
@@ -1710,7 +1941,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (index)
-
+
``B`` pour le compteur 2.
``Tc[1-2]``, ``TC[1-2]``
@@ -1719,7 +1950,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (index)
-
+
L'index n°1 est pour les heures creuses, l'index n°2 est pour les heures
pleines. ``C`` pour le compteur 2.
@@ -1728,7 +1959,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
DEMAIN?
``Te[1-2]``
@@ -1736,7 +1967,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
PEJP? 1/2 pour compteur ?
``Tg[12]?[0-5]``, ``TG[0-5]``
@@ -1744,26 +1975,26 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (couleur de fond), chaîne (?)
-
+
``TICCxx`` ? ``COULTxx`` ? (max 20 car. ?)
``Ti[1-6]``, ``TI[1-6]``
Index quasi non interprétés des compteurs.
-
+
::
Chaîne (index)
-
+
Si disponible, le compteur est donné sur neuf chiffres décimaux.
Autrement, il s'agit de la chaîne « Pas Dispo ».
``Tj[1-2]``, ``TJ[1-2]``
Index interprétés pour l'abonnement d'Effacement de Jour de Pointe.
-
+
::
Chaîne (index)
-
+
L'index n°1 est pour les heures normales, l'index n°2 est pour les
heures de pointe mobile. ``J`` pour le compteur 2.
@@ -1773,16 +2004,16 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (index)
-
+
Les index sont les suivants :
-
+
- n°1 : jours bleus, heures creuses ;
- n°2 : jours bleus, heures pleines ;
- n°3 : jours blancs, heures creuses ;
- n°4 : jours blancs, heures pleines ;
- n°5 : jours rouges, heures creuses ;
- n°6 : jours rouges, heures pleines.
-
+
``R`` pour le compteur 2.
-----------------
@@ -1794,7 +2025,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom de la variable n° 1 à 8.
``Vv[1-8]``
@@ -1802,7 +2033,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (valeur)
-
+
Valeur de la variable n° 1 à 8.
--------------------------------
@@ -1814,7 +2045,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (version)
-
+
Version du matériel, e.g. "F417 V2".
``v n``
@@ -1822,7 +2053,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (disabled ON)
-
+
?
``v v``
@@ -1830,7 +2061,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (version)
-
+
Version du micrologiciel, e.g. "V0.7G3".
-----------------
@@ -1841,8 +2072,8 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
- Flottant (?)
-
+ Flottant (valeur)
+
Température maximum (°C) sur l'année, le mois (sonde 1) ou le
jour (sonde n+1).
@@ -1850,8 +2081,8 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
- Flottant (?)
-
+ Flottant (valeur)
+
Température minimum (°C) sur l'année, le mois (sonde 1) ou le
jour (sonde n+1).
@@ -1860,7 +2091,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (nombre)
-
+
Nombre de sondes d'humidité.
``W Q``
@@ -1868,7 +2099,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (nombre)
-
+
Nombre de sondes de température.
``W[0-2]C[0-9]``
@@ -1876,7 +2107,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (?), chaîne (?)
-
+
tmp1_val? WSV[00-29]?
``W[0-2]D[0-9]``
@@ -1884,7 +2115,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
? (image?)
``W[0-2]G[0-9]``
@@ -1892,7 +2123,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (?)
-
+
tmp10_cal? WG[0-2][0-9]?
Numéro de graphe (1 à 4) ?
@@ -1901,7 +2132,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (valeur)
-
+
Valeur maximale de la température sur l'année, le mois ou
la journée (en °C).
@@ -1910,7 +2141,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (valeur)
-
+
Valeur minimale de la température sur l'année, le mois ou
la journée (en °C).
@@ -1919,7 +2150,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom de la sonde, donné par l'utilisateur.
``W[0-2]S[0-9]``
@@ -1927,7 +2158,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
8 entiers (octets de l'identifiant)
-
+
Identifiant de la sonde, à partir de 0 (e.g. ``W1S8`` -> 19ème sonde).
``W[0-2]T[0-9]``
@@ -1935,7 +2166,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Flottant (valeur), chaîne (?)
-
+
Valeur de la température de la sonde (en °C).
``W[0-2]t[0-9]``
@@ -1943,7 +2174,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
?
``WPD[0-5]``
@@ -1951,7 +2182,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
Image ?
``WPS[0-5]``
@@ -1959,7 +2190,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
8 entiers (octets de l'identifiant)
-
+
?
``W[0-2]t[0-9]``
@@ -1967,14 +2198,80 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (?)
-
+
?
-``WTA``, ``WTM``, ``WTS``, ``WTJ``
- Maximum ?
+``WTA``, ``WTM``, ``WTJ``
+
+ Tableau HTML à deux entrées où la première entrée est le nom de la
+ sonde/catégorie et la deuxième est la température maximum calculée
+ pour un jour, un mois ou une année.
+
+ Exemple (indenté) où la seule sonde de température s'appelle ``temp``,
+ et où sont appelés dans l'ordre ``WTJ``, ``WTM`` et ``WTA`` :
+
+ ::
+
+ <tr>
+ <td>temp MAXI Jour</td>
+ <td align=right>21.7 &ordm;C</td>
+ </tr>
+ <tr>
+ <td>temp MAXI Mois</td>
+ <td align=right>23.0 &ordm;C</td>
+ </tr>
+ <tr>
+ <td>temp MAXI Ann&eacute;e</td>
+ <td align=right>59.5 &ordm;C</td>
+ </tr>
+
+``WTa``, ``WTm``, ``WTj``
+
+ Tableau HTML à deux entrées, où la première entrée est le nom de la
+ sonde/catégorie et la deuxième est la température minimum calculée
+ pour un jour, un mois ou une année.
+
+ Exemple (indenté) où la seule sonde de température s'appelle ``temp``,
+ et où sont appelés dans l'ordre ``WTj``, ``WTm`` et ``WTa`` :
+
+ ::
+
+ <tr>
+ <td>temp mini Jour</td>
+ <td align=right>19.6 &ordm;C</td>
+ </tr>
+ <tr>
+ <td>temp mini Mois</td>
+ <td align=right>15.9 &ordm;C</td>
+ </tr>
+ <tr>
+ <td>temp mini Ann&eacute;e</td>
+ <td align=right>14.0 &ordm;C</td>
+ </tr>
-``WTa``, ``WTm``, ``WTs``, ``WTj``
- Minimum ?
+``WTs``
+
+ Tableau XML pour les sondes 1Wire.
+
+ Exemple (indenté) :
+
+ ::
+
+ <java>
+ <var>WS0</var>
+ <value><![CDATA[<td></td>
+ <td align=right id="WSC0">21.6 &ordm;C</td>
+ <td align=center>19.6 / 21.7</td>
+ <td align=center>15.9 / 23.0</td>
+ <td align=center>14.0 / 59.5</td>
+ ]]></value>
+ </java>
+
+``WTS``
+
+ Tableau HTML à deux colonnes où la première est le nom de la sonde
+ et la seconde représente la température actuelle avec l'unité de
+ température (°C).
``WTv``
?
@@ -1992,7 +2289,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom d'image)
-
+
Statut de la détection de la carte relai n° 1 à 10, sous la forme
d'image : ``led_OFF.gif`` si désactivée.
@@ -2004,7 +2301,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (nom)
-
+
Nom de la carte relai.
``WRn``
@@ -2012,7 +2309,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Entier (nombre)
-
+
Nombre de cartes relais détectées sur le bus 1WIRE.
``WRo``
@@ -2023,7 +2320,7 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
8 entiers (identifiant)
-
+
Identifiant de la carte relai n° 1 à 10.
``WRT[0-9]``
@@ -2031,9 +2328,9 @@ En-têtes envoyées par les compteurs via Téléinfo.
::
Chaîne (checked 3), chaîne (checked 8)
-
+
Nombre de relais sur la carte.
.. _pf: https://en.wikipedia.org/wiki/Printf_format_string
-.. _bdpv: https://www.bdpv.fr/
+.. _BDPV: https://www.bdpv.fr/
diff --git a/include/wesh.hpp b/include/wesh.hpp
index 316aa2b..0a16992 100644
--- a/include/wesh.hpp
+++ b/include/wesh.hpp
@@ -168,13 +168,20 @@ protected:
public:
wes_base(void);
- wes_base(int id);
- ~wes_base(void);
+ virtual ~wes_base(void);
/* Gestion de la ressource. */
+ void use(int id);
void remove(void);
+ /* Gestion du nom. */
+
+ std::string get_name(void);
+
+ void set_name(std::string name);
+ void set_name(const char *name);
+
/* Récupérer l'heure. */
struct tm get_date(void);
@@ -184,6 +191,10 @@ public:
WESH_CLIENT_TYPE *get_clnt(void);
int get_id(void);
+
+ virtual const char *iface() {
+ return "(unknown)";
+ }
};
/* Classe fille pour le serveur WES de base connecté via IP. */
@@ -193,11 +204,27 @@ public:
/* Récupération du serveur WES. */
void gather(const unsigned char ip[4]);
+ void gather(const std::string ip);
+ void gather(const char *ip);
void gather(const unsigned char ip[4],
std::string username, std::string password);
+ void gather(const std::string ip,
+ std::string username, std::string password);
+ void gather(const char *ip,
+ std::string username, std::string password);
void gather(const unsigned char ip[4],
std::string http_username, std::string http_password,
std::string ftp_username, std::string ftp_password);
+ void gather(const std::string ip,
+ std::string http_username, std::string http_password,
+ std::string ftp_username, std::string ftp_password);
+ void gather(const char *ip,
+ std::string http_username, std::string http_password,
+ std::string ftp_username, std::string ftp_password);
+
+ virtual const char *iface() {
+ return "ip";
+ }
};
/* Classe fille pour le serveur WES factice. */
@@ -207,6 +234,10 @@ public:
/* Récupération du serveur WES. */
void gather(void);
+
+ virtual const char *iface() {
+ return "dummy";
+ }
};
END_NAMESPACE_WESH
@@ -215,6 +246,8 @@ END_NAMESPACE_WESH
* de façon relativement agréable. */
extern std::ostream& operator<<(std::ostream& os,
+ wesh::wes_base& wes);
+extern std::ostream& operator<<(std::ostream& os,
wesh::electricity_meter_mode md);
extern std::ostream& operator<<(std::ostream& os,
wesh::electricity_meter_subscription_type st);
diff --git a/lib/dummy_wes.cpp b/lib/dummy_wes.cpp
index d6d7e1c..9458ecc 100644
--- a/lib/dummy_wes.cpp
+++ b/lib/dummy_wes.cpp
@@ -31,6 +31,8 @@
using namespace wesh;
+static char empty[1] = "";
+
/* ---
* Récupération de la ressource.
* --- */
@@ -41,10 +43,10 @@ void dummy_wes::gather(void)
args.type = WESPREGTYPE_DUMMY;
args.ip.type = WESPIPTYPE_NONE;
- args.http_username = "";
- args.http_password = "";
- args.ftp_username = "";
- args.ftp_password = "";
+ args.http_username = empty;
+ args.http_password = empty;
+ args.ftp_username = empty;
+ args.ftp_password = empty;
this->gather_(&args);
}
diff --git a/lib/wes.cpp b/lib/wes.cpp
index 9104d65..ead741a 100644
--- a/lib/wes.cpp
+++ b/lib/wes.cpp
@@ -32,6 +32,45 @@
using namespace wesh;
/* ---
+ * Utilitaires.
+ * --- */
+
+static int decode_ipv4(const char *s, unsigned char ip[4])
+{
+ int i;
+
+ ip[0] = 0;
+ ip[1] = 0;
+ ip[2] = 0;
+ ip[3] = 0;
+
+ for (i = 0; *s; s++) switch (*s) {
+ case '1': case '2': case '3':
+ case '4': case '5': case '6':
+ case '7': case '8': case '9':
+ case '0':
+
+ ip[i] = static_cast<unsigned char>(ip[i] * 10 + (*s - '0'));
+ break;
+
+ case '.':
+ if (++i >= 4)
+ return (1);
+ break;
+
+ default:
+ return (1);
+ }
+
+ if (i < 3) {
+ ip[3] = ip[i];
+ ip[i] = 0;
+ }
+
+ return (0);
+}
+
+/* ---
* Récupération de la ressource.
* --- */
@@ -64,13 +103,56 @@ void wes::gather(const unsigned char ip[4],
this->gather_(&args);
}
+void wes::gather(const std::string ip,
+ std::string http_username, std::string http_password,
+ std::string ftp_username, std::string ftp_password)
+{
+ this->gather(ip.c_str(), http_username, http_password,
+ ftp_username, ftp_password);
+}
+
+void wes::gather(const char *ip_string,
+ std::string http_username, std::string http_password,
+ std::string ftp_username, std::string ftp_password)
+{
+ unsigned char ip[4];
+
+ decode_ipv4(ip_string, ip);
+ this->gather(ip, http_username, http_password, ftp_username, ftp_password);
+}
+
void wes::gather(const unsigned char ip[4],
std::string username, std::string password)
{
this->gather(ip, username, password, username, password);
}
+void wes::gather(const std::string ip,
+ std::string username, std::string password)
+{
+ this->gather(ip.c_str(), username, password, username, password);
+}
+
+void wes::gather(const char *ip,
+ std::string username, std::string password)
+{
+ this->gather(ip, username, password, username, password);
+}
+
void wes::gather(const unsigned char ip[4])
{
this->gather(ip, "admin", "wes", "adminftp", "wesftp");
}
+
+void wes::gather(const std::string ip)
+{
+ this->gather(ip.c_str());
+}
+
+void wes::gather(const char *ip_string)
+{
+ unsigned char ip[4];
+
+ decode_ipv4(ip_string, ip);
+ this->gather(ip);
+}
diff --git a/lib/wes_base.cpp b/lib/wes_base.cpp
index f8550a4..be5551d 100644
--- a/lib/wes_base.cpp
+++ b/lib/wes_base.cpp
@@ -32,18 +32,23 @@
using namespace wesh;
/* ---
- * Constructeur, destructeur.
+ * Affichages divers.
* --- */
-wes_base::wes_base(void)
+std::ostream& operator<<(std::ostream& os, wes_base& wes)
{
- this->id = 0;
- this->client = nullptr;
+ os << "<wes name=" << wes.get_name() << " iface=" << wes.iface() << ">";
+
+ return (os);
}
-wes_base::wes_base(int given_id)
+/* ---
+ * Constructeur, destructeur.
+ * --- */
+
+wes_base::wes_base(void)
{
- this->id = given_id;
+ this->id = 0;
this->client = nullptr;
}
@@ -98,6 +103,14 @@ void wes_base::gather_(wespregopts_t *args)
this->id = resp->id;
}
+void wes_base::use(int given_id)
+{
+ if (this->id != 0)
+ throw already_created_exception();
+
+ this->id = given_id;
+}
+
void wes_base::remove(void)
{
wespid_t wid;
@@ -119,6 +132,65 @@ void wes_base::remove(void)
}
/* ---
+ * Récupération et définition du nom.
+ * --- */
+
+std::string wes_base::get_name(void)
+{
+ wespid_t wid;
+ wespret_with_hostname_t *resp;
+
+ if (this->id == 0)
+ throw not_loaded_exception();
+
+ wid = static_cast<wespid_t>(this->id);
+ resp = get_host_name_1(&wid, clnt(this));
+ if (!resp)
+ throw connexion_exception();
+
+ if (resp->ret != WESPRET_OK)
+ throw_exception_using_ret(resp->ret);
+
+ return (std::string(resp->hostname));
+}
+
+void wes_base::set_name(std::string name_to_set)
+{
+ set_name(name_to_set.c_str());
+}
+
+void wes_base::set_name(const char *name_to_set)
+{
+ wespid_with_hostname_t args;
+ wespret_t ret, *retp;
+
+ if (this->id == 0)
+ throw not_loaded_exception();
+
+ {
+ char namebuf[33];
+ const char *nm;
+ size_t len;
+
+ nm = static_cast<const char*>(memchr(name_to_set, '\0', 33));
+ len = nm ? static_cast<size_t>(nm - name_to_set) : 32;
+ memcpy(namebuf, name_to_set, len);
+ namebuf[len] = '\0';
+
+ args.id = static_cast<wespid_t>(this->id);
+ args.hostname = namebuf;
+
+ retp = set_host_name_1(&args, clnt(this));
+ if (!retp)
+ throw connexion_exception();
+ }
+
+ ret = *retp;
+ if (ret != WESPRET_OK)
+ throw_exception_using_ret(ret);
+}
+
+/* ---
* Récupération d'éléments.
* --- */
diff --git a/tools/testclient.sh b/tools/testclient.sh
index 780dcb6..8c9a4cb 100755
--- a/tools/testclient.sh
+++ b/tools/testclient.sh
@@ -8,7 +8,7 @@ ${DAEMON} & WESHD_PID=$!
# Lancement du client en synchrone.
-LD_PRELOAD=${LIB} ${CLT}
+LD_PRELOAD=${LIB} ${CLT} ${CL}
# Arrêt du démon.
diff --git a/weshd.x b/weshd.x
index 352751f..476010f 100644
--- a/weshd.x
+++ b/weshd.x
@@ -249,6 +249,7 @@ struct wespticdat_t {
struct wespret_with_id_t {
wespret_t ret;
wespid_t id;
+ string name<>;
};
struct wespret_with_datetime_t {
@@ -298,10 +299,10 @@ struct wespid_with_tic_id_t {
int tic_id;
};
-struct wespret_with_tic_t {
- wespret_t ret;
- wespticcfg_t cfg;
- wespticdat_t data;
+struct wespid_with_tic_id_and_time_t {
+ wespid_t id;
+ int tic_id;
+ wespdatetime_t dt;
};
struct wespid_with_tic_t {
@@ -310,6 +311,17 @@ struct wespid_with_tic_t {
wespticcfg_t cfg;
};
+struct wespret_with_tic_t {
+ wespret_t ret;
+ wespticcfg_t cfg;
+ wespticdat_t data;
+};
+
+struct wespret_with_ticdata_t {
+ wespret_t ret;
+ wespticdat_t data;
+};
+
/* Voici la définition du programme en lui-même. */
program WESHD_PROG {
@@ -348,7 +360,9 @@ program WESHD_PROG {
/* Gérer les compteurs branchés via TÉLÉINFO. */
wespret_with_tic_t get_tic(wespid_with_tic_id_t id) = 23;
- wespret_t set_tic(wespid_with_tic_t id) = 24;
+ wespret_with_ticdata_t
+ get_tic_values(wespid_with_tic_id_and_time_t args) = 24;
+ wespret_t set_tic(wespid_with_tic_t id) = 25;
} = 1;
} = 0x20001234;