Aller au contenu

Messages recommandés

Posté(e)

Bonjour à  Tous,

 

dans le VD je souhaiterai ajouter dans les "labels", en plus du"name" , la piece (room) ou se situe le module concerné, comment faire ? j'ai essayé avec getRoomName, mais je m'y prends mal

enfin, je souhaiterai un message push lorsque l'une des batteries est < à  x%

merci

Posté(e)

voici le code àmettre dans le bouton batteries pour afficher le nom de la pièce

----------------------------------
-- User Settings
----------------------------------
-- icones pour 0, 25, 50, 75 & 100 %
local iconebatt = {39, 40, 41, 42, 43}

----------------------------------
-- DO not change bellow this line
----------------------------------
local modules = {}
local batt             -- charge de la batt
local battmin = 100    -- % charge de la batterie chargée au min

HC2 = Net.FHttp("127.0.0.1",11111)

-- memorise LastCheck time
local LastCheck = os.date("%d/%m/%y %H:%M")

-- clear labels
for i = 1, 10 do
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label" ..i.. ".value", "")
end

---------------
--FUNCTIONS
---------------
function exclude(name)
  return name == "Main_Zwave_Device" or name == "Seismomètre" or name == "Luminosité"
end

---------------
--END FUNCTIONS
---------------
local parentIds = {}
local uniqueParentId = true
local response = HC2:GET("/api/devices")
local json = json.decode(response)
  
for k, v in ipairs(json) do
  if (type(v.properties.batteryLevel) == "number") then
    if (not exclude(v.name) and v.visible and (not uniqueParentId or not parentIds[v.parentId])) 
      then
	    parentIds[v.parentId] = true
        batt = tonumber(v.properties.batteryLevel)
        if batt == 255 then batt = 0 end
        if (batt < battmin) then battmin = batt end
      	table.insert(modules, {batt, v.name .. " (" .. v.id .. "-"..fibaro:getRoomName(fibaro:getRoomID(v.id))..")"})
    end -- if exclude
  end -- if batteryLevel
end -- for

-- sort table
function comp(w1,w2)
	return tonumber(w1[1]) < tonumber(w2[1])
end
table.sort(modules,comp)

-- display labels
--if string.len(modules[1][2]) >= 29 then
--  modules[1][2] = string.sub(modules[1][2], 1, 28)
--end
for index, value in ipairs(modules) do
  	pcall( function() 
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..index..".value", value[2].. "..." .. value[1] .. "%")
    	end
  	)
end

-- display LastCheck
fibaro:debug(LastCheck)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LastCheck.value", LastCheck)

-- display Icon
fibaro:debug("battmin = "..battmin)
battmin = math.floor((battmin - 1)/25) + 2
fibaro:debug("Icone batterie : "..battmin)
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", iconebatt[battmin])

(àla place du code existant)

Posté(e)

oui, mais tu dois également mettre les lignes 59 à61 en commentaire, car elle a pour objectif de tronquer la ligne si elle est trop longue, pour que tout tinne sur une ligne.

Pour le push, il faut se poser les bonnes questions : fréquence du push, 1 par device ?

Car sinon tu sera innondé

Posté(e)

ok,

concernant les pushs

j'ai 5 modules sur batterie, je souhaite, que si l'un d'entre eux passe la barre des (par exemple) 35%, recevoir un push "batterie module baievitrée salon <35%"

 

EDIT:

j'ai 5 modules sur batterie, dont 1 à  94% et 4 à  100%

on va partir sur 1 push si batterie < à  85%

Posté(e)

@flamalex,

ok, mais tu re!ois un push àchaque cycle de vérification par le VD ?

Car sinon, c'est "chiadé"

Posté(e)

voici le bouton batterie modifié pour les pushs : IDs des téléphones sous forme de table dans pushID et le niveau d'alerte dans pushLevel.

L'alerte est envoyée àchaque run du script.

Le message est générique : niveau d'alerte et niveau de batterie minimum.

Mets un niveau d'alerte à80% pour tester.

L'application te dira précisément de quelle batterie il s'agit.

