Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Domoticz og Tibber Pulse


Anbefalte innlegg

Å hente inn priser via dzVents  (eller andre data som ikke er live data) er også relativt enkelt hvis det kun er det du trenger:

return {
	on = {
		devices = {},
		timer = {'at 13:15'},
	},
	data = {},
	logger = {},
	execute = function(domoticz, triggeredItem)
	    
    domoticz.openURL({
        url = 'https://api.tibber.com/v1-beta/gql',
        headers = {['Authorization'] = 'Bearer <Token>',
                    ['Content-Type'] ='application/json'},
        method = 'POST',
        callback = 'tibberPrices',
        postData = {
            query = 
                [[
                {
                  viewer {
                    homes {
                      address {
                        address1
                      }
                      currentSubscription {
                        priceInfo {
                          today {
                            total
                            startsAt
                            level
                          }
                          tomorrow {
                            total
                            startsAt
                            level
                          }
                        }
                      }
                    }
                  }
}
                ]]
        }
    })
	end
}

 

Endret av eiman
Lenke til kommentar
Del på andre sider

eiman skrev (5 timer siden):

Å hente inn priser via dzVents  (eller andre data som ikke er live data) er også relativt enkelt hvis det kun er det du trenger:

 

Hmm, interessant. 

Hvor havner da output?

 

Lenke til kommentar
Del på andre sider

DeVille skrev (16 minutter siden):

 

Hmm, interessant. 

Hvor havner da output?

 

Den får du igjen som json via hhtpResponse. Det er en god beskrivelse av det i dzVents dokumentasjonen

 

Her et lite eksempel på et script som sammen med forespørselen i forrige script spytter ut adressen i log-filen. Ikke veldig nyttig, men det gir en ide om hvordan det virker.

Har selv tenkt å legge inn dagens og morgendagens priser i en to tabeller i Persistent Data og  bruke det til å styre strømforbruket, men har ikke kommet så langt enda...
 


return {
	on = {
		httpResponses = {
			'tibberPrices' -- must match with the callback passed to the openURL command
		}
	},
	
    logging    =    {   
                    level       =  domoticz.LOG_DEBUG,   
                    marker      =  "TEST_TibberPrices" 
    },

	execute = function(domoticz, item)
        local function logWrite(str,level)             -- Support function for shorthand debug log statements
            domoticz.log(tostring(str),level or domoticz.LOG_DEBUG)
        end
        
        local hjem1 = '<Din adresse>'
        local hytte1 = '<Din adresse2>'
        
	    logWrite('Tibber prices!')
	    logWrite('dzVents versjon: '..domoticz.settings.dzVentsVersion)

		if (item.isHTTPResponse) then
    		if (item.isJSON) then
    				logWrite('Tibber returnerer data')
    				--logWrite('Tibber data: '..item.data)
    				local myTable = domoticz.utils.fromJSON(item.data)
    				
    				local myHouses = {}
    				for i, myHouse in pairs(myTable.data.viewer.homes) do
    				    local myAddress = myHouse.address.address1
    				    myHouses[myAddress] = myHouse
				    end
	                
	                for key, myHouse in pairs(myHouses) do
	                    if key == hjem1 then
	                        logWrite(key..': '..myHouse.address.address1)
                        end
                    end
    				
    		else
    		        logWrite('Tibber svarer ikke')
    		        logWrite(item.data)
    		end	
		end
	



	end
}

 

  • Like 1
Lenke til kommentar
Del på andre sider

  • 2 uker senere...
DeVille skrev (På 11.1.2022 den 19.40):

Tusen takk for kjapt svar. Mine programmeringsfedigheter tilsier dog at jeg må bruke noe tid å studere dette. 

 

Setter pris på om du vil dele det gjør videre. 🙂

 

Da har jeg (med noe begrensede programmerings-skils...) sett litt mer på saken, så da er det bare å finne en fornuftig måte å bruke informasjonen🙂 Ta gjerne scriptene i bruk @DeVille. Tips og ideer til bruk eler forbedringer mottas med glede!

 

