logo

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.