Page 1 sur 2

Temperature sonde Oregon et script_time

Publié : 29 nov. 2015, 11:06
par Cissou
Salut,

Alors voila j'ai un problème bizarre

dans un de mes script_time pour réguler la température du salon, j'utilise la commande

Code : Tout sélectionner

local temperature = tonumber(otherdevices_svalues[sonde]:match("([^;]+)"))
pour récuperer la température de la sonde oregon qui va bien

quand j'affiche la variable temperature dans le log pour vérification ça me donne : 10
Alors que pour toutes mes autres sondes cette commande me donne bien la temperature
un coup de json pour vérifier :

Code : Tout sélectionner

{
   "ActTime" : 1448786703,
   "ServerTime" : "2015-11-29 09:45:03",
   "Sunrise" : "07:54",
   "Sunset" : "17:03",
   "result" : [
      {
         "AddjMulti" : 1.0,
         "AddjMulti2" : 1.0,
         "AddjValue" : 0.0,
         "AddjValue2" : 0.0,
         "BatteryLevel" : 100,
         "CustomImage" : 0,
         "Data" : "19.1 C, 48 %",
         "Description" : "",
         "DewPoint" : "7.83",
         "Favorite" : 1,
         "HardwareID" : 2,
         "HardwareName" : "RFXtrx433",
         "HardwareType" : "RFXCOM - RFXtrx433 USB 433.92MHz Transceiver",
         "HardwareTypeVal" : 1,
         "HaveTimeout" : false,
         "Humidity" : 48,
         "HumidityStatus" : "Normal",
         "ID" : "E804",
         "LastUpdate" : "2015-11-29 09:44:27",
         "Name" : "Salon",
         "Notifications" : "false",
         "PlanID" : "3",
         "PlanIDs" : [ 3 ],
         "Protected" : false,
         "ShowNotifications" : true,
         "SignalLevel" : 7,
         "SubType" : "THGN122/123, THGN132, THGR122/228/238/268",
         "Temp" : 19.10,
         "Timers" : "false",
         "Type" : "Temp + Humidity",
         "TypeImg" : "temperature",
         "Unit" : 4,
         "Used" : 1,
         "XOffset" : "0",
         "YOffset" : "0",
         "idx" : "65"
      }
   ],
   "status" : "OK",
   "title" : "Devices"
}
On voit bien que la température est de 19.1 la bonne valeur et puis de toute façon sur le widget ça affiche la bonne température

Une idée? Car la je commence a m'arracher les cheveux!!!

Re: Temperature sonde Oregon et script_time

Publié : 29 nov. 2015, 11:32
par Cissou
Après plusieurs bidouilles/tests, maintenant la variable temperature est une "nil value"..........

Re: Temperature sonde Oregon et script_time

Publié : 29 nov. 2015, 12:02
par Neutrino
Bonjour,

tu peux simplement utiliser :

Code : Tout sélectionner

local temperature = otherdevices_temperature[sonde]

Re: Temperature sonde Oregon et script_time

Publié : 29 nov. 2015, 12:08
par Cissou
bon..... merci Neutrino, ça fonctionne

Mais je suis persuadé que j'ai essayé cette commande hier et ça ne marchait pas.....

un citation de mon prof d'info en école d'ingé
Quand un ordinateur fait une erreur, elle provient a 110% des cas de ce qu'il y a entre le clavier et le dossier de la chaise

Re: Temperature sonde Oregon et script_time

Publié : 27 janv. 2016, 10:32
par Nicogluck
Neutrino a écrit :Bonjour,
tu peux simplement utiliser :

Code : Tout sélectionner

local temperature = otherdevices_temperature[sonde]
Pour ma part, ça ne fonctionne pas.
En reprenant exactement cette syntaxe, la variable temperature enregistre "nil"
Et IDEM en utilisant :

Code : Tout sélectionner

local temperature = otherdevices_svalues[sonde]
J'ai deux sondes Oregon THN132N, j'ai le même résultat avec chacune.

J'ai finalement pondu une requête JSON avec récupération de la température dans le texte reçu en retour...

Code : Tout sélectionner

function os.capture(cmd)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  s = string.sub(s,990,993)
  return s
end

commandArray = {}
local temperature = '/usr/bin/curl -s "http://login:pw@adresse_IP:port/json.htm?type=devices&rid=IDX"'
local resultat = os.capture(temperature);
commandArray['Variable:Temperature'] = resultat
return commandArray
Mais c'est quand même sérieusement tiré par les cheveux, non ?? :shock:

Re: Temperature sonde Oregon et script_time

Publié : 27 janv. 2016, 20:33
par vil1driver
Salut,

Utilisez les print() pour savoir ce que contient réellement une variable et ainsi savoir comment la traiter..

Ici sonde temp+hum

Je récupère les 4 premiers caractères, bientôt 2 ans que ça fonctionne impec comme ceci.

Code : Tout sélectionner

local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) 

Re: Temperature sonde Oregon et script_time

Publié : 28 janv. 2016, 22:36
par ganq
Et si la température descend entre 0 et 10, est ce que cela fonctionne encore ?

Re: Temperature sonde Oregon et script_time

Publié : 29 janv. 2016, 08:54
par vil1driver
Non.. :?

Bonne remarque

du coups je préfère ceci

Code : Tout sélectionner

local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
car le simple

Code : Tout sélectionner

otherdevices_temperature[sonde]
me donne par exemple : 20.10000038147
problème de conversion ?

@Nicogluck,

tu avais bien déclaré sonde avant ? ex

Code : Tout sélectionner

local sonde = 'salon' 						-- Nom de la sonde de température

Re: Temperature sonde Oregon et script_time

Publié : 29 janv. 2016, 20:53
par ganq
la fonction math.floor me renvoie une erreur (nil value)

la variable renvoyée par otherdevices_temperature est 26.8;28;1

Un pb avec les ";" ?

Re: Temperature sonde Oregon et script_time

Publié : 05 févr. 2016, 11:22
par Nicogluck
ganq a écrit :la fonction math.floor me renvoie une erreur (nil value)

la variable renvoyée par otherdevices_temperature est 26.8;28;1

Un pb avec les ";" ?
Oui, en effet, tu dois ne prendre que les valeurs qui t'intéresse une à une :

Code : Tout sélectionner

local temperature = math.floor(10*tonumber(string.sub(otherdevices_svalues[sonde],1,4)))/10