Planlagte forbedringer:

  1. Flere hus i samme script (Må foreløpig velg hvilken adresse som skal brukes)
  2. Rangering av timene i henhold til pris. (kan f.eks brukes hvis du ønsker å ha en forbruker på i de x antall billigste timene i døgnet)

TibberPrices består av to scripts. De henter dagens og morgendagens priser fra Tibber, og beregner i tillegg enkel statistikk (daglig gjennomsnitt, standardavvik, minimum og maksimum foreløpig). Dataene lagres i en tabell, og presenteres i devicer i Domoticz.

 

Filen tibber_fetch-prices.lua henter prisene fra Tibber en gang i døgned (13:05, når morgendagens priser er frigitt), beregner enkel statistikk, og legger resultatene i en "global persistent data"-variabel tibberPriceTable. Her vil dataene være tilgjengelige for alle andre script.

 

Filen tibber_update_devices.lua oppdater dummy-devicer for i dag og i morgen. Alle devicene må opprettes manuelt

image.thumb.png.c1a4478c81a2e4e12155df34d45085e4.png
 

User variable og global persistent data

For at scriptene skal fungere etter intensjonen må følgende opprettes

  1. En "User variable" av type String med navn tibberPricesUpdated opprettes i Domoticz GUI. Variable value kan være hva som helst
    image
     

  2. global_data.lua må opprettes hvis dette ikke allerede er gjort. Her legges det inn en "global persistent data"-variabel tibberPriceTable som beskrevet her:

-- this scripts holds all the globally persistent variables and helper functions
-- see the documentation in the wiki
-- NOTE:
-- THERE CAN BE ONLY ONE global_data SCRIPT in your Domoticz install.

return {
	-- global persistent data
	data = {
		tibberPriceTable = {initial = {}},
		},

	-- global helper functions
	helpers = {
		myHelperFunction = function(domoticz)
			-- code
		end
	}
}

 

tibber_update_devices.lua tibber_fetch-prices.lua

  • Thanks 1
Lenke til kommentar
Del på andre sider

Liten oppdatering på filen tibber_fetch-prices.lua. Hvis du har en device med idx 51, ville scriptet bli trigget om denne endret seg. Ingen krise, men kanskje ikke helt nødvendig heller...

Uansett, det er rettet opp i vedlagte versjon.

tibber_fetch-prices.lua

Teknor skrev (1 minutt siden):

Novice spørsmål fra meg @eiman :

 

I hvilken katalog legger du filene global_data.lua , tibber_update_devices.lua , tibber_fetch-prices.lua?

Jeg bruker det grafiske grensesnittet i Domoticz. Gå til Setup-->More options-->Events
image.thumb.png.c37f6035befda4a1930d535ac7343d7a.png

 

Legg til en ny fil ved å trykke på +tegnet

image.png.ebae5265296544e23f59594ed7d93bab.png

 

Slett alt som kommer opp av innhold, og lim inn innholdet fra de vedlagte filene. Sjekk at scriptet er aktivert (Lilla On-knapp valgt), og lagre.

 

global_data.lua opprettes på samme vis ved å velge Global Data i menyen vist over.

 

Lykke til! Og bare å gi en lyd hvis du støter på problemer.

  • Thanks 1
Lenke til kommentar
Del på andre sider

Takk for hjelp. Endret tidspunktet den skal trigges til i kveld. FIkk en liten feilmelding i loggen mot slutten:

 

 

