Aller au contenu

Problème avec un QA Roller Shutter


Cardane

Messages recommandés

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 ?

 

 

Lien vers le commentaire
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.

 

Lien vers le commentaire
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...

Lien vers le commentaire
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...

Lien vers le commentaire
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.

Lien vers le commentaire
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 

Lien vers le commentaire
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

 

Lien vers le commentaire
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 ?

Lien vers le commentaire
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 ?

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...