-
Innlegg
17 -
Ble med
-
Besøkte siden sist
-
Dager vunnet
1
Innholdstype
Profiler
Forum
Blogger
Nedlastninger
Artikler
Regler
Hendelser
Galleri
Store
Innlegg skrevet av eiman
-
-
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 }
-
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
-
Hadde sneket seg inn en liten bug som gjorde at rangeringsfunksjonen rapporterte 999 for enkelte timer. Fikset i vedlagte fil
- 1
-
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.
- 1
-
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.
- 1
-
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
-
Har du opprettet tibberPriceTable i global data som beskrevet?
return { -- global persistent data data = { tibberPriceTable = {initial = {}}, },
-
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.
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
-
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"-variabeltibberPriceTable
. 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 manueltUser variable og global persistent data
For at scriptene skal fungere etter intensjonen må følgende opprettes
-
En "User variable" av type
String
med navntibberPricesUpdated
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"-variabeltibberPriceTable
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 } }
- 1
-
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
-
Å 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 }
-
Teknor skrev (8 timer siden):
Etter at jeg nå har både hytte og hjem i tibber ser det ut til at Tibber plugin-en krasjer når den skal hente prisene.
Noen som har tips til feilsøk?
Her er logg fra Domoticz.
2022-01-10 23:30:21.169 Error: Tibber: (Tibber) Missing packages2022-01-10 23:30:21.169 Error: Tibber: (Tibber) [ModuleNotFoundError("No module named 'websockets'")]Har du lagt inn Home ID?
Med mer enn en bolig vil plugin krasje hvis du ikke oppgir hvilken bolig du ønsker data for. Home ID kan du finne på https://developer.tibber.com/explorer. Legg inn din egen token og forespørselen under. Du vil da få opp Home ID for hver av dine boliger
{ viewer { homes { id address { address1 } } } }
- 1
-
Virker nå på Ubuntu 20.04 LTE med Domoticz 2020.2 Litt fram og tilbake med ulike endringer og tester. Litt usikker på hva som fikk det til å fungere, men mulig det var tipset om sudo pip3 install --pre gql[all]
Takk for tipset DeVille
-
HomeID er det vel ikke noe valg for å legge inn lenger, men Token gå greit. Det er etter det at det krasjer.
Var nok litt rask når jeg sa det fungerte sist. Har nå prøvd med v 0.86, også det uten hell. Operativsystem er Ubuntu 20.04.1 LTS på en testmaskin med ren installasjon.
Installerte på en annen maskin med Ubuntu 18.04 LTS. Da går det greit med unntak av at Watt ikke oppdateres, samt feilmeldinger i forbindelse med dette.
2021-03-12 21:35:30.524 Error: (tibbertest) 'onHeartbeat' failed 'AttributeError':'module 'asyncio' has no attribute 'run''. 2021-03-12 21:35:30.524 Error: (tibbertest) ----> Line 321 in '/home/eirik/domoticz/plugins/Tibber/plugin.py', function onHeartbeat 2021-03-12 21:35:30.524 Error: (tibbertest) ----> Line 241 in '/home/eirik/domoticz/plugins/Tibber/plugin.py', function onHeartbeat
Har du Tibber Pulse og får oppdatert effekt (Watt) Deville?
-
Flere dager ja. Versjonen jeg lastet ned var modifisert i går. Byttet ut plugin.py til siste commit som ble gjort 2. mars, og da virker det. Noe ser altså ut til å ha gått galt under oppdatering av filen en gang etter det. Har dessverre ikke tid til å grave mer i det akkurat nå.
-
På 9.3.2021 den 22.40, DeVille skrev:
flopp999 skred til verket, og endret som jeg ønsket. Veldig raskt levert.
Har du fått dette til å virke DeVille? Hos meg krasjer Domoticz når jeg legger til en Hardware av typen Tibber API. Får ikke Domoticz i gang igjen før jeg fjerner mappen "Tibber" med innhold fra domoticz/plugins
Domoticz og Tibber Pulse
i Domoticz
Skrevet
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🙂