Aller au contenu

Messages recommandés

Posté(e)

Oui oui c'est bien cela, en fait l'erreur était situé dans le data, j'ai essayé d'épurer les \" par des

Mais une fois que j'ai tout repassé en \" c'est passé du premier coup ; j'ai du faire une erreur

Posté(e) (modifié)

Bon ça y est, j'ai fait un script/tuto

 

Je me suis inspiré d'un code de gazou trouvé sur le forum pour automatiser la VG et un bout de code de lazer pour que la zone de debug soit colorée

J'espère que c'est possible ? je renvoi les sources dans mon code.

 

J'ai essayé de faire un script/tuto qui en fonction d'un petit questionnaire 'oui/non' vous réoriente vers des URL car je trouve que ça nécessite pas mal de prérequis pour que ça fonctionne.

(un compte dev lametric, la creation d'une appli lametric, une clé api, un encodage B64)

 

Le code source ci dessous en copier/coller et le fichier LUA.

C'est la version de base d'une notification, car on peut y passer plein d'autres paramètres, mais je vous invite à lire http://lametric-documentation.readthedocs.io/en/latest/reference-docs/device-notifications.html si vous voulez poussez plus loin.

 

cf v. 1.1 plus bas

 

Sinon en version light, ca tient seulement avec

local Lametric = net.HTTPClient()
Lametric:request("http://" .. ip_ .. ":8080/api/v2/device/notifications",
    {options =
      {
        method = 'POST', 
        headers = {
          ['Content-Type'] = 'application/json',
          ['Authorization'] = 'Basic ' .. ma_cle_api_en_base64_est,
        }, 					
        data = '{\"icon_type\":\"none\",\"model\":{\"frames\":[{\"icon\":\"'.. icone_message ..'\", \"text\":\"' .. push_ .. '\"}],\"sound\":{\"category\":\"notifications\",\"id\":"' .. son_message .. '"}, \"cycles\":'.. duree_message / 4.5 ..'}}'
      },
    })

 

lametric.lua

Modifié par nigao
  • Upvote 1
Posté(e)

Excellent boulot @nigao

Merci beaucoup. 

 

Tu devrais créer un sujet dans Tutoriels, ce sera plus facile à retrouver pour tous ;-) 

Top well done..

Je trouve dommage que lametric coute aussi chère pour un design pas trop WAF ;-)

  • Upvote 1
Posté(e)

Je vais le fignoler un peu ce soir avec des nouvelles fonctions et je tente la rubrique tuto.

J'ai réalisés que les icones animés ne sont pas prise en charge en l'état actuel. Seul la frame 1 s'affiche

 

Je regrette surtout pour l'instant de pas pouvoir faire du TTS avec :(

  • Upvote 1
Posté(e) (modifié)

Une nouvelle version arrive bientot.

 

Elle sera préconfiguré avec 4 sons et 4 icones clignotantes différentes.

Vert clignotant + son positif

Rouge clignotant + son négatif

Blanc clignotant + son notif