----------------------------------
-- User Settings
----------------------------------
-- icones pour 0, 25, 50, 75 & 100 %
local iconebatt = {39, 40, 41, 42, 43}
local pushID = {177} -- 0 = no push; sinon entrer les ID séparés par une ,
local pushLevel = 10 -- niveau de batterie en dessous duquel il y a min 1 batterie pour notification push

----------------------------------
-- DO not change bellow this line
----------------------------------
local modules = {}
local batt             -- charge de la batt
local battmin = 100    -- % charge de la batterie chargée au min

HC2 = Net.FHttp("127.0.0.1",11111)

-- memorise LastCheck time
local LastCheck = os.date("%d/%m/%y %H:%M")

-- clear labels
for i = 1, 10 do
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label" ..i.. ".value", "")
end

---------------
--FUNCTIONS
---------------
function exclude(name)
  return name == "Main_Zwave_Device" or name == "Seismomètre" or name == "Luminosité"
end
-- fonction push notification
function push(msg)
	if pushID[1] ~= 0 then
		for i = 1, #pushID do
			fibaro:call(pushID[i], "sendPush", msg.." ("..os.date("%d/%m à%H:%M")..")")
		end
	end
end
---------------
--END FUNCTIONS
---------------
local parentIds = {}
local uniqueParentId = true
local response = HC2:GET("/api/devices")
local json = json.decode(response)
  
for k, v in ipairs(json) do
  if (type(v.properties.batteryLevel) == "number") then
    if (not exclude(v.name) and v.visible and (not uniqueParentId or not parentIds[v.parentId])) 
      then
	    parentIds[v.parentId] = true
        batt = tonumber(v.properties.batteryLevel)
        if batt == 255 then batt = 0 end
        if (batt < battmin) then battmin = batt end
      	table.insert(modules, {batt, v.name .. " (" .. v.id .. "-"..fibaro:getRoomName(fibaro:getRoomID(v.id))..")"})
    end -- if exclude
  end -- if batteryLevel
end -- for

-- sort table
function comp(w1,w2)
	return tonumber(w1[1]) < tonumber(w2[1])
end
table.sort(modules,comp)

-- display labels
--if string.len(modules[1][2]) >= 29 then
--  modules[1][2] = string.sub(modules[1][2], 1, 28)
--end
for index, value in ipairs(modules) do
  	pcall( function() 
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..index..".value", value[2].. "..." .. value[1] .. "%")
    	end
  	)
end

-- display LastCheck
fibaro:debug(LastCheck)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LastCheck.value", LastCheck)

-- display Icon
fibaro:debug("battmin = "..battmin)
if battmin < pushLevel then
  msg = "Il y a au moins une batterie sous le niveau minimum ("..pushLevel.."%) : "..battmin.."%."
  push(msg)
end
battmin = math.floor((battmin - 1)/25) + 2
fibaro:debug("Icone batterie : "..battmin)
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", iconebatt[battmin])

  • Upvote 2
Posté(e)

Salut Jojo, ca fonctionne super

franchement, chapeau :13:

comment peut on ajouter au message push, en plus du % de batterie restant, le "name" et la" room" du Module concerné?

et enfin, faut il mettre un trigger, pour etre informé dés qu'une batterie est < au level? plutôt que de faire un push

Posté(e)

les trigger ne fonctionnent qu'avec des scènes.

Ici, c'est un VD qui tourne toutes les heures par défaut, mais paramétrable (voir la doc du module).

 

Je ne recommande pas de mettre le nom du device dans le push, car

1) il sera trop long

2) si en même temps" 2 devices passent sous le seuil critique, l'info risque de ne pas être complète.

3) le push est là  pour te signaler queque-chose. Comme ceci en l'occurence n'est pas critique dans l'heure, tu as le temps de te connecter sur l'interface WEB pour voir de quel modules il sagit

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

salut Jojo, Comment ça va ? 

 

Je viens vers toi parce que depuis mon passage réussi en v4.090, ton VD ne fonctionne plus. Il me renvoie une erreur à  la ligne 56 du VD 

[ERROR] 13:26:28: line 56: attempt to concatenate a nil value

et voici mon code 

