Aller au contenu
Cardane

Problème avec un QA Roller Shutter

Recommended Posts

Bonjour à tous, 

 

Je suis en train de développer un nouveau QA sur base du type Roller Shutter.

Pas défaut, il me génère bien les trois fonctions open, close, stop, et le change.

 

Pour l'instant ces fonctions sont vides, j'en suis juste à quelques lignes de code à exécuter directement au lancement du QA.

 

J'ai donc ceci

 

function QuickApp:onInit()
    self:debug("onInit")
end


http:request(url, {
    options = {
        headers = aHeaders,
        method = "GET",
    }, 
    success = function(status)
        print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data)
        data_retour = json.decode(status.data)
        print (data_retour.attributes.current_position)        
    end
})
--self:updateView("slider", "value", "0") 
--self:updateProperty("value", 0)

Ca fonctionne très bien, mais dès que j'active les deux dernière lignes (ou même simplement une des deux), le QA se plante (ou ne fait rien en fait, je ne vois rien dans la console)

 

et bien entendu, je ne vois pas ce qui cloche :-)  

 

une idée ?

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Il manque pas mal de trucs là ;)

 

Ta variable http, il faut l'initialiser avant de pouvoir l'utiliser

Voir ici :

 

Ensuite, ce code il faut le mettre dans une fonction QuickApp:open(), ou close() qui réagira au clic de la souris, et ne pas le laisser dans la partie globale du code LUA.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

salut @Lazer, oui, je n'ai mis ici que le bout de code qui pose problème, je n'ai pas mis les déclarations de variables et autres, mais comme je disais, ca marche très bien sauf que je supprime les commentaires des deux dernières ligne...  j'ai l'impression que le seul:updateProperty pose problème mais je ne vois pas en quoi...

Partager ce message


Lien à poster
Partager sur d’autres sites

OK... mais du coup je pense qu'il aurait quand même été utile de voir le code, car les 2 fonctions qui te posent problème sont membres de QuickApp... et si ça se trouve self n'est pas défini à l'endroit où tu l'utilises.

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, voici le code complet (c'est encore en phase de test donc pas du tout optimisé)

 

__TAG = "QA_VELUX_RUE_" .. plugin.mainDeviceId
QuickApp._VERSION = 1.0

local Bearer_Key= "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJkNmI5OWQ2ZjRlYzQ0NjMwYjIyYTk1NTU1OTA0ODg3ZSIsImlhdCI6MTYzNzAxNTQ1MSwiZXhwIjoxOTUyMzc1NDUxfQ.cN4-cnw39zPGHigWUlm9B4hW5TmCEDpEHEk9LuPIygg"
local HA_URL_NAS = "192.168.1.17:8123"
local HA_Action_Open  = "cover/open_cover"
local HA_Action_Close = "cover/close_cover"
local HA_Action_Stop  = "cover/stop_cover" 


local http = net.HTTPClient()
local url = "http://" .. HA_URL_NAS .. "/api/states/cover.store_rue"
local url_open = "http://" .. HA_URL_NAS .. "/api/services/" .. HA_Action_Open
local url_close = "http://" .. HA_URL_NAS .. "/api/services/" .. HA_Action_Close
local url_stop = "http://" .. HA_URL_NAS .. "/api/services/" .. HA_Action_Stop
local aHeaders = {
    ['Content-Type'] = 'application/json',
    ['Authorization'] = 'Bearer ' .. Bearer_Key  
  }
local HA_DeviceID  = "cover.store_rue"
local HAdata = '{"entity_id": "' .. HA_DeviceID ..'"}'

function QuickApp:onInit()
    self:debug("onInit")
end

-- Roller shutter type should handle actions: open, close, stop
-- To update roller shutter state, update property "value" with integer 0-99

function QuickApp:open()
    self:debug("Store Velux Rue Ouvert à 100%")
    http:request(url_open, {
    options = {
        headers = aHeaders,
        method = "POST",
        data = HAdata
    }, 
    success = function(status)
        print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data)
    --    self:updateProperty("value", 99)
    end
    })
    --self:updateProperty("value", 99)
end

function QuickApp:close()
    self:debug("Store Velux Rue fermé")
    http:request(url_close, {
    options = {
        headers = aHeaders,
        method = "POST",
        data = HAdata
    }, 
    success = function(status)
        print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data)
    --    self:updateProperty("value", 0)    
    end
    })
    --self:updateProperty("value", 0)    
end

function QuickApp:stop()
    self:debug("roller shutter stopped ")
    http:request(url_stop, {
    options = {
        headers = aHeaders,
        method = "POST",
        data = HAdata
    }, 
    success = function(status)
        print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data)
    end
    })
end

-- Value is type of integer (0-99)
function QuickApp:setValue(value)
    self:debug("roller shutter set to: " .. tostring(value))
    --self:updateProperty("value", value)    
end

-- To update controls you can use method self:updateView(<component ID>, <component property>, <desired value>). Eg:  
-- self:updateView("slider", "value", "55") 
-- self:updateView("button1", "text", "MUTE") 
-- self:updateView("label", "text", "TURNED ON") 