Orange clignotant + son (j'ai oublier lequel) ^^

 

Il suffira de modifier la variable globale "type,texte" dans n'importe quelle scène/vd pour déclencher automatiquement le lamectric

 

Exemple chez moi

'positif, ARMED' pour le retour d'enclenchement d'alarme

'negatif, HUE HS' pour la notification que l'interrupteur d'une philips HUE est sur OFF

Modifié par nigao
  • Upvote 1
Posté(e) (modifié)

Bon je n'ai pas beaucoup de temps en ce moment à consacrer au LUA mais comme je veux pas perdre la motivation de mon beta testeur @jorderic je lache en vrac le nouveau code

 

Si vus avez déjà installé la première version,il suffit de supprimer la variable globale pour qu'elle se récrée au bon 'format' ou de forcer simplement la valeur de cette variable 

par fibaro:setGlobal('LAMETRIC_Nigao','positif, texte')

Dans le cas contraire le parser ne trouvera les arguments et renverra une erreur

A noter aussi que le trigger se déroule sur changement de la variable globale, donc si vous passer 'deux fois' le même message, une seule notification aura lieu.

Je vais coder une remise à zero de la variable globale pour éviter ce genre de situation

Les icones sont pour le moment hyper basique (carré rouge/vert/blanc)

--[[
%% properties
%% events
%% globals
LAMETRIC_Nigao
--]]

-- ==================================================
-- LAMETRIC : notification via reseau local
-- ==================================================
-- Cette scène permet d'envoyer une notification sur un Lametric en réseau local
-- Ce qui permet un temps de latence accéléré comparé aux serveurs lametrics ou IFTTT
--
-- Auteur : Nigao
-- Version : 1.10
-- Un grand merci à :
-- Toute la communauté Domotique-fibaro.fr
-- Gazou : pour le code de création d'une VG
-- Lazer : pour le code du debug coloré
-- ------------------------------------------------------------
-- Historique
-- ------------------------------------------------------------
-- 21/06/2017 : Rajout d'icones basiques préconfigurées vert/rouge/blanc/orange en fonction d'un argument à passer par VG
-- 13/06/2017 : Rajout d'un mini tutoriel en fonction d'un questionnaire de départ
--------------------------------------------------
--   CONFIGUREZ ICI VOS PARAMETRES PERSONNELS   --
--------------------------------------------------
local jai_un_compte_developpeur_lametric = 'oui/non' -- répondez par oui ou non
local jai_la_cle_api_de_mon_lametric = 'oui/non' -- répondez par oui ou non
local jai_creer_une_application_notification = 'oui/non' -- répondez par oui ou non
local jai_adresse_ip_de_mon_lametric = 'oui/non' -- répondez par oui ou non
local jai_encoder_ma_cle_api_en_base64 = 'oui/non' -- répondez par oui ou non

-- Cle API sur https://developer.lametric.com/user/devices
local ma_cle_api_est = "" 

-- Adresse IP sur 192.168.1.1 en général mais dépend de votre config réseau
local adresse_ip_lametric_est = ""

-- Encodez 'dev:cle_api' sur https://www.base64encode.org/
local ma_cle_api_en_base64_est = ""

-- durée approximative d'affichage en secondes (on parle de cycle et pas de secondes sur le site Lametric)
local duree_message = 60

--------------------------------------------------
-- NE RIEN MODIFIFIER EN DESSOUS DE CETTE LIGNE --
--------------------------------------------------

-- Code de Gazou, https://www.domotique-fibaro.fr/topic/4439-cr%C3%A3%C2%A9e-une-variable-globale-ou-une-variable-globale-predefinie-en-lua/#comment-66163
function createGlobalIfNotExists(varName, defaultValue)
  if (fibaro:getGlobal(varName) == nil) then
    fibaro:debug("Création de la variable "..varName.." avec comme valeur par défaut "..defaultValue)
    newVar = {}
    newVar.name = varName
    newVar.value = defaultValue
    local http = net.HTTPClient()
    http:request("http://127.0.0.1:11111/api/globalVariables", { options = { method = 'POST', data = json.encode(newVar)}}) 
  end
end
createGlobalIfNotExists("LAMETRIC_Nigao", "positif,hello") 

-- Portion de code de Lazer, extrait de Watchdog
function Message(color, message)
  if color and color ~= "" then
    fibaro:debug('<span style="color:'..color..';">'..(message or '<nil>')..'</span>')
  else
    fibaro:debug(message or '<nil>')
  end
end

-- parser de la variable globale
local vg_ = fibaro:getGlobalValue("LAMETRIC_Nigao")
local vg_parser_ = {}	
local each_value_
local icone_b64_ 
local son_message_

if vg_ ~= nil then
  for each_value_ in string.gmatch(vg_,"([^,%s]+)") do
    vg_parser_[#vg_parser_ + 1] = each_value_;
  end

  vg_icone = vg_parser_[1]
  vg_txt = vg_parser_[2]
  
  if vg_icone == "positif" then
    son_message_ = "positive3"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHIz+DCwqJCwmJCQmJCQeHCQiHBwiHDQyLCQeJCQiJBwiJDQyNAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgANACH+IFJlc2l6ZWQgd2l0aCBlemdpZi5jb20gR0lGIG1ha2VyACwAAAAACAAIAAAEEBDJOYO98mKkbe6fFm7UFAEAIfkECTIAAQAsAAAAAAgACAAABBmQjEEEkSrrzbXxyseJ4WecZ1EYqgEUQBxHADs="
  elseif vg_icone == "negatif" then
    son_message_ = "lose2"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHPQCFCwqJCwmJCQmJCQeHCQiHBwiHDQyLCQeJCQiJBwiJDQyNAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgANACH+IFJlc2l6ZWQgd2l0aCBlemdpZi5jb20gR0lGIG1ha2VyACwAAAAACAAIAAAEEBDJOYO98mKkbe6fFm7UFAEAIfkECTIAAQAsAAAAAAgACAAABBmQjEEEkSrrzbMx2vdxoAeKX1EYqgEUQBxHADs="
  elseif vg_icone == "info" then
    son_message_ = "notification2"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHCQeHBwiHCQiHCQeJBwiJCQiJCQmJCwmJCwqJDQyLDQyNPz+/AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/iBSZXNpemVkIHdpdGggZXpnaWYuY29tIEdJRiBtYWtlcgAh+QQAMgD/ACwAAAAACAAIAAAEEHDJOZm98uKlbe6fFm7UFAEAIfkEADIA/wAsAAAAAAgACAAABBnwIHTSkSbrzfXwxseJ4TecZxAM6gAEQBxHADs="
  else
    son_message_ = "letter_email"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHPSGHCwqJCwmJCQmJCQeHCQiHBwiHDQyLCQeJCQiJBwiJDQyNAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgANACH+IFJlc2l6ZWQgd2l0aCBlemdpZi5jb20gR0lGIG1ha2VyACwAAAAACAAIAAAEEBDJOYO98mKkbe6fFm7UFAEAIfkECTIAAQAsAAAAAAgACAAABBmQjEEEkSrrzbXxyseJ4WecZ1EYqgEUQBxHADs="
  end

--[[ 
Le catalogue des icones sur https://developer.lametric.com/icons
Le catalogue des sons des sons disponibles 
bicycle / car / cash / cat / dog / dog2 / energy / knock-knock
letter_email / lose1 / lose2 / negative1 / negative2 / negative3
negative4 / negative5 / notification / notification2 / notification3
notification4 / open_door / positive1 / positive2 / positive3
positive4 / positive5 / positive6 / statistic / thunder
water1 / water2 / win / win2 / wind / wind_short
--]]
end

---------------
-- TUTORIEL  --
---------------
local config_statut = true
local Ligne_dev = 30
local Ligne_info_api = 31
local Ligne_valeur_api = 36
local Ligne_info_app = 32
local Ligne_info_ip = 33
local Ligne_valeur_ip = 37
local Ligne_info_b64 = 34
local Ligne_valeur_b64 = 38

if jai_un_compte_developpeur_lametric ~= "oui" then
  Message("yellow","--------------------------------")
  Message("yellow","-- Pas de compte développeur --")
  Message("yellow","--------------------------------")
  Message("white","La création d'un compte developpeur est nécessaire.")
  Message("red","COMPTE DEV : https://developer.lametric.com/register")
  Message("white","Une fois votre compte créer, merci de compléter la ligne " .. Ligne_dev .. " de ce script par 'oui'")
  config_statut = false
end

if jai_la_cle_api_de_mon_lametric ~= "oui" or ma_cle_api_est == ""  then
  Message("yellow","--------------------------------")
  Message("yellow","-- Pas de clé API déclarée --")
  Message("yellow","--------------------------------")
  Message("white","La clé API de votre Lametric est requise.")
  Message("white","Merci de la récupérer à l'aide de votre compte développeur")
  Message("red","CLE API : https://developer.lametric.com/user/devices")
  Message("white","Par la suite, modifiez la ligne " .. Ligne_info_api .. " de ce script par 'oui'")
  Message("white","Ainsi que la ligne " .. Ligne_valeur_api .. " de ce script par la valeur de votre clé API")
  config_statut = false
end

if jai_creer_une_application_notification ~= "oui" then
  Message("yellow","--------------------------------")
  Message("yellow","-- Pas d'application de notification --")
  Message("yellow","--------------------------------")
  Message("white","Une application de type 'notification' est nécessaire.")
  Message("red","NOTIF APP : https://developer.lametric.com/applications/createsource")
  Message("white","Par la suite, modifiez la ligne " .. Ligne_info_app .. " de ce script par 'oui'")
  config_statut = false
end

if jai_adresse_ip_de_mon_lametric ~= "oui" then
  Message("yellow","--------------------------------")
  Message("yellow","-- Pas d'adresse IP           --")
  Message("yellow","--------------------------------")
  Message("white","L'adresse IP locale de votre Lametric est requise.")
  Message("white","Vérifiez celle-ci dans votre routeur et pensez à attribuer une IP fixe.")  
  Message("red","EXEMPLE : http://192.168.1.1")
  Message("white","Par la suite, modifiez la ligne " .. Ligne_info_ip .. " de ce script par 'oui'")
  Message("white","Ainsi que la ligne " .. Ligne_valeur_ip .. " par l'adresse IP locale de votre Lametric")
  config_statut = false
end

if jai_encoder_ma_cle_api_en_base64 ~= "oui" or ma_cle_api_en_base64_est == ""  then
  Message("yellow","--------------------------------")
  Message("yellow","-- Pas de clé encodée en Base64 --")
  Message("yellow","--------------------------------")
  Message("white","Il est nécessaire d'encoder en Base64 votre clé API.")
  Message("red","Encodage : https://www.base64encode.org/")
  Message("white","Rajoutez 'dev:' devant votre clé API avant de lancer l'encodage (sans les ' ')")
  if ma_cle_api_est ~= "" then Message("red","Dans votre cas dev:" ..  ma_cle_api_est) end
  Message("white","Par la suite, modifiez la ligne " .. Ligne_info_b64 .. " de ce script par 'oui'")
  Message("white","Ainsi que la ligne " .. Ligne_valeur_b64 .. " de ce script par la valeur de l'encodage B64")
  config_statut = false
end

--------------------------------
-- REQUETE HTTP POST EN LOCAL --
--------------------------------
if fibaro:getGlobal("LAMETRIC_Nigao") ~= nil and config_statut == true then
  local Lametric = net.HTTPClient()

  Lametric:request("http://" .. adresse_ip_lametric_est .. ":8080/api/v2/device/notifications",
    {options =
      {
        method = 'POST', 
        headers = {
          ['Content-Type'] = 'application/json',
          ['Authorization'] = 'Basic ' .. ma_cle_api_en_base64_est,
        }, 					
        data = '{\"icon_type\":\"none\",\"model\":{\"frames\":[{\"icon\":\"'.. icone_b64_ ..'\", \"text\":\"' .. vg_txt .. '\"}],\"sound\":{\"category\":\"notifications\",\"id\":"' .. son_message_ .. '"}, \"cycles\":'.. duree_message / 4.5 ..'}}'
      },
    })
  Message("yellow","----------------------")
  Message("yellow","-- MODE EMPLOI --")
  Message("yellow","----------------------")
  Message("white","Pour déclencher une notification, il vous suffit d'utiliser le code suivant.")
  Message("red","fibaro:setGlobal('LAMETRIC_Nigao','argument,TEXTE')")
  Message("red","argument = positif / negatif / info")
  Message("white","Attention au nombre de caractères limité du LAMETRIC")
  Message("white","6 caractères si utilisation d'icone et 8 caractères en l'absence d'icone.")
  Message("white","Il est possible d'écrire plus long mais cela entrainera un défilement.")
end

Edit : je suis parti trop vite, j'ai diffuser mes clé API et tout mdr ^^ mais bon de panique, le post est modifié ^^

Modifié par nigao
Posté(e)
Il y a 5 heures, nigao a dit :

--

hello @nigao Testé et approuvé !

Il me reste à modifier les sons et adapter en fonction de l'usage.

Seule différence par rapport à la version 1.0: il faut mettre des _ pour combler les espaces sinon le message ne s'affiche pas.

@+

 

Posté(e)

Il te faut modifier la partie de code suivant 

if vg_icone == "positif" then
    son_message_ = "positive3"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHIz+DCwqJCwmJCQmJCQeHCQiHBwiHDQyLCQeJCQiJBwiJDQyNAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgANACH+IFJlc2l6ZWQgd2l0aCBlemdpZi5jb20gR0lGIG1ha2VyACwAAAAACAAIAAAEEBDJOYO98mKkbe6fFm7UFAEAIfkECTIAAQAsAAAAAAgACAAABBmQjEEEkSrrzbXxyseJ4WecZ1EYqgEUQBxHADs="
  elseif vg_icone == "negatif" then
    son_message_ = "lose2"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHPQCFCwqJCwmJCQmJCQeHCQiHBwiHDQyLCQeJCQiJBwiJDQyNAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgANACH+IFJlc2l6ZWQgd2l0aCBlemdpZi5jb20gR0lGIG1ha2VyACwAAAAACAAIAAAEEBDJOYO98mKkbe6fFm7UFAEAIfkECTIAAQAsAAAAAAgACAAABBmQjEEEkSrrzbMx2vdxoAeKX1EYqgEUQBxHADs="
  elseif vg_icone == "info" then
    son_message_ = "notification2"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHCQeHBwiHCQiHCQeJBwiJCQiJCQmJCwmJCwqJDQyLDQyNPz+/AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/iBSZXNpemVkIHdpdGggZXpnaWYuY29tIEdJRiBtYWtlcgAh+QQAMgD/ACwAAAAACAAIAAAEEHDJOZm98uKlbe6fFm7UFAEAIfkEADIA/wAsAAAAAAgACAAABBnwIHTSkSbrzfXwxseJ4TecZxAM6gAEQBxHADs="
  else
    son_message_ = "letter_email"
    icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAPMAABweHPSGHCwqJCwmJCQmJCQeHCQiHBwiHDQyLCQeJCQiJBwiJDQyNAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJMgANACH+IFJlc2l6ZWQgd2l0aCBlemdpZi5jb20gR0lGIG1ha2VyACwAAAAACAAIAAAEEBDJOYO98mKkbe6fFm7UFAEAIfkECTIAAQAsAAAAAAgACAAABBmQjEEEkSrrzbXxyseJ4WecZ1EYqgEUQBxHADs="
  end

A savoir qu'il te fut au préalable un gif en 8x8 pixels. Si tu encodes un gif plus grand, le lametric n'affiche que le coin supérieur de ton gif correspondant à 8 pixel.

 

J'utilise les gifs de la bibliothèque officielle mais dans un 'browser' si tu les download ils sont en 45x45 pixels.

Tu les resize avec le le logiciel de ton choix (ou en ligne sur https://ezgif.com/resize)

Et une fois que tu as un gif 8x8, tu le moulines avec https://www.base64-image.de/

Tu récupères l'encodage B64 et tu remplaces icone_b64_ = "data:image/gif;base64,<GIF_B64_ici>"

 

 

Posté(e)

salut @nigao

J'ai bien réussi à personnaliser les icônes par fait ! :13:

Etape suivante:

Avec la 1.10 il y a certain de mes messages qui ne peuvent se lire.

Exemple:

Je récupère la valeur d'une variable dans un VD pour formater ensuite la variable Lametric_Nigao

local rdv = fibaro:getGlobal('RDV');
fibaro:setGlobal('LAMETRIC_Nigao', rdv)

Mais avec la nécessité maintenant d'indiqué positif ou négatif ect.... impossilbe d'avoir une valeur de variable fonctionnelle...

Une idée?? 

Merci

 

Posté(e) (modifié)

@jorderic je ne comprends pas la demande :-) je te fais une réponse et j'espère pas être à côté de la plaque...

 

Tu récupères la valeur de ta Variable Globale 'RDV' et tu souhaites la redirigée sur le lametric.

Soit ta variable globale est préformatée avec l'argument positif/négatif et dans ce cas tu n'as rien à faire

Sinon, il te faut concaténer ta variable locale avec l'argument voulu

local rdv = fibaro:getGlobal('RDV')
local argument = 'positif'
fibaro:setGlobal('LAMETRIC_Nigao', argument .. ",".. rdv)

Si positif/négatif/autre est soumis à des conditions, il te faudra faire les if ... end adéquats. Tu peux aussi faire ça de différente façon de coder selon ta façon de penser :P

-------
local rdv = 'positif' .. ',' .. fibaro:getGlobal('RDV')
fibaro:setGlobal('LAMETRIC_Nigao', rdv)

------- ou encore -------
fibaro:setGlobal('LAMETRIC_Nigao', 'positif' .. ',' .. fibaro:getGlobal('RDV'))

 

Modifié par nigao
  • 2 semaines après...
Posté(e)

oué ca à l'air super marrant, 

tu peux nous mettre quelques photos de ce que tu fais, 

 

j 'ai pas regarder le code de @nigao, étant complément neophite, faut que je regarde si je sais l'adapter à men besoins

Posté(e)

Salut @nigao

Je continue à déployer l'utlisation de Lametric...

J'ai un petit souci pour le formatage de mes notifications, comme vu lors du précédent post.

Je récupère la variable RDV et l'envoi sur Lametric (avec ton format). Mais à la base ma variable est une phrase avec des espaces (ex : "cherchez les enfants à l'école")

Pour la lire correctement sur Lametric, les vides doivent être remplacés par des _ . Y a t'il moyen, avec du LUA, de remplacer les espaces par des _ ? 

Merci :)

  • 6 mois après...
Posté(e)

Salut, moi j'en ai trouvé un à 80€ alors ...

Dis moi nigao tu as trouvé comment lancer un truc prédéfini sur l'écran ?

Posté(e) (modifié)

@Massalia Peux-tu être plus précis stp ? Qu'entends-tu par un truc prédéfini sur l'écran ?

 

A l'heure actuelle j'arrive à afficher la valeur d'une variable quelconque du HC2 ainsi que l'icone animé si besoin.

 

Exemple de mon utilisation actuelle :

- Je suis prévenu en temps réel dès qu'une ampoule philips HUE a été éteinte physiquement via interrupteur (nom de ampoule)

- Si un powerplug détecte que mon ordi est allumé dans le bureau, le lametrics affiche en temps réel le cours du bitcoin le temps que je suis dans le bureau

- Si un powerplug détecte que j'utilise mes flash de studios dans la pièce à coté, le lametrics affiche "ON AIR" pour prévenir que la salle est occupé

- Combiner avec IFTTT, si moi ou madame entre dans un rayon de 1km de la maison, notification qu'on est bientot de retour à la maison (ca permet de cacher l'amant(e) dans le placard)

 

 

Modifié par nigao
Posté(e)

Whaou pas mal.

 

Bon dans l'ordre je voudrait pouvoir afficher les infos "classique" genre netatmo, etc mais quand je veut !

Pour la suite si tu peut partager en MP tes infos, notamment pur les icône animées ;-)

 

Voilà

 

×
×
  • Créer...