Actualités | Audio/Vidéo | Evènements | DIY | Domotique | Informatique | Maison | Mobile | Sécurité

Premiers pas avec l’Eco-Devices, sur la route de la maîtrise de l’énergie

Envoyer Imprimer PDF
Note des utilisateurs: / 70
MauvaisTrès bien 

Je vous propose de découvrir les fonctionnalités de l’Eco-Devices, mais aussi de vous accompagner sur les chemins de l’intégration et de la publication de statistiques de vos informations de consommations.

Les points forts du module Eco-Devices sont : ses deux entrées télé-information (exemples d’utilisation : consommation électrique, production de panneaux photovoltaïques), ses deux entrées compteurs d'impulsions (exemples d’utilisation : compteur d’eau / de gaz / prochainement de fioul), son autonomie (pas besoin d’un serveur distant ou d’une PC restant allumé), sa faible consommation électrique (0.6 Watt) et ce qui ne gâche rien sa fabrication « made in France » dans l’unité nantaise de production de la société GCE Electronics.

ECODEVICE

L’Eco-Devices est disponible à la vente au prix de 89€, auquel il faut rajouter une alimentation 5V / 2.4A Rail Din au prix de 28€.

La production de statistiques additionnelles est réalisée grâce à une box Vera, qui interroge toutes les n minutes l’Eco-Devices, effectue des calculs et publie lesdits calculs sur les sites thingspeak et michamps-4B ; sachant que la même chose peut être réalisée à partir de n’importe quelle box permettant du scripting ou de n’importe quel serveur PHP/Python/... (je vous laisse donc à votre créativité).

Sommaire

  1. Fonctionnalités de l’Eco-Devices
  2. Installation et configuration
  3. Principes d’intégration XML
  4. Architecture de l’installation
  5. Principe de publication des statistiques
  6. Conclusion
  7. Sources d’information
  8. Scripting des statistiques additionnelles

 

1. Fonctionnalités de l’Eco-Devices

Caractéristiques :

- 2 Entrées télé-information pour compteurs électriques permettant le suivi de la consommation et de la production d'électricité

- 2 compteurs d'impulsions par mise à la masse permettant le suivi de la consommation d'eau, de gaz ou de fioul (en cours d’implémentation)

- Enregistrement des index en interne sur 10 ans, exportable au format, csv

- Formulaire XML et protocole JSON pour communiquez avec les box domotiques

- Notification push sur dépassement de puissance, changement de tarif etc...

- Envoi périodique des index vers une url distante, notification par email

- Alimentation de 5 à 24V continu, consommation 0.05A (12v @25°c)

- Dimension: L 96 x l 54 x H 62

- …

 

Statistiques disponibles en standard

La copie d’écran montre les différentes informations disponibles sur la page d’accueil.

Visualisation de la consommation

 

Les copies d’écran ci-dessous montrent les possibilités des statistiques liées aux compteurs de télé-information :

- Un graphe pour le mois sélectionné (l’année et le mois ; l’échelle des graphiques) ; le nombre de graphes dépend du contrat tarifaire souscrit (dans le cas présent : formule Tempo 6 graphes)

- Un cumul mensuel ; le nombre d’index dépendant du contrat tarifaire souscrit

- Un cumul annuel ; le nombre d’index dépendant du contrat tarifaire souscrit

Graphique de conso via la teleinformation

 

Les copies d’écran ci-dessous montrent les possibilités des statistiques liées aux compteurs d'impulsions:

- Un graphe pour le mois sélectionné (l’année et le mois; l’échelle des graphiques)

- Un cumul mensuel

- Un cumul annuel

Graphique de conso via le compteur d'impulsions

 

2. Installation et configuration

Les premières des choses à réaliser sont :

- enficher le module Eco-Devices et l’alimentation électrique (non fournie) sur des emplacements disponibles d’une platine d’un tableau électrique (1,5 emplacements pour l’alimentation électrique et 3 emplacements pour l’Eco-Devices) si possible à proximité du compteur électrique

- connecter électriquement l’alimentation et le module Eco-Devices (si l’électricité n’est pas votre fort, faites-vous aider par un professionnel ou un bricoleur averti)

- connecter l’Eco-Devices au réseau Ethernet grâce un câble droit RJ45.

 

Le schéma ci-dessous montre la signification des différents éléments : bouton, voyant et connexions.

Boutons et Connexion sur l'ECODEVICE

 

L’Eco-Devices est livré avec un programme « ScanDevice.exe » qui permet de trouver l’adresse IP attribuée par votre serveur DHCP (généralement votre box internet). Puis accédez à l’Eco-Devices en tapant manuellement l’adresse IP dans votre navigateur favori.

ScanDevice

 

Rendez-vous sur l’onglet « RESEAUX », décochez la case « Activer DHCP : », indiquez une adresse IP fixe que vous utiliserez plus tard dans le scripting afin d’interroger les valeurs des mesures de l’Eco-Devices. Je vous conseille aussi de cocher la case « Mode auto (été/hivers).

Onglet Réseaux

 

Couper l’alimentation électrique avant de procéder au raccordement électrique des équipements

Le schéma ci-dessous montre comment brancher l’Eco-Devices à un compteur électrique Siemens et à un compteur d’eau.

Branchement de l'ECODEVICE sur le compteur d'eau

 

La copie d’écran montre les informations à renseigner ou qui sont disponibles :

  1. Renseigner le nom du compteur de télé-information
  2. Permet de définir des seuils d’alerte en watts / seconde
  3. Indique l’identifiant de votre compteur électrique et le type de tarification (dans le cas présent : Bleu / Blanc / Rouge, encore appelé Tempo)
  4. Indique la couleur de tarification du lendemain (valable pour la tarification Tempo)
  5. Indique les valeurs des différents index du compteur (dans le présent 6 compteurs : Bleu / Blanc / Rouge * heure pleine / heure creuse)

Paramétrage des seuils et index de la teleinfo

 

La copie d’écran montre les informations à renseigner ou qui sont disponibles :

  1. Renseigner le nom du compteur d'impulsions
  2. Renseigner la valeur du compteur d'impulsions (dans le cas présent en litres) et le type de compteur (eau / électricité / fuel / gaz)
  3. Renseigner le nombre d'impulsions par unité (dans le cas des compteurs à eau, il existe plusieurs modèle : 1 impulsion par ¼ de litre, 1 impulsion par litre)
  4. Permet de définir des seuils d’alerte en litres / minute

Paramétrage des seuils et index du compteur d'impulsions

 

