--[[
%% 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