Aller au contenu

Notifications Interactive pour lancer une scéne


Messages recommandés

Posté(e)

@Did Je suis encore trop newbi pour te conseiller.

Mais pour le moment, je n'ai pas vu de solutions de type push avec image ou vidéo.

 

Sauf Pushbullet qui permet d'envoyer des notifications avec ce que tu veux comme pièces jointes.

Posté(e)

@Did, utilises tu "IMPERIHOME" ?

 

L'idée :

 - tu recois un Interactive Push sur ton tel avec la question

 - Si tu dis oui, cela lance une scene qui t'ouvre l'image de la CAM sur la tablette

 

la scène ou VD je ne sais plus pour interfacer  Pushullet avec la HC2 ne fonctionne plus pour le moment, il y a un bug, ..que je n'ai pas trouve, et je n'ai pas embêté le @master avec ca.

Posté(e)

 @mprinfo,

Avec ton script, pas de problème mais avec celui de Domotique Info, l'Id n'est pas renseigné, j'ai l'impression que ce n'est que pour les tablettes.

 @pepite,

Oui, j'ai Impérihome mais depuis quelques temps, je n'ai plus le flux de la caméra dessus (pas de rapport avec le froid qui figeai ma cam, c'était bien avant), je n'ai toujours pas trouvé ce qui bloque, peut-être un port. Je vais m'y remettre quand j'aurai reçu ma caméra chinoise.

Les deux ne peuvent pas être sur le smartphone (Push et Cam)?

 

Posté(e)

Je crois plutôt que ce code envoie la modification partout. En fait, elle apparaît soir directement sur l'écran si l'appli en ouverte, soit dans le menu Notification.

Si je déclenche ma scène, je le reçois sur mon iPhone, et aussi sur mon iPad. Ce n'est donc pas dépendant du device. Une fois que l'un ou l'autre a répondu à la question, la notification disparait

 

Posté(e)

Ah ben justement @Cardane, je me demandais si on pouvait spécifier un ID particulier de device ?

 

En fait par défaut, il prend tous les IDs de devices déclarés et "cochés"  dans acces control ;-)

 

@Did, le code sur domotique info est pour un Popup, le code de @mprinfo est pour les Interactive Push..très proche tu me diras ;-) dans leur fonctionnement les 2 te permettent de lancer une scene.  Pour les popup j'utilise cela si tu veux, déclenché sur un label

local message = fibaro:getValue(idVDMaison, "ui.Popup.value")
--local message = " test Popup ;-)"

HomeCenter.PopupService.publish({
    title = "GEA",
    subtitle = os.date("%H:%M:%S - %d.%m.%Y"),
    contentTitle = "Information",
    contentBody = message,
    img = "../img/topDashboard/info.png",
    type = "Warning",
    buttons = {{ caption = "Quitter", sceneId = 0 }}
})  

fibaro:debug("Valeur Label Popup : " ..message.. " - " ..os.date("%H:%M:%S - %d.%m.%Y"))

 

Posté(e)

 @mprinfo,

Dans ton script, on peut entrer plusieurs devices comme ceci?

["mobileDevices"]={100, 101, 102},

@pepite,

C'est trop compliqué pour moi, je ne saurais pas faire la maintenance si ça déconne.

J'ai testé le push interactif et la photo de la cam dans mes mails et c'est good, au moins ça, je gère. ;)

 

Posté(e)

@Did, t'as raison c'est bien aussi comme ceci avec la photo de la cam.

Quand tu auras recu la new cam ;-) ce sera tres simple de cliquer sur un bouton du VD pour afficher l'image de la cam sur imperihome ;-)

 

Je dirais non pour ta question, @mprinfo me corrigera au cas où mais comme ceci cela doit fonctionner

J'ai quand même l'impression que tu as mis au mauvais endroit du code l'id de ton tel non ?

tu l'as mis dans la declaration de la fonction ou dans une ligne semblable à ce qu'il y a après "Début du programme" ? dans une ligne sendPush ?

 