-- This is QuickApp inital method. It is called right after your QuickApp starts (after each save or on gateway startup). 
-- Here you can set some default values, setup http connection or get QuickApp variables.
-- To learn more, please visit: 
--    * https://manuals.fibaro.com/home-center-3/
--    * https://manuals.fibaro.com/home-center-3-quick-apps/


function QuickApp:onInit()
    self:debug("onInit")
end


http:request(url, {
    options = {
        headers = aHeaders,
        method = "GET",
    }, 
    success = function(status)
        print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data)
        data_retour = json.decode(status.data)
        print (data_retour.attributes.current_position)        
    end
})
--self:updateView("slider", "value", "0") 
--self:updateProperty("value", 0)

Partout ou il y a des appels à self:updateProperty j'ai du les mettre en commentaire sinon ca plante direct...

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum.... mais tu as du code partout en dehors des fonctions, c'est pas très propre ça....

Normalement tu dois faire des initialisations dans onInit()

En plus je vois que tu l'as défini 2 fois cette fonction, tu peux carrément supprimer le 2nd.

 

Pourquoi tu as créé un slider ?

Normalement si ton module est bien typé, de type rollerShutter, tu n'as pas à t'en préoccuper, la HC3 le gère pour toi, tu as seulement besoin de mettre à jour la value avec self:updateProperty().

Donc vire ton slider et tes self:updateView() pour commencer, il faut faire simple.

Partager ce message


Lien à poster
Partager sur d’autres sites

salut @Lazer, bon, je suis reparti de zéro, cette fois ci en étant un peu plus concentré sur ce que je faisais :-)

tout marche nickel

juste une dernière question, est-ce que tu sais comment gérer le bouton "position favorite" ? je ne trouve rien dans la doc de Fibaro concernant cela 

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool :)

 

Non désolé je n'ai pas encore testé cette nouvelle fonctionnalité de position favorite, mais d'après ce que je vois, quand tu vas sur la vue d'un volet, tu peux choisir une position (admettons 50%), et tu peux l'ajouter en favori en cliquant sur l'étoile.


image.thumb.png.a120efc803544f50c17aa52601203011.png

 

 

Sur mon QA d'exemple ça n'a aucun effet, mais ça devrait fonctionner avec un vrai module Z-Wave.

 

Dans l'API je vois qu'il y a une nouvelle méthode setFavoritePosition qu'il va falloir code en LUA dans une fonction dédiée QuickApp:setFavoritePosition()

 

image.png.5bac1750503b02ba53fd3692ece8d511.png

 

Partager ce message


Lien à poster
Partager sur d’autres sites

oh oh...  on n'a pas du tout la même interface ...  

 

moi j'ai ca

image.thumb.png.c408caf99a3e983f80f0a5fa8d085fc1.png

 

 

je n'ai pas ta ligne "level change" et surtout si je clique sur l'étoile il positionne directement le slider à 50%

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, la position préférée est définie dans l'onglet avancé du module...  mais ca ne m'explique pas pourquoi je n'ai pas la même interface entre un QA créé avec le type roller shutter et un module wave..  ils font une différence ou ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah oui c'est curieux, ils gèrent différemment les modules Z-Wave et QuickApps.

 

Je n'ai pas de Roller Shutter Z-Wave à disposition sur ma box de test, tout ce que peux tester c'est sur un QA.

 

Onglet avancé du QA :

 

image.thumb.png.56ac6214adb5ecb858f48b532d856388.png

 

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est dingue ca, on n'a même pas le même onglet avancé pour le QA...  moi j'ai ca :

 

image.thumb.png.c202fe3e747e768bd24e65580b981671.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Etrange....

 

Firmware 5.091.41, on est bien d'accord ?

 

Dans l'API JSON de ton QA, est-ce que tu as bien les interfaces favoritePosition et favoritePositions ?

 

image.png.a99c1f205aafa3129234281932ad2d2d.png

 

Il me les a ajouté tout seul, c'est un QA qui existe depuis bien longtemps, avant de faire la mise à jour.

 

Mais comme toute interface, on peut les ajouter ou les supprimer.... du coup ton QA n'a peut être pas ces interfaces. Mais dans ce cas pourquoi ma HC3 les aurait ajouté à mon QA, et pas chez toi ?

Partager ce message


Lien à poster
Partager sur d’autres sites

non, la seule interface que j'ai c'est "quickApp", mais je suis encore avec la dernière version stable, pas fait l'upgrade vers la 5.091.41...

Partager ce message


Lien à poster
Partager sur d’autres sites

OK voilà, c'est donc ça, c'est bien la dernière beta 5.091 qui apporte cette nouveauté de gestion de positions favorites.

 

Comme tu posais la question, j'ai cru que tu avais fait la mise à jour.

Partager ce message


Lien à poster
Partager sur d’autres sites

ah non, c'est sur ma box de prod, donc je suis prudent :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut.

 

Question peut être bête, mais quel est l'intérêt de coder en HTML plutôt que en LUA le Quick App? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je n'ai pas compris ta question ?

C'est bien en LUA qu'on code la QuickApp.

 

Par ailleurs HTML n'est pas un langage de programmation, mais juste un langage de description de pages Web.

Partager ce message


Lien à poster
Partager sur d’autres sites

×