Domoticz koppelen aan Daytopper
12/07/2024
Voor velen is Domoticz een bekende speler in het automatiseeringslandschap. Het is de tegenhanger van het bekende Home Assistant. Ondanks de wat gedateerde look, is het een behoorlijk krachtig systeem om je hele huisautomatisering in onder te brengen. Het komt met een uitgebreide set krachtige devices (bijvoorbeeld P1 meter, Zigbee-ondersteuning, Z-Wave-ondersteuning, en veel meer) en is dankzij het unieke event-systeem volledig aan te passen.
Sommige gebruikers gebruiken Domoticz om de zonnepanelen uit te lezen. Op deze manier kun je met je overschot diverse apparaten in je huis aansturen. Bijvoorbeeld je zwembadfilter of boiler aanzetten op het moment dat er overschot is, je slimme stekker schakelen die weer op zijn tijd aangesloten is aan je granny charger voor je auto.
Stap 1 - Registreer je omvormer
In dit FAQ-artikel staat omschreven hoe je een omvormer registreert. Wanneer je dit hebt doorlopen tot aan stap 5, kopieer je de token. Deze hebben we nodig in de volgende stap.
Stap 2 - Maak een DzEvent script aan
Om Domoticz te koppelen aan Daytopper kunnen we gebruikmaken van een DzEvent-script. Dit is een script dat binnen Domoticz veel gebruikt wordt om te reageren op events. Met dit script zullen we reageren op je solar device (dus wanneer het device wordt geüpdatet) en de data doorsturen naar de Daytopper API.
Ga naar je Domoticz installatie en navigeer naar Instellingen -> Meer Opties -> Events. Hier kun je een nieuw event script aanmaken.
local solarDeviceId = 40 <-- Your solar device id local daytopperApiKey = "" <-- Your Daytopper API key return { on = { devices = { solarDeviceId, }, httpResponses = { 'triggerDaytopperLogin', 'triggerDaytopperPost' }, }, logging = { level = domoticz.LOG_INFO, marker = 'Daytopper', }, execute = function(domoticz, item) local solarDevice = domoticz.devices(solarDeviceId) local total = solarDevice.WhTotal; local current = solarDevice.actualWatt; if (item.isHTTPResponse) then if (item.ok) then if (item.isJSON) then local result = item.json if (item.trigger == 'triggerDaytopperLogin') then domoticz.log('Sending data to Daytopper API...') domoticz.openURL({ url = 'https://api.solar-daytopper.com/solar', method = 'POST', callback = 'triggerDaytopperPost', headers = { Authorization = "Bearer " .. result.token, ['Content-Type'] = "application/json" }, postData = "{\"total\":" .. total .. " ,\"current\": " .. current .."}" }) elseif (item.trigger == 'triggerDaytopperPost') then domoticz.log(result) domoticz.log('Succes sending data') end else domoticz.log('HTTP is not json', domoticz.LOG_ERROR) end else domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR) domoticz.log(item, domoticz.LOG_ERROR) end else domoticz.openURL({ url = 'https://api.solar-daytopper.com/device/login', method = 'POST', callback = 'triggerDaytopperLogin', postData = { token = daytopperApiKey } }) end end }
In de toekomst willen we ook onderzoeken of we een plugin kunnen maken die beide richtingen op werkt. Of je stuurt je data vanaf Domoticz naar de Daytopper API, of je haalt met de Domoticz-plugin je huidige opwekgegevens op vanuit Daytopper en slaat deze op in Domoticz, maar dat is voor later.