function sendPush(idPortable, titre, message, IdScene)
    
    if (type(IdScene) == "table") then
        -- Si nous avons plusieurs scenes a lancer dans un tableau {}
        for i = 1, #IdScene do
           local scenes = api.get("/scenes/"..IdScene[i])
           if scenes == nil then
              fibaro:debug("La scene iD : "..IdScene[i].." N'existe pas")
           else
                for i = 1, #idPortable do
                    local NomScene = scenes.name
                    fibaro:debug("Nom de la scene a lancer "..NomScene)
                    api.post('/mobile/push',
                    {
                     ["mobileDevices"]={idPortable[i]},              -- ID du telephone
                     ["message"]=tostring(message),               -- La question que l'on veut posser
                     ["title"]=tostring(titre.." - "..NomScene),  -- titre de la question
                     ["category"]='RUN_CANCEL',                   -- 'YES_NO' ou 'RUN_CANCEL'
                     ["data"]={["sceneId"]=IdScene[i]}            -- ID de la scéne que l'on veut lancer
                    }
              );
                end
           end
        end
           
    elseif (type(IdScene) == "number") then
        -- Si nous avons une seule scéne à executer
        local scenes = api.get("/scenes/"..IdScene)
        if scenes == nil then
           fibaro:debug("La scene iD : "..IdScene.." N'existe pas")
        else
            for i = 1, #idPortable do
                local NomScene = scenes.name
                fibaro:debug("Nom de la scene a lancer "..NomScene)
                api.post('/mobile/push',
                {
                  ["mobileDevices"]={idPortable[i]},   -- ID du telephone
                  ["message"]=tostring(message),    -- La question que l'on veut posser
                  ["title"]=tostring(titre),        -- titre de la question
                  ["category"]='RUN_CANCEL',        -- 'YES_NO' ou 'RUN_CANCEL'
                  ["data"]={["sceneId"]=IdScene}    -- ID de la scéne que l'on veut lancer
                }
                );
            end
        end
    end
end

 

Posté(e)

 Non, je pense que je suis bon, j'utilise le tout premier script:

api.post('/mobile/push',
            {
               ["mobileDevices"]={102},           -- ID du telephone

Par contre dans la scène pour ouvrir le portail, je cherche si le portail est déjà ouvert de ne pas faire l'appui sur le bouton du VD, qui du coup, me le refermerait.

--[[
%% properties
61 value
%% events
%% globals
--]]

if (tonumber(fibaro:getValue(61, "value")) == 1 ) then
fibaro:call(169, "pressButton", 1)
end

quand 61 = 1  portail fermé alors appui sur bouton VD mais quoi mettre pour else? il ne faut rien faire dans ce  cas.

Posté(e)

Ah pardon, je croyais que tu utilisais la scene d'envois de plusieurs messages/plusieurs scènes.

 

Si tu veux un else, tu peux faire comme ceci, mais ce n'est pas utile.

je trouve plus parlant de l'ecrire comme ceci mais c'est personnel ;-)

 

local portailFerme = tonumber(fibaro:getValue(61, "value")) == 1  

if portailFerme then
    fibaro:call(169, "pressButton", 1)
else
    fibaro:debug("Portail déjà ouvert")
end

 

Posté(e)

Bonsoir les gars,

 

Je viens de faire plusieurs tests de Popup avec interaction selon 2 tests qui utilisent 2 méthodes différentes.

 

Pourriez-vous m'indiquer si vous avez le même comportement que moi (voir dans le code de la scène ci-dessous) avec en commentaire les comportements constatés chez-moi.

 

Attention à bien modifier l'ID de votre téléphone dans le code du 2ème test.

 

--[[
%% properties
38 value
%% weather
%% events
%% globals
--]]

  
      local imgUrl = 'http://www.fibaro.com/images/pol/sys_uslugi.png';

    -- Test 1) pop-up avec question pour lancement d'une scène
    -- si application Fibaro ouverte sur l'iPhone :
    --      - Affichage de la Question dans l'application et lancement de la scène
    -- Si application Fibaro fermée
    --        - rien ne se passe ni sur le spring board ni dans l'application Fibaro

    HomeCenter.PopupService.publish({
    title = 'Teste 1) - Détection de Fumées',
    subtitle = os.date("%I:%M:%S %p | %B %d, %Y"),
    contentTitle = 'Détection de Fumées',
    contentBody = 'Allumer Salle à Manger ?',
    img = imgUrl,
    type = 'Critical',
    buttons = {
          { caption = 'Oui', sceneId = 12 },
          { caption = 'Non', sceneId = 0 }
        }
    })
      
    -- Test 2) pop-up avec question pour lancement d'une scène
    -- si application Fibaro ouverte sur l'iPhone :
    --      - rien ne se passe ni sur le spring board ni dans l'application Fibaro
    -- si application Fibaro fermée
    --      - Popup sur le springbord
    --           - Si clic sur le bandeau :
    --                - Ouverture de l'application, mais question posée dans l'application
    --             - Si swipe vers le bas :
    --                  - Affichage de la Question et lancement de la scène
      api.post('/mobile/push', 
        {
          ["mobileDevices"]={12},      -- ID du telephone
          ["message"]='Allumer Salle à Manger ?', --contentBody,     -- La question que l'on veut posser
          ["title"]='Teste 2) - Détection de Fumées',       -- titre de la question
          ["category"]='YES_NO',       -- 'YES_NO' ou 'RUN_CANCEL'
          ["data"]={["sceneId"]=12}    -- ID de la scéne que l'on veut lancer
        }
       );

 

Posté(e) (modifié)
Il y a 3 heures, pepite a dit :

Ah pardon, je croyais que tu utilisais la scene d'envois de plusieurs messages/plusieurs scènes.

 