Onglet « DYNDNS » :

La configuration du DynDNS devrait déjà être réalisée dans votre box Internet (si ce n’est pas déjà le cas, je vous recommande de le faire dans votre box et non dans l’Eco-Devices) ; il convient de rajouter une NAT (Network Address Translation) dans votre box Internet correspondant à votre adresse IP fixe de votre module Eco-Devices et de préciser un numéro de port accessible de l’extérieur.

 

Onglet « Système » :

L’onglet « Système » permet de connaitre les informations matérielles (adresse MAC) et logicielles (numéro de version) de l’Eco-Devices, d’effectuer la mise à jour logicielle, d’enregistrer les données de consommation au format CSV (statistiques pour une année) et de libérer un bloc mémoire de statistiques pour une année (10 blocs sont prévus).

Onglet Système

 

L’onglet « M2M » :

La documentation précise ceci : « Les commandes M2M (machine to machine) permettent de contrôler à distance l'Eco-Devices directement par communication TCP/IP. L'API est en cours de développement. Contactez-nous pour en savoir plus. ». J’ai contacté à plusieurs reprises le support pour en savoir plus sur cette API, mais sans réponse comportant des éléments utiles (nous mettrons cela sur le compte de la période estivale).

Dans l’état actuel, cette API est guère exploitable, eu égard au fait que l’on ne peut pas structurer – dans la ligne URL : - les données / variables / index de manière à réaliser une publication compatible avec les attendus des sites thingspeak, michamps-4B, … Mais fort heureusement, quelques lignes de code peuvent facilement remédier à ce problème qui espérons-le, ne devrait être que temporaire.

Onglet M2M

 

Notifications Push / Par email :

Il est possible de définir des notifications Push (exemples : Notify My Android / Pushingbox / …) ou par Email lors :

- d’un franchissement de seuil de consommation : consommation supérieure au seuil haut configuré / consommation inférieure au seuil bas configuré)
- du passage aux heures pleines / aux heures creuses

 

Dans l’état actuel, les possibilités sont assez limitées car il n’est pas possible d’indiquer des valeurs de données / variables / index ; ce qui permettrait de rendre plus explicite les messages reçus. Pour les utilisateurs qui possède un contrat tarifaire de type Tempo, il serait sympa de pouvoir recevoir une notification lorsque la couleur est connue pour le lendemain (surtout lorsque ladite couleur correspond au rouge).

Notifications

 

3. Architecture de l’installation

Le schéma ci-dessous montre l’architecture mise en place ; la box domotique est utilisée uniquement afin de réaliser du scripting :

- les calculs liés aux consommations
- la publication de statistiques en ligne
- la prise en compte de la couleur (Tempo), Heures Creuses / Heures Pleines à des fins de notifications, délestage, …

 

Schema de cablage

 

4. Principes d’intégration XML

Cette partie se limite à l’intégration basée sur des fichiers au format XML eu égard au fait qu’ils sont plus faciles à manipuler dans un contexte de box Vera. Pour les lecteurs désireux d’utiliser des fichiers au format json, je leur recommande le site: http://www.eb-home.eu/blog/graphiques-pour-eco-device qui utilise une commande dont le principe est basé sur le suivant : http://192.168.1.203/api/xdevices.json?cmd=10 (où 192.168.1.203 est l’adresse IP fixe de l’Eco-Modules).

La commande HTML suivante http://192.168.1.203/status.xml retourne la réponse XML ci-après :

XML Status

 

Le tableau ci-dessous donne la signification des étiquettes / labels :

Etiquette

Désignation

date

Date de la réponse

time0

Heure de la réponse

T1_PPAP

Puissance apparente – Compteur télé-information 1

T2_PPAP

Puissance apparente – Compteur télé-information 2

T1_PTEC

Période tarifaire en cours – Compteur télé-information 1

T2_PTEC

Période tarifaire en cours – Compteur télé-information 2

T1_ISOUSC

Intensité souscrite – Compteur télé-information 1

T2_ISOUSC

Intensité souscrite – Compteur télé-information 2

meter0

a priori pas utilisé

meter1

a priori pas utilisé

meter2

Consommation instantanée en litre / mn (eau) – compteur d'impulsions 1

meter3

Consommation instantanée en litre / mn (eau) – compteur d'impulsions 2

countm0

Index compteur d'impulsions 1 – partie entière (m3)

countl0

Index compteur d'impulsions 1 – partie décimale (litre)

c0day

Cumulé du jour de la consommation du compteur d'impulsions 1

c1day

Cumulé du jour de la consommation du compteur d'impulsions 2

countm1

Index compteur d'impulsions 2 – partie entière (m3)

countl1

Index compteur d'impulsions 2 – partie décimale (litre)

dnsstatus

Statut

version

Version de l’interface

 

L’enchainement d’écrans suivant permet d’accéder au fichier XML spécifique à la télé-information du compteur 1 (bien sûr, le même principe est applicable pour le compteur 2).

Accès au fichier XML

 

La commande HTML suivante http://192.168.1.203/protect/settings/teleinfo1.xml retourne la réponse XML ci-après :

XML de Teleinfo

 

Le tableau ci-dessous donne la signification des étiquettes / labels :

Etiquette

Désignation

T1_ADCO

Identifiant du compteur

T1_OPTARIF

Offre tarifaire : base, HC = Heure Creuse, EJP, Tempo = BBRx

T1_ISOUSC

Intensité souscrite

T1_BASE

Index option de base

T1_HCHC

Index option Heure Creuse, index Heure Creuse

T1_HCHP

Index option Heure Creuse, index Heure Pleine

T1_EJPHN

Index option EJP, index Heures Normales

T1_EJPHN

Index option EJP, index Heures Normales

T1_EJPHPM

Index option EJP, index Heures Pleines

T1_BBRHCJB

Index option Tempo, index Heures Creuses Jour Bleu

T1_BBRHPJB

Index option Tempo, index Heures Pleines Jour Bleu

T1_BBRHCJW

Index option Tempo, index Heures Creuses Jour Blanc

T1_BBRHPJW

Index option Tempo, index Heures Pleines Jour Blanc

T1_BBRHCJR

Index option Tempo, index Heures Creuses Jour Rouge

T1_BBRHPJR

Index option Tempo, index Heures Pleines Jour Rouge

T1_PEJP

Préavis début EJP (30 minutes)

T1_PTEC

Période tarifaire en cours :TH = Toutes Heures, HC = Heures Creuses, HP = Heures Pleines, HN = Heures Normales, PM = Pointe Mobile, HCJB / HPJB / HCJW : HPJW / HCJR / HPJR = Tempo

