Aller au contenu

(Tuto) Fake Device + Zibase


Messages recommandés

Posté(e) (modifié)

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
Posté(e)

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
Posté(e)

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
Posté(e)

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 ? 

 

 

Posté(e)

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
Posté(e)

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

Posté(e)

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
Posté(e)

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 ?

Posté(e)

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
Posté(e)

Ç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
Posté(e) (modifié)
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
Posté(e)

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.

Posté(e)

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
Posté(e)

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 

Posté(e)

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)

 

Posté(e)

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
Posté(e)

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
Posté(e)

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

  • Upvote 1
Posté(e) (modifié)
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
Posté(e) (modifié)

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
  • 1 mois après...
Posté(e)

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

 

×
×
  • Créer...