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

eiman

Medlemmer
  • Innlegg

    17
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    1

Alt skrevet av eiman

  1. 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🙂
  2. 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 }
  3. 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
  4. Hadde sneket seg inn en liten bug som gjorde at rangeringsfunksjonen rapporterte 999 for enkelte timer. Fikset i vedlagte fil tibber_fetch-prices.lua
  5. 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
  6. 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
  7. 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.
  8. Har du opprettet tibberPriceTable i global data som beskrevet? return { -- global persistent data data = { tibberPriceTable = {initial = {}}, },
  9. 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 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.
  10. 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
  11. 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 }
  12. Å 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 }
  13. 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 } } } }
  14. 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
  15. 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?
  16. 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å.
  17. 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
×
×
  • 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.