Aller au contenu

Bouton "slider"


Moicphil

Messages recommandés

J'ai un périphérique virtuel pour gérer mon chauffage.

 

Je souhaite remplacer mes boutons par un "slider"

 

à‡a fonctionne impec avec le code ci-dessous, mais ma question est :

 

Est-il possible de saisir une valeur mini et maxi dans le slider? par ex mini 17 et max 24

Car là , pour mon chauffage ca va de 0 à  100 !

local new_temp = _sliderValue_; 
HC2 = Net.FHttp("192.168.x.xxx",80) 
HC2:setBasicAuthentication("admin", "xxxxxxxx") 


response ,status, errorCode = HC2:GET("/api/panels/heating?id=5") 
jsonTable = json.decode(response) 

 
jsonTable.properties.vacationTemperature = new_temp; 


json = json.encode(jsonTable); 
HC2:PUT("/api/panels/heating?id=5", json) 
fibaro:log("ready")
Lien vers le commentaire
Partager sur d’autres sites

Il te faut une fonction de mapping.

function map_range( a1, a2, b1, b2, s )

return b1 + (s-a1)*(b2-b1)/(a2-a1)

end

Ça permet de mapper une valeur s du range a1, a2 dans le range b1, b2. Ici s est la valeur de ton curseur, a1=0, a2=100 et àtoi de définir les températures min et Max (b1 et b2) que tu souhaites.

Envoyé de mon iPhone àl'aide de Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

Mettons que tu souhaites régler ton chauffage entre 15 et 25°

Dans ton code LUA, tu ajoutes la déclaration de fonction que je t'ai donné et tu l'appelle de cette manière :

local new_temp = map_range(0, 100, 15, 25, _sliderValue_ );

Si tu mets ton slider àla moitié, tu obtiendra new_temp = 20 (le barycentre de 15 et 25)

Lien vers le commentaire
Partager sur d’autres sites

Ca fonctionne bien, j'ai bien ma plage de 15 à  25 au lieu de 0 / 100

 

Mais maintenant comment faire au niveau de l'affichage du slider pour afficher la bonne valeur car si je me met au milieu, sous le slider, j'ai "50" et non "20" ?

 

Exemple, si je veux 23° je doit mettre mon curseur à  "80", pas génial du coup!...

 

Je pense que c'est pas possible...

Lien vers le commentaire
Partager sur d’autres sites

@Greg, un adepte de Rosetta Code ! C'est bon signe alors :) . Une vrai mine d'or: cf. http://rosettacode.org/wiki/Map_range

Merci pour le partage.

 

@Phil, pas possible de jouer sur la valeur du slider a ma connaissance ;). Il faut passer par un Label.

Lien vers le commentaire
Partager sur d’autres sites

Alors ça c'est vraiment dommage !  :(

J'ai une fonction qui marche et juste un problème au niveau de l'affichage!

 

Je pense ouvrir un ticket sur le Bugtracker, car pouvoir afficher les seuils réels  serait vraiment un plus !

(ou au pire, pouvoir supprimer l'affichage par défaut 0/100, et se servir d'un label...)

Lien vers le commentaire
Partager sur d’autres sites

Je met le code fini, ça pourra peut être servir à  d'autres !...

Et merci @Gregory  ;)

function map_range( a1, a2, b1, b2, s )
return b1 + (s-a1)*(b2-b1)/(a2-a1)
end

HC2 = Net.FHttp("192.168.x.xxx",80) 
HC2:setBasicAuthentication("admin", "xxxxxxx") 

local new_temp = map_range(0, 100, 15, 25, _sliderValue_ )

response ,status, errorCode = HC2:GET("/api/panels/heating?id=5") 
jsonTable = json.decode(response) 

 
jsonTable.properties.vacationTemperature = new_temp; 


json = json.encode(jsonTable); 
HC2:PUT("/api/panels/heating?id=5", json) 
fibaro:log("ready")

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

  • 9 mois après...
  • 1 mois après...

@moicphil, est ce que tu utilises encore la fonction proposée pour mettre à  jour ton panneau de chauffage avec la V4 ?

Malgré la modification de l'url pour poster la requete de mise à  jour qui est différente et que j'ai changé, je plante ma box "erreur 503" lorsque j'envoie le JSON de cette manière

jsonTable.properties.vacationTemperature = new_temp;

json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating/5", json)

si je passe par une ecriture de ce type  en incluant l'id name la modification est bien effectuée et pas de plantage de la Box

 

 

local NouveauPanel = ('{"id":402,"name":"Zone Jour","properties":{"handTemperature":20,"handTimestamp":1421607008,"vacationTemperature":0}}')
json = json.encode(NouveauPanel);
HC2:PUT("/api/panels/heating/402", NouveauPanel)

la manipulation json.properties me plairait mieux comme tu dois t'en douter  ;)

Lien vers le commentaire
Partager sur d’autres sites

Désolé, mais cela fait plusieurs moi que je n'ai plus de "modules liés" , remplacé par un thermostat connecté.

 

Je n'utilise donc plus le panneau Chauffage.

 

Bizarre cette erreur "503"... je n'ai pas vu passer d'autres posts parlant de Bug sur le json.properties.

  -_-

Lien vers le commentaire
Partager sur d’autres sites

Oui, j'en suis content. Il n'a jamais planté et je l'ai jamais rebooté ( contrairement à  la HC2  ;) ).

Surtout, je ne voulais plus être dépendant de la box pour gérer mon chauffage, là  si la hc2 claque, ben on pourra toujours piloter le chauffage manuellement.

 

Niveau confort et utilisation c'est quasi pareil qu'avec mon module lié.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...