T1_DEMAIN

--- = Pas d’annonce, Bleu, Blanc, Rouge = Tempo

T1_IINST

Intensité instantanée

T1_IINST1

Intensité instantanée – Phase 1

T1_IINST2

Intensité instantanée – Phase 2

T1_IINST3

Intensité instantanée – Phase 3

T1_ADPS

Dépassement de la puissance souscrite en ampères

T1_IMAX

Intensité maximale

T1_IMAX1

Intensité maximale – Phase 1

T1_IMAX2

Intensité maximale – Phase 2

T1_IMAX3

Intensité maximale – Phase 3

T1_PPAP

Puissance apparente triphasée

T1_HHPHC

Horaire Heures Pleines / Heures Creuses

T1_MOTDETAT

Mot d’état compteur

T1_PPOT

Présence des Potentiels

 

5. Principe des statistiques additionnelles

Suivi de la consommation électrique depuis la dernière facture (hors frais d’abonnement) :

L’objectif est de disposer d’un suivi de la consommation électrique sympathique afin d’identifier les sources d’économies potentielles (appareils en veille, …), d’éviter l’effet tunnel entre deux factures et surtout ne pas avoir à calculer des coûts intermédiaires, … en deux mots : un suivi simple d’utilisation et efficace.

La copie d’écran montre un ensemble de variables pour chacun des 6 index de compteur (dans le cas présent, 6 index liés à mon contrat tarifaire Tempo) :

  1. Valeur de l’index donné par l’Eco-Devices
  2. Valeur de l’index saisi à partir de la dernière facture
  3. Consommation depuis la dernière facture = Valeur de l’index 1 - Valeur de l’index 2
  4. Prix du KWh TTC calculé à partir de la dernière facture hors abonnement
  5. Coût de la consommation électrique depuis la dernière facture

La copie d’écran montre un ensemble de variables global :

  1. Valeur maximum de l’intensité utilisée / Valeur maximum de l’intensité souscrite
  2. Valeur de la puissance instantanée
  3. Consommation depuis la dernière facture = somme des différentes consommations des 6 index
  4. Prix moyen du KWh TTC calculé à partir des coûts unitaires hors abonnement
  5. Coût de la consommation électrique depuis la dernière facture = somme des différents coûts de consommation électrique des 6 index

 

Variables dans la vera

 

 

Les données de calculs sont publiées sur le site www.thingspeak.com :

- Consommation instantanée, périodicité toutes les 15 minutes www.thingspeak.com/channels/5285
- Cumuls de consommations, périodicité tous les jours www.thingspeak.com/channels/6990

 

Conso via Thingspeak

 

Suivi de la consommation d’eau :

L’objectif est le même : disposer d’un suivi de la consommation de l’eau public et des eaux pluviales.

