Gazpar counter via Zigbee switch button
Posted: Wednesday 20 November 2024 14:03
Hi all,
This is an workaround to connect easily/on the cheap the French Gazpar "smart" counter to domoticz using a Zigbee switch connected to the Gazpar output, based on the following setup.
I thought it was worth sharing as I couldn't find any example.
https://www.auto-domo.fr/home-assistant ... on-gazpar/
Overview:
The gazpar counter produces a dry contact for every 10L of gaz (1dm3) used.
This dry-contact/2pin output is connected to (any) Zigbee switch. A hit is then sent by the Zigbee switch every 10L.
This Zigbee switch is registered into domoticz (in my setup via a raspbee/deCONZ plugin)
And then parsed via a dzevents script into a virtual Gaz Counter into Domoticz.
In my setup, i'm using a IKEA/Somrig button.
https://www.ikea.com/fr/fr/p/somrig-lan ... -50560334/
https://github.com/dresden-elektronik/d ... utton.json
https://raw.githubusercontent.com/dresd ... _maps.json
Ikea/Somrig button in Domoticz has (up to) 10 different states.
Even states are for one of the two buttons.
Odd states are for the other one.
In order to ensure all works, i've configured both in the dzevent script.
Simplified overview
Gazpar <--cable--> Ikea/Somrig Zigbee Switch {{<== Zigbee Radio Waves ==>} Raspbee/deCONZ <-- Ethernet --> Domoticz/zigbee plugin
Here is the dzevents script:
This is an workaround to connect easily/on the cheap the French Gazpar "smart" counter to domoticz using a Zigbee switch connected to the Gazpar output, based on the following setup.
I thought it was worth sharing as I couldn't find any example.
https://www.auto-domo.fr/home-assistant ... on-gazpar/
Overview:
The gazpar counter produces a dry contact for every 10L of gaz (1dm3) used.
This dry-contact/2pin output is connected to (any) Zigbee switch. A hit is then sent by the Zigbee switch every 10L.
This Zigbee switch is registered into domoticz (in my setup via a raspbee/deCONZ plugin)
And then parsed via a dzevents script into a virtual Gaz Counter into Domoticz.
In my setup, i'm using a IKEA/Somrig button.
https://www.ikea.com/fr/fr/p/somrig-lan ... -50560334/
https://github.com/dresden-elektronik/d ... utton.json
https://raw.githubusercontent.com/dresd ... _maps.json
Ikea/Somrig button in Domoticz has (up to) 10 different states.
Even states are for one of the two buttons.
Odd states are for the other one.
- 10/20 is for a single short hit
- 30/40 is for a double hit
- 50/60 is for a long hit
In order to ensure all works, i've configured both in the dzevent script.
Simplified overview
Gazpar <--cable--> Ikea/Somrig Zigbee Switch {{<== Zigbee Radio Waves ==>} Raspbee/deCONZ <-- Ethernet --> Domoticz/zigbee plugin
Here is the dzevents script:
Code: Select all
-- ************************************************************
-- ** Manage Gazpar virtual Counter from Zigbee drycontact **
-- ** Triggered every time the Zigbee devices receives a hit **
-- **
-- ** Gazpar counter: 1 hit per 10dm3/10L
-- **
-- ** Zigbee device: Two buttons
-- ** Zigbee device: Single hit : 10/20
-- ** Zigbee device: Dual hit (2 hits in less than 1 sec): 30/40
-- ** Zigbee device: Long hit (1-long hit in more than 1 sec): 50/60
return {
on = {
devices = {
-- Zigbee device called by the Gazpar Smart counter
'Raspbee-Gazpar',
-- Test Fake device for simulation / test purpose
'raspbee-gazpar-test',
}
},
logging = {
level = domoticz.LOG_DEBUG,
marker = 'Gazpar',
},
execute = function(domoticz, device)
--domoticz.log('trigger == > '..device.trigger)
local current_gazpar = domoticz.devices("Gazpar-Zigbee").counter
local zigbee_hit = domoticz.devices("Raspbee-Gazpar").level
-- local zigbee_hit = domoticz.devices("raspbee-gazpar-test").level
domoticz.log('Gazpar // Device ' .. device.name .. ' was hit with ' .. tonumber(zigbee_hit), domoticz.LOG_INFO)
if zigbee_hit == 10 or zigbee_hit == 20 then
-- Single hit = +10L
domoticz.log('Single hit', domoticz.LOG_INFO)
domoticz.devices("Gazpar-Zigbee").updateGas(current_gazpar * 1000 + 10)
domoticz.log('Gazpar // Upgrade m3 from ' .. tonumber(current_gazpar) .. ' to ' .. tonumber(domoticz.devices("Gazpar-Zigbee").counter), domoticz.LOG_INFO)
elseif zigbee_hit == 30 or zigbee_hit == 40 then
-- Dual hit = two close hits = +20L
domoticz.log('Dual hit', domoticz.LOG_INFO)
domoticz.devices("Gazpar-Zigbee").updateGas(current_gazpar * 1000 + 20)
domoticz.log('Gazpar // Upgrade m3 from ' .. tonumber(current_gazpar) .. ' to ' .. tonumber(domoticz.devices("Gazpar-Zigbee").counter), domoticz.LOG_INFO)
elseif zigbee_hit == 50 or zigbee_hit == 60 then
-- Long hit = probably an error, but +10L anyway
domoticz.log('Long hit', domoticz.LOG_INFO)
domoticz.devices("Gazpar-Zigbee").updateGas(current_gazpar * 1000 + 10)
domoticz.log('Gazpar // Upgrade m3 from ' .. tonumber(current_gazpar) .. ' to ' .. tonumber(domoticz.devices("Gazpar-Zigbee").counter), domoticz.LOG_INFO)
else
domoticz.log('Another type of hit // we do nothing', domoticz.LOG_INFO)
-- Use this to "reset" the Counter values (usefull during resync/1st setup)
-- domoticz.devices("Gazpar-Zigbee").updateGas(123456789)
end
end
}