eiman Skrevet 11. januar 2022 Skrevet 11. januar 2022 (endret) Å 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 11. januar 2022 av eiman Siter
DeVille Skrevet 11. januar 2022 Forfatter Skrevet 11. januar 2022 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? Siter
eiman Skrevet 11. januar 2022 Skrevet 11. januar 2022 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 } 1 Siter
DeVille Skrevet 11. januar 2022 Forfatter Skrevet 11. januar 2022 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. 🙂 Siter
eiman Skrevet 20. januar 2022 Skrevet 20. januar 2022 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: Flere hus i samme script (Må foreløpig velg hvilken adresse som skal brukes) 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 User variable og global persistent data For at scriptene skal fungere etter intensjonen må følgende opprettes En "User variable" av type String med navn tibberPricesUpdated opprettes i Domoticz GUI. Variable value kan være hva som helst 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 1 Siter
Teknor Skrevet 20. januar 2022 Skrevet 20. januar 2022 Novice spørsmål fra meg @eiman : I hvilken katalog legger du filene global_data.lua , tibber_update_devices.lua , tibber_fetch-prices.lua? Siter
eiman Skrevet 20. januar 2022 Skrevet 20. januar 2022 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 Legg til en ny fil ved å trykke på +tegnet 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. 1 Siter
Teknor Skrevet 20. januar 2022 Skrevet 20. januar 2022 (endret) 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 20. januar 2022 av Teknor Siter
eiman Skrevet 20. januar 2022 Skrevet 20. januar 2022 Har du opprettet tibberPriceTable i global data som beskrevet? return { -- global persistent data data = { tibberPriceTable = {initial = {}}, }, Siter
Teknor Skrevet 20. januar 2022 Skrevet 20. januar 2022 (endret) 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 20. januar 2022 av Teknor Siter
eiman Skrevet 21. januar 2022 Skrevet 21. januar 2022 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. 1 Siter
eiman Skrevet 21. januar 2022 Skrevet 21. januar 2022 Oppdatering: Tibber er veldig sene med å legge ut morgendagens priser via API (I alle fall hos meg). Har lagt inn test for å sjekke om morgendagen er oppdatert. Hvis den ikke er det vil scriptet teste på nytt om fem min inntil morgendagen oppdateres. tibber_fetch-prices.lua 1 Siter
Moskus Skrevet 21. januar 2022 Skrevet 21. januar 2022 1 hour ago, eiman said: Tibber er veldig sene med å legge ut morgendagens priser via API (I alle fall hos meg). Ca. kl. 13:00 hver dag? EDIT: Hmmm... i dag kom de kl. 15:00. Siter
eiman Skrevet 31. januar 2022 Skrevet 31. januar 2022 Har oppdatert scriptet med prisinformasjonen @Teknor. Det er nå lagt inn rangering av hver time i døgnet, og det er også tatt med nettleie. Se README.htmlfor mer detaljer. tibber_fetch-prices.lua tibber_update_devices.lua 1 Siter
eiman Skrevet 3. februar 2022 Skrevet 3. februar 2022 Hadde sneket seg inn en liten bug som gjorde at rangeringsfunksjonen rapporterte 999 for enkelte timer. Fikset i vedlagte fil tibber_fetch-prices.lua 1 Siter
Teknor Skrevet 3. april 2022 Skrevet 3. april 2022 (endret) 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 3. april 2022 av Teknor Siter
eiman Skrevet 3. april 2022 Skrevet 3. april 2022 (endret) 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 3. april 2022 av eiman Siter
Teknor Skrevet 3. april 2022 Skrevet 3. april 2022 (endret) 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 3. april 2022 av Teknor Siter
eiman Skrevet 3. april 2022 Skrevet 3. april 2022 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 } Siter
Teknor Skrevet 3. april 2022 Skrevet 3. april 2022 ...ellers, kan jeg kommentere ut de linjene som jeg ikke har enheter for? Feks: -- local idxMinInclGridToday = 95 --Custom device -- local idxMaxInclGridToday = 96 --Custom device Siter
eiman Skrevet 3. april 2022 Skrevet 3. april 2022 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🙂 Siter
Anbefalte innlegg
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.