Aller au contenu

Connecter une Zibase à une HC2


Phil1789

Messages recommandés

J'utilise une HC2 depuis quelques temps déjà, mais je reste un niveau très basic. J'ai également une zibase que j'utilise avec des modules et des interrupteurs.

J'aimerais savoir s'il est possible d'interconnecter une zibase à une HC2 et pouvoir utiliser des interrupteurs chacon?

Merci de vos réponses

Modifié par Lazer
Message déplacé
Lien vers le commentaire
Partager sur d’autres sites

Yes, tu peux sans souci. Par contre il te faut créer des scénarios pour cela qui appelle la HC2 par son API.

 

L'objectif c'est d'allumer qque chose dans la HC2 depuis ton inter Chacon, c'est bien ç a?

Lien vers le commentaire
Partager sur d’autres sites

Salut pour ma part , 

j 'arrive à récupérer les données (T° et Hygro) d'une sonde Oregon:

 

oregon1.JPG.522d7f747a86ca6c3c7418badaa65195.JPG

 

Pour cela , j'ai fait deux variables dans la HC2:

oregon2.JPG.97e93003c9573c29e6d2042531335676.JPG

 

 

ensuite un VD:

oregon3.JPG.e007831b7f6fce090fbff834a825d709.JPG

 

oregon4.thumb.JPG.3dc00fa272d88815e74f307c85ea0e64.JPG

 

 

voilà !!

 

 

 

Par contre , je n'arrive pas à récupérer les infos d'un chacon (detecteur ouverture de porte)

 

 

chacon1.JPG.16b62444a92c36823dc7e0aec4f32a31.JPG

 

en faisant pareil , création de variable +VD.... 

 

ben KO rien .... 

 

si quelqu'un a une idée ... je suis preneur ..

 

merci et bonne journée.

 

Minos

 

 

Lien vers le commentaire
Partager sur d’autres sites

Pas du tout, je réexplique ma demande initiale:

J'ai une HC2 qui contrôle un certain nombre de modules et une zibase qui en contrôle d'autres. Essentiellement, la zibase contrôle des modules prises qui fonctionnent soit avec un smartphone, soit avec des interrupteurs radio (chacon) ce qui me convient parfaitement. Je n'ai actuellement pas trouvé d'équivalent chez fibaro. Ce que je souhaite, c'est qu'au moyen de l'interface Fibaro, je puisse actionner les modules chacon, rattachés à ma zibase. Je ne suis pas un spécialiste en électronique, je recherche donc une solution simple.

merci 

Lien vers le commentaire
Partager sur d’autres sites

@minos

Mon dieu, tu dois être le dernier sur la planète à utiliser ce VD :D

 

Pourrais-tu me donner le contenu de ton fichier sensor.xml s'il te plait ?

 

http://<adresse zibase>/sensor.xml

 

Principalement la section suivante :

<evs>
<ev type="10" pro="WS" id="133703" gmt="1514985510" v1="21964" v2="4" lowbatt="1"/>
<ev type="8" pro="VR" id="630027392" gmt="1519069530" v1="1" v2="0" lowbatt="0"/>
...
<ev type="6" pro="CS" id="625060767" gmt="1514189766" v1="1" v2="0" lowbatt="0"/>
...
<ev type="8" pro="VR" id="1331037448" gmt="1511916211" v1="1" v2="0" lowbatt="0"/>
</evs>

 

Lien vers le commentaire
Partager sur d’autres sites

@Steven

 

Il y a 4 heures, Steven a dit :

Mon dieu, tu dois être le dernier sur la planète

LOL!!   :lol: voir de l'univers...

 

