Aller au contenu
Guru

(Tuto) Fake Device + Zibase

Recommended Posts

Hihihi j'avais fait ça : 

--[[
%% globals
OS4196965633_V1
OS4196965633_V2
--]]

local fakedevice_1 = 148
local fakedevice_2 = 150
local Temp = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10)
local prop1 = {properties = { value = Temp}}

local humidite = tonumber(fibaro:getGlobalValue("OS4196965633_V2"))
local prop2 = {properties = { value = humidite}}

api.put("/devices/"..fakedevice_1, prop1)
api.put("/devices/"..fakedevice_2, prop2)

Mission échoué j'ai pas réussi à simplifier :D

Modifié par Guru

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as le  / 10  qui dérange pour réellement pouvoir simplifier.

 

Si tu n'as pas plus de Fake Device, cela ne vaut pas la peine de se prendre la tête, ton script est très bien. Si tu commence à en avoir une dizaine, il faudra le repenser gentiment pour éviter de mettre à jour 10 modules en même temps pour rien.

 

En tout cas :16: bien joué

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Si si je patiente les modules Fibaro car actuellement je ne peux pas "reseter" le DSB05 donc j'ai commander un ouverture fermeture et l'oeil pour les sondes...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai reçu un fibaro FGK, inclusion ok fonctionnement ok, l'utiliser en fakeD ok mais l'utiliser en Fake + reset pour lui attribuer un nouvel ID et pouvoir l'utiliser tt cours impossible une astuce ? 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a cette procédure pour resetter le FGK et pouvoir ensuite le réutiliser comme nouveau module.

 

Citation

2. Resetting the Fibaro Door/Window Sensor
There is one way to reset the Fibaro Door/Window Sensor. The
procedure cleans its EPROM memory, including the main controller
and Z-Wave network data.
To reset the Fibaro Door/Window Sensor please follow below
instructions:
1) Take off the Sensor's cover and remove battery. Make sure the
TMP button is intact.
2) Touch the Sensor's body with a magnet,
3) Insert the battery,
4) Remove the magnet from the Sensor's body,
5) Remove the battery
6) Re-install the battery,
7) Reset will be confirmed by double LED blink.

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui mais non dans ma HC2 il le reconnaît bien je crois que ça reset la config seulement 

Partager ce message


Lien à poster
Partager sur d’autres sites

le principe est le suivant ;

  1. tu l'inclus
  2. tu modifies les paramètres comme tu veux (pour le fake)
  3. tu fais un reset device
  4. tu le réinclu (SANS exclusion préalable) => ce dernier sera le module réel que tu utiliseras. Ou tu re commences au point 2 si tu veux plusieurs fakes

Partager ce message


Lien à poster
Partager sur d’autres sites

A ce que je comprends, @Guru semble dire que même en ayant resetter le FGK, ce dernier reste reconnu pas la HC2 ... impossible donc de le réinclure sans le supprimer.

 

Pourtant la procédure dit bien que TOUTES les données seront perdues : config, contrôleur principale et données z-wave. Perso, je n'ai jamais testé ... quelqu'un ?

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai réussi d'une manière différente, j'ai dissocié et associé avec ma zibase ensuite reset et la c'est ok nouveau module avec un nouvel ID :) étape suivante il va falloir que je modifie l'état de ce fakeD avec une requête http


Envoyé de mon iPhone en utilisant Tapatalk

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Ça c'est facile, tu reprends le même scénario que pour le capteur d'humidité mais tu mets 0 ou 1 comme valeur. 0 étant fermé.

 

Enfin facile est une manière de parler .. c'est jamais facile.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 30 minutes, Steven a dit :

Ça c'est facile, tu reprends le même scénario que pour le capteur d'humidité mais tu mets 0 ou 1 comme valeur. 0 étant fermé.

 

Enfin facile est une manière de parler .. c'est jamais facile.

Oui mais non car je ne peut pas utiliser le fichier de log pour ces modules donc je fais envoyer par la Zibase : 

 

http://XXXXX:XXXX@192.168.0.195/api/callAction?deviceID=112&name=pressButton&arg1=1

 

Ca c'était avant avec un VD maintenant que c'est un FakeD j'ai essayé la ligne ci dessous mais ce n'est pas la bonne action 

 

http://XXXXX:XXXX@192.168.0.195/api/callAction?deviceID=160&name=&name=&name=setValue&arg1=1

 

