Guru Posté(e) le 12 mars 2017 Signaler Posté(e) le 12 mars 2017 (modifié) 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é le 23 mars 2017 par Guru
pepite Posté(e) le 12 mars 2017 Signaler Posté(e) le 12 mars 2017 (modifié) 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é le 12 mars 2017 par pepite 1
Guru Posté(e) le 12 mars 2017 Auteur Signaler Posté(e) le 12 mars 2017 whaou Complexe, je vais essayer de décrypter Merci
jojo Posté(e) le 12 mars 2017 Signaler Posté(e) le 12 mars 2017 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.
Guru Posté(e) le 12 mars 2017 Auteur Signaler Posté(e) le 12 mars 2017 voici l'explication du maîte @Lazerhttp://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
Steven Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 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. 1
Guru Posté(e) le 13 mars 2017 Auteur Signaler Posté(e) le 13 mars 2017 (modifié) 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é le 13 mars 2017 par Guru
jojo Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 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
Steven Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 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)
Guru Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 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&)
Steven Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 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 (c'est ma faute) api:put(payload, myJson) doit être remplacé par api.put(payload, myJson) 2
Guru Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 Mddr ... 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..
Steven Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 la valeur n’apparaît pas sur ton device 119 ... oups ... 139 :-) Je suis en forme ce matin.
Steven Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 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)
Guru Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 Pas d'erreur mais tjrs pas de maj de la valeur du fakeD
Guru Posté(e) le 14 mars 2017 Auteur Signaler Posté(e) le 14 mars 2017 il y a 1 minute, Steven a dit : Ok, je regarde dès que je peux Merci
Steven Posté(e) le 16 mars 2017 Signaler Posté(e) le 16 mars 2017 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) 2
Guru Posté(e) le 16 mars 2017 Auteur Signaler Posté(e) le 16 mars 2017 MERCI beaucoup de prendre de ton temps. Ca fonctionne parfaitement.
TonyC Posté(e) le 16 mars 2017 Signaler Posté(e) le 16 mars 2017 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
Steven Posté(e) le 16 mars 2017 Signaler Posté(e) le 16 mars 2017 C'est la faute au forum, il me donne le titre "Maître Yoda du forum" :-) 2
Steven Posté(e) le 16 mars 2017 Signaler Posté(e) le 16 mars 2017 @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. 2
Messages recommandés