mardi 28 août 2012

Téléinformation 3/5 (VERA)

Passons maintenant à la vera.
Dans Apps > Develop Apps > Edit Startup Lua j'ai rajouté une fonction pour me permettre d'extraire les valeurs des champs XML.
Voici la fonction en question à rajouter telle quelle:

function extractElement(tag, xml, default)
    local pattern = "<"..tag..">(.*)</"..tag..">"
    local result = (xml:match(pattern) or default)
    return result
end



Maintenant j'ai créé un virtual container nommé EDF. Noter son ID pour la scéne de mise à jour.

Et enfin, je créé une scène qui, à intervalle régulier, va me récupérer les infos de mon arduino et me les afficher dans mon virtual container ainsi que m'envoyer les info sur mon site WEB pour l'affichage de l'historique

 Ma scène se compose exclusivement d'un code LUUP qui se déclenche à intervalle régulier toutes les 10 min mais peut être modifié à volonté suivant la précision que l'on souhaite.
Nous verrons dans le prochain message la mise en oeuvre de la partie WEB.

luup.log("Update VContainer EDF teleinfo")
local SID_Vc = "urn:upnp-org:serviceId:VContainer1"

local lul_cmd = "http://192.168.1.202/"
local code, res = luup.inet.wget(lul_cmd,10, "" ,"")
if (code == 0) then
  local hchp= extractElement("HCHP", res, "N/A")
  luup.variable_set(SID_Vc, "VariableName1","HCHP (KW)", VMOD_CONT_EDF)
  luup.variable_set(SID_Vc, "Variable1",math.floor(hchp/1000),VMOD_CONT_EDF)

  local hchc= extractElement("HCHC", res, "N/A")
  luup.variable_set(SID_Vc, "VariableName2","HCHC (KW)", VMOD_CONT_EDF)
  luup.variable_set(SID_Vc, "Variable2",math.floor(hchc/1000),VMOD_CONT_EDF)

  local ptec= extractElement("PTEC", res, "N/A")
  luup.variable_set(SID_Vc, "VariableName3","PTEC", VMOD_CONT_EDF)
  luup.variable_set(SID_Vc, "Variable3",ptec,VMOD_CONT_EDF)

  local papp= extractElement("PAPP", res, "N/A")
  luup.variable_set(SID_Vc, "VariableName4","PAPP (W)", VMOD_CONT_EDF)
  luup.variable_set(SID_Vc, "Variable4",papp,VMOD_CONT_EDF)

   luup.log("Save EDF to my web site")
   local lul_update = 'http://www.mywebsite.com/EDF/update.php?HCHP=' .. hchp .. '&HCHC=' .. hchc .. '&PTEC=' .. ptec .. '&PAPP=' .. papp .. ''
   luup.inet.wget(lul_update,6, "" ,"")
   return true
else
   luup.log("EDF teleinfo ERROR : " .. code)
   return false
end


Ce qui donne le device suivant :

8 commentaires:

  1. merci pour tout ton travail
    je viens de recupere la partie 5 pour affiche les graph sous higcharts comme toi
    par contre je possede aussi une vera mais j'ai commandé un modem usb pour lui mettre directement derriére mais je suis bloqué avec ton install car toi tu as une arduino en wifi si tu pouvais m'aiguiller pour me permettre d'avoir la même chose que toi
    merci David

    RépondreSupprimer
  2. Je suppose donc que tu va utiliser le plugins Teleinfo EDF.
    Il va falloir récupérer les valeurs et les envoyer vers le site web.
    Comme je ne connais pas ce module ,j'ai mis des noms générique dans mon exemple ci-dessous.
    ton script lua ressemblera plutôt à celui ci-dessous et je pense qu'un post sur le forum toute la domotique te founira la réponse

    luup.log("Update VContainer EDF teleinfo")
    local SID_Vc = "urn:upnp-org:serviceId:VContainer1"

    if (code == 0) then
    local hchp= luup.variable_get(SID_Vc, "Variable_Name_hphc", ID_du_module)

    local hchc= luup.variable_get(SID_Vc, "Variable_Name_hchc", ID_du_module)

    local ptec= luup.variable_get(SID_Vc, "Variable_Name_ptec", ID_du_module)

    local papp= luup.variable_get(SID_Vc, "Variable_Name_papp", ID_du_module)

    luup.log("Save EDF to my web site")
    local lul_update = 'http://www.mywebsite.com/EDF/update.php?HCHP=' .. hchp .. '&HCHC=' .. hchc .. '&PTEC=' .. ptec .. '&PAPP=' .. papp .. ''
    luup.inet.wget(lul_update,6, "" ,"")
    return true
    else
    luup.log("EDF teleinfo ERROR : " .. code)
    return false
    end

    RépondreSupprimer
  3. A priori, tu n'a pas configuré correctement les fichiers data.php et data2.php puisque lorsque tu regardes les url http://davidd.ath.cx/test/data.php et http://davidd.ath.cx/test/data2.php il n'arrive pas à se connecter à ta base de données. Je suppose aussi que c'est la même chose pour la config du fichier update.php.
    Moi j'ai mis des xxxxxxx pour le serveur / base / login / password. A toi de personnaliser
    Quand cela sera OK, tu devrais avoir les graphes vide puisque tu n'a pas de données dans ta database.
    Tu peux essayer d'injecter qq données tests en attendant avec par exemple l'url :
    http://davidd.ath.cx/test/update.php??HCHP=3625&HCHC=3625&PTEC=500&PAPP=100

    Tu pourra les supprimer de ta database quand tu recevra ton module.

    RépondreSupprimer
  4. Bonjour,
    Ton travail marche uniquement si on possède une vera ?

    RépondreSupprimer
  5. Mon montage fonctionne dans plusieurs contexte et pas seulement avec la vera.
    L'arduino génère une page XML avec les infos du compteurs.
    Je usis en train de modifier le comportement pour que ce soit mon arduino qui envoye ses données directement vers la database, avec un page de config sur l'arduino.
    Bientôt une mise à jour de mon blog sur ce sujet.

    RépondreSupprimer
  6. ok cool (aucune trace de se fichier XML) ;-)

    RépondreSupprimer
  7. Si tu regarde l'article Arduino SW, tu vera dans le code ceci :
    client.println("");
    client.println("");
    client.print("");
    client.print(hchc,DEC);
    client.print("");
    client.print("");
    client.print(hchp,DEC);
    client.print("");
    client.print("");
    client.print(iinst,DEC);
    client.print("");
    client.print("");
    client.print(papp,DEC);
    client.print("");
    client.print("");
    client.print(ptec);
    client.print("");
    client.println("");

    Lorsque tu interroges par ton réseau avec internet explorer ou firefox l'@ IP de ton arduino (URL http://192.168.1.202 dans mon exemple), tu auras le fichier xml avec les valeurs issues du compteur

    C'est pourquoi la vera n'est pas indispensable pour avoir les infos du compteurs

    RépondreSupprimer