Si tu veux un else, tu peux faire comme ceci, mais ce n'est pas utile.

je trouve plus parlant de l'ecrire comme ceci mais c'est personnel ;-)

 


local portailFerme = tonumber(fibaro:getValue(61, "value")) == 1  

if portailFerme then
    fibaro:call(169, "pressButton", 1)
else
    fibaro:debug("Portail déjà ouvert")
end

 

 Si je peux me permettre, tu charges une variable en mémoire, ce qui n'est pas forcément des plus optimisé. sauf si tu l'utilises plusieurs fois cette variable dans le reste de ton code. Pour le Else, je ne dis rien.

Un bon commentaire au-dessus du test ne consommera rien en mémoire ;) je sais, je suis un vieux programmeur qui à l'époque (ou elle se faisait rare et cher) faisait attention de ne pas la saturer inutilement.

 

Moi je dis ça,je ne dis rien. Vieux réflexe quand tu nous tiens ;)

 

Modifié par MAM78
Posté(e) (modifié)

@MAM78

 

Je prends tous les conseils avec plaisir pour progresser. 

 

C'est vrai que je la charge mais c'est plus simple à lire tout de même

 

Je plussoie pour les commentaires mais tant que c'est en test ca passe encore, surtout pour 3 lignes ;-)

 

 

Réponse à ta question de comportement : 

 

 

C'est exactement la différence entre le Popup (HomeCenter.Popup) et l'Interactive PUSH (api.post('/mobile/push')

 

La SEULE ressemblance est le lancement DE SCENE à partir d'une question

 

POPUP : 

 - appli fermée : pas de POPUP mais reste sur l'appli au niveau des notifications de l'appli

 - appli ouverte :popup, si réponse au niveau du popup, effacement  du Popup

- à tester, appli ouverte mais en arrière plan

 

Interactive push : 

 -en fait c'est un push améliorée donc fonctionne comme un push + scène 

 - d'ailleurs le code : api.post ...montre bien que c'est un push

 

 

Pour moi ta detection de fumée est à mettre dans un Interactive Push donc ;-)

 

 

Modifié par pepite
Posté(e) (modifié)

Ce qui me gène dans le Interactive Push c'est que si tu reçois sur ton smartphone plusieurs notifications, dès que tu en as cliqué sur l'une des notifications ça lance l'application Fibaro et du coup tu perds les autres push que t'as reçu sur ton springboard.

 

Alors que pour les Popup dans l'application Fibaro tu gardes l'ensemble des notifications tant que tu ne les as pas traitées.

 

Donc du coup, je pense qu'il faut utiliser les 2 systèmes lorsque tu veux être certain de ne pas perdre certaines notifications (dans le cas d'Interactive Push) qui pourraient être très importantes du type intrusion où fuite d'eau par exemple.

Modifié par MAM78
Posté(e)

ok mais quand ça crâme chez toi, c'est peut-être mieux d'avoir un push qui est visible tout de suite plutôt qu'une notification que tu verras quand tu te décideras d'ouvrir l'appli... :)

sauf si la question posée est "récupérer les cendre : oui / non " :lol:  :98:

 

Posté(e)

Justement mon propos dans ce cas là, serait d'utiliser les deux systèmes afin d'être certain de ne pas perdre l'info. Les interactive/push ne sont pas historisées.

 

Il m'est souvent arrivé de cliquer sur le message push plutôt que de l'ouvrir, du coup tu perds le côté interactif avec déclenchement de scènes.

Posté(e)

Bonjour à tous,

 

j'ai un petit soucis avec l'interactive scène décrite sur l'image jointe.

Ce que je voudrais, c'est au bout de 90 min (soit 5400s), si les spots salle à manger allumés, alors envoyer push pour interactive scène.

Cependant j'ai tout le temps des alertes pour me dire que trop d'instance pour cette scène, que dois je faire, sachant que je suis preneur de LUA également :)

 

Merci d'avance.

 

interactive scene.jpg

Posté(e)

J'arrive super tard sur ce sujet et je n'ai pas tout lu mais rien qu'à la première page, il y a des questions qui me semblent pertinentes ...

 

["mobileDevices"] =  {} <= c'est un tableau d'ID de smartphone ... @Did tu avais bien raison

["data"] = {} <= c'est un tableau d'ID de scénario

 

donc

api.post('/mobile/push', 
  {
    ["mobileDevices"]={80, 65, 30},
    ["message"]="Voulez-vous fermer les volets nord, est et ouest",
    ["title"]="Vive la nuit", 
    ["category"]='RUN_CANCEL',
    ["data"]={["sceneId"]=5, ["sceneId"]=6, ["sceneId"]=7}
  }

 

devrait fonctionner

  • Upvote 3
Posté(e)

Megabubub, c'est après les 5400s que tu reçois les alertes ou déjà avant ? Tu as augmenté le nombre de scène max à 6 par exemple ?

×
×
  • Créer...