2022-01-20 21:54:05.374 Status: dzVents: Info: Handling httpResponse-events for: "tibberPrices"
2022-01-20 21:54:05.374 Status: dzVents: Info: ------ Start internal script: tibber_fetch-prices: HTTPResponse: "tibberPrices"
2022-01-20 21:54:05.411 Status: dzVents: {"data":{"viewer":{"homes":[{"address":{"address1":"Søndre hytta"},"currentSubscription":{"priceInfo":{"today":[{"total":1.5892,"startsAt":"2022-01-20T00:00:00.000+01:00","level":"CHEAP"},{"total":1.5385,"startsAt":"2022-01-20T01:00:00.000+01:00","level":"CHEAP"},{"total":1.4878,"startsAt":"2022-01-20T02:00:00.000+01:00","level":"CHEAP"},{"total":1.4509,"startsAt":"2022-01-20T03:00:00.000+01:00","level":"CHEAP"},{"total":1.4524,"startsAt":"2022-01-20T04:00:00.000+01:00","level":"CHEAP"},{"total":1.5451,"startsAt":"2022-01-20T05:00:00.000+01:00","level":"CHEAP"},{"total":1.6324,"startsAt":"2022-01-20T06:00:00.000+01:00","level":"NORMAL"},{"total":1.6494,"startsAt":"2022-01-20T07:00:00.000+01:00","level":"NORMAL"},{"total":1.701,"startsAt":"2022-01-20T08:00:00.000+01:00","level":"NORMAL"},{"total":1.6822,"startsAt":"2022-01-20T09:00:00.000+01:00","level":"NORMAL"},{"total":1.659,"startsAt":"2022-01-20T10:00:00.000+01:00","level":"NORMAL"},{"total":1.6549,"startsAt":"2022-01-20T11:00:00.000+01:00","level":"NORMAL"},{"total":1.6186,"startsAt":"2022-01-20T12:00:00.000+01:00","level":"CHEAP"},{"total":1.6073,"startsAt":"2022-01-20T13:00:00.000+01:00","level":"CHEAP"},{"total":1.645,"startsAt":"2022-01-20T14:00:00.000+01:00","level":"NORMAL"},{"total":1.6628,"startsAt":"2022-01-20T15:00:00.000+01:00","level":"NORMAL"},{"total":1.7042,"startsAt":"2022-01-20T16:00:00.000+01:00","level":"NORMAL"},{"total":1.7289,"startsAt":"2022-01-20T17:00:00.000+01:00","level":"NORMAL"},{"total":1.7125,"startsAt":"2022-01-20T18:00:00.000+01:00","level":"NORMAL"},{"total":1.7115,"startsAt":"2022-01-20T19:00:00.000+01:00","level":"NORMAL"},{"total":1.7102,"startsAt":"2022-01-20T20:00:00.000+01:00","level":"NORMAL"},{"total":1.7052,"startsAt":"2022-01-20T21:00:00.000+01:00","level":"NORMAL"},{"total":1.6587,"startsAt":"2022-01-20T22:00:00.000+01:00","level":"NORMAL"},{"total":1.6109,"startsAt":"2022-01-20T23:00:00.000+01:00","level":"NORMAL"}],"tomorrow":[{"total":1.5992,"startsAt":"2022-01-21T00:00:00.000+01:00","level":"CHEAP"},{"total":1.5906,"startsAt":"2022-01-21T01:00:00.000+01:00","level":"CHEAP"},{"total":1.5986,"startsAt":"2022-01-21T02:00:00.000+01:00","level":"CHEAP"},{"total":1.6047,"startsAt":"2022-01-21T03:00:00.000+01:00","level":"NORMAL"},{"total":1.6083,"startsAt":"2022-01-21T04:00:00.000+01:00","level":"NORMAL"},{"total":1.6451,"startsAt":"2022-01-21T05:00:00.000+01:00","level":"NORMAL"},{"total":1.6622,"startsAt":"2022-01-21T06:00:00.000+01:00","level":"NORMAL"},{"total":1.774,"startsAt":"2022-01-21T07:00:00.000+01:00","level":"NORMAL"},{"total":1.8104,"startsAt":"2022-01-21T08:00:00.000+01:00","level":"NORMAL"},{"total":1.8078,"startsAt":"2022-01-21T09:00:00.000+01:00","level":"NORMAL"},{"total":1.8062,"startsAt":"2022-01-21T10:00:00.000+01:00","level":"NORMAL"},{"total":1.7879,"startsAt":"2022-01-21T11:00:00.000+01:00","level":"NORMAL"},{"total":1.7714,"startsAt":"2022-01-21T12:00:00.000+01:00","level":"NORMAL"},{"total":1.8102,"startsAt":"2022-01-21T13:00:00.000+01:00","level":"NORMAL"},{"total":1.7884,"startsAt":"2022-01-21T14:00:00.000+01:00","level":"NORMAL"},{"total":1.8013,"startsAt":"2022-01-21T15:00:00.000+01:00","level":"NORMAL"},{"total":1.8254,"startsAt":"2022-01-21T16:00:00.000+01:00","level":"NORMAL"},{"total":1.8584,"startsAt":"2022-01-21T17:00:00.000+01:00","level":"NORMAL"},{"total":1.8408,"startsAt":"2022-01-21T18:00:00.000+01:00","level":"NORMAL"},{"total":1.7706,"startsAt":"2022-01-21T19:00:00.000+01:00","level":"NORMAL"},{"total":1.7144,"startsAt":"2022-01-21T20:00:00.000+01:00","level":"NORMAL"},{"total":1.682,"startsAt":"2022-01-21T21:00:00.000+01:00","level":"NORMAL"},{"total":1.6746,"startsAt":"2022-01-21T22:00:00.000+01:00","level":"NORMAL"},{"total":1.5997,"startsAt":"2022-01-21T23:00:00.000+01:00","level":"NORMAL"}]}}},{"address":{"address1":"hjemmeadr
"},"currentSubscription":{"priceInfo":{"today":[{"total":1.5892,"startsAt":"2022-01-20T00:00:00.000+01:00","level":"CHEAP"},{"total":1.5385,"startsAt":"2022-01-20T01:00:00.000+01:00","level":"CHEAP"},{"total":1.4878,"startsAt":"2022-01-20T02:00:00.000+01:00","level":"CHEAP"},{"total":1.4509,"startsAt":"2022-01-20T03:00:00.000+01:00","level":"CHEAP"},{"total":1.4524,"startsAt":"2022-01-20T04:00:00.000+01:00","level":"CHEAP"},{"total":1.5451,"startsAt":"2022-01-20T05:00:00.000+01:00","level":"CHEAP"},{"total":1.6324,"startsAt":"2022-01-20T06:00:00.000+01:00","level":"NORMAL"},{"total":1.6494,"startsAt":"2022-01-20T07:00:00.000+01:00","level":"NORMAL"},{"total":1.701,"startsAt":"2022-01-20T08:00:00.000+01:00","level":"NORMAL"},{"total":1.6822,"startsAt":"2022-01-20T09:00:00.000+01:00","level":"NORMAL"},{"total":1.659,"startsAt":"2022-01-20T10:00:00.000+01:00","level":"NORMAL"},{"total":1.6549,"startsAt":"2022-01-20T11:00:00.000+01:00","level":"NORMAL"},{"total":1.6186,"startsAt":"2022-01-20T12:00:00.000+01:00","level":"CHEAP"},{"total":1.6073,"startsAt":"2022-01-20T13:00:00.000+01:00","level":"CHEAP"},{"total":1.645,"startsAt":"2022-01-20T14:00:00.000+01:00","level":"NORMAL"},{"total":1.6628,"startsAt":"2022-01-20T15:00:00.000+01:00","level":"NORMAL"},{"total":1.7042,"startsAt":"2022-01-20T16:00:00.000+01:00","level":"NORMAL"},{"total":1.7289,"startsAt":"2022-01-20T17:00:00.000+01:00","level":"NORMAL"},{"total":1.7125,"startsAt":"2022-01-20T18:00:00.000+01:00","level":"NORMAL"},{"total":1.7115,"startsAt":"2022-01-20T19:00:00.000+01:00","level":"NORMAL"},{"total":1.7102,"startsAt":"2022-01-20T20:00:00.000+01:00","level":"NORMAL"},{"total":1.7052,"startsAt":"2022-01-20T21:00:00.000+01:00","level":"NORMAL"},{"total":1.6587,"startsAt":"2022-01-20T22:00:00.000+01:00","level":"NORMAL"},{"total":1.6109,"startsAt":"2022-01-20T23:00:00.000+01:00","level":"NORMAL"}],"tomorrow":[{"total":1.5992,"startsAt":"2022-01-21T00:00:00.000+01:00","level":"CHEAP"},{"total":1.5906,"startsAt":"2022-01-21T01:00:00.000+01:00","level":"CHEAP"},{"total":1.5986,"startsAt":"2022-01-21T02:00:00.000+01:00","level":"CHEAP"},{"total":1.6047,"startsAt":"2022-01-21T03:00:00.000+01:00","level":"NORMAL"},{"total":1.6083,"startsAt":"2022-01-21T04:00:00.000+01:00","level":"NO
2022-01-20 21:54:05.443 Status: dzVents: Info: ------ Finished tibber_fetch-prices
2022-01-20 21:54:05.443 Error: dzVents: Error: (3.1.7) An error occurred when calling event handler tibber_fetch-prices
2022-01-20 21:54:05.443 Error: dzVents: Error: (3.1.7) ...cripts/dzVents/generated_scripts/tibber_fetch-prices.lua:97: attempt to call a nil value (field 'initialize')
Endret av Teknor
Lenke til kommentar
Del på andre sider

eiman skrev (26 minutter siden):

Har du opprettet tibberPriceTable i global data som beskrevet?

return {
	-- global persistent data
	data = {
		tibberPriceTable = {initial = {}},
		},

 

Ja, har det 🙂

Men har ikke opprettet enhetene under Hardware --> Dummy -> Create devices.
Eller er det en metode for å opprette dem automatisk?

 

 

EDIT: Opprettet enhetene manuelt og la inn riktig IDX - fungerer som en drøm!

Endret av Teknor
Lenke til kommentar
Del på andre sider

Teknor skrev (9 timer siden):

 

Ja, har det 🙂

Men har ikke opprettet enhetene under Hardware --> Dummy -> Create devices.
Eller er det en metode for å opprette dem automatisk?

 

 

EDIT: Opprettet enhetene manuelt og la inn riktig IDX - fungerer som en drøm!

Bra det ser ut til å virke.

 

P.s. Hvis du kommenterer ut linje 158 print(triggeredItem.data) i tibber_fetch-prices slipper du å få listet opp hele responsen fra Tibber i log-filen din.

  • Thanks 1
Lenke til kommentar
Del på andre sider

  • 2 uker senere...
  • 2 måneder senere...

Får følgende update feil og prisene oppdateres ikke. Har du kjennskap til hva feilen kan være @eiman ?

 

Update: PriceNow oppdateres som normalt, de andre gjør ikke.

 

2022-04-03 12:00:00.444 Error: dzVents: Error: (3.1.7) TibberPrices Update devices: An error occurred when calling event handler tibber_update_devices
2022-04-03 12:00:00.444 Error: dzVents: Error: (3.1.7) TibberPrices Update devices: ...ipts/dzVents/generated_scripts/tibber_update_devices.lua:39: attempt to call a nil value (field 'updateCustomSensor')
 
 
Endret av Teknor
Lenke til kommentar
Del på andre sider

Har dette oppstått nå plutselig? Og fremdeles vedvarende?

 

Jeg skal prøve å få tatt en titt på det i løpet av dagen/ kvelden. 

 

I mellomtiden: kan du sende meg en kopi av filen tibber_update_devices.lua du har i sitt system?

 

P.s. God meg fungerer det som det skal

Endret av eiman
Lenke til kommentar
Del på andre sider

Ble noe rusk i midten av februar kan det se ut som, @eiman

 

local idxPriceNow = 3436 --Custom sensor
local idxPriceLevelNow = 3446 --Text device
local idxPriceAverageToday = 3438 --Custom sensor
local idxPriceAverageTmorrow = 3439 --Text device
local idxStdDeviationToday = 3440 --Custom sensor
local idxStdDeviationTomorrow = 3441 --Text device
local idxMinToday = 3442 --Custom device
local idxMaxToday = 3443 --Custom device
local idxMinTomorrow = 3444 --Text device
local idxMaxTomorrow = 3445 --Text device

return {
	on = {
		timer = {
			'every hour',				-- 00:00, 01:00, ..., 23:00	(24x per 24hrs)
		},

        customEvents = {
            'tibberPricesUpdated' --Trigered from tibber_fetch_prices
        },
	},
	logging = {
		level = domoticz.LOG_INFO,
		marker = 'TibberPrices Update devices',
	},
	execute = function(domoticz, triggeredItem)
		domoticz.log('Timer event was triggered by ' .. triggeredItem.trigger, domoticz.LOG_INFO)
		local tibberPriceTable = domoticz.globalData.tibberPriceTable
		
        local function priceNow()
            local Time =require('Time')
            local currentTime = Time()
            
            for key, myEntry in pairs(tibberPriceTable.hourlyData) do --Update hourly data
                local entryTime = Time(myEntry.startsAt)
                if entryTime.day == currentTime.day and entryTime.hour == currentTime.hour then
                    domoticz.devices(idxPriceNow).updateCustomSensor(myEntry.total)
                    domoticz.devices(idxPriceLevelNow).updateText(myEntry.level)
                    domoticz.devices(idxPriceRankNow).updateCustomSensor(myEntry.rank)
                    domoticz.devices(idxGridRentNow).updateCustomSensor(myEntry.gridRent)
                    domoticz.devices(idxPriceInclGridNow).updateCustomSensor(myEntry.totalInclGridRent)
                end
            end

            if (triggeredItem.isCustomEvent) or (currentTime.hour == 0) then --update daily stats
                local awaitingPrices = 'Venter på oppdaterte priser'
                local txtAverageTomorrow = awaitingPrices
                local txtStdDevTomorrow = awaitingPrices
                local txtMinTomorrow = awaitingPrices
                local txtMaxTomorrow = awaitingPrices
                local txtLevelTomorrow = awaitingPrices
                local txtMinInclGridTomorrow = awaitingPrices
                local txtMaxInclGridTomorrow = awaitingPrices
                local txtStdDeviationInclGridTomorrow = awaitingPrices
                local txtPriceAverageInclGridTomorrow = awaitingPrices

                for key, myEntry in pairs(tibberPriceTable.dailyStats) do
                    if currentTime.day == myEntry.myDay then
                        domoticz.devices(idxPriceAverageToday).updateCustomSensor(myEntry.mean)
                        domoticz.devices(idxStdDeviationToday).updateCustomSensor(myEntry.stdDev)
                        domoticz.devices(idxMaxToday).updateCustomSensor(myEntry.maximum)
                        domoticz.devices(idxMinToday).updateCustomSensor(myEntry.minimum)
                        domoticz.devices(idxPriceLevelToday).updateText(myEntry.dailyLevel)
                        domoticz.devices(idxMinInclGridToday).updateCustomSensor(myEntry.minInclGridRent)
                        domoticz.devices(idxMaxInclGridToday).updateCustomSensor(myEntry.maxInclGridRent)
                        domoticz.devices(idxStdDeviationInclGridToday).updateCustomSensor(myEntry.stdInclGridRent)
                        domoticz.devices(idxPriceAverageInclGridToday).updateCustomSensor(myEntry.meanInclGridRent)

                    elseif currentTime.addDays(1).day == myEntry.myDay then
                        txtAverageTomorrow = myEntry.mean
                        txtStdDevTomorrow = myEntry.stdDev
                        txtMinTomorrow = myEntry.minimum
                        txtMaxTomorrow = myEntry.maximum
                        txtLevelTomorrow = myEntry.dailyLevel
                        txtMinInclGridTomorrow = myEntry.minInclGridRent
                        txtMaxInclGridTomorrow = myEntry.maxInclGridRent
                        txtStdDeviationInclGridTomorrow = myEntry.stdInclGridRent
                        txtPriceAverageInclGridTomorrow = myEntry.meanInclGridRent
                    end
                end
                domoticz.devices(idxPriceAverageTmorrow).updateText(txtAverageTomorrow)
                domoticz.devices(idxStdDeviationTomorrow).updateText(txtStdDevTomorrow)
                domoticz.devices(idxMinTomorrow).updateText(txtMinTomorrow)
                domoticz.devices(idxMaxTomorrow).updateText(txtMaxTomorrow)
                domoticz.devices(idxPriceLevelTomorrow).updateText(txtLevelTomorrow)
                domoticz.devices(idxMinInclGridTomorrow).updateText(txtMinInclGridTomorrow)
                domoticz.devices(idxMaxInclGridTomorrow).updateText(txtMaxInclGridTomorrow)
                domoticz.devices(idxStdDeviationInclGridTomorrow).updateText(txtStdDeviationInclGridTomorrow)
                domoticz.devices(idxPriceAverageInclGridTomorrow).updateText(txtPriceAverageInclGridTomorrow)
            end
        end
        
        priceNow()
	end
}

 

Endret av Teknor
Lenke til kommentar
Del på andre sider

Ser ut til at du prøver å oppdatere devices som du ikke har opprettet, og da får du feil. Den enkle løsningen er å slette eller kommentere ut linjene hvor dette skjer. Skal vurdere å legge inn en sjekk på at devicene eksisterer, men intil videre kan du benytte den enkle løsningen beskrevet over. Her har jeg kommentert ut linjene som jeg tror gir deg feil. Se om det virker bedre med dette:

 

local idxPriceNow = 3436 --Custom sensor
local idxPriceLevelNow = 3446 --Text device
local idxPriceAverageToday = 3438 --Custom sensor
local idxPriceAverageTmorrow = 3439 --Text device
local idxStdDeviationToday = 3440 --Custom sensor
local idxStdDeviationTomorrow = 3441 --Text device
local idxMinToday = 3442 --Custom device
local idxMaxToday = 3443 --Custom device
local idxMinTomorrow = 3444 --Text device
local idxMaxTomorrow = 3445 --Text device

return {
	on = {
		timer = {
			'every hour',				-- 00:00, 01:00, ..., 23:00	(24x per 24hrs)
		},

        customEvents = {
            'tibberPricesUpdated' --Trigered from tibber_fetch_prices
        },
	},
	logging = {
		level = domoticz.LOG_INFO,
		marker = 'TibberPrices Update devices',
	},
	execute = function(domoticz, triggeredItem)
		domoticz.log('Timer event was triggered by ' .. triggeredItem.trigger, domoticz.LOG_INFO)
		local tibberPriceTable = domoticz.globalData.tibberPriceTable
		
        local function priceNow()
            local Time =require('Time')
            local currentTime = Time()
            
            for key, myEntry in pairs(tibberPriceTable.hourlyData) do --Update hourly data
                local entryTime = Time(myEntry.startsAt)
                if entryTime.day == currentTime.day and entryTime.hour == currentTime.hour then
                    domoticz.devices(idxPriceNow).updateCustomSensor(myEntry.total)
                    domoticz.devices(idxPriceLevelNow).updateText(myEntry.level)
                    --domoticz.devices(idxPriceRankNow).updateCustomSensor(myEntry.rank)
                    --domoticz.devices(idxGridRentNow).updateCustomSensor(myEntry.gridRent)
                    --domoticz.devices(idxPriceInclGridNow).updateCustomSensor(myEntry.totalInclGridRent)
                end
            end

            if (triggeredItem.isCustomEvent) or (currentTime.hour == 0) then --update daily stats
                local awaitingPrices = 'Venter på oppdaterte priser'
                local txtAverageTomorrow = awaitingPrices
                local txtStdDevTomorrow = awaitingPrices
                local txtMinTomorrow = awaitingPrices
                local txtMaxTomorrow = awaitingPrices
                local txtLevelTomorrow = awaitingPrices
                local txtMinInclGridTomorrow = awaitingPrices
                local txtMaxInclGridTomorrow = awaitingPrices
                local txtStdDeviationInclGridTomorrow = awaitingPrices
                local txtPriceAverageInclGridTomorrow = awaitingPrices

                for key, myEntry in pairs(tibberPriceTable.dailyStats) do
                    if currentTime.day == myEntry.myDay then
                        domoticz.devices(idxPriceAverageToday).updateCustomSensor(myEntry.mean)
                        domoticz.devices(idxStdDeviationToday).updateCustomSensor(myEntry.stdDev)
                        domoticz.devices(idxMaxToday).updateCustomSensor(myEntry.maximum)
                        domoticz.devices(idxMinToday).updateCustomSensor(myEntry.minimum)
                        --domoticz.devices(idxPriceLevelToday).updateText(myEntry.dailyLevel)
                        --domoticz.devices(idxMinInclGridToday).updateCustomSensor(myEntry.minInclGridRent)
                        --domoticz.devices(idxMaxInclGridToday).updateCustomSensor(myEntry.maxInclGridRent)
                        --domoticz.devices(idxStdDeviationInclGridToday).updateCustomSensor(myEntry.stdInclGridRent)
                        --domoticz.devices(idxPriceAverageInclGridToday).updateCustomSensor(myEntry.meanInclGridRent)

                    elseif currentTime.addDays(1).day == myEntry.myDay then
                        txtAverageTomorrow = myEntry.mean
                        txtStdDevTomorrow = myEntry.stdDev
                        txtMinTomorrow = myEntry.minimum
                        txtMaxTomorrow = myEntry.maximum
                        txtLevelTomorrow = myEntry.dailyLevel
                        txtMinInclGridTomorrow = myEntry.minInclGridRent
                        txtMaxInclGridTomorrow = myEntry.maxInclGridRent
                        txtStdDeviationInclGridTomorrow = myEntry.stdInclGridRent
                        txtPriceAverageInclGridTomorrow = myEntry.meanInclGridRent
                    end
                end
                domoticz.devices(idxPriceAverageTmorrow).updateText(txtAverageTomorrow)
                domoticz.devices(idxStdDeviationTomorrow).updateText(txtStdDevTomorrow)
                domoticz.devices(idxMinTomorrow).updateText(txtMinTomorrow)
                domoticz.devices(idxMaxTomorrow).updateText(txtMaxTomorrow)
                --domoticz.devices(idxPriceLevelTomorrow).updateText(txtLevelTomorrow)
                --domoticz.devices(idxMinInclGridTomorrow).updateText(txtMinInclGridTomorrow)
                --domoticz.devices(idxMaxInclGridTomorrow).updateText(txtMaxInclGridTomorrow)
                --domoticz.devices(idxStdDeviationInclGridTomorrow).updateText(txtStdDeviationInclGridTomorrow)
                --domoticz.devices(idxPriceAverageInclGridTomorrow).updateText(txtPriceAverageInclGridTomorrow)
            end
        end
        
        priceNow()
	end
}

 

Lenke til kommentar
Del på andre sider

Ja, de kan du kommentere ut. Men problemet oppstår lenger ned i koden hvor enhetene blir forsøkt oppdatert enten de eksisterer eller ei.

 

Det er de linjene jeg kommenterte ut i mitt svar. 

 

Mulig vi snakker forbi hverandre, men håper det gir mening🙂

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.