----------------------------------
-- User Settings
----------------------------------
-- icones pour 0, 25, 50, 75 & 100 %
local iconebatt = {1002,1003,1004,1005,1006}
local pushID = {385,304} -- 0 = no push; sinon entrer les ID séparés par une ,
local pushLevel = 30 -- niveau de batterie en dessous duquel il y a min 1 batterie pour notification push
 
----------------------------------
-- DO not change bellow this line
----------------------------------
local modules = {}
local batt             -- charge de la batt
local battmin = 100    -- % charge de la batterie chargée au min
 
HC2 = Net.FHttp("127.0.0.1",11111)
 
-- memorise LastCheck time
local LastCheck = os.date("%d/%m/%y %H:%M")
 
-- clear labels
for i = 1, 10 do
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label" ..i.. ".value", "")
end
 
---------------
--FUNCTIONS
---------------
function exclude(name)
  return name == "Main_Zwave_Device" or name == "Seismomètre" or name == "Luminosité"
end
-- fonction push notification
function push(msg)
	if pushID[1] ~= 0 then
		for i = 1, #pushID do
			fibaro:call(pushID[i], "sendPush", msg.." ("..os.date("%d/%m à  %H:%M")..")")
		end
	end
end
---------------
--END FUNCTIONS
---------------
local parentIds = {}
local uniqueParentId = true
local response = HC2:GET("/api/devices")
local json = json.decode(response)
 
for k, v in ipairs(json) do
  if (type(v.properties.batteryLevel) == "number") then
    if (not exclude(v.name) and v.visible and (not uniqueParentId or not parentIds[v.parentId])) 
      then
	    parentIds[v.parentId] = true
        batt = tonumber(v.properties.batteryLevel)
        if batt == 255 then batt = 0 end
        if (batt < battmin) then battmin = batt end
      	table.insert(modules, {batt, v.name .. " (" .. v.id .. "-"..fibaro:getRoomName(fibaro:getRoomID(v.id))..")"})
    end -- if exclude
  end -- if batteryLevel
end -- for
 
-- sort table
function comp(w1,w2)
	return tonumber(w1[1]) < tonumber(w2[1])
end
table.sort(modules,comp)
 
-- display labels
--if string.len(modules[1][2]) >= 29 then
--  modules[1][2] = string.sub(modules[1][2], 1, 28)
--end
for index, value in ipairs(modules) do
  	pcall( function() 
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..index..".value", value[2].. "..." .. value[1] .. "%")
    	end
  	)
end
 
-- display LastCheck
fibaro:debug(LastCheck)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LastCheck.value", LastCheck)
 
-- display Icon
fibaro:debug("battmin = "..battmin)
if battmin < pushLevel then
  msg = "Il y a au moins une batterie sous le niveau minimum ("..pushLevel.."%) : "..battmin.."%."
  push(msg)
end
battmin = math.floor((battmin - 1)/25) + 2
fibaro:debug("Icone batterie : "..battmin)
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", iconebatt[battmin])
 

La ligne 56 chez moi c'est celle-ci 

  	table.insert(modules, {batt, v.name .. " (" .. v.id .. "-"..fibaro:getRoomName(fibaro:getRoomID(v.id))..")"})

tu peux me dire ce qu'il a de changer entre la V4.080 et la V4.090 ? 

Merci pour ton aide 

Posté(e)

C'est probablement un module qui n'est dans aucune "Room" ou dans la Room 0 qui n'existe pas (ou plus, je ne sais pas)

 

fait un print(v.name) juste avant ta ligne 56 pour voir le nom du module qui plante.

  • Upvote 1
Posté(e)

Merci Steven, 

Effectivement j'avais un module qui n'était pas affecté à  une pièce. Cela venait de là  !

Merci

Posté(e)

Bonjour. Je suis nouveau dans le monde de la domotique, j'ai recu ma HC2 hier et j'en suis satisfait :) j'aimerais installer le plugin mais bizarrement je n'ai pas l'option Add Plugin, suis-je le seul ? Merci pour vos reponses

Posté(e)

il ne s'agit pas d'un plugin, mais un Virtual Device.

Pour cela tu vas dans l'onglet Devices -> Add or Remove Device -> To add the virtual device

  • Upvote 1
×
×
  • Créer...