Bij deze een voorbeeldscript voor Domiticz om data uit de Xtend te halen. Alle API velden zijn te vinden in de github van DSchoutsen HA_connection_Xtend (
https://github.com/DSchoutsen/HA_connection_Xtend) waarvoor dank! Daar vind je ook de api url terug (
http://10.20.30.1/api/stats/values?fields=7e7a,etc,etc).
Mijn testopzet is een PC met wifi en met Windows 11 of Ubuntu desktop (laatste versie), en een Lab31 wifi extender die connect naar het 10.20.30.0 lan van de Xtend. De extender ga ik gebruiken om de afstand van de ketel op zolder naar beneden, waar mijn Raspberry Pi in de meterkast zit (P1 kabel), te overbruggen. Het blijft een omslachtige manier om de Xtend uit te lezen, dat moet eigenlijk gebeuren via de Intergas Internet Gateway. Ik ga nog wel eens navragen bij Intergas of dat niet anders kan.
Ook niet vergeten om de netwerkaanpassingen door te voeren ivm het gebruiken van 2 LAN mocht dat nodig zijn, moet ik nog uitzoeken voor de Raspberry Pi (ik ben niet zo'n netwerk specialist...)
Het script hieronder haalt alleen de buitentemperatuur uit de Xtend op als test, dat is waarde 6573. Ik heb ChatGPT gebruikt om het script te maken omdat ik onbekend ben met DzVents. Ik heb problemen gehad zowel onder windows als linux om de http request van DzVents te gebruiken, kreeg daar nill waarden terug. ChatGPT heeft een alternatief aangeboden n.a.v teruggeven debug logging op basis van curl en dat werkt prima.
Voordat je begint moet je eerst handmatig een hardware device aanmaken met type dummy, die heb ik Intergas Xtend+HR Hybrid genoemd. Vervolgens moet je 1 (en later meerdere) virtual sensor(s) daarin aanmaken. Die van mij heet Xtend Buitentemperatuur.
Het script hieronder bevat de nodige debug en logging, die moet je dan zelf even verwijderen. Je kan hierop voortborduren door meerdere codes mee te geven en die weer af te vangen. Het script in Domoticz toevoegen in Events (setup -> more options -> events) type DzVents en proberen maar. Succes!
---------------------------------------------------------------------------------------------------------------
return {
on = {
timer = { 'every 1 minutes' }
},
logging = {
level = domoticz.LOG_INFO,
marker = "API Temperatuur"
},
execute = function(domoticz)
local curlCommand = [[curl -s
http://10.20.30.1/api/stats/values?fields=6573]] -- dit is de api url, 6573 voor buitentemperatuur waarde
local handle = io.popen(curlCommand)
local result = handle:read("*a")
handle:close()
domoticz.log('Response van API: ' .. result, domoticz.LOG_INFO)
-- JSON decoderen (vereist domoticz.json)
local json = domoticz.utils.fromJSON(result)
if json and json.stats and json.stats["6573"] then
local rawValue = tonumber(json.stats["6573"])
local temperatuur = rawValue / 100.0 -- De waarde 2050 wordt omgezet naar 20.5 graad
domoticz.log('Temperatuur gevonden: ' .. temperatuur .. ' °C', domoticz.LOG_INFO)
-- Pas de naam van de virtuele sensor aan
local virtueleSensor = domoticz.devices('Xtend Buitentemperatuur') -- Dit is de sensor naam
if virtueleSensor then
virtueleSensor.updateTemperature(temperatuur)
domoticz.log('Sensor bijgewerkt naar ' .. temperatuur .. ' °C', domoticz.LOG_INFO)
else
domoticz.log('Virtuele sensor niet gevonden.', domoticz.LOG_ERROR)
end
else
domoticz.log('Kan temperatuur niet lezen uit JSON.', domoticz.LOG_ERROR)
end
end
}