Aller au contenu
Guru

(Tuto) Fake Device + Zibase

Recommended Posts

Hello,

 

Pour créer un FakeDevice et utiliser une Zibase ( ça fonctionne ss doute avec d'autres box): 

 

  • Associer un module à votre HC2 qui vous intéresse ( détecteurs, sondes...) quelque soit la marque tant que le template fonctionne avec la HC2.
  • Dissocier avec votre Zibase ou reseter le module si il vous le permet pour pourvoir le réutiliser ou en créer plusieurs
  • Décocher non mort sur le VD qui sera notre FakeD
  • Pour l'alimenter deux méthodes en fonction de vos besoins : 

 

Avec une variable 

--[[
%% globals
OS4196965633_V2  --Votre variable de sonde
--]]

local fakedevice = 139 --Votre ID de FakeD
local humidite = fibaro:getGlobalValue("OS4196965633_V2")

api.put(payload, device)

 

Ou avec une requête HTTP :

 

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 :

--[[
%% properties
180 ui.Json.value  --remplacer par ID de votre VD External
--]]


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

 

 

A présent vous pouvez faire des requêtes HTTP pour un module d'ouverture par exemple (Remplacer 180 part ID de votre VD external et 160 part ID de votre FakeD): 

 

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

ou

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

 

Si vous avez des questions hésitez pas c'est ma moindre des choses et un GRAND merci a maitre @Steven qui faut le dire à tout fait pour moi quasiment.

 

 

 

External.vfib

Modifié par Guru

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

 

J'ai ca de cote, mais je n'ai pas de fake. Il y a un sujet sur les fake de @Lazer

 

-- Ecrire Value dans Fake device OK
local fakedevice = 116local W = 1234,56
local myJson = '{"properties":{"power":'..W..'}}'
local payload = "/api/devices/"..fakedevicelocal HC2 = Net.FHttp("127.0.0.1",11111);
local response, status, errorCode = HC2:PUT(payload, myJson)

 

Modifié par pepite
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

whaou :o Complexe, je vais essayer de décrypter :) Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

voici l'explication du maîte @Lazer

http://www.domotique-fibaro.fr/index.php/topic/678-passerelle-enocean-fhem/?p=124228
Prenez un module mort, décocher la case "marquer comme mort" dans les propriétés du module. La HC2 essaye de la joindre, échoue, mais ne le marque pas comme mort. Et maintenant on peut lui updater ses propriétés. Je viens d'essayer avec un Dimmer sur lequel j'ai changé la valeur de consommation power. Avec le graph qui se mettait à jour en temps réel dans la panneau de consommation !!!!!!
 
Je vais vous la faire autrement pour que ma pensée soit plus claire :
 