OUpsss en me relisant j'ai compris ma bêtise :P il faut que ma requête change une variable et c'est cette variable qui sera lu par ma scène que tu m'as créé l'autre jour ;) 

 

 

Modifié par Guru

Partager ce message


Lien à poster
Partager sur d’autres sites

A nouveau, facile a dire. Le soucis est que la Zibase ne permet que de faire des appels HTTP de type GET et la HC2 permet de modifier des données uniquement par le type PUT. 

 

Il y a une astuce que je vais de donner au prochain post, le temps de la mettre en place.

 

Il est possible de modifier un label d'un VD via une requête HTTP GET ... la Zibase pourra donc modifier ce label. Ensuite, on crée un scénario qui agit dès que le label du VD change, et qui va lire la donnée reçu et modifier la valeur.

 

Ainsi tu pourras modifier n'importe quel valeur de n'importe quel Fake Device sans ajouté d'autre scénario. De plus tu pourras caché le VD et le scénario.

 

Je te tiens au courant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà

 

1. Importer le VD External.vfib (c'est juste un VD avec un seul label) ... noter son ID

2. Créer une scène et copier le code du fichier External.lua

3. Modifier 194 ui.Json.value par le numéro de ton VD (importé en point 1)

 

A partir de maintenant, tu peux envoyer des requêtes HTTP de type GET :

 

Pour un ID <-> Valeur

http://<ip hc2>/api/callAction?deviceID=194&name=setProperty&arg1=ui.Json.value&arg2="{'id':181,'value':55}"

 

Pour plusieurs ID <-> Valeur

http://<ip hc2>/api/callAction?deviceID=194&name=setProperty&arg1=ui.Json.value&arg2="[{'id':181,'value':55},{'id':182,'value':28.2}]"

 

External.vfib

External.lua

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors alors :) 

 

FakeD détecteur d'ouverture ID:160

VD ok ID: 180

Scene External ok ID:70 

--[[
%% properties
180 ui.Json.value
--]]


actions = {
	["ui.Json.value"] = function(values)
    		setValues(values)
    	end,
}


-- -----------------------------------------------------
-- set la ou lesvaleurs d'un module
 -- Ex : [{'id':123, 'value':100}, {'id':234, 'value':'Message'}]
-- -----------------------------------------------------
function setValues(values)
  	fibaro:debug(values)
	local tablejson = json.decode(values)
	if (#tablejson > 0) then
		for k,v in pairs(tablejson) do
			setValue(v)
		end
	else
		setValue(tablejson)
	end
end

-- -----------------------------------------------------
-- set la valeur d'un module
 -- Ex : {'id':123, 'value':100}
-- -----------------------------------------------------
function setValue(v)
      fibaro:debug(json.encode(v))
      local valeur = v.value or 0
      local prop = {properties = { value = valeur }}
      --print(valeur .. " .. " .. VAR_FAKE[declencheur.name])
      api.put("/devices/"..v.id, prop)      
end


-- ===============================
-- DÈmarrage du script
-- ===============================
local trigger = fibaro:getSourceTrigger()

if (trigger.type == "property") then
	property = trigger.propertyName
 	device = trigger.deviceID
 	value = fibaro:getValue(device, property)
	actions[property](value)  
end

 

Ensuite je tape dans la barre d'adresse Firefox : 

 

http://192.168.0.195/api/callAction?deviceID=180&name=setProperty&arg1=ui.Json.value&arg2="{'id':160,'value':1}"

ou

http://192.168.0.195/api/callAction?deviceID=180&name=setProperty&arg1=ui.Json.value&arg2="{'id':160,'value':0}"

 

Il se passe rien 

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai essayé ça idem ça fonctionne pas 

 

--[[
%% globals
OS4196965633_V1
OS4196965633_V2
BVtest
--]]

local fakedevice_1 = 148
local fakedevice_2 = 150
local fakedevice_3 = 160

local Temp = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10)
local prop1 = {properties = { value = Temp}}

local humidite = tonumber(fibaro:getGlobalValue("OS4196965633_V2"))
local prop2 = {properties = { value = humidite}}

local BV1 = tonumber(fibaro:getGlobalValue("BVtest"))
local prop3 = {properties = { value = BV1}}