Tiens voilà ce que tu demandes ( je n'ai pas/plus beaucoup de modules )

mais bon si je trouve la parade je pourrais ressortir ceux du fond d'un tiroir....:2:

<evs>
<ev type="7" pro="OS" id="4196984324" gmt="1519143044" v1="225" v2="33" lowbatt="1"/>
<ev type="8" pro="VR" id="2748959296" gmt="1518966416" v1="1" v2="0" lowbatt="0"/>
<ev type="10" pro="WS" id="132856" gmt="1508322232" v1="38348" v2="12" lowbatt="0"/>
<ev type="10" pro="WS" id="131780" gmt="1508383470" v1="43745" v2="255" lowbatt="0"/>
<ev type="8" pro="VR" id="2128071232" gmt="1518285518" v1="1" v2="0" lowbatt="0"/>
<ev type="10" pro="WS" id="131652" gmt="1514580738" v1="27782" v2="255" lowbatt="0"/>
<ev type="6" pro="CS" id="1394812297" gmt="1519139890" v1="1" v2="0" lowbatt="0"/>
<ev type="6" pro="CS" id="1394812296" gmt="1509276804" v1="1" v2="0" lowbatt="0"/>
<ev type="7" pro="OS" id="4196977672" gmt="1509374468" v1="332" v2="18" lowbatt="0"/>
<ev type="10" pro="WS" id="131643" gmt="1517518838" v1="42106" v2="255" lowbatt="0"/>
<ev type="8" pro="VR" id="2748959240" gmt="1511028981" v1="1" v2="0" lowbatt="0"/>
<ev type="8" pro="VR" id="2368875142" gmt="1512916270" v1="1" v2="0" lowbatt="0"/>
<ev type="7" pro="OS" id="4196964608" gmt="1512939700" v1="825" v2="138" lowbatt="0"/>
<ev type="6" pro="CS" id="1394812313" gmt="1519139758" v1="1" v2="0" lowbatt="0"/>
</evs>

merci 

 

Minos

Lien vers le commentaire
Partager sur d’autres sites

@minos

J'ai tout réinstallé le VD et j'ai bien la remontée de mon CSXXXXXXX_V1

image.png.7defb3288438280cb3c86828e90989ea.png

 

 

Voici le code que j'ai dans mon VD derrière le bouton Rafraichir.

-- This script will request sensors.xml file from a Zibase
-- and use it to change global variables.

-- Version = "1.0.0"

-- Author = "Domotique-Info.fr (Steven Piccand)"

-- Info = "Memory is preserved: Object are only load once in memory"-- This program is free software: you can redistribute it and/or modify

-- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. 
-- You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

local maj = 30 -- Durée en secondes de la mise à jour

-- --------------------------------------------------------------------------------------------------------------
-- Check that one and only one instance is in memory
-- --------------------------------------------------------------------------------------------------------------
if ((not Zibase) or (Zibase.errors >= 5)) then

	Zibase = {
  		errors = 0
    }
	
	-- --------------------------------------------------------------------------------------------------------------
	-- Miscellaneous
	-- --------------------------------------------------------------------------------------------------------------
  	Zibase.url = fibaro:get(fibaro:getSelfId(), 'IPAddress')
	Zibase.port = fibaro:get(fibaro:getSelfId(), 'TCPPort')

	-- --------------------------------------------------------------------------------------------------------------
	-- Get the XML from the zibase and return it as a LUA table
	-- --------------------------------------------------------------------------------------------------------------
	Zibase.getXml = function() 
		--local zibaseURL = Net.FHttp("zibase.net");
		--response, status, errorCode = zibaseURL:GET("/m/get_xml_sensors.php?device="..Zibase.id.."&token="..Zibase.token);
		local zibaseURL = Net.FHttp(Zibase.url)
		response, status, errorCode = zibaseURL:GET("/sensors.xml")
		return Zibase.iif(response ~= nil, Zibase.newParser().ParseXmlText(response), "")
	end

	-- --------------------------------------------------------------------------------------------------------------
	-- Put all Sensors values in global variables
	-- --------------------------------------------------------------------------------------------------------------
	Zibase.putSensorsInMemory = function(id)
        local index = 1
		local xmlTable = Zibase.getXml()
		if (xmlTable) then 
      		if (not xmlTable.doc) then 
        		Zibase.errors = Zibase.errors+1 
        		return nil
      		end
			local evs = xmlTable.doc.evs
			for i in pairs(evs:children()) do
				local idtmp = evs.ev[i]["@id"]
				if (evs.ev[i]["@pro"]) then 
					idtmp = evs.ev[i]["@pro"] .. idtmp
				else
					if (evs.ev[i]["@type"] == "2") then idtmp = "VS" .. idtmp
					elseif (evs.ev[i]["@type"] == "6") then idtmp = "CS" .. idtmp
					elseif (evs.ev[i]["@type"] == "7") then idtmp = "OS" .. idtmp
					elseif (evs.ev[i]["@type"] == "8") then idtmp = "VR" .. idtmp
					elseif (evs.ev[i]["@type"] == "10") then idtmp = "WS" .. idtmp
					end
				end
				if (not id) then
					fibaro:setGlobal(idtmp.."_V1", evs.ev[i]["@v1"])
					fibaro:setGlobal(idtmp.."_V2", evs.ev[i]["@v2"])
          			fibaro:debug(idtmp)
				elseif ((id ~= nil) and (idtmp == id)) then
					values = {}
					values[1] = evs.ev[i]["@v1"]
					values[2] = evs.ev[i]["@v2"]
					return values
				end
			end
		end
		return nil
	end
	
	-- --------------------------------------------------------------------------------------------------------------
	-- Get the values (v1 and v2) of a sensor from the zibase
	-- --------------------------------------------------------------------------------------------------------------
	Zibase.getSensorValues = function(id)
		if (id ~= nil) then
			return Zibase.putSensorsInMemory(id)
		else
			return nil
		end
	end

	-- --------------------------------------------------------------------------------------------------------------
	-- Get the value from a variable from the zibase
	-- --------------------------------------------------------------------------------------------------------------
	Zibase.getVariable = function(num)
		local xmlTable = Zibase.getXml()
		if (xmlTable) then
      		if (not xmlTable.doc) then 
        		Zibase.errors = Zibase.errors+1 
        		return ""
     		end
			local vars = xmlTable.doc.vars
			for i in pairs(vars:children()) do
				if (vars.var[i]["@num"] == num) then
					return vars.var[i]["@val"] 
				end
			end
		end
		return ""
	end

	-- -------------------------------------------------------------------------------------------------------------
	-- Test the condition and return true or false param depending of the result
	-- param : condition (condition to test)
	--            iftrue (result to return of condition if true)
	--            iftfalse (result to return of condition if false)
	-- -------------------------------------------------------------------------------------------------------------
	Zibase.iif = function(condition, iftrue, iffalse)
		if (condition) then
			return iftrue
		end
		return iffalse
	end

	-- -------------------------------------------------------------------------------------------------------------
	-- Return a random number from 1 to 100
	-- -------------------------------------------------------------------------------------------------------------
	Zibase.random = function()
		return math.random(100)
	end

	-- -------------------------------------------------------------------------------------------------------------
	-- This is a modified version of Corona-XML-Module by Jonathan Beebe which in turn 
	-- is based on Alexander Makeev's Lua-only XML parser .
	-- see https://github.com/Cluain/Lua-Simple-XML-Parser
	-- -------------------------------------------------------------------------------------------------------------
	Zibase.newParser = function()

		parseXml = {}

		parseXml.FromXmlString = function(value)
			value = string.gsub(value, "&#x([%x]+)%;",
			    function(h)
				return string.char(tonumber(h, 16))
			    end);
			value = string.gsub(value, "&#([0-9]+)%;",
			    function(h)
				return string.char(tonumber(h, 10))
			    end);
			value = string.gsub(value, "\"", "\"");
			value = string.gsub(value, "'", "'");
			value = string.gsub(value, ">", ">");
			value = string.gsub(value, "<", "<");
			value = string.gsub(value, "&", "&");
			return value;
		end

		parseXml.ParseArgs = function(node, s)
			string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a)
			    node:addProperty(w,  parseXml.FromXmlString(a))
			end)
		end

		parseXml.ParseXmlText = function(xmlText)
			local stack = {}
			local top = parseXml.newNode()
			table.insert(stack, top)
			local ni, c, label, xarg, empty
			local i, j = 1, 1
			while true do
			    ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i)
			    if not ni then break end
			    local text = string.sub(xmlText, i, ni - 1);
			    if not string.find(text, "^%s*$") then
				local lVal = (top:value() or "") .. parseXml.FromXmlString(text)
				stack[#stack]:setValue(lVal)
			    end
			    if empty == "/" then -- empty element tag
				local lNode = parseXml.newNode(label)
				parseXml.ParseArgs(lNode, xarg)
				top:addChild(lNode)
			    elseif c == "" then -- start tag
				local lNode = parseXml.newNode(label)
				parseXml.ParseArgs(lNode, xarg)
				table.insert(stack, lNode)
				top = lNode
			    else -- end tag
				local toclose = table.remove(stack) -- remove top

				top = stack[#stack]
				if #stack < 1 then
				    error("XmlParser: nothing to close with " .. label)
				end
				if toclose:name() ~= label then
				    error("XmlParser: trying to close " .. toclose.name .. " with " .. label)
				end
				top:addChild(toclose)
			    end
			    i = j + 1
			end
			local text = string.sub(xmlText, i);
			if #stack > 1 then
			    error("XmlParser: unclosed " .. stack[#stack]:name())
			end
			return top
		end

		parseXml.newNode = function(name)
		    local node = {}
		    node.___value = nil
		    node.___name = name
		    node.___children = {}
		    node.___props = {}
		    function node:value() return self.___value end
		    function node:setValue(val) self.___value = val end
		    function node:name() return self.___name end
		    function node:setName(name) self.___name = name end
		    function node:children() return self.___children end
		    function node:numChildren() return #self.___children end
		    function node:addChild(child)
			if self[child:name()] ~= nil then
			    if type(self[child:name()].name) == "function" then
				local tempTable = {}
				table.insert(tempTable, self[child:name()])
				self[child:name()] = tempTable
			    end
			    table.insert(self[child:name()], child)
			else
			    self[child:name()] = child
			end
			table.insert(self.___children, child)
		    end
		    function node:properties() return self.___props end
		    function node:numProperties() return #self.___props end
		    function node:addProperty(name, value)
			local lName = "@" .. name
			if self[lName] ~= nil then
			    if type(self[lName]) == "string" then
				local tempTable = {}
				table.insert(tempTable, self[lName])
				self[lName] = tempTable
			    end
			    table.insert(self[lName], value)
			else
			    self[lName] = value
			end
			table.insert(self.___props, { name = name, value = self[name] })
		    end
		    return node
		end

		return parseXml;
	end

end

-- -------------------------------------------------------------------------------------------------------------
-- Send a message in the default chat frame if debug mode is activated
-- param : sMessage (message to display)
-- return : <none>
-- -------------------------------------------------------------------------------------------------------------
Zibase.putSensorsInMemory()
local time = os.date("le %d.%m.%Y à  %H:%M:%S")
if (Zibase.errors > 0) then time = "Erreur : " .. Zibase.errors end
fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label0.value",time)

 

Lien vers le commentaire
Partager sur d’autres sites

@Steven

 

oups ... j'ai vérifiée mon fichier xml... celui du haut c 'est pas le bon...B)

 

<evs>
  <ev type="7" pro="OS" id="4196984324" gmt="1519242278" v1="212" v2="33" lowbatt="1"/>
  <ev type="6" pro="CS" id="1394812313" gmt="1519242302" v1="1" v2="0" lowbatt="0"/>
  <ev type="6" pro="CS" id="1394812297" gmt="1519242244" v1="1" v2="0" lowbatt="0"/>
</evs>

 

 

dans le suivi d'activité de la zibaze :

 

21/2/2018 20:50:17    Received radio ID (433Mhz  Noise=2035 Level=4.0/5  Chacon ON Batt=Ok) Porte Garage (CS1394812313)   => ouverture de porte

21/2/2018 20:51:10    Received radio ID (433Mhz  Noise=2051 Level=4.5/5  Chacon  OFF Batt=Ok): CS1394812297   => fermeture de porte

 

 

même en rafraîchissant /fermant le navigateur , la valeurs du fichier xml sont toujours pareilles ... v1="1" v2="0"

 

je récupère bien les infos dans mes variables ... mais toujours 1... normal à mon avis vu que le fichier xml ne change pas 

 

varchacon.JPG.670bd6835514ca5fe8209c65d654ad03.JPG

 

le soucis serait au niveau du fichier xml qui ne change ... malgré ouverture/fermeture du detecteur ...??

 

 

Bizarre...non?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Je n'utilise plus ma Zibase pour l'instant, mais pourrais-tu faire un test.

 

Changer une variable de la Zibase selon l'état de la porte du garage et voir si le fichier sensors.xml prend en compte cette variable dans la section :

<vars>
<var num="0" val="0"/>
<var num="1" val="0"/>
<var num="2" val="0"/>
<var num="3" val="0"/>
<var num="4" val="0"/>
<var num="5" val="0"/>
<var num="6" val="0"/>
<var num="7" val="0"/>
<var num="8" val="0"/>
<var num="9" val="0"/>
<var num="10" val="0"/>
<var num="11" val="0"/>
<var num="12" val="0"/>
<var num="13" val="0"/>
<var num="14" val="0"/>
<var num="15" val="2"/>
<var num="16" val="0"/>
<var num="17" val="1"/>
<var num="18" val="-1"/>
<var num="19" val="-1"/>
<var num="20" val="243"/>
<var num="21" val="174"/>
<var num="22" val="0"/>
<var num="23" val="0"/>
<var num="24" val="190"/>
<var num="25" val="0"/>
<var num="26" val="-1"/>
<var num="27" val="-1"/>
<var num="28" val="-1"/>
<var num="29" val="500"/>
<var num="30" val="1"/>
<var num="31" val="-32762"/>
</vars>

Si cela fonctionne, on pourra ce baser là dessus.

Lien vers le commentaire
Partager sur d’autres sites

@Steven

 

hello,

j 'ai regardé pour changer  une variable ...mais en fait je vois pas comment faire .... suis une buse  je pense !!!:(

Le 22/02/2018 à 10:06, Steven a dit :

Changer une variable de la Zibase selon l'état de la porte du garage

 

Lien vers le commentaire
Partager sur d’autres sites

bon j 'ai fait comme tu m'as dit ...

les scénari tournent bien dans le suivi d'activité ..

avec une petite récup de l' affichage  de la valeur de la variable V20 qui est bonne lors de l'ouverture ..:

23/2/2018 17:47:41    Print: v20=-00001 (HFFFF) String=1

 

Fermeture de la porte :

23/2/2018 17:56:32    Print: v20=-00001 (HFFFF) String=0

 

ça c'est bon ...

 

par contre dans le fichier xml ....

 

<ev type="7" pro="OS" id="4196984324" gmt="1519405012" v1="221" v2="31" lowbatt="1"/>
<ev type="6" pro="CS" id="1394812313" gmt="1519404914" v1="1" v2="0" lowbatt="0"/>
<ev type="6" pro="CS" id="1394812297" gmt="1519404964" v1="1" v2="0" lowbatt="0"/>

 

bizarre ...non ?

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bon ben ne reste que la solution inverse, soit faire que la Zibase envoi l'information à la HC2.

 

- Créer un VD avec un label et 2 boutons (Ouvert et Fermer) ... voir document joint

- Faire que la Zibase presse sur le bouton correspondant :

 

Sur ouverture du garage, créer un scénario qui effectuer "commander par http" avec l'url suivante :

http://<user>:<password>@<IP_HC2>/api/callAction?deviceID=<ID_DU_VD>&name=pressButton&arg=2 

 

Sur fermeture du garage, créer un scénario qui effectuer "commander par http" avec l'url suivante :

http://<user>:<password>@<IP_HC2>/api/callAction?deviceID=<ID_DU_VD>&name=pressButton&arg=3 

 

Ensuite, aucun problème pour reprendre tout cela dans GEA ou n'importe quel autre scénario, il te suffira de mettre ceci dans l'entête

 

%% properties

<ID_DU_VD> ui.Label1.value

 

 

Puis pour GEA, voici un exemple :

 

GEA.add({"Label", <ID_DU_VD>, "Label1", "Ouvert"}, -1, "Ouverture de la porte du garage")

GEA.add({"Label", <ID_DU_VD>, "Label1", "Fermé"}, -1, "Fermeture de la porte du garage")

 

GEA.add({"Label", <ID_DU_VD>, "Label1", "Ouvert"}, 10*60, "La porte du garage est ouverte depuis plus de #durationfull#", {"Repeat"})

 

Porte_Garage.vfib

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...