- on inclue un module (du type qu'on souhaite (consommation, température, détecteur, etc))
- on le reset (via appui long sur le bouton, selon la méthode décrite dans la doc) sans l'exclure de la HC2
- il passe en noeud mort
- en décoche la case 'marquer comme mort' => le module ne sera plus jamais mort, même si il n'existe plus
- en peut l'utiliser à vie pour updater ses propriétés via l'API
- Puis on recommande la procédure décrite ci-dessus autant de fois qu'on souhaite, afin d'avoir une infinité de modules, qui remplacent parfaitement les plugins.
 
C'est pas génial ?
 
Reste à voir sur la durée si il n'y a pas d'effet de bord à jouer ainsi avec des noeuds morts.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
voici l'explication du maîte @Lazer
http://www.domotique-fibaro.fr/index.php/topic/678-passerelle-enocean-fhem/?p=124228Prenez un module mort, décocher la case "marquer comme mort" dans les propriétés du module. La HC2 essaye de la joindre, échoue, mais ne le marque pas comme mort. Et maintenant on peut lui updater ses propriétés. Je viens d'essayer avec un Dimmer sur lequel j'ai changé la valeur de consommation power. Avec le graph qui se mettait à jour en temps réel dans la panneau de consommation !!!!!! Je vais vous la faire autrement pour que ma pensée soit plus claire : - on inclue un module (du type qu'on souhaite (consommation, température, détecteur, etc))- on le reset (via appui long sur le bouton, selon la méthode décrite dans la doc) sans l'exclure de la HC2- il passe en noeud mort- en décoche la case 'marquer comme mort' => le module ne sera plus jamais mort, même si il n'existe plus- en peut l'utiliser à vie pour updater ses propriétés via l'API- Puis on recommande la procédure décrite ci-dessus autant de fois qu'on souhaite, afin d'avoir une infinité de modules, qui remplacent parfaitement les plugins. C'est pas génial ? Reste à voir sur la durée si il n'y a pas d'effet de bord à jouer ainsi avec des noeuds morts.

 



Oui merci j'en suis la mais le soucis c'est comment alimenter ce module ... il parle dapi mais cest pour une autre box je crois


Envoyé de mon iPhone en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as ton module sur ta Zibase : OK

Tu as le VD qui interroge ta Zibase et remonte la valeur dans une variable globale : OK

Tu as créer un Fake Device : OK

 

Il te manque donc juste un scénario ... imaginons que ta variable globale est : VS12345_V2 et que l'ID de ton Fake Device est le 112, voici le scénario :

 

--[[
%% globals
VS12345_V2 
--]]

local fakedevice = 112
local humidite = fibaro:getGlobalValue("VS12345_V2")

local myJson = '{"properties":{"value":'..humidite..'}}'
local payload = "/api/devices/"..fakedevice

local HC2 = Net.FHttp("127.0.0.1",11111);
local response, status, errorCode = HC2:PUT(payload, myJson)

A chaque changement de valeur de ta variable globale "VS12345_V2" ce scénario va ce lancer et il va mettre à jour la valeur de ton Fake Device.

 

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci @Steven mon sauveur comme d'habitude  

 

j'ai cherche un peu quand même si j'ai bien compris l'adresse IP 127.0... doit être celle de ma HC2 192.168.XX.XX et le port 80 ? 

 

Mais j'ai une erreur ligne 12 attempt to index global 'Net' (a nil value)

 

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

local fakedevice = 139
local humidite = fibaro:getGlobalValue("OS4196965633_V2")

local myJson = '{"properties":{"value":'..humidite..'}}'
local payload = "/api/devices/"..fakedevice

local HC2 = Net.FHttp("192.168.XX.XX",80);
local response, status, errorCode = HC2:PUT(payload, myJson)

J'ai essayé dans un VD car j'ai lu dans un topic que ça ne fonctionne pas dans une scène, plus d'erreur mais ça fonctionne pas 

 

 

recap :


Module Ocean -> Zibase -> VD -> Variable HC2 ( OS4196965633_V2 ): OK

 

Création d'un Device que j'ai ensuite éteint et mis en non mort ( ID : 139 ): OK

 

 

Modifié par Guru

Partager ce message


Lien à poster
Partager sur d’autres sites

L'IP 127.xxx et le port 11111 sont celles que tu utilises pour accéder à ta hcž SANS devoir entrer de mot de passe admin dans ton code. Les modules n'ont pas d'IP

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, l'IP 127.0.0.1, port 1111 est l'adresse interne à ta box, il ne faut pas le changer.

 

Essaie ce code depuis un scénario stp :

 

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

local fakedevice = 139
local humidite = fibaro:getGlobalValue("OS4196965633_V2")

local myJson = '{"properties":{"value":'..humidite..'}}'
local payload = "/devices/"..fakedevice

api:put(payload, myJson)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Ca donne : 

 

[DEBUG] 09:49:42: [1;31m2017-03-14 09:49:42.900106 [ fatal] Runtime error: No matching overload found, candidates:
[DEBUG] 09:49:42: luabind::object put(lua_State*,std::string const&,std::string const&)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu n'y mets pas de la bonne volonté ... tout le monde sait que c'est api.put et non pas api:put .... OK OK .. Je sors :2::2:(c'est ma faute)

 

api:put(payload, myJson)

doit être remplacé par 

api.put(payload, myJson)
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Mddr :D ... pour moi ça commence a être du chinois mais j'essai de m'y intéresser, d'ailleurs l'API et myjson c'est se qui "gère" notre HC2 ? 

 

Sinon le code il n'y a pas d'erreur mais il se passe pas grand chose mis a part que mon interface rame et bug un peu..

Partager ce message


Lien à poster
Partager sur d’autres sites

la valeur n’apparaît pas sur ton device 119 ... oups ... 139 :-)

 

Je suis en forme ce matin.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon ben faudra que je crée un fake device pour essayer.

 

Pourrais-tu juste essayer ceci une dernière fois stp :

 

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

local fakedevice = 139
local humidite = fibaro:getGlobalValue("OS4196965633_V2")

local payload = "/devices/"..fakedevice

local device = api.get(payload)
device.properties.value = humidite
api.put(payload, device)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas d'erreur mais tjrs pas de maj de la valeur du fakeD

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, je regarde dès que je peux

  • Upvote 1

Partager ce message


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

Ok, je regarde dès que je peux

Merci :)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est bon, j'ai trouvé la bonne syntaxe ... testé et approuvé ;)

 

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

local fakedevice = 139
local humidite = tonumber(fibaro:getGlobalValue("OS4196965633_V2"))
local prop = {properties = { value = humidite}}

api.put("/devices/"..fakedevice, prop)

 

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

:74::2: MERCI beaucoup de prendre de ton temps. Ca fonctionne parfaitement.

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors je suis ... CONTENT :60:

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

mais comment peut être content quand on a la tronche verte comme t'as en ce moment @Steven ? va falloir penser à consulter quand même :2:

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est la faute au forum, il me donne le titre "Maître Yoda du forum" :-)

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

@Guru

Si tu veux une seule scène pour gérer plusieurs Fake Device, voici un exemple :

 

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

local VAR_FAKE = {
  OS4196965633_V1 = 180, 
  OS4196965633_V2 = 182
}

local declencheur = fibaro:getSourceTrigger()

local valeur = tonumber(fibaro:getGlobalValue(declencheur.name))
local prop = {properties = { value = valeur }}

api.put("/devices/"..VAR_FAKE[declencheur.name], prop)

Tu déclares tes variables dans l'entête et dans le tableau sous la forme <variable> = <fake_device_id> et le tour est joué. Chaque fois qu'une variable va changé, sa valeur sera envoyée dans le fake device correspondant.

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

×