--[[ %% properties %% events %% globals LAMETRIC_Nigao ------ text variable ----- --]] -- ================================================== -- 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' -- répondez par oui ou non local jai_la_cle_api_de_mon_lametric = 'oui' -- répondez par oui ou non local jai_creer_une_application_notification = 'oui' -- répondez par oui ou non local jai_adresse_ip_de_mon_lametric = 'oui' -- répondez par oui ou non local jai_encoder_ma_cle_api_en_base64 = 'oui' -- répondez par oui ou non -- Cle API sur https://developer.lametric.com/user/devices local ma_cle_api_est = "57ec40685e4e4fcdd1847833917b76bf19xxxxxxxxxxxxxxxxxxxxxx" ---API KEY----- -- Adresse IP sur 192.168.1.1 en général mais dépend de votre config réseau local adresse_ip_lametric_est = "192.168.178.xx" ---IP Adresse Lametric--- -- Encodez 'dev:cle_api' sur https://www.base64encode.org/ local ma_cle_api_en_base64_est = "ZGV2OjU3ZWM0MDY4NWU0ZTRmY2RkMTg0NzgzMzkxN2I3NmJmxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ---------"dev:api-Key" zusammen umwandeln in BASE64------- -- durée approximative d'affichage en secondes (on parle de cycle et pas de secondes sur le site Lametric) local duree_message = 20 —— Dauer der Message -------------------------------------------------- -- 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(''..(message or '')..'') else fibaro:debug(message or '') 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] -----ICONS----- ----- müssen auch in Base64 Umgewandelt werden und dürfen nur 48x48 sein ---------- if vg_icone == "positif" then son_message_ = "positive3" icone_b64_ = "data:image/gif;base64,R0lGODlhCAAIAIAAACQiJPz+/CH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACwAAAAACAAIAAACCISPqcutERwoACH5BAkKAAAALAAAAAAIAAgAAAIJhI+puxGsHDQFACH5BAkKAAAALAAAAAAIAAgAAAIJhI+pGsG+XjwFACH5BAkKAAAALAAAAAAIAAgAAAIKhI+JEcrelHzyFAAh+QQJMgAAACwAAAAACAAIAAACDISPEJHKuVpsdFJTAAAh+QQJCgAAACwAAAAACAAIAIEkIiT8/vzMAgQAAAACEISPEJGyglyAR1Ij8jUr+QIAIfkECQoAAAAsAAAAAAgACACBJCIk/P78zAIE5AIEAhSEjxMxN7JEAy/OGqR5ok+6fMhRAAAh+QQJZAAAACwAAAAACAAIAIIkIiT8/vzMAgT8AgTkAgQAAAAAAAAAAAADGggwPLokBOIGEVJQi4NmV7ZdQklB0qk0DpAAADs=" 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 -----Sounds die zur auswahl sind ----- --[[ 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 -------ab hier nur Beschreibung------- --------------- -- 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