api.put("/devices/"..fakedevice_1, prop1)
api.put("/devices/"..fakedevice_2, prop2)
api.put("/devices/"..fakedevice_3, prop3)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai pas tout lu, mais moi j'ai fais comme ça pour tous mes capteurs d'ouvertures, détecteurs de mouvements de mon alarme RF433 qui remonte aussi sur la Zibase.

 

Exemple pour un détecteur d'ouverture sur une fenêtre, ici l'action ouverture :

 

Côté Zibase (533 c'est le CD passerelle sur la HC2) :

http://user:password@IP_HC2/api/callAction?deviceID=533&name=pressButton&arg1=24

 

Côté HC2, un seul VD que j'appelle passerelle Zibase, avec un bouton par action (531 c'est le fake device à mettre à jour) :

local ID = 531
local HC2 = Net.FHttp("127.0.0.1", 11111)
local data = '{"properties":{"value":true}}'
local selfId = fibaro:getSelfId();
local icon = fibaro:get(selfId, "deviceIcon");
fibaro:call(selfId, "setProperty", "currentIcon", icon)
HC2:PUT("/api/devices/"..tostring(ID), data)
 
Et voilà. Je pense que la solution de Steven est sans doute plus pro, moi j'ai fais au plus vite et simple à l'époque, j'ai jamais relu ce que j'avais fais depuis. Je suis content d'avoir eu les boutons au départ, car je n'avais qu'une Zibase qui ne couvrait pas 100% la surface de la maison (Car la Zibase est complétement dans un coin de la maison, au garage), et du coup cela me permettait de forcer la mise à jour, quand j'avais la flemme d'aller à la fenêtre ouvrir et refermer pour que cela se mette à jour :)
Depuis j'ai ajouté 2 autres Zibase en esclave de la principale (Vraiment top cette fonctionnalité), et du coup nickels !
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @Guru,

 

tu eux essayer avec cela :

 

["ui.Json.value"] = function(value)
            setValue(value)
        end,

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, j'ai trouvé, il y a un soucis dans le code qui bloque les appels nécessitant un true, false au lieu de 1,0

 

La ligne

      local valeur = v.value or 0

Il faut enlever le "or 0"

Car si la valeur envoyé est "false", il va le transformer en 0 au lieu de "false".

 

Une fois que cette correction est appliquée, tu pourras envoyé :

 

http://192.168.0.195/api/callAction?deviceID=180&name=setProperty&arg1=ui.Json.value&arg2="{'id':160,'value':true}"

ou

http://192.168.0.195/api/callAction?deviceID=180&name=setProperty&arg1=ui.Json.value&arg2="{'id':160,'value':false}"

 

Et voilà, maintenant tu as un script capable de géré (je l'espère) tous les fakes devices.

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci tt le monde et merci maitre @Steven

 

Ca fonctionne top top top :D c'est classe 

Partager ce message


Lien à poster
Partager sur d’autres sites

Guru, du coup tu peux mettre en premier post la version final du code du script ?

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Nico a dit :

Guru, du coup tu peux mettre en premier post la version final du code du script ?

C'est fait avec un résume tuto des manips

Modifié par Guru

Partager ce message


Lien à poster
Partager sur d’autres sites

Me semble qu'il manque des lignes sur le premier scénario "par variable globale".

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir, 

 

bien vu master @Steven, pas compris ce qu'il se passait mais top

 

Oui je crois qu'il manque ca

Et peut-être que les modérateurs peuvent déplacer dans la section TUTO ;-)

Modifié par pepite
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à tous,

 

J'essaye avec ceci de récupérer la conso d'une variable (pince ampèremétrique IPX 800 via X400 ct, le module des pinces), mais rien ne se passe, la conso ne se met pas à jour

 

J'ai essayé avec "power" et powerConsumption", et donc "energy".

fibaro:debug("Fin de script")

--[[
%% globals
X400ct2 
--]]

local fakedevice = 566
local energy = tonumber(fibaro:getGlobalValue("energy"))
local prop = {properties = { value = energy}}

api.put("/devices/"..fakedevice, prop)
fibaro:debug("Fin de script")

 

J'ai du raté un truc mais quoi .... d'avance merci pour votre aide

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir, 

 

Tu utilises quoi comme fakedevice ? Poste le json ;-) pour être sur. 

Pour moi le code est OK.

Partager ce message


Lien à poster
Partager sur d’autres sites

×