Vinnerliste
Populært innhold
Viser innholdet med mest poeng fra 15. mai 2019 i alle områder
-
Guide til hvordan du benytter Tibber mot Fibaro HC2 for å styre varme-panelet: Nr.1: Hente inn strømpris fra Tibber: Referanse: https://marketplace.fibaro.com/items/tibber-price Lag en ny variabel i "Panels->Variables panel->Variables" som heter "Strompris" og la denne stå som null. Lag en LUA scene som heter "Hent_strompris" og sett inn kode. Her er det viktig å legge inn din Tibber ID på "XXXXXX" Du kan nå teste ut om du greier å hente verdien fra Tibber ved å kjøre scenen manuelt. Dette gjøre du ved å trykke på boksen under koden etter å ha lagret scenen (floppy-ikon på høyre side). --[[ %% properties %% events %% globals --]] if (fibaro:countScenes() > 1) then --Bare én kjøring av gangen. fibaro:abort() end fibaro:debug(fibaro:getGlobalValue('Strompris')); local http = net.HTTPClient(); local payload = '{"query": "{viewer {homes {currentSubscription {priceInfo {current {total currency}}}}}}", "variables": null, "operationName": null}'; http : request('https://api.tibber.com/v1-beta/gql', { options = { method = "POST", headers = { ['Authorization'] = 'Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', --Din Tibber ID her. ['Content-Type'] = 'application/json' }, data = payload }, success = function(response) fibaro:debug (response.data) local startIndex = string.find(response.data,'{"total":') + 9; local endIndex = string.find(response.data,',')-1; local price = string.sub(response.data,startIndex, endIndex); startIndex = string.find(response.data,'currency":"') + 11; endIndex = string.find(response.data,'}')-2; local currency = string.sub(response.data,startIndex, endIndex); fibaro:debug(price) fibaro:setGlobal('Strompris',price); fibaro:debug(currency) end, error = function(err) fibaro:debug ("Error:" .. err) end }); --fibaro:startScene(6) -- Denne er kommentert ut intill videre Nr.2. Du greier nå å hente inn Strømpris, men dette gjøres ikke automagisk. Du trenger derfor en form for "timer". Jeg har funnet at den enkleste og best fungerende timeren kan lages i blokkdiagramer, selv om jeg ikke er noe fan av denne typen programmering. Du lager altså en ny scene som du kaller noe slikt som "TimerStrompris". Denne skal se slik ut: Nr.3. Nå hentes strømprisen hver time. Dette ser ut til fungere meget bra for min del. Det neste vi skal gjøre er å sette opp en enhet som viser oss hva strømprisen er. Gå derfor til "Devices" -> "To add the Virtual Device" -> "Add" Gi denne navn "Strompris" og gå til den avanserte menyen. Under "Choose set of buttons" hak av "Label" og trykk deretter på "Add set" "Label" = "Kroner pr kW" "ID" = "Label1" huk av "main" Legg inn denne koden i "Main loop": local ID = fibaro:getSelfId(Label1) fibaro:call(ID, "setProperty", "ui.Label1.value", (tonumber(fibaro:getGlobalValue("Strompris")))) fibaro:sleep(120000) --henter oppdatering hvert andre minutt Du vil nå ha en virtuell enhet som forteller deg hva strømprisen er. Nr.4. Det neste vi skal gjøre er å lage en scene som sjekker hvordan strømprisen oppfører seg og styrer vannbåren varme i huset. Jeg har brukt Heating panel og reléer til å styre mitt system. Jeg har også en styrt ventil på varmekolben som lar varmvannet gå tilbake til varmepumpen om for mange ventiler er lukket. Vi må her opprette en tidsvariabel som global variabel akkurat slik vi gjorde med den globale variablen "Strompris". Denne gangen kaller variablen "iPris". Lag også en variabel som heter "DyrStrom" Vi lager også en Predefinert variabel som vi kaller "PrisTabell". Ironisk nok skal du IKKE definere denne. Definisjonen lager du i scenen din. Nr.5. Lag en ny LUA scene. Kall den "StromPrisSnitt". linje 14-18 beskriver en tabell som skal fungere som en initialisering av "PrisTabell". Fjern derfor kommenteringen og kjør scenen en gang. Deretter kan du fjerne eller kommentere ut dette avsnittet. --[[ %% properties %% events %% globals --]] if (fibaro:countScenes() > 1) then fibaro:abort() end -- #Inital setup of the "predefined global variable" : Pristabell --Table = { -- [1]=881,[2]=881,[3]=881, [4]=881,[5]=881,[6]=881, [7]=881,[8]=881,[9]=881,[10]=881 -- } --local jTable = json.encode(Table) --fibaro:setGlobal("PrisTabell", jTable) -- #Get Strømpris, a global variable: local pris = fibaro:getGlobalValue('Strompris') -- #Get and Decode Pristabell: local jT = json.decode(fibaro:getGlobalValue("PrisTabell")) -- #Read Pristabell for decode purpose: for k,v in pairs(jT) do print("k: " ..k..", v: "..v) end -- #Get location in the table from the global variable iPris: local i= fibaro:getGlobalValue('iPris') -- #make some local variables: local snitt = 0 local m = 0 -- #find the average price the last ten hours: while m<10 do m = m+1 snitt = snitt+jT[m] end fibaro:debug(snitt); snitt=snitt/10 fibaro:debug(snitt); -- #What is the increase in price compaired to the last ten hours: local okning = pris/snitt fibaro:debug(okning); --fibaro:debug(jT[i]); -- #Where in the table should the next price be stored: i = i+1 if (i > 10) then i=1 end fibaro:setGlobal('iPris', i) -- #Place the current price in the table: jT[i] = pris -- #is the power +10% more expencive than the 10 hour avrage? Then change a global variable called DyrStrom: if okning >1.1 then fibaro:setGlobal("DyrStrom", 1) fibaro:debug("Dyr Strom!"); else fibaro:setGlobal("DyrStrom", 0) fibaro:debug("OK!"); end -- #Save the current price in the historic price table: local jTable = json.encode(jT) fibaro:setGlobal("PrisTabell", jTable) Nr.6. Pristabellen lastes ikke inn av seg selv. Hver gang du henter en strømpris vil du legge denne inn i tabellen. I bunnen av scenen "Hent_strompris" finner du en kommentert snutt : "--fibaro:startScene(6)". Her skal du nå legge inn ID fra scenen "StromPrisSnitt". På den måten går timeren av hver time, som så starter Hent_Strompris som så legger dette inn i tabellen. Legg merke til at "iPris" gir plassering i tabellen. "DyrStrom" sier binært om strømprisen er høy i forhold til de siste 10 timer. Nr.7. Det vi nå har å jobbe med er variablen "DyrStrom". Denne variablen sier fra når vi vil bruke mindre strøm. Først må vi finne ID fra "heating Panel". For å finne ID må du være på samme nett som Fibaro HC2en din. Du legger da inn denne lenken i nettleseren:"Din_Fibaro_ID"/api/panels/heating Din_Fibaro_ID er synlig når du er logget inn på Fibaro-boksen i nettleseren din på ditt lokale nettverk. Egentlig kan du bare bytte ut det som står foran ID'en i nettadressen. Denne scenen hentes ved en forandring i variablen "DyrStrom". Her brukes "DyrStrom" variablen til å styre varmen over på manuell modus. Dette gjør at alle varmeventiler går til lukket tilstand, noe som betyr at varmepumpen bruker avslutter oppvarmingen av huset for minst én time. Neste time vil dette sjekkes igjen og om strømprisen ikke er 10% dyrere enn de 10 foregående timene vil "DyrStrom" gå til null og den manuelle modusen skrus på i 0 sekunder. --[[ %% properties %% events %% globals DyrStrom --]] -- above: start the scene when the global variable DyrStrom changes. --Run only one at a time: if (fibaro:countScenes() > 1) then fibaro:abort() end -- These values can be found by inserting this link with your HC2 ip-address in your browser "your_hc2_ip"/api/panels/heating --My heating panel IDs -- "id":25,"name":"Vaskerom" -- "id":68,"name":"Kjeller" -- "id":71,"name":"Kontor" -- "id":119,"name":"Temperature in Gang" -- "id":120,"name":"Temperature in Stue" -- "id":121,"name":"Bad 2.etg" local i = fibaro:getGlobal('DyrStrom') fibaro:debug(i); local IdPanel = 25 -- id from the heating Panel ---------------------------------------------------------------------------------- -- Manual mode in the heating panel with temp 18°C for 2 hour ---------------------------------------------------------------------------------- local panel = api.get("/panels/heating/" .. IdPanel) panel.properties.handTemperature = 18 panel.properties.handTimestamp = os.time() + (60*60*2*i) api.put("/panels/heating/"..IdPanel, panel) local IdPanel = 68 -- id from the heating Panel ---------------------------------------------------------------------------------- -- Manual mode in the heating panel with temp 10°C for 2 hour ---------------------------------------------------------------------------------- local panel = api.get("/panels/heating/" .. IdPanel) panel.properties.handTemperature = 10 panel.properties.handTimestamp = os.time() + (60*60*2*i) api.put("/panels/heating/"..IdPanel, panel) local IdPanel = 71 -- id from the heating Panel ---------------------------------------------------------------------------------- -- Manual mode in the heating panel with temp 18°C for 2 hour ---------------------------------------------------------------------------------- local panel = api.get("/panels/heating/" .. IdPanel) panel.properties.handTemperature = 18 panel.properties.handTimestamp = os.time() + (60*60*2*i) api.put("/panels/heating/"..IdPanel, panel) local IdPanel = 119 -- id from the heating Panel ---------------------------------------------------------------------------------- -- Manual mode in the heating panel with temp 18°C for 2 hour ---------------------------------------------------------------------------------- local panel = api.get("/panels/heating/" .. IdPanel) panel.properties.handTemperature = 18 panel.properties.handTimestamp = os.time() + (60*60*2*i) api.put("/panels/heating/"..IdPanel, panel) local IdPanel = 120 -- id from the heating Panel ---------------------------------------------------------------------------------- -- Manual mode in the heating panel with temp 18°C for 2 hour ---------------------------------------------------------------------------------- local panel = api.get("/panels/heating/" .. IdPanel) panel.properties.handTemperature = 18 panel.properties.handTimestamp = os.time() + (60*60*2*i) api.put("/panels/heating/"..IdPanel, panel) local IdPanel = 121 -- id from the heating Panel ---------------------------------------------------------------------------------- -- Manual mode in the heating panel with temp 18°C for 2 hour ---------------------------------------------------------------------------------- local panel = api.get("/panels/heating/" .. IdPanel) panel.properties.handTemperature = 18 panel.properties.handTimestamp = os.time() + (60*60*2*i) api.put("/panels/heating/"..IdPanel, panel) Kom gjerne med inspill og spørsmål til løsningen.1 poeng
-
Oppdatert 30.04.19 med nytt "scrape-oppsett". Oppdatert 17.03.21 med ny info om URL. Ble inspirert av @Evelensin løsning for Domoticz (https://www.hjemmeautomasjon.no/forums/topic/1353-pollenvarsel-et-powershell-script/) og gjorde tilsvarende med "Jon00 Data Scraper"-plugin: I "path" trenger du riktig URL til ditt område på begge "grabs" (må ha 2 "grabs" pga maks 5 pattern pr grab): 1. Med Chrome, gå til https://pollenkontroll.no/pollenvarsel 2. Trykk F12 og velg "Network" 3. Finn den adressen som hentes og som består av en del tall og bokstaver (f.eks https://pollenkontroll.no/api/middleware/pollen/901f3d22-b95f-4b64-a181-0b847b76b1a3?t=1615988025432) 4. Fjern "?t=xxxxxx" i URL og bruk den adressen som "Path" i ini-filen Etter å ha kjørt "scrape" en gang, slik at devicene har blitt opprettet, er det bare å opprette en range 0-5 på statusgraphics og så vil man få verdier fra 0-5 som man kan bruke i events. I forrige versjon var det et generelt varsel i tillegg, men det ser ikke ut til å finnes i kilden som brukes nå (pr 30.04.19)... Da kan du sende det generelle varslet, hvis det er varslet stor spredning av en eller flere sorter:1 poeng
-
1 poeng
-
Jeg hadde også dette problemet på 0.92.2. Måtte rulle tilbake til 0.92.1.1 poeng
-
1 poeng
-
I standard hassio for rpi finnes ikke pip. nedgradering eneste mulighet. nedgraderer burde skje på samme måte som du oppdaterer i SSH: hassio homeassistant update --version=0.92.11 poeng
-
1 poeng
-
Da har jeg 'lyttet' litt på porten min også. Aidon måler. Kjøpte disse 2: MBUS til RS232: https://shop.marcomweb.it/en/shop-online/fieldbus/meterbus-m-bus/mbus-slave-level-converter-dettagli.html RS232 til USB: https://www.kjell.com/no/produkter/data-og-nettverk/kabler-og-adaptere/usb/usb-adaptere/plexgear-adapter-usb-til-seriell-p38885#ProductDetailedInformation Koblet opp mot Ubuntu sub-os på Win10 og på en 'ekte' Ubuntu maskin. Her er kommandoene for å liste ut hva som kommer: Win10 Ubuntu (COMx=/dev&ttySx, hos meg: COM9=ttyS9) sudo chmod 666 /dev/ttyS9 sudo stty -F /dev/ttyS9 2400 cs8 raw parenb -parodd -cstopb stdbuf -o0 hexdump -v -e '/1 "%02x"' </dev/ttyS9 Ubuntu: (/dev/ttyUSB0) stty -F /dev/ttyUSB0 2400 cs8 parenb -parodd -cstopb crtscts stdbuf -o0 hexdump -v -e '/1 "%02x"' </dev/ttyUSB0 Eksempel output: (active power (Q1+Q4 uthevet) 7ea02a410883130413e6e7000f40000000000101020309060100010700ff06000021b202020f001b0d777e 7ea10b41088313fa7ce6e7000f4000000000010c020209060101000281ff0a0b4149444f4e5f5630303031020209060000600100ff0a1037333539393932393035333032343134020209060000600107ff0a0436353235020309060100010700ff06000021c202020f001b020309060100020700ff060000000002020f001b020309060100030700ff060000000002020f001d020309060100040700ff06000000fe02020f001d0203090601001f0700ff1000ef02020fff21020309060100470700ff1000fb02020fff21020309060100200700ff1208e602020fff23020309060100340700ff12090602020fff23020309060100480700ff12091e02020fff2321157e 7ea02a410883130413e6e7000f40000000000101020309060100010700ff06000021ba02020f001be1a97e 7ea02a410883130413e6e7000f40000000000101020309060100010700ff060000219702020f001b2de47e 7ea02a410883130413e6e7000f40000000000101020309060100010700ff060000218202020f001b47a17e 7ea10b41088313fa7ce6e7000f4000000000010c020209060101000281ff0a0b4149444f4e5f5630303031020209060000600100ff0a1037333539393932393035333032343134020209060000600107ff0a0436353235020309060100010700ff060000219202020f001b020309060100020700ff060000000002020f001b020309060100030700ff060000000002020f001d020309060100040700ff060000011b02020f001d0203090601001f0700ff1000ed02020fff21020309060100470700ff1000fb02020fff21020309060100200700ff1208e902020fff23020309060100340700ff12090602020fff23020309060100480700ff12091f02020fff23cc647e 7ea02a410883130413e6e7000f40000000000101020309060100010700ff060000217b02020f001b2f777e Her har jeg trykket linjeskift manuelt etter hver 0x7e, og dette er litt av problemet med binærdata. Man får aldri linjeskift og derfor må man parse dette via et program. Da er jeg klar til å interace til min Arduino. Må bare via en slik for den er 3.3V: 3.3V 5V level converter På Arduino har jeg et meget enkelt Eth interface som kun bruker DhcpChatServer. (,men med static IP) Så på Ubuntu maskinen som kjører OH2, bruker jeg bare nc (netcat): Disse går som initd services: ofile=/run/nc.log while [ 1 ]; do /bin/echo -e k | /bin/nc -q 1 192.168.1.42 23 >>$ofile done ofile=/run/nc.log stat=$(/usr/bin/stat --format=%Y $ofile) newStat=$stat echo "newStat=" $newStat while [ 1 ]; do while [ $stat -eq $newStat ]; do /bin/sleep 0.5 newStat=$(/usr/bin/stat --format=%Y $ofile) done echo 'File changed' newVal=$(/usr/bin/tail -n 1 $ofile | /usr/bin/cut -d ' ' -f 2 | /usr/bin/tr -d '\r') /usr/bin/truncate -s 0 $ofile newStat=$(/usr/bin/stat --format=%Y $ofile) stat=$newStat echo $newVal /usr/bin/curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "$newVal" "http://localhost:8080/rest/items/GTV7PowerConsumption" done DhcpChatServer får inn karakteren 'k' og svaret blir fanget opp av netcat (lytter i 1s -q 1) som lagrer i en fil. Den andre servicen sjekker hvert 500ms om filen har blitt oppdatert. Så postes resultat rett til OH2 via REST. Eksempelet sender kun en analog verdi, men det skal utvides nå. :-)1 poeng
Vinnerlisten er satt til Oslo/GMT+01:00