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

eiman

Medlemmer
  • Innlegg

    17
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    1

Innlegg 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. 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
  5. 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
  6. 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
  7. 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
  8. Å 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
    }

     

  9. 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 packages
    2022-01-10 23:30:21.169 Error: Tibber: (Tibber) [ModuleNotFoundError("No module named 'websockets'")]
     
     

    Har du lagt inn Home ID?

    image.png.bc26b098a0b6906e14ba8ffe40417569.png

    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
          }
        }
      }
    }
    

     

     

     

    • Like 1
  10. 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

  11. 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?

  12. 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å.

  13. 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

×
×
  • 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.