La copie d’écran montre un ensemble de variables pour le Compteur 1 de l’Eco-Devices (compteur d'impulsions installé sur le circuit général après le compteur de la compagnie des eaux) :

  1. Valeur de consommation journalière, index donné par l’Eco-Devices
  2. Valeur de consommation instantanée, index donné par l’Eco-Devices
  3. Valeur cumulée de consommation, index donné par l’Eco-Devices
  4. Pas utilisé
  5. Différence de valeurs entre le compteur 1 relié à l’Eco-Devices et le compteur de la compagnie des eaux (ne devrait pas varier dans le temps)

La copie d’écran montre un ensemble de variables pour le Compteur 2 de l’Eco-Devices (compteur qui sera prochainement installé pour mesurer l’utilisation de la récupération des eaux pluviales pour les WC et l’arrosage) :

  1. Valeur de consommation journalière, index donné par l’Eco-Devices
  2. Valeur de consommation instantanée, index donné par l’Eco-Devices
  3. Valeur cumulée de consommation, index donné par l’Eco-Devices
  4. Pas utilisé
  5. Gain lié à l’utilisation des eaux pluviales = Valeur cumulée de consommation * Prix du KWh TTC calculé à partir de la dernière facture

La copie d’écran montre un ensemble de variables estimées pour le Compteur CGE (compagnie des eaux) :

  1. Valeur de consommation journalière, index donné par l’Eco-Devices + valeur de différence (compteur 1, index 5)
  2. Valeur de l’index saisi à partir de la dernière facture
  3. Consommation depuis la dernière facture = Valeur de l’index 1 - Valeur de l’index 2
  4. Prix du KWh TTC calculé à partir de la dernière facture, coût de l’abonnement inclus
  5. Coût de la consommation d’eau depuis la dernière facture

 

Les variables GCE

 

Les données de calculs sont publiées sur le site www.thingspeak.com :

- Cumuls de consommations des compteurs 1 et 2, périodicité tous les jourswww.thingspeak.com/channels/6988
- Cumuls de consommations du compteur de la compagnie des eaux, périodicité tous les jours www.thingspeak.com/channels/6989

Les données publiées

 

Les données de calculs sont aussi publiées sur le site www.michamps4b.be :

- Consommations d’électricité, périodicité tous les jours http://www.michamps4b.be/statistique-consommation-d-electricite-de-Guyt.php

- Consommations d’eau, périodicité tous les jours http://www.michamps4b.be/statistique-consommation-eau-de-Guyt.php

 

Les données de calcul

 

6. Conclusion

Ce module Eco-Devices est un excellent produit et je vous le recommande fortement ; nous attendons toutefois – Monsieur GCE Electronics – quelques améliorations afin de remédier aux insuffisances de jeunesse des parties M2M / Notifications Push / Notifications par Email (cf. article).

Personnellement, une fois l’installation et la configuration de l’Eco-Devices finalisées, j’ai parcouru l’ensemble des pièces et des dépendances avec ma tablette afin de vérifier combien consommait chaque appareil en fonctionnement normal ou en mode veille. Je partais confiant car j’avais installé par le passé plusieurs programmateurs horaires et des prises Z-Wave radio-commandables afin de limiter la consommation des appareils en mode veille (TV / Chaine HIFI / Décodeurs / …). Mais, quelle ne fut pas ma surprise :

- le chargeur de la perceuse sans fil consommait 40 W (soit 45 € par an  à 0,13 € du KWh) alors qu’aucune batterie n’était en charge
- le chargeur de l’aspirateur robot consommait 15 W (soit 17 € par an  à 0,13 € du KWh) alors que la charge était terminée
- …
- certains équipements plus anciens consommaient deux à trois plus que les équipements de nouvelles générations (exemples : TV cathodique, décodeur TNT, Switch Réseau, …)

Fort de cette première analyse, j’ai installé de nouveaux programmateurs horaires et des prises Z-Wave radio-commandables à distance (car plus souples d’utilisation que des programmateurs horaires) et j’ai planifié le remplacement de certains équipements.

En termes de Return on Investment (ROI), les économies qui seront réalisées sur une seule année, liées uniquement à la consommation électrique, rembourseront l’investissement réalisé de l’Eco-Devices. Le ROI se calculant généralement sur 3 ans, les deux autres années, seront du bonus ; alors n’hésitez pas, lancez-vous !

Vous n'avez pas compris un point ? Vous vous posez une question ? Vous pouvez nous contacter via le bouton Assistance sur votre gauche. N'hésitez pas à demander un rendez-vous téléphonique avec Domotics.

Vous avez aimé cet article ? Vous pouvez le partager sur vos réseaux sociaux pour soutenir son auteur et l'encourager à écrire de nouveaux articles ...

 

Cet article vous est proposé par Guy T.: Guy travaille dans le domaine des systèmes d'information pour le compte d'un opérateur de télécommunications. Il s'intéresse au bricolage en tout genre afin de rendre sa maison autant que faire se peut smart home tout en restant home sweet home. Il s'est lancé dans la domotique tout récemment en début d'année 2012.

 

7. Sources d’information

Mode d’emploi de l’Eco-Devices qui est disponible sur le site www.gce-electronics.com, celui-ci est envoyé sous forme de commande au prix de 0€ (http://www.gce-electronics.com/fr/logiciels/432-ecodevices.html%EF%BB%BF).

Plusieurs posts dans le forum GCE Electronics, dont le post http://www.gce-electronics.com/forum/viewtopic.php?f=44&t=1353

 

8. Scripting de la production des statistiques

Partie commune mettre dans « Edit Startup Lua (Lua) »)

 

-------------------------------------------------------------------

-- Startup LUA -

-------------------------------------------------------------------

function my_unescape (l_string)

l_string = string.gsub(l_string, " ", "+")

-- l_string = string.gsub(l_string, "%%(%x%x)", function (h)return string.char(tonumber(h, 16)) end)

return l_string

end

-------------------------------------------------------------------

-- Fonction My Notification vers Notify My Android

-- 4 paramètres : destinataire, nom de l'événement

-- description du message, priorité du message

--------------------------------------------------------------------

function my_notification (l_who, l_event, l_description, l_priority)

local l_url = "https://www.notifymyandroid.com/publicapi/notify?apikey="

local l_apikey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

local l_application = my_unescape("Maison - Domotique")

l_event = my_unescape(l_event)

l_description = my_unescape(os.date('%H:%M:%S') .." " ..l_description)

luup.inet.wget(l_url ..l_apikey .."&application=" ..l_application .."&event=" ..l_event .."&description=" ..l_description .."&priority=" ..l_priority)

return true

end

-------------------------------------------------------------------

-- Fonction d'extration de la valeur d'une variable

-------------------------------------------------------------------

function Extract2_XML(l_XML, l_tag, l_default)

local l_pattern = "(.-)"

local l_result = {}

for var in l_XML:gmatch(l_pattern) do

table.insert(l_result, var)

end

return l_result[1] or l_default

end

-------------------------------------------------------------------

-- Fonction Get_Container (valeur d'une variable)

-------------------------------------------------------------------

function Get_Container (l_device, l_variable, l_Expected_Type)

local l_value = ""

local l_value_Type = ""

l_value = luup.variable_get("urn:upnp-org:serviceId:VContainer1","Variable"..l_variable, l_device)

if (l_value == nil) then

my_notification ("Guy", "* Get_Container = " ..l_device .." Variable = " ..l_variable .." ***" , "Value = nil","2")

l_value = ""

end

if (l_Expected_Type == "number") then

l_value = tonumber(l_value)

l_value_Type = type(l_value)

if (l_Expected_Type ~= l_value_Type) then

my_notification ("Guy", "* Get_Container = " ..l_device .." Variable = " ..l_variable .." ***" , "Value Type = " ..l_value_Type ..", Expected_Type = " ..l_Expected_Type,"2")

l_value = 0

end

end

return l_value

end

-------------------------------------------------------------------

-- Fonction Set_Container (container, variable, valeur d'une variable)

-------------------------------------------------------------------

function Set_Container(l_device, l_variable, l_value)

if (l_value == nil) then

my_notification ("Guy", "* Set_Container = " ..l_device .." Variable = " ..l_variable .." ***" , "Value = nil","2")

end

l_value = string.format(l_value)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable"..l_variable, l_value, l_device)

return true

end

-------------------------------------------------------------------

-- Fonction Get_Switch (device, valeur par défaut en cas d'erreur)

-------------------------------------------------------------------

function Get_Switch (l_device, l_default)

local l_value = ""

local l_device_category = luup.devices[l_device].category_num

--my_notification ("Guy", "* Get_Switch = " ..l_device, "Type of switch= " ..l_device_category,"2")

if l_device_category == 0 then

l_value = luup.variable_get("urn:upnp-org:serviceId:VSwitch1", "Status", l_device)

if (l_value == nil) then

my_notification ("Guy", "* Get_Switch (Status) = " ..l_device .." *" , "Value = nil","2")

l_value = l_default

end

elseif l_device_category == 3 or l_device_category == 8 then

l_value = luup.variable_get("urn:upnp-org:serviceId:SwitchPower1","Status", l_device)

if (l_value == nil) then

my_notification ("Guy", "* Get_Sensor = " ..l_device .." *" , "Value = nil","2")

l_value = l_default

end

else

my_notification ("Guy", "* Get_Switch = " ..l_device, "Type of switch not handled = "..l_device_category,"2")

end

return l_value

end

-------------------------------------------------------------------

-- Fonction Set_Container (container, variable, valeur d'une variable)

-------------------------------------------------------------------

function Set_Container(l_device, l_variable, l_value)

if (l_value == nil) then

my_notification ("Guy", "* Set_Container = " ..l_device .." Variable = " ..l_variable .." ***" , "Value = nil","2")

end

l_value = string.format(l_value)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable"..l_variable, l_value, l_device)

return true

end

 

Partie spécifique à l’électricité :

 

Créer / instancier les 7 containers de variables, modifier les constantes (numéro / identifiant des containers) pour les containers de variables et simplifier le code si vous avez un contrat tarifaire plus simple de type : normal ou jour / nuit.

Créer un scène « EDF Mesures » avec un schedule toutes les 15 minutes.

 

-------------------------------------------------------------------

-- EDF Mesures - Begining of scene - List of devices (modules)

-------------------------------------------------------------------

local EDF_Global_CV = 251 -- Variable Container

local EDF_Bleu_HC_CV = 252 -- Variable Container

local EDF_Bleu_HP_CV = 253 -- Variable Container

local EDF_Blanc_HC_CV = 254 -- Variable Container

local EDF_Blanc_HP_CV = 255 -- Variable Container

local EDF_Rouge_HC_CV = 256 -- Variable Container

local EDF_Rouge_HP_CV = 257 -- Variable Container

local T1_OPTARIF, T1_ISOUSC, T1_BASE, T1_HCHC, T1_HCHP, T1_EJPHN, T1_EJPHPM, T1_EJPHPM, T1_BBRHCJB, T1_BBRHPJB, T1_BBRHCJW, T1_BBRHPJW = ""

local T1_BBRHCJR, T1_BBRHPJR, T1_PEJP, T1_PTEC, T1_DEMAIN, T1_IINST, T1_IINST1, T1_IINST2, T1_IINST3, T1_ADPS, T1_IMAX, T1_IMAX1 = ""

local T1_IMAX2, T1_IMAX3, T1_PPAP, T1_HHPHC, T1_MOTDETAT, T1_PPOT = ""

-- coût

local C1_Global, C1_BBRHCJB, C1_BBRHPJB, C1_BBRHCJW, C1_BBRHPJW, C1_BBRHCJR, C1_BBRHPJR = 0.0

local CD_Global, CD_BBRHCJB, CD_BBRHPJB, CD_BBRHCJW, CD_BBRHPJW, CD_BBRHCJR, CD_BBRHPJR = ""

-- facture

local F1_BBRHCJB, F1_BBRHPJB, F1_BBRHCJW, F1_BBRHPJW, F1_BBRHCJR, F1_BBRHPJR = 0.0

local FD_BBRHCJB, FD_BBRHPJB, FD_BBRHCJW, FD_BBRHPJW, FD_BBRHCJR, FD_BBRHPJR = ""

-- prix unitaire

local P1_Global, P1_BBRHCJB, P1_BBRHPJB, P1_BBRHCJW, P1_BBRHPJW, P1_BBRHCJR, P1_BBRHPJR = 0.0

local PD_Global, PD_BBRHCJB, PD_BBRHPJB, PD_BBRHCJW, PD_BBRHPJW, PD_BBRHCJR, PD_BBRHPJR = ""

-- quantité consommée

local Q1_Global, Q1_BBRHCJB, Q1_BBRHPJB, Q1_BBRHCJW, Q1_BBRHPJW, Q1_BBRHCJR, Q1_BBRHPJR = 0.0

local QD_Global, QD_BBRHCJB, QD_BBRHPJB, QD_BBRHCJW, QD_BBRHPJW, QD_BBRHCJR, QD_BBRHPJR = ""

local WC_CEJ, WC_CEN = 0.0 -- Compteur Electrique Jour, Compteur Electrique Nuit (www.michamps4b.be)

local WD_CEJ, WD_CEN = "" -- Compteur Electrique Jour, Compteur Electrique Nuit (www.michamps4b.be)

local l_Time = os.date('*t')

------------------------------------------------------------------

-- CONSO EDF - A lancer que la première fois

------------------------------------------------------------------

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Intensité A", EDF_Global_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Puissance W", EDF_Global_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso", EDF_Global_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix KWh", EDF_Global_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût", EDF_Global_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Compteur", EDF_Bleu_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Facture A-1", EDF_Bleu_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso", EDF_Bleu_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix KWh", EDF_Bleu_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût", EDF_Bleu_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Compteur", EDF_Bleu_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Facture A-1", EDF_Bleu_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso", EDF_Bleu_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix KWh", EDF_Bleu_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût", EDF_Bleu_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Compteur", EDF_Blanc_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Facture A-1", EDF_Blanc_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso", EDF_Blanc_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix KWh", EDF_Blanc_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût", EDF_Blanc_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Compteur", EDF_Blanc_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Facture A-1", EDF_Blanc_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso", EDF_Blanc_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix KWh", EDF_Blanc_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût", EDF_Blanc_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Compteur", EDF_Rouge_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Facture A-1", EDF_Rouge_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso", EDF_Rouge_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix KWh", EDF_Rouge_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût", EDF_Rouge_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Compteur", EDF_Rouge_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Facture A-1", EDF_Rouge_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso", EDF_Rouge_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix KWh", EDF_Rouge_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût", EDF_Rouge_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable2", "0", EDF_Global_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable2", "22379.000", EDF_Bleu_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable2", "39734.000", EDF_Bleu_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable2", "2286.000", EDF_Blanc_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable2", "6132.000", EDF_Blanc_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable2", "1094.000", EDF_Rouge_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable2", "2170.000", EDF_Rouge_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable4", "0.1312", EDF_Global_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable4", "0.0698", EDF_Bleu_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable4", "0.0838", EDF_Bleu_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable4", "0.1003", EDF_Blanc_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable4", "0.1195", EDF_Blanc_HP_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable4", "0.1882", EDF_Rouge_HC_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable4", "0.4967", EDF_Rouge_HP_CV)

-------------------------------------------------------------------

-- CONSO EDF - lecture des valeurs de la carte ECO-DEVICES de GCE

-------------------------------------------------------------------

local http = require("socket.http")

http.TIMEOUT = 4

local l_result, l_status = http.request("http://192.168.1.203/protect/settings/teleinfo1.xml?")

--my_log("Tests_EDF_Teleinfo1", " *** Status = " ..l_status .." *** Result = " ..l_result .." ***")

if l_status == 200 then

T1_OPTARIF = Extract2_XML(l_result, "T1_OPTARIF", "")

T1_ISOUSC = Extract2_XML(l_result, "T1_ISOUSC", "")

T1_BASE = Extract2_XML(l_result, "T1_BASE", "")

T1_HCHC = Extract2_XML(l_result, "T1_HCHC", "")

T1_HCHP = Extract2_XML(l_result, "T1_HCHP", "")

T1_EJPHN = Extract2_XML(l_result, "T1_EJPHN", "")

T1_EJPHPM = Extract2_XML(l_result, "T1_EJPHPM", "")

T1_EJPHPM = Extract2_XML(l_result, "T1_EJPHPM", "")

T1_BBRHCJB = Extract2_XML(l_result, "T1_BBRHCJB", "")

T1_BBRHPJB = Extract2_XML(l_result, "T1_BBRHPJB", "")

T1_BBRHCJW = Extract2_XML(l_result, "T1_BBRHCJW", "")

T1_BBRHPJW = Extract2_XML(l_result, "T1_BBRHPJW", "")

T1_BBRHCJR = Extract2_XML(l_result, "T1_BBRHCJR", "")

T1_BBRHPJR = Extract2_XML(l_result, "T1_BBRHPJR", "")

T1_PEJP = Extract2_XML(l_result, "T1_PEJP", "")

T1_PTEC = Extract2_XML(l_result, "T1_PTEC", "")

T1_DEMAIN = Extract2_XML(l_result, "T1_DEMAIN", "")

T1_IINST = Extract2_XML(l_result, "T1_IINST", "")

T1_IINST1 = Extract2_XML(l_result, "T1_IINST1", "")

T1_IINST2 = Extract2_XML(l_result, "T1_IINST2", "")

T1_IINST3 = Extract2_XML(l_result, "T1_IINST3", "")

T1_ADPS = Extract2_XML(l_result, "T1_ADPS", "")

T1_IMAX = Extract2_XML(l_result, "T1_IMAX", "")

T1_IMAX1 = Extract2_XML(l_result, "T1_IMAX1", "")

T1_IMAX2 = Extract2_XML(l_result, "T1_IMAX2", "")

T1_IMAX3 = Extract2_XML(l_result, "T1_IMAX3", "")

T1_PPAP = Extract2_XML(l_result, "T1_PPAP", "")

else

my_notification ("Guy", "* EDF_Teleinfo1 *" , "Code erreur = " ..l_status,"2")

end

-------------------------------------------------------------------

-- CONSO EDF - Début des calculs

-------------------------------------------------------------------

T1_BBRHCJB = tonumber(T1_BBRHCJB) / 1000

T1_BBRHPJB = tonumber(T1_BBRHPJB) / 1000

T1_BBRHCJW = tonumber(T1_BBRHCJW) / 1000

T1_BBRHPJW = tonumber(T1_BBRHPJW) / 1000

T1_BBRHCJR = tonumber(T1_BBRHCJR) / 1000

T1_BBRHPJR = tonumber(T1_BBRHPJR) / 1000

-- Recuperation des compteurs de la derniere facture

F1_BBRHCJB = Get_Container(EDF_Bleu_HC_CV ,2, "number")

F1_BBRHPJB = Get_Container(EDF_Bleu_HP_CV ,2, "number")

F1_BBRHCJW = Get_Container(EDF_Blanc_HC_CV,2, "number")

F1_BBRHPJW = Get_Container(EDF_Blanc_HP_CV,2, "number")

F1_BBRHCJR = Get_Container(EDF_Rouge_HC_CV,2, "number")

F1_BBRHPJR = Get_Container(EDF_Rouge_HP_CV,2, "number")

-- Calcul du consomme

Q1_BBRHCJB = T1_BBRHCJB - F1_BBRHCJB

Q1_BBRHPJB = T1_BBRHPJB - F1_BBRHPJB

Q1_BBRHCJW = T1_BBRHCJW - F1_BBRHCJW

Q1_BBRHPJW = T1_BBRHPJW - F1_BBRHPJW

Q1_BBRHCJR = T1_BBRHCJR - F1_BBRHCJR

Q1_BBRHPJR = T1_BBRHPJR - F1_BBRHPJR

QD_BBRHCJB = string.format("%.3f", Q1_BBRHCJB)

QD_BBRHPJB = string.format("%.3f", Q1_BBRHPJB)

QD_BBRHCJW = string.format("%.3f", Q1_BBRHCJW)

QD_BBRHPJW = string.format("%.3f", Q1_BBRHPJW)

QD_BBRHCJR = string.format("%.3f", Q1_BBRHCJR)

QD_BBRHPJR = string.format("%.3f", Q1_BBRHPJR)

-- Recuperation du prix au KWh

P1_BBRHCJB = Get_Container(EDF_Bleu_HC_CV ,4, "number")

P1_BBRHPJB = Get_Container(EDF_Bleu_HP_CV ,4, "number")

P1_BBRHCJW = Get_Container(EDF_Blanc_HC_CV,4, "number")

P1_BBRHPJW = Get_Container(EDF_Blanc_HP_CV,4, "number")

P1_BBRHCJR = Get_Container(EDF_Rouge_HC_CV,4, "number")

P1_BBRHPJR = Get_Container(EDF_Rouge_HP_CV,4, "number")

-- Calcul du cout

C1_BBRHCJB = Q1_BBRHCJB * P1_BBRHCJB

C1_BBRHPJB = Q1_BBRHPJB * P1_BBRHPJB

C1_BBRHCJW = Q1_BBRHCJW * P1_BBRHCJW

C1_BBRHPJW = Q1_BBRHPJW * P1_BBRHPJW

C1_BBRHCJR = Q1_BBRHCJR * P1_BBRHCJR

C1_BBRHPJR = Q1_BBRHPJR * P1_BBRHPJR

CD_BBRHCJB = string.format("%.2f", C1_BBRHCJB)

CD_BBRHPJB = string.format("%.2f", C1_BBRHPJB)

CD_BBRHCJW = string.format("%.2f", C1_BBRHCJW)

CD_BBRHPJW = string.format("%.2f", C1_BBRHPJW)

CD_BBRHCJR = string.format("%.2f", C1_BBRHCJR)

CD_BBRHPJR = string.format("%.2f", C1_BBRHPJR)

-- cumuls generaux

Q1_Global = Q1_BBRHCJB + Q1_BBRHPJB + Q1_BBRHCJW + Q1_BBRHPJW + Q1_BBRHCJR + Q1_BBRHPJR

C1_Global = C1_BBRHCJB + C1_BBRHPJB + C1_BBRHCJW + C1_BBRHPJW + C1_BBRHCJR + C1_BBRHPJR

P1_Global = C1_Global / Q1_Global

QD_Global = string.format(Q1_Global)

PD_Global = string.format("%.4f", P1_Global)

CD_Global = string.format("%.2f", C1_Global)

-- cummul par jour & nuit

WC_CEJ = T1_BBRHPJB + T1_BBRHPJW + T1_BBRHPJR

WC_CEN = T1_BBRHCJB + T1_BBRHCJW + T1_BBRHCJR

WD_CEJ = string.format(WC_CEJ)

WD_CEN = string.format(WC_CEN)

-------------------------------------------------------------------

-- CONSO EDF - Mise à jour des containers de variables

-------------------------------------------------------------------

Set_Container(EDF_Bleu_HC_CV ,1, T1_BBRHCJB)

Set_Container(EDF_Bleu_HP_CV ,1, T1_BBRHPJB)

Set_Container(EDF_Blanc_HC_CV,1, T1_BBRHCJW)

Set_Container(EDF_Blanc_HP_CV,1, T1_BBRHPJW)

Set_Container(EDF_Rouge_HC_CV,1, T1_BBRHCJR)

Set_Container(EDF_Rouge_HP_CV,1, T1_BBRHPJR)

Set_Container(EDF_Bleu_HC_CV ,3, QD_BBRHCJB)

Set_Container(EDF_Bleu_HP_CV ,3, QD_BBRHPJB)

Set_Container(EDF_Blanc_HC_CV,3, QD_BBRHCJW)

Set_Container(EDF_Blanc_HP_CV,3, QD_BBRHPJW)

Set_Container(EDF_Rouge_HC_CV,3, QD_BBRHCJR)

Set_Container(EDF_Rouge_HP_CV,3, QD_BBRHPJR)

Set_Container(EDF_Bleu_HC_CV ,5, CD_BBRHCJB)

Set_Container(EDF_Bleu_HP_CV ,5, CD_BBRHPJB)

Set_Container(EDF_Blanc_HC_CV,5, CD_BBRHCJW)

Set_Container(EDF_Blanc_HP_CV,5, CD_BBRHPJW)

Set_Container(EDF_Rouge_HC_CV,5, CD_BBRHCJR)

Set_Container(EDF_Rouge_HP_CV,5, CD_BBRHPJR)

Set_Container(EDF_Global_CV,1, T1_IMAX .. " / " ..T1_ISOUSC)

Set_Container(EDF_Global_CV,2, T1_PPAP )

Set_Container(EDF_Global_CV,3, QD_Global)

Set_Container(EDF_Global_CV,4, PD_Global)

Set_Container(EDF_Global_CV,5, CD_Global)

luup.inet.wget("http://api.thingspeak.com/update?key=XXXXXXXXXX&field1=" ..T1_PPAP,2)

if (l_Time.hour == 23 and l_Time.min >=45 and l_Time.min <= 59) then

-- Publication des valeurs sur ThingSpeak

luup.inet.wget("http://api.thingspeak.com/update?key=XXXXXXXXXX&field1=" ..QD_BBRHCJB .."&field2=" ..QD_BBRHPJB .."&field3=" ..QD_BBRHCJW .."&field4=" ..QD_BBRHPJW .."&field5=" ..QD_BBRHCJR .."&field6=" ..QD_BBRHPJR .."&field7=" ..QD_Global .."&field8=" ..CD_Global,2)

luup.inet.wget("http://www.michamps4b.be/importdata.php?XXXXXXXXXXXXXXXXXXXX&CEN=" ..WD_CEN .."&CEJ=" ..WD_CEJ,2)

end

-------------------------------------------------------------------

-- CONSO EDF - Fin de la scene

-------------------------------------------------------------------

return true

 

Partie spécifique à l’eau :

 

Créer / instancier les 3 containers de variables, modifier les constantes (numéro / identifiant) pour les containers et adapter / simplifier en fonction de votre contexte.

Créer un scène « EAU Mesures » avec un schedule toutes les 15 minutes.

 

-------------------------------------------------------------------

-- EAU Mesures - Begining of scene - List of devices (modules)

-------------------------------------------------------------------

local l_Time = os.date('*t')

local EAU_CPT_001_CV = 259 -- Variable Container

local EAU_CPT_002_CV = 260 -- Variable Container

local EAU_CPT_CGE_CV = 261 -- Variable Container

-- valeur retournee par API GCE - http://192.168.1.203/status.xml?

local T1_PPAP , T2_PPAP , T1_PTEC , T2_PTEC , T1_ISOUSC , T2_ISOUSC , meter0 , meter1 , meter2 , meter3 = ""

local countm0 , countl0 , T1_BBRHCJR , c0day , c1day , countm1 , countl1 , dnsstatus = ""

-- valeurs des compteurs

local lc_CPT_001_Val, lc_CPT_002_Val, lc_CPT_CGE_Val = 0.0

local ld_CPT_001_Val, ld_CPT_002_Val, ld_CPT_CGE_Val = "0.0"

-- difference entre compteur 1 et CGE

local lc_CPT_Diff_001_CGE = 0.0

-- derniere facture CGE

local lc_CPT_CGE_Fac = 0.0

local ld_CPT_CGE_Fac = "0.0"

-- consommations

local lc_CPT_001_Conso, lc_CPT_002_Conso, lc_CPT_CGE_Conso = 0.0

local ld_CPT_001_Conso, ld_CPT_002_Conso, ld_CPT_CGE_Conso = "0.0"

-- prix du m3

local lc_CPT_GCE_Prix = 0.0

-- cout / gain

local lc_CPT_002_Cout, lc_CPT_GCE_Cout = 0.0

local ld_CPT_002_Cout, ld_CPT_GCE_Cout = "0.0"

------------------------------------------------------------------

-- EAU Mesures - A lancer que la première fois

------------------------------------------------------------------

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Conso J ", EAU_CPT_001_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Conso L/min", EAU_CPT_001_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Compteur ", EAU_CPT_001_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", " ", EAU_CPT_001_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "# Cpt 1/CGE", EAU_CPT_001_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Conso J ", EAU_CPT_002_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Conso L/min", EAU_CPT_002_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Compteur ", EAU_CPT_002_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", " ", EAU_CPT_002_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Gain € ", EAU_CPT_002_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName1", "Compteur ", EAU_CPT_CGE_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName2", "Facture ", EAU_CPT_CGE_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName3", "Conso m3 ", EAU_CPT_CGE_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName4", "Prix €/m3", EAU_CPT_CGE_CV)

luup.variable_set("urn:upnp-org:serviceId:VContainer1","VariableName5", "Coût €", EAU_CPT_CGE_CV)

Set_Container(EAU_CPT_001_CV, 4, "")

Set_Container(EAU_CPT_001_CV, 5, "2135.6375")

Set_Container(EAU_CPT_002_CV, 4, "")

Set_Container(EAU_CPT_002_CV, 5, "")

Set_Container(EAU_CPT_CGE_CV, 2, "2105")

Set_Container(EAU_CPT_CGE_CV, 4, "3.29")

-------------------------------------------------------------------

-- EAU Mesures - lecture des valeurs de la carte ECO-DEVICES de GCE

-------------------------------------------------------------------

local http = require("socket.http")

http.TIMEOUT = 4

local l_result, l_status = http.request("http://192.168.1.203/status.xml?")

--my_log("Tests_EAU_Status", " *** Status = " ..l_status .." *** Result = " ..l_result .." ***")

if l_status == 200 then

T1_PPAP = Extract2_XML(l_result, "T1_PPAP", "")

T2_PPAP = Extract2_XML(l_result, "T2_PPAP", "")

T1_PTEC = Extract2_XML(l_result, "T1_PTEC", "")

T2_PTEC = Extract2_XML(l_result, "T2_PTEC", "")

T1_ISOUSC = Extract2_XML(l_result, "T1_ISOUSC", "")

T2_ISOUSC = Extract2_XML(l_result, "T2_ISOUSC", "")

meter0 = Extract2_XML(l_result, "meter0", "")

meter1 = Extract2_XML(l_result, "meter1", "")

meter2 = Extract2_XML(l_result, "meter2", "")

meter3 = Extract2_XML(l_result, "meter3", "")

countm0 = Extract2_XML(l_result, "countm0", "")

countl0 = Extract2_XML(l_result, "countl0", "")

T1_BBRHCJR = Extract2_XML(l_result, "T1_BBRHCJR", "")

c0day = Extract2_XML(l_result, "c0day", "")

c1day = Extract2_XML(l_result, "c1day", "")

countm1 = Extract2_XML(l_result, "countm1", "")

countl1 = Extract2_XML(l_result, "countl1", "")

dnsstatus = Extract2_XML(l_result, "dnsstatus", "")

else

my_notification ("Guy", "* GCE - EAU Status *" , "Code erreur = " ..l_status,"2")

end

-------------------------------------------------------------------

-- CONSO EDF - Debut des calculs

-------------------------------------------------------------------

-- suppression de la virgule

countm0 = tonumber(string.sub(countm0, 1, string.find(countm0, ",") -1))

countm1 = tonumber(string.sub(countm1, 1, string.find(countm1, ",") -1))

-- valeurs des compteurs 1 et 2

lc_CPT_001_Val = tonumber(countm0) + (tonumber(countl0) / 1000)

lc_CPT_002_Val = tonumber(countm1) + (tonumber(countl1) / 1000)

-- Recuperation de la difference entre le compteur 1 et CGE

lc_CPT_Diff_001_CGE = Get_Container(EAU_CPT_001_CV ,5, "number")

-- valeur du compteurs CGE

lc_CPT_CGE_Val = lc_CPT_001_Val + lc_CPT_Diff_001_CGE

-- Recuperation de la valeur du compteur de la derniere facture (CGE)

lc_CPT_CGE_Fac = Get_Container(EAU_CPT_CGE_CV ,2, "number")

-- Calcul des consommations Journaliere pour 1 et 2

lc_CPT_001_Conso = tonumber(c0day)

lc_CPT_002_Conso = tonumber(c1day)

-- Calcul de la consommations depuis la derniere facture pour CGE

lc_CPT_CGE_Conso = lc_CPT_CGE_Val - lc_CPT_CGE_Fac

-- Recuperation du prix au m3

lc_CPT_GCE_Prix = Get_Container(EAU_CPT_CGE_CV ,4, "number")

-- Calcul du cout

lc_CPT_002_Cout = lc_CPT_002_Conso * lc_CPT_GCE_Prix

lc_CPT_GCE_Cout = lc_CPT_CGE_Conso * lc_CPT_GCE_Prix

-- Transformation des valeurs numériques en chaine de caracteres

ld_CPT_001_Val = string.format("%.3f", lc_CPT_001_Val )

ld_CPT_002_Val = string.format("%.3f", lc_CPT_002_Val )

ld_CPT_CGE_Val = string.format("%.3f", lc_CPT_CGE_Val )

ld_CPT_CGE_Fac = string.format("%.3f", lc_CPT_CGE_Fac )

ld_CPT_CGE_Conso = string.format("%.3f", lc_CPT_CGE_Conso)

ld_002_GCE_Cout = string.format("%.2f", lc_CPT_002_Cout )

ld_CPT_GCE_Cout = string.format("%.2f", lc_CPT_GCE_Cout )

-------------------------------------------------------------------

-- CONSO EDF - Mise à jour des containers de variables

-------------------------------------------------------------------

Set_Container(EAU_CPT_001_CV, 1, c0day)

Set_Container(EAU_CPT_001_CV, 2, meter2)

Set_Container(EAU_CPT_001_CV, 3, ld_CPT_001_Val)

Set_Container(EAU_CPT_002_CV, 1, c1day)

Set_Container(EAU_CPT_002_CV, 2, meter3)

Set_Container(EAU_CPT_002_CV, 3, ld_CPT_002_Val)

Set_Container(EAU_CPT_002_CV, 5, ld_CPT_002_Cout)

Set_Container(EAU_CPT_CGE_CV, 1, ld_CPT_CGE_Val)

Set_Container(EAU_CPT_CGE_CV, 3, ld_CPT_CGE_Conso)

Set_Container(EAU_CPT_CGE_CV, 5, ld_CPT_GCE_Cout)

if (l_Time.hour == 23 and l_Time.min >=45 and l_Time.min <= 59) then

luup.inet.wget("http://api.thingspeak.com/update?key=XXXXXXXXXX&field1=" ..c0day .."&field2=" ..c1day .."&field3=" ..c0day ,2)

luup.inet.wget("http://api.thingspeak.com/update?key=XXXXXXXXXX&field1=" ..ld_CPT_CGE_Val .."&field2=" ..ld_CPT_CGE_Fac .."&field3=" ..ld_CPT_CGE_Conso .."&field4=" ..ld_CPT_GCE_Cout,2)

luup.inet.wget("http://www.michamps4b.be/importdata.php?XXXXXXXXXXXXXXXXXXXX&CA=" ..ld_CPT_CGE_Val,2)

end

-------------------------------------------------------------------

-- EAU Mesures - Fin de la scene

-------------------------------------------------------------------

return true

Mise à jour le Mercredi, 21 Août 2013 12:36  

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Recherche

Newsletter ?

Bon Plan

Instagram

Publicité



Connexion