-
Innlegg
1 674 -
Ble med
-
Besøkte siden sist
-
Dager vunnet
100
Other groups
Sølv
SveinHa vant dagen sist 10. januar
SveinHa hadde mest likt innhold!
Hjemmeautomasjon
-
System
Annet
Nylige profilbesøk
16 381 profilvisninger
SveinHa sine prestasjoner
-
Strategi på elektro - strekke rør som tradisjonelt anlegg eller ta risiko?
SveinHa svarte på Jan Vastvedt sitt spørsmål i Nybegynner
Ikke for å være ufin men kanskje du burde finspisse automasjonene en smule? Slik jeg har det nå er et resultat av mye prøving og feiling over mange år... Som nevnt har jeg ingen manuelle brytere med et par unntak. De automatiske lysene har jeg aldri hatt behov for å overstyre. Soverommet er et slags unntak: Har HUE LED stripe plassert under sengen sammen med en HUE bevegelssensor. Ved bevegelse dimmes LED stripen opp til noe rundt 50% i løpet av 4 sekund og etter et par minutt dimmes den ned igjen i løpet av 2 minutt, det gir et veldig behagelig nattlys ved behov. Taklys er helt manuelt med litt automasjon: Trådløs bryter innenfor døren slår lyset av eller på til 1%. Automatikken ser etter 1% lysstyrke og overstyrer til 100% på dagtid og til 30% om kveld/morgen (skumringstiden). Langt trykk på bryteren setter lyset til 100% uansett. Stue er også manuelt vha et par trådløse fjernkontroller med de vanlige av/på/dim opp/dim ned funksjonene. Automatiske lys (kjøkken, gang, bad, bod o.l., altså ikke-oppholdsrom): Bevegelssensor slår lyset på 100/40/10% avhengig av dag/kveld/natt og så dimmes langsomt ned til 0%. Hvor langsomt variere med hvilket rom, kan være 2 minutt eller 20 min eller noe sånt. Stue/gang/kjøkken er i mer eller mindre åpen løsning så her dimmes kun ned til 1% når huset ikke er i nattmodus for det ser litt teit ut med bekmørke rom som viser fra stuen... De nevnte prosent dimmeverdiene kan variere mye avhengig av hvilke dimmere og/eller lyskilder, det må tas litt på gefühlen... I Node-RED ser soverombelysningen slik ut: Den lange dimmetiden viser i "show-value" noden som "transition":120. Ikke alle dimmere har denne funksjonen men HUE har den og den og den er veldig smidig, ikke i trappetrinn som en del dimmere har. -
Jeg har mer eller mindre gitt opp Frigate og ser nå ut til å havne på AgentDVR (tidligere iSpy) i stedet. Der gjenstår en del tweaking for å få objektdeteksjon slik jeg vil ha det men jeg har i alle fall fått til kamerabilder som popper opp i Node-RED og viser live video. Frigate hadde ganske forsinket video slik at når jeg kommer hjem og setter meg i sofaen så ser jeg på skjermen at jeg kommer opp trappen og går inn entredøren... og jeg har allergi mot kilometerlange yaml filer der editoren ikke peker på hvor der er feil... Pr i dag får jeg melding om bevegelse/objektdeteksjon via MQTT og da viser Node-RED Dashboard (både ver 1.0 og 2.0) kamerabilde med de 4 mest aktuelle kamera. Ser for meg å vise bare 1 kamera så lenge kun ett er i deteksjonsstatus og 4 kamera dersom der er flere. Har ikke helt funnet ut av dette i AgentDVR enda men jeg har i alle fall 8 Views tilgjengelig så regner med det skal gå fint å velge view med parameter i kommandolinjen.
-
SveinHa begynte å følge Stille dørlås , Laptop som henger i ny og ne... , Strategi på elektro - strekke rør som tradisjonelt anlegg eller ta risiko? og 4 andre
-
Siste måneden eller så har jeg opplevd noen merkelige gremlins hjemme. Jeg har jo flere NUCer og et par laptoper der det ser ut til at kun laptopene sliter av og til. Problemet er at laptopen henger seg i ny og ne, først blir muspekeren litt småtreg, virker men ikke så responsiv som den pleier og etter noen tisekunder så stopper klokken nede til høyre og responsen i hele laptopen er tilnærmet null. Noen ganger løser det seg selv etter 10+ minutt men som regel blir det restart med 5 sek på strømknappen. Det som forundrer meg noe voldsomt er at dette skjer på 2 laptoper, en HP Envy x360 med AMD Ryzen7 prosessor og en Asus X415 med Intel i7 prosessor og det skjer med både Linux Mint 21.3 og 22.0 på begge. Har ikke testet stort med Windows men noen få timer har ikke laget noe problemer i alle fall... Det er bare den ene laptopen som er i daglig bruk og den står normalt på døgnet rundt og disse hengene skjer stort sett hver dag men sjelden/aldri mer enn 2 ganger pr dag... Alle andre maskiner i nettet mitt har kablet nett og en har jeg mitt i synet alltid og den har jeg ikke merket noe heng på noen gang. Jeg synes også at det er litt merkelig at gremlins i Ubiquiti Unifi nettet skulle få laptopen til å henge såpass solid... Noen som kan ha noen anelse om hva som skjer her?
-
Da ender du nok opp med bare bluetooth men det virker jo fint det og bare du er nærme nok med telefonen. Ja, den smekker ikke i lås og Linus bare vrir på knappen på innsiden på samme måte som om du låser manuelt. Vær obs på at låsmotoren tar litt plass så jeg har måttet slipe litt av dørkarmen på et par dører...
-
Strategi på elektro - strekke rør som tradisjonelt anlegg eller ta risiko?
SveinHa svarte på Jan Vastvedt sitt spørsmål i Nybegynner
Jeg har totalrenovert huset mitt for noen år siden med bl.a. 100% nytt el.anlegg. Har ikke en eneste fysisk bryter men har et par trådløse, resten styres av bevegelsessensorer, timere o.l. Der finnes jo også enkelte trådløse brytere uten batteri som får sin energi fra knappetrykket (som jo da naturligvis er litt tyngre enn trykknapper flest). Har en slik og den har fungert nesten helt 100%.- 9 svar
-
- 1
-
Haugmange løsninger på det... Jeg har bevegelsessensorer i alle rom bortsett fra stue og soverom. Hver bevegelse setter lyset til en en forhåndsvalgt verdi og så dimmer det sakte ned til null. Stue og soverom har jeg manuell styring på med trådløse fjernkontroller, dels paret med dimmer og dels styring via Node-RED. Jeg har 3 lysmodes: Dag, kveld (som er skumringstiden både morgen og kveld) og natt. Dag setter lys til 100%, natt til 2-30% (varierer med dimmer/lyskilde hva som passer) og kveld noe midt mellom. Husmode: Dag/Natt. Dag slår på enkelte lys, slår av alarmfunksjoner. Natt låser alle dører, slår av alle lys, aktiverer alarm. Dag stopper også neddimming av lys i gang/kjøkken på 2% slik at det ikke blir helt mørkt når der er folk i huset (åpen løsning med gang/kjøkken/stue).
- 4 svar
-
- 1
-
Pynta litt på koden, bugfix... Hele greiene: [{"id":"8a9326e69a043d08","type":"delay","z":"b468e89a030cb946","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":1040,"y":840,"wires":[["143924fdaab67cff","cb7159478bedaaf1"]]},{"id":"178c4f3e51c168f5","type":"function","z":"b468e89a030cb946","name":"Refresh Dashboard items","func":"// Reset delay\nvar m1 = {reset:true};\nreturn [[m1,msg]];","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":850,"y":840,"wires":[["8a9326e69a043d08"]]},{"id":"19314273e31cb034","type":"group","z":"b468e89a030cb946","name":"Strømpris chart","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["d45591226bb68efc","1366923163fe3133","cb7159478bedaaf1","08a9ac90d5a7da54","b6d5de17768f6f96","1a444e41f8359882","cd89fee3a4c38933","d6322f9831065a77"],"x":14,"y":549,"w":1212,"h":112},{"id":"d45591226bb68efc","type":"ui_chart","z":"b468e89a030cb946","g":"19314273e31cb034","name":"","group":"a51799506567a0f3","order":1,"width":"0","height":"0","label":"Strømplan 24/52 timer.","chartType":"line","legend":"true","xformat":"dd HH","interpolate":"step","nodata":"wait","dot":false,"ymin":"","ymax":"","removeOlder":"48","removeOlderPoints":"100","removeOlderUnit":"3600","cutout":0,"useOneColor":true,"useUTC":false,"colors":["#ff7f0e","#62a0ea","#edd400","#f7f7f7","#98df8a","#62a0ea","#813d9c","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":600,"y":590,"wires":[["b6089f059556a469","45a6be97437e5578","143924fdaab67cff","1a444e41f8359882","d6322f9831065a77"]]},{"id":"1366923163fe3133","type":"inject","z":"b468e89a030cb946","g":"19314273e31cb034","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[]","payloadType":"json","x":410,"y":620,"wires":[["d45591226bb68efc"]]},{"id":"cb7159478bedaaf1","type":"function","z":"b468e89a030cb946","g":"19314273e31cb034","name":"Prepare for 72h chart","func":"let markPlanPer = flow.get(\"prisMax\") + 0.2 || 1.5; // Høyde på markør for planperiode og inneværende time\nlet markSelHours = markPlanPer * 0.08; // Høyde på markør for planperiode og inneværende time\nlet markCurrentHour = markPlanPer * 0.98;\n\nlet prisMax = -99;\nlet prisMin = 99;\nlet prisSnitt = 0;\nlet dt = new Date();\n//Ny periode kl 22:00: Flytt dato til over midnatt for å sette periodestart og slutt.\nif (dt.getHours() >= 22) dt = new Date(Number(dt) + 4*60*60*1000);\n\nlet dt2 = Number(new Date(dt.getFullYear() + \".\" + (dt.getMonth()+1) + \".\" + dt.getDate() + \" 00:00\"));\nlet dtPerStart = dt2 - 2*60*60*1000;\nlet dtPerEnd = dt2 + 22*60*60*1000;\nlet exists = false;\nlet exists2 = false;\n\n// Resett dt til riktig tid.\ndt = new Date();\n\n\ndt.setDate(dt.getDate());\nlet currHour = dt.getHours();\nlet currDate = dt.getDate();\nlet currMonth = dt.getMonth() + 1; // Mnd er 0-11 i utgangspunktet\nlet currYear = dt.getFullYear();\nlet currPlanPerStart = new Date()\n\nlet timerValgtLav = []\ntimerValgtLav = flow.get(\"timerValgtLav\");\nlet timerValgtLavLav = []\ntimerValgtLavLav = flow.get(\"timerValgtLavLav\");\nlet timerValgt2Lav = []\ntimerValgt2Lav = flow.get(\"timerValgt2Lav\");\nlet timerValgt2LavLav = []\ntimerValgt2LavLav = flow.get(\"timerValgt2LavLav\");\n\nlet pdt=0; //PrisDenneTime for kalkulasjoner\nlet msg2 = [[],[],[],[]];\nmsg2.payload = [{ \"series\": [\"Jonaspris\", \"\", \"Råpris+nettleie og avgifter\",\"Råpris\",\"Nettleie\",\"\",\"Lave priser\",\"LavLave priser\"], \"data\": [[],[],[],[],[],[],[],[]], \"labels\": []}];\nlet pris72 = flow.get(\"Prisdata72\");\nlet i = 0;\n\nif (pris72 != null) {\n for (i = 0; i < pris72.length; i++){\n pdt = Number(pris72[i].pris);\n var priceHourTimestamp = new Date(pris72[i].ts);//new Date(pris48[i].timestamp);\n msg2.payload[0].data[0][i] = {\"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i].jonaspris).toFixed(2)};\n msg2.payload[0].data[2][i] = {\"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i].pristot).toFixed(2)};\n msg2.payload[0].data[3][i] = {\"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i].pris).toFixed(2)};\n msg2.payload[0].data[4][i] = {\"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i].nettleie).toFixed(2)};\n\n // Add \"Now\" marker\n if (Number(currDate) === Number(priceHourTimestamp.getDate() ) && Number(currHour) === Number(priceHourTimestamp.getHours())){\n msg2.payload[0].data[1][i] = {\"x\": Number(priceHourTimestamp), \"y\": markCurrentHour};}\n else{\n msg2.payload[0].data[1][i] = {\"x\": Number(priceHourTimestamp), \"y\": 0};}\n \n // Add \"Planning period\" marker\n if (pris72[i].ts >= dtPerStart && pris72[i].ts < dtPerEnd){\n msg2.payload[0].data[5][i] = {\"x\": Number(priceHourTimestamp) + 1, \"y\": markPlanPer};\n // Finn max, min og gjennomsnittspris\n if (Number(pris72[i].jonaspris) < prisMin) prisMin = Number(pris72[i].jonaspris);\n if (Number(pris72[i].jonaspris) > prisMax) prisMax = Number(pris72[i].jonaspris);\n prisSnitt += Number(pris72[i].jonaspris);\n }\n else{\n msg2.payload[0].data[5][i] = {\"x\": Number(priceHourTimestamp) + 2, \"y\": 0};\n }\n\n // Add \"Selected low hours\" marker\n let phts = Number(new Date(priceHourTimestamp));\n exists = timerValgtLav.some(c => c.ts === phts);\n exists2 = timerValgt2Lav.some(c => c.ts === phts);\n if (exists || exists2){\n msg2.payload[0].data[6][i] = {\"x\": Number(priceHourTimestamp), \"y\": markSelHours};}\n else{\n msg2.payload[0].data[6][i] = {\"x\": Number(priceHourTimestamp), \"y\": 0};\n }\n\n // Add \"Selected LowLow hours\" marker\n phts = Number(new Date(priceHourTimestamp));\n exists = timerValgtLavLav.some(c => c.ts === phts);\n exists2 = timerValgt2LavLav.some(c => c.ts === phts);\n if (exists || exists2){\n msg2.payload[0].data[7][i] = {\"x\": Number(priceHourTimestamp), \"y\": markSelHours*.6};}\n else{\n msg2.payload[0].data[7][i] = {\"x\": Number(priceHourTimestamp), \"y\": 0};\n }\n \n\n }\n\n /*\n // Legg til time # 73 for bedre lesbarhet\n priceHourTimestamp = Number(priceHourTimestamp) + (1000 * 60 * 60)\n //node.warn(Number(priceHourTimestamp));\n msg2.payload[0].data[0][i] = { \"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i-1].jonaspris).toFixed(2)};\n msg2.payload[0].data[1][i] = { \"x\": Number(priceHourTimestamp), \"y\": 0};\n msg2.payload[0].data[2][i] = { \"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i-1].pristot).toFixed(2)};\n msg2.payload[0].data[3][i] = { \"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i-1].pris).toFixed(2)};\n msg2.payload[0].data[4][i] = { \"x\": Number(priceHourTimestamp), \"y\": Number(pris72[i-1].nettleie).toFixed(2)};\n msg2.payload[0].data[5][i] = { \"x\": Number(priceHourTimestamp), \"y\": 0 };\n msg2.payload[0].data[6][i] = { \"x\": Number(priceHourTimestamp), \"y\": 0 };\n msg2.payload[0].data[7][i] = { \"x\": Number(priceHourTimestamp), \"y\": 0 };\n */\n}\n\nprisSnitt = prisSnitt/24;\nflow.set(\"prisMin\", prisMin);\nflow.set(\"prisMax\", prisMax);\nflow.set(\"prisSnitt\", prisSnitt);\n\n// Fjern unødvendige/gamle data fra chart\nlet msg3 = [[],[]]\nmsg3.payload = msg2.payload;\nfor (i = 0; i < 20; i++){\n for (let j = 0; j<=7;j++){\n msg3.payload[0].data[j].shift();\n }\n}\n\nmsg.payload = msg3.payload;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":590,"wires":[["d45591226bb68efc"]]},{"id":"08a9ac90d5a7da54","type":"inject","z":"b468e89a030cb946","g":"19314273e31cb034","name":"Refresh charts","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"0 0-23 * * *","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":590,"wires":[["cb7159478bedaaf1"]]},{"id":"b6d5de17768f6f96","type":"ui_text","z":"b468e89a030cb946","g":"19314273e31cb034","group":"e9e1f6f856a0ef75","order":23,"width":0,"height":0,"name":"","label":"Siste prisdata fra: ","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1110,"y":590,"wires":[]},{"id":"1a444e41f8359882","type":"change","z":"b468e89a030cb946","g":"19314273e31cb034","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"PrisKilde","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":590,"wires":[["b6d5de17768f6f96"]]},{"id":"cd89fee3a4c38933","type":"ui_text","z":"b468e89a030cb946","g":"19314273e31cb034","group":"e9e1f6f856a0ef75","order":23,"width":0,"height":0,"name":"","label":"Prisdata hentet:","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1090,"y":620,"wires":[]},{"id":"d6322f9831065a77","type":"date-converter","z":"b468e89a030cb946","g":"19314273e31cb034","name":"","topic":"","input":"PrisTS","inputType":"flow","inTz":"","adjAmount":0,"adjType":"days","adjDir":"add","format":"","locale":"nb-NO","output":"payload","outputType":"msg","outTz":"ETC/GMT+2","x":850,"y":620,"wires":[["cd89fee3a4c38933"],[]]},{"id":"a51799506567a0f3","type":"ui_group","name":"Charts","tab":"a73dc047b0befb9e","order":3,"disp":false,"width":"30","collapse":false,"className":""},{"id":"e9e1f6f856a0ef75","type":"ui_group","name":"Tabeller","tab":"a73dc047b0befb9e","order":2,"disp":false,"width":"10","collapse":false,"className":""},{"id":"a73dc047b0befb9e","type":"ui_tab","name":"Prisgraf v2","icon":"euro_symbol","order":6,"disabled":false,"hidden":false},{"id":"bb1f6387ef45151f","type":"group","z":"b468e89a030cb946","name":"Tabell laveste timer for batterilading","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["3ea6f148d6030a9f","45a6be97437e5578","f944761036305ed5","7cc2fd4a050bccdd","3f26c24b2f14e081","60c75de6263a8794","50456aa1e7ddea01"],"x":14,"y":679,"w":1042,"h":142},{"id":"3ea6f148d6030a9f","type":"ui_table","z":"b468e89a030cb946","g":"bb1f6387ef45151f","group":"e9e1f6f856a0ef75","name":"Laveste LavLav priser tbl","order":9,"width":"5","height":"10","columns":[{"field":"timestamp","title":"Time","width":"65%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"jonaspris","title":"Pris","width":"28%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":0,"cts":false,"x":920,"y":780,"wires":[]},{"id":"45a6be97437e5578","type":"function","z":"b468e89a030cb946","g":"bb1f6387ef45151f","name":"Hent valgte pristimer","func":"let liste2 = flow.get(\"liste2\") || false // Vis kun resttimer i listbox Lav og LavLav\nlet pdLow = flow.get(\"lavpris\");\nlet pdLow2 = flow.get(\"lavpris2\");\nlet nmax = flow.get(\"AntLavLavTimer\");\nlet pdSelected = []\nlet pdSelected2 = []\nlet pdSelDisp = []\nlet i = 0;\n// Klon objekt for å bryte forbindelsen til opprinnelige data for ellers vil opprinnelige data endres\nlet newpdLow = RED.util.cloneMessage(pdLow); \nlet newpdLow2 = RED.util.cloneMessage(pdLow2); \nlet dt = new Date();\n\n\nfor (i = 0; i < nmax;i++){\n pdSelected.push(newpdLow[i]);\n pdSelected2.push(newpdLow2[i]);\n}\nflow.set(\"timerValgtLavLav\", pdSelected);\nflow.set(\"timerValgt2LavLav\", pdSelected2);\n\n// Fjern foregående timer fra tabell dersom valgt\nfor (i = 0; i < nmax;i++){\n if (liste2){\n if (pdLow[i].ts >= (Number(dt) - 60*60*1000)){\n pdSelDisp.push(newpdLow[i]);\n }\n }else{\n pdSelDisp.push(newpdLow[i]);\n }\n//node.warn(pdLow[i].ts);\n//node.warn(Number(dt));\n\n}\n\n// Pynt dataene for tabellvisning\nfor (i = 0; i < pdSelDisp.length;i++){\n pdSelDisp[i].timestamp = new Date(pdSelDisp[i].ts).toLocaleString(\"nb-NO\").slice(0,-3) ;\n pdSelDisp[i].jonaspris = parseFloat(pdSelDisp[i].jonaspris).toFixed(2);\n}\n//node.warn(pdSelDisp),\nmsg.payload = pdSelDisp;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":780,"wires":[["60c75de6263a8794"]]},{"id":"f944761036305ed5","type":"ui_numeric","z":"b468e89a030cb946","g":"bb1f6387ef45151f","name":"","label":"Ant LavLav timer","tooltip":"Velg antall laveste pristimer for batterilading","group":"e9e1f6f856a0ef75","order":5,"width":"5","height":"1","wrap":false,"passthru":false,"topic":"topic","topicType":"msg","format":"{{value}}","min":"0","max":"24","step":1,"className":"","x":330,"y":720,"wires":[["3f26c24b2f14e081"]]},{"id":"7cc2fd4a050bccdd","type":"change","z":"b468e89a030cb946","g":"bb1f6387ef45151f","name":"get LavLav#","rules":[{"t":"set","p":"payload","pt":"msg","to":"AntLavLavTimer","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":110,"y":720,"wires":[["f944761036305ed5"]]},{"id":"3f26c24b2f14e081","type":"change","z":"b468e89a030cb946","g":"bb1f6387ef45151f","name":"set LavLav#","rules":[{"t":"set","p":"AntLavLavTimer","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":720,"wires":[["7cc2fd4a050bccdd","45a6be97437e5578"]]},{"id":"60c75de6263a8794","type":"sort","z":"b468e89a030cb946","g":"bb1f6387ef45151f","name":"","order":"ascending","as_num":false,"target":"payload","targetType":"msg","msgKey":"timestamp","msgKeyType":"jsonata","seqKey":"payload","seqKeyType":"msg","x":650,"y":780,"wires":[["3ea6f148d6030a9f","178c4f3e51c168f5"]]},{"id":"50456aa1e7ddea01","type":"inject","z":"b468e89a030cb946","g":"bb1f6387ef45151f","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":true,"onceDelay":"10","topic":"","payload":"","payloadType":"date","x":130,"y":780,"wires":[["7cc2fd4a050bccdd","4bcea84cb9e1dcd0"]]},{"id":"a6bf2d9c44840471","type":"group","z":"b468e89a030cb946","name":"Sett global.lavPris & lavLavPris for bruk over alt.","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["c37c0f4b7371feab","143924fdaab67cff","6782814db0d4c03a","f4934fafce556690","d4e405705b11b8ea","32bbe8db8e28a1fb"],"x":14,"y":1009,"w":772,"h":172},{"id":"c37c0f4b7371feab","type":"cronplus","z":"b468e89a030cb946","g":"a6bf2d9c44840471","name":"","outputField":"payload","timeZone":"","storeName":"","commandResponseMsgOutput":"output1","defaultLocation":"","defaultLocationType":"default","outputs":1,"options":[{"name":"schedule1","topic":"topic1","payloadType":"default","payload":"","expressionType":"cron","expression":"0 0 * * * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":120,"y":1080,"wires":[["143924fdaab67cff"]]},{"id":"143924fdaab67cff","type":"function","z":"b468e89a030cb946","g":"a6bf2d9c44840471","name":"Set global.lavPris & global.lavLavPris","func":"let msg2 = {}\nlet msg3 = {}\nlet msg4 = {}\nlet timerValgtLav = []\ntimerValgtLav = flow.get(\"timerValgtLav\");\nlet phts = new Date();\nlet phtsFormatted = phts.getFullYear() + \"-\" + (\"00\" + (phts.getMonth() + 1)).slice(-2) + \"-\" + (\"00\" + phts.getDate()).slice(-2) + \" \" + (\"00\" + phts.getHours()).slice(-2) + \":\" + (\"00\" + phts.getMinutes()).slice(-2);\nphtsFormatted = phtsFormatted.slice(0,-2) + \"00\";\nlet phts2 = Number(new Date(phtsFormatted));\nlet exists = timerValgtLav.some(c => c.ts === Number(phts2)); //\"2024-11-06 02:00\")\nlet autoU = flow.get(\"AutoUsw\") || false\nlet autoUC = flow.get(\"AutoUCsw\") || false\n\n//node.warn(exists);\n\nif (!autoU) exists = false;\nglobal.set(\"lavPris\", exists);\nif (exists)\n msg.payload = \"<font color=lime>Ok\";\nelse\n msg.payload = \"<font color=red>-----\";\n\n\nlet timerValgtLavLav = []\ntimerValgtLavLav = flow.get(\"timerValgtLavLav\");\nphts = new Date();\nphtsFormatted = phts.getFullYear() + \"-\" + (\"00\" + (phts.getMonth() + 1)).slice(-2) + \"-\" + (\"00\" + phts.getDate()).slice(-2) + \" \" + (\"00\" + phts.getHours()).slice(-2) + \":\" + (\"00\" + phts.getMinutes()).slice(-2);\nphtsFormatted = phtsFormatted.slice(0, -2) + \"00\";\nphts2 = Number(new Date(phtsFormatted));\nexists = timerValgtLavLav.some(c => c.ts === phts2); //\"2024-11-06 02:00\")\n//node.warn(exists);\n\nif (!autoUC) exists = false;\nglobal.set(\"lavLavPris\", exists);\nif (exists)\n msg2.payload = \"<font color=lime>Ok\";\nelse\n msg2.payload = \"<font color=red>-----\";\n\n// Send prisdata til \"Solar\" for bruk i headline\nmsg4.topic = \"prisMin\";\nmsg4.payload = flow.get(\"prisMin\").toFixed(2);\nnode.send([null,null,null,msg4]);\nmsg4.topic = \"prisSnitt\";\nmsg4.payload = flow.get(\"prisSnitt\").toFixed(2);\nnode.send([null, null, null, msg4]);\nmsg4.topic = \"prisMax\";\nmsg4.payload = flow.get(\"prisMax\").toFixed(2);\nnode.send([null, null, null, msg4]);\n\nmsg3.payload = \"<font size=5 color=orange>Min:\" + flow.get(\"prisMin\").toFixed(2) + \"/sn:\" + flow.get(\"prisSnitt\").toFixed(2) + \"/max:\" + flow.get(\"prisMax\").toFixed(2);\nreturn [msg,msg2,msg3];","outputs":4,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":1070,"wires":[["6782814db0d4c03a"],["f4934fafce556690"],["d4e405705b11b8ea"],["32bbe8db8e28a1fb"]]},{"id":"6782814db0d4c03a","type":"ui_text","z":"b468e89a030cb946","g":"a6bf2d9c44840471","group":"e9e1f6f856a0ef75","order":6,"width":"5","height":"1","name":"Vis Lav nå","label":"","format":"Nå: <font size = 6>{{msg.payload}}","layout":"row-left","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":670,"y":1050,"wires":[]},{"id":"f4934fafce556690","type":"ui_text","z":"b468e89a030cb946","g":"a6bf2d9c44840471","group":"e9e1f6f856a0ef75","order":7,"width":"5","height":"1","name":"Vis LavLav nå","label":"","format":"Nå: <font size = 6>{{msg.payload}}","layout":"row-left","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":680,"y":1080,"wires":[]},{"id":"d4e405705b11b8ea","type":"ui_text","z":"b468e89a030cb946","g":"a6bf2d9c44840471","group":"e9e1f6f856a0ef75","order":10,"width":0,"height":0,"name":"MinSnMax","label":"","format":"{{msg.payload}}","layout":"row-center","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":670,"y":1110,"wires":[]},{"id":"32bbe8db8e28a1fb","type":"link out","z":"b468e89a030cb946","g":"a6bf2d9c44840471","name":"Strompris_Out","mode":"link","links":["c6012e7bbe73f35f"],"x":615,"y":1140,"wires":[]},{"id":"5d782f6a3df9efea","type":"group","z":"b468e89a030cb946","name":"Tabell lave timer for direkte forbruk","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["9486fc1a301c466d","b6089f059556a469","52e50cf1d1089267","4bcea84cb9e1dcd0","031c1a6834f7945d","7bf74d11170a6864"],"x":14,"y":859,"w":1022,"h":142},{"id":"9486fc1a301c466d","type":"ui_table","z":"b468e89a030cb946","g":"5d782f6a3df9efea","group":"e9e1f6f856a0ef75","name":"Laveste Lav priser tbl","order":8,"width":"5","height":"10","columns":[{"field":"timestamp","title":"Time","width":"65%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"jonaspris","title":"Pris","width":"28%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":0,"cts":false,"x":910,"y":960,"wires":[]},{"id":"b6089f059556a469","type":"function","z":"b468e89a030cb946","g":"5d782f6a3df9efea","name":"Hent valgte pristimer","func":"let liste2 = flow.get(\"liste2\") || false // Vis kun resttimer i listbox Lav og LavLav\nlet pdLow = flow.get(\"lavpris\");\nlet pdLow2 = flow.get(\"lavpris2\");\nlet nmax = flow.get(\"AntLavTimer\");\nlet pdSelected = []\nlet pdSelected2 = []\nlet pdSelDisp = []\nlet i = 0;\n// Klon objekt for å bryte forbindelsen til opprinnelige data for ellers vil opprinnelige data endres\nlet newpdLow = RED.util.cloneMessage(pdLow);\nlet newpdLow2 = RED.util.cloneMessage(pdLow2);\n\nlet dt = new Date();\n\nfor (i = 0; i < nmax;i++){\n pdSelected.push(newpdLow[i]);\n pdSelected2.push(newpdLow2[i]);\n}\n\nflow.set(\"timerValgtLav\", pdSelected);\nflow.set(\"timerValgt2Lav\", pdSelected2);\n\n\n// Fjern foregående timer fra tabell dersom valgt\nfor (i = 0; i < nmax;i++){\n if (liste2){\n if (pdLow[i].ts >= (Number(dt) - 60*60*1000)){\n pdSelDisp.push(newpdLow[i]);\n }\n }else{\n pdSelDisp.push(newpdLow[i]);\n }\n//node.warn(pdLow[i].ts);\n//node.warn(Number(dt));\n\n}\n\n// Pynt dataene for tabellvisning\nfor (i = 0; i < pdSelDisp.length;i++){\n pdSelDisp[i].timestamp = new Date(pdSelDisp[i].ts).toLocaleString(\"nb-NO\").slice(0,-3) ;\n pdSelDisp[i].jonaspris = parseFloat(pdSelDisp[i].jonaspris).toFixed(2);\n}\n//node.warn(pdSelDisp),\nmsg.payload = pdSelDisp;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":960,"wires":[["7bf74d11170a6864"]]},{"id":"52e50cf1d1089267","type":"ui_numeric","z":"b468e89a030cb946","g":"5d782f6a3df9efea","name":"","label":"Ant lave timer","tooltip":"Velg antall lavpristimer for direkte forbruk","group":"e9e1f6f856a0ef75","order":4,"width":"5","height":"1","wrap":false,"passthru":false,"topic":"topic","topicType":"msg","format":"{{value}}","min":"0","max":"24","step":1,"className":"","x":320,"y":900,"wires":[["031c1a6834f7945d"]]},{"id":"4bcea84cb9e1dcd0","type":"change","z":"b468e89a030cb946","g":"5d782f6a3df9efea","name":"get Lav#","rules":[{"t":"set","p":"payload","pt":"msg","to":"AntLavTimer","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":100,"y":900,"wires":[["52e50cf1d1089267"]]},{"id":"031c1a6834f7945d","type":"change","z":"b468e89a030cb946","g":"5d782f6a3df9efea","name":"set Lav#","rules":[{"t":"set","p":"AntLavTimer","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":900,"wires":[["4bcea84cb9e1dcd0","b6089f059556a469"]]},{"id":"7bf74d11170a6864","type":"sort","z":"b468e89a030cb946","g":"5d782f6a3df9efea","name":"","order":"ascending","as_num":false,"target":"payload","targetType":"msg","msgKey":"timestamp","msgKeyType":"jsonata","seqKey":"payload","seqKeyType":"msg","x":650,"y":960,"wires":[["9486fc1a301c466d","178c4f3e51c168f5"]]},{"id":"f3eadd1725385808","type":"group","z":"b468e89a030cb946","name":"Innhenting og behandling av strømpriser.","style":{"label":true,"color":"#000000"},"nodes":["bed0051986a10b75","a14d52fac2cf7941","4ce0f27b155c6831","eecf1a11e64a8746"],"x":8,"y":13,"w":1104,"h":524},{"id":"bed0051986a10b75","type":"group","z":"b468e89a030cb946","g":"f3eadd1725385808","name":"Sorter priser etter laveste pris i tidsrommet kl 22:00-22:00","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["f4c0539b6cc55b55","0a56154a01aa97c9","eda587539ada5352","36db9c6b1167cf77","80eecffa2b029747","1525ec10ad402016","20507782eea7238f"],"x":524,"y":159,"w":562,"h":172},{"id":"f4c0539b6cc55b55","type":"inject","z":"b468e89a030cb946","g":"bed0051986a10b75","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 22 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":640,"y":290,"wires":[["0a56154a01aa97c9"]]},{"id":"0a56154a01aa97c9","type":"function","z":"b468e89a030cb946","g":"bed0051986a10b75","name":"Velg tidsperiode","func":"let pd72 = flow.get(\"Prisdata72\") || []\nlet lowprice = [] // Array med prisdata, sorteres stigende og lagres i etterfølgende noder\nlet lowprice2 = [] // Samme som ovenforstående men for forvarsel til neste planperiode\nlet i = 0;\nlet msg2 = {}\n\nlet dt3 = new Date();\n\nif (pd72.length == 72) { // Enkel sjekk at fullt datasett er tilgjengelig\n if (dt3.getHours() < 22){ // klokken er mindre enn 22\n for (i = 22; i <= 45; i++){ // Plukk ut aktuell tidsperiode\n //node.warn(pd72[i]);\n lowprice.push(pd72[i]);\n lowprice2.push(pd72[i+24]);\n }\n }\n else{ // klokken er 22 eller mer\n for (i = 46; i < 70; i++){ // Plukk ut aktuell tidsperiode fra kl 22:00 og utover til kl 21:00 i morgen\n lowprice.push(pd72[i]);\n lowprice2.push(pd72[i]);\n }\n }\n}\nmsg.payload = lowprice;\nmsg2.payload = lowprice2;\nreturn [msg,msg2]\n\n\n","outputs":2,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":250,"wires":[["eda587539ada5352"],["80eecffa2b029747"]]},{"id":"eda587539ada5352","type":"sort","z":"b468e89a030cb946","g":"bed0051986a10b75","name":"","order":"ascending","as_num":true,"target":"payload","targetType":"msg","msgKey":"jonaspris","msgKeyType":"jsonata","seqKey":"payload","seqKeyType":"msg","x":820,"y":250,"wires":[["36db9c6b1167cf77"]]},{"id":"36db9c6b1167cf77","type":"change","z":"b468e89a030cb946","g":"bed0051986a10b75","name":"","rules":[{"t":"set","p":"lavpris","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":250,"wires":[["45a6be97437e5578","b6089f059556a469"]]},{"id":"80eecffa2b029747","type":"sort","z":"b468e89a030cb946","g":"bed0051986a10b75","name":"","order":"ascending","as_num":true,"target":"payload","targetType":"msg","msgKey":"jonaspris","msgKeyType":"jsonata","seqKey":"payload","seqKeyType":"msg","x":820,"y":290,"wires":[["1525ec10ad402016"]]},{"id":"1525ec10ad402016","type":"change","z":"b468e89a030cb946","g":"bed0051986a10b75","name":"","rules":[{"t":"set","p":"lavpris2","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":290,"wires":[[]]},{"id":"20507782eea7238f","type":"function","z":"b468e89a030cb946","g":"bed0051986a10b75","name":"Fyll inn pris på riktig plass i Prisdata72","func":"let pd72 = flow.get(\"Prisdata72\") || []\nlet dt = new Date();\n// Offset to prev midnight\nlet dt2 = Number(new Date(dt.getFullYear() + \".\" + (dt.getMonth()+1) + \".\" + dt.getDate() + \" 00:00\"));\n\n// Opprett flow.Prisdata72 om den ikke eksisterer\nif (pd72.length < 71){\n for (let i = 0;i < 72;i++) pd72.push([\"-\"]);\n flow.set(\"Prisdata72\", pd72);}\n\n// Sjekk at data er leselige\nif (msg.payload[0].ts != null){\n let msgStartTs = msg.payload[0].ts - dt2;\n // Fyll inn prisdata i riktig tredjedel av Prisdata72\n if (msgStartTs < 0){ // I går ------------------------------------------------\n node.warn(\"<0 Prisdata for i går mottatt\");\n for (let i = 0;i <= 23;i++){\n pd72[i] = msg.payload[i];}}\n if (msgStartTs == 0){ // I dag ------------------------------------------------\n node.warn(\"0 Prisdata for i dag mottatt\");\n for (let i = 0;i <= 23;i++){\n pd72[i+24] = msg.payload[i];}}\n if (msgStartTs > 0){ // I morgen ------------------------------------------------\n node.warn(\">0 Prisdata for i morgen mottatt\");\n // Hvis data 48-71 er for i dag: Skift array 24 plasser tilbake\n if ((pd72[48].ts - dt2) == 0){\n for (let i = 0;i <= 47; i++){\n pd72[i] = pd72[i+24];}\n }\n // ...og så legg inn morgendagens data\n for (let i = 0;i <= 23;i++){\n pd72[i+48] = msg.payload[i];}}\n}else{\n node.warn(\"Strømdata ikke tilgjengelige...\")}\n\n// Marker at prisdata for i morgen er ankommet.\nif ((pd72[48].ts - dt2) == 86400000){\n flow.set(\"pdMorgenOk\", true);}\nelse{\n flow.set(\"pdMorgenOk\", false);}\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":200,"wires":[["0a56154a01aa97c9"]]},{"id":"a14d52fac2cf7941","type":"group","z":"b468e89a030cb946","g":"f3eadd1725385808","name":"Nettleie inkl alle avgifter dag: nld, natt og helg: nlnh. Endres manuelt her ved behov.","style":{"fill":"#92d04f","label":true,"color":"#000000"},"nodes":["599d5c07932ddd54","7aee1a918032bc99"],"x":524,"y":49,"w":562,"h":82},{"id":"599d5c07932ddd54","type":"inject","z":"b468e89a030cb946","g":"a14d52fac2cf7941","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"00 00 * * *","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":640,"y":90,"wires":[["7aee1a918032bc99"]]},{"id":"7aee1a918032bc99","type":"function","z":"b468e89a030cb946","g":"a14d52fac2cf7941","name":"Lagre nettleiesatser med starttidspunkt","func":"let nld = 0.5; // Nettleie dag\nlet nlnh = 0.4; // Nettleie natt/helg\nlet dat = new Date();\nlet nl = []\nlet i = 0;\n\n// Legg inn framtidige nettleiebeløp med starttidspunkt\nnl.push({\"startTS\": Number(new Date(\"01-01-2020 00:00:00\")),\n \"d\": 0.4849,\n \"nh\": 0.3849});\nnl.push({\"startTS\": Number(new Date(\"2025-04-01 00:00:00\")),\n \"d\": 0.5741,\n \"nh\": 0.4741});\n//node.warn(nl);\n\n// Plukk ut aktuell nettleie fra array nl\nfor (i = 0; i < nl.length; i++)\n{\n if (Number(dat) >= nl[i].startTS) {\n nld = nl[i].d;\n nlnh = nl[i].nh;\n }\n}\n//Lagre aktuell nettleie i flow\nflow.set(\"nld\", nld);\nflow.set(\"nlnh\", nlnh);","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":90,"wires":[[]]},{"id":"4ce0f27b155c6831","type":"group","z":"b468e89a030cb946","g":"f3eadd1725385808","name":"Opprett flow.Prisdata72","style":{"fill":"#c8e7a7","label":true,"color":"#000000"},"nodes":["d51b8abd1f8b0102","06b3fdadafe92af4","d68c7c64b4396e88","ba37809882e5a246","845af2cac241faae","c70f71298308d769","467fbafacd7cb566","ca12d21f48efe6f4"],"x":34,"y":39,"w":472,"h":292},{"id":"289686ae32e9ac0c","type":"subflow","name":"Konv til eget format m nettleie og sst","info":"","category":"","in":[{"x":60,"y":70,"wires":[{"id":"4ab1c86d5f9c7f0a"}]}],"out":[{"x":640,"y":70,"wires":[{"id":"4ab1c86d5f9c7f0a","port":0}]}],"env":[],"meta":{},"color":"#DDAA99"},{"id":"4ab1c86d5f9c7f0a","type":"function","z":"289686ae32e9ac0c","name":"Konverter til kompakt format med nettleie o.l.","func":"/* msg.payload må inneholde array med 24 timer a \"time_start\" og \"NOK_per_kWh\"\nHer legges på nettleie og avgifter her. Resultatet blir:\n.ts Timestamp (millisekund siden 01.01.1970) hentet fra starttidspunkt for strømprisen\n.pris Råpris uten avgifter o.l.\n.pristot Strømpris inkl avgifter og nettleie\n.jonaspris Strømpris inkl avgifter og nettleie minus strømstøtte\n.nettleie\n\[email protected]\n*/\nlet ny = []\nlet msg2 = {}\nlet nld = flow.get(\"$parent.nld\") || 0.7\nlet nlnh = flow.get(\"$parent.nlnh\") || 0.6\nlet pristot = 0;\nlet nl = 0;\nlet innslagSST = 0.75; // Innslagspunkt for strømstøtte\n\n// Ignorer hvis array lengde er ulik 24\nif (msg.payload.length == 24){\n\nfor (var i = 0; i < msg.payload.length; i++ ){\n // Legg til Jonaspris (strømpris + nettleie + forbruksavgift + Enovastøtte med verdier fra flow)\n let dato = new Date(msg.payload[i].time_start);\n let ukedag = (dato.getDay()+6)%7; // Endre ukedag fra søndag=0 til mandag = 0\n let time = dato.getHours();\n let raapris = msg.payload[i].NOK_per_kWh;\n let jonaspris = raapris;\n if (raapris > innslagSST) jonaspris = innslagSST + (raapris - innslagSST) * 0.1; // Beregn strømstøtte\n \n // Beregn nettleie\n if (ukedag >= 5 || time < 6 || time >= 22){\n pristot = raapris * 1.25 + nlnh;\n jonaspris = jonaspris * 1.25 + nlnh;\n nl = nlnh;\n }\n else {\n pristot = raapris * 1.25 + nld;\n jonaspris = jonaspris * 1.25 + nld;\n nl = nld;\n } \n let ts = Number(new Date(msg.payload[i].time_start));\n ny.push({ \"ts\": ts, \"pris\": msg.payload[i].NOK_per_kWh, \"pristot\": pristot, \"jonaspris\": jonaspris, \"nettleie\": nl });\n}\nmsg2.payload = ny;\nreturn msg2;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":70,"wires":[[]]},{"id":"d51b8abd1f8b0102","type":"http request","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"Prisdata fra hvakosterstrømmen.no","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":220,"y":210,"wires":[["d68c7c64b4396e88"]]},{"id":"06b3fdadafe92af4","type":"function","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"set url i morgen","func":"var msg2 = {};\n\nvar d2 = new Date();\nd2.setDate(d2.getDate() + 1);\nvar nextYear = d2.getFullYear();\nvar nextMonth = (\"00\" + (d2.getMonth() + 1)).slice(-2);\nvar nextDate = (\"00\" + d2.getDate()).slice(-2);\nvar url2 = \"https://www.hvakosterstrommen.no/api/v1/prices/\" + nextYear + \"/\" + nextMonth + \"-\" + nextDate + \"_NO2.json\";\n//url2 = \"https://www.hvakosterstrommen.no/api/v1/prices/\" + nextYear + \"/\" + nextMonth + \"-\" + \"02\" + \"_NO2.json\";\n//node.warn(nextYear + \" \" + nextMonth + \" \" + nextDate);\nmsg2.url = url2;\n//console.log(url);\n//console.log(url2);\n\nreturn msg2;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":160,"y":170,"wires":[["d51b8abd1f8b0102"]]},{"id":"d68c7c64b4396e88","type":"subflow:289686ae32e9ac0c","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"","x":230,"y":250,"wires":[["467fbafacd7cb566"]]},{"id":"ba37809882e5a246","type":"inject","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"13:02","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"02 13 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":80,"wires":[["ca12d21f48efe6f4"]]},{"id":"845af2cac241faae","type":"inject","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"hver 5 min","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"*/5 13-21 * * *","once":false,"onceDelay":0.1,"topic":"xx","payload":"","payloadType":"date","x":150,"y":120,"wires":[["c70f71298308d769"]]},{"id":"c70f71298308d769","type":"function","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"Data OK?","func":"// Hvis morgendagens prisdata er ankommet, avslutt her på utgang 1\nlet pdMOk = flow.get(\"pdMorgenOk\") || false\nif (pdMOk) return msg;\n\n// ellers send msg på utgang 2 eller 3 annenhver gang\nlet flip = flow.get(\"flip\") || false\nflip = !flip;\nflow.set(\"flip\", flip);\n\nif (flip) return [null,msg,null]\nelse return [null,null,msg]","outputs":3,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":120,"wires":[[],["06b3fdadafe92af4"],["6ce4aa06b498cbbe"]]},{"id":"467fbafacd7cb566","type":"change","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"","rules":[{"t":"set","p":"PrisKilde","pt":"flow","to":"Hvakosterstrommen.no","tot":"str"},{"t":"set","p":"PrisTS","pt":"flow","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":160,"y":290,"wires":[["20507782eea7238f"]]},{"id":"ca12d21f48efe6f4","type":"change","z":"b468e89a030cb946","g":"4ce0f27b155c6831","name":"set flow.pdMorgenOk = false","rules":[{"t":"set","p":"pdMorgenOk","pt":"flow","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":80,"wires":[["06b3fdadafe92af4"]]},{"id":"eecf1a11e64a8746","type":"group","z":"b468e89a030cb946","g":"f3eadd1725385808","name":"Prisdata fra NordPool","style":{"fill":"#c8e7a7","label":true,"color":"#000000"},"nodes":["6ce4aa06b498cbbe","62687955c7aa4efe","0b9a6c13ac4210bc","35e0d54c5ac618c8","7e9d2e63e769993a"],"x":34,"y":349,"w":592,"h":162},{"id":"6ce4aa06b498cbbe","type":"nordpool-api-plus","z":"b468e89a030cb946","g":"eecf1a11e64a8746","name":"I morgen","area":"NO2","currency":"NOK","action":"dayAhead","x":140,"y":390,"wires":[["62687955c7aa4efe"]]},{"id":"62687955c7aa4efe","type":"function","z":"b468e89a030cb946","g":"eecf1a11e64a8746","name":"if exist NOK/MWh --> NOK/kWh","func":"let today = new Date()\nlet tomorrow = new Date(today)\ntomorrow.setDate(tomorrow.getDate() + 1)\nlet ddate = new Date(msg.payload[6].timestamp)\n\n// Sjekk at data for i morgen er tilstede\nif (Number(ddate.getDate()) == Number(tomorrow.getDate())){\n for (var i = 0; i < msg.payload.length; i++ ){\n msg.payload[i].NOK_per_kWh = msg.payload[i].price/1000;\n msg.payload[i].time_start = Number(new Date(msg.payload[i].timestamp));\n //node.warn(i);\n \n }\n return msg;\n}\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":390,"wires":[["0b9a6c13ac4210bc"]]},{"id":"0b9a6c13ac4210bc","type":"subflow:289686ae32e9ac0c","z":"b468e89a030cb946","g":"eecf1a11e64a8746","x":450,"y":430,"wires":[["7e9d2e63e769993a"]]},{"id":"35e0d54c5ac618c8","type":"inject","z":"b468e89a030cb946","g":"eecf1a11e64a8746","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":440,"wires":[["6ce4aa06b498cbbe"]]},{"id":"7e9d2e63e769993a","type":"change","z":"b468e89a030cb946","g":"eecf1a11e64a8746","name":"","rules":[{"t":"set","p":"PrisKilde","pt":"flow","to":"NordPool","tot":"str"},{"t":"set","p":"PrisTS","pt":"flow","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":470,"wires":[["20507782eea7238f"]]},{"id":"e4c19e487e8287f7","type":"group","z":"b468e89a030cb946","name":"Betjening: Vis kun resttimer i listbokser.","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["b51d06a21038e464","5ab88c22ad7b601e","a9ad0882e1fb8f2b","1f96c7a359c6fede"],"x":14,"y":1189,"w":582,"h":122},{"id":"b51d06a21038e464","type":"ui_switch","z":"b468e89a030cb946","g":"e4c19e487e8287f7","name":"","label":"Vis kun resttimer","tooltip":"","group":"e9e1f6f856a0ef75","order":15,"width":"3","height":"1","passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"check_box","oncolor":"lime","offvalue":"false","offvalueType":"bool","officon":"check_box_outline_blank","offcolor":"grey","animate":true,"className":"","x":330,"y":1230,"wires":[["5ab88c22ad7b601e"]]},{"id":"5ab88c22ad7b601e","type":"change","z":"b468e89a030cb946","g":"e4c19e487e8287f7","name":"flow.liste2","rules":[{"t":"set","p":"liste2","pt":"flow","to":"payload","tot":"msg"},{"t":"delete","p":"socketid","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":1230,"wires":[["b6089f059556a469","45a6be97437e5578"]]},{"id":"a9ad0882e1fb8f2b","type":"change","z":"b468e89a030cb946","g":"e4c19e487e8287f7","name":"flow.liste2","rules":[{"t":"set","p":"payload","pt":"msg","to":"liste2","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":120,"y":1230,"wires":[["b51d06a21038e464"]]},{"id":"1f96c7a359c6fede","type":"inject","z":"b468e89a030cb946","g":"e4c19e487e8287f7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"300","crontab":"","once":true,"onceDelay":"5","topic":"","payload":"","payloadType":"date","x":130,"y":1270,"wires":[["a9ad0882e1fb8f2b","0d2c003564695abe","b49f2439c4d671ea"]]}] Kanskje viktigst, mer dynamisk nettleie: [{"id":"a14d52fac2cf7941","type":"group","z":"b468e89a030cb946","g":"f3eadd1725385808","name":"Nettleie inkl alle avgifter dag: nld, natt og helg: nlnh. Endres manuelt her ved behov.","style":{"fill":"#92d04f","label":true,"color":"#000000"},"nodes":["599d5c07932ddd54","7aee1a918032bc99"],"x":524,"y":49,"w":562,"h":82},{"id":"599d5c07932ddd54","type":"inject","z":"b468e89a030cb946","g":"a14d52fac2cf7941","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"00 00 * * *","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":640,"y":90,"wires":[["7aee1a918032bc99"]]},{"id":"7aee1a918032bc99","type":"function","z":"b468e89a030cb946","g":"a14d52fac2cf7941","name":"Lagre nettleiesatser med starttidspunkt","func":"let nld = 0.5; // Nettleie dag\nlet nlnh = 0.4; // Nettleie natt/helg\nlet dat = new Date();\nlet nl = []\nlet i = 0;\n\n// Legg inn framtidige nettleiebeløp med starttidspunkt\nnl.push({\"startTS\": Number(new Date(\"01-01-2020 00:00:00\")),\n \"d\": 0.4849,\n \"nh\": 0.3849});\nnl.push({\"startTS\": Number(new Date(\"2025-04-01 00:00:00\")),\n \"d\": 0.5741,\n \"nh\": 0.4741});\n//node.warn(nl);\n\n// Plukk ut aktuell nettleie fra array nl\nfor (i = 0; i < nl.length; i++)\n{\n if (Number(dat) >= nl[i].startTS) {\n nld = nl[i].d;\n nlnh = nl[i].nh;\n }\n}\n//Lagre aktuell nettleie i flow\nflow.set(\"nld\", nld);\nflow.set(\"nlnh\", nlnh);","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":90,"wires":[[]]}]
-
Jeg ser jeg må lese meg litt mer opp på frigate men et kjapt spørsmål først: Når jeg tar opp et kamera på telefonen så viser objektdeteksjonen live men er det mulig å se denne i opptakene for å kunne se hva som trigget opptak?
-
Så er Frigate oppe og går på anbefalt hardware med Google Coral USB. Er vel bare sånn mellomimponert av greiene... Jeg har satt opp systemet etter beste evne til å kun detektere "car" og "person" men ser at der dukker opp biler i hagen (som har fysisk sperre for biler) og drivhusdøren blir jevnlig oppdaget som "person" og trigger opptak... Reelle personer og biler ser ut til å bli detektert ganske ok om dagen men ikke om natten så må kanskje til med ren bevegelsesdeteksjon i tillegg... Dagens configurasjon (for det meste kopiert fra nett og noe modifisert): Sliter også med responsen i WebUI og ender ofte opp med slik som dette (øverste rad skal være snapshots av de siste opptakene): Selv om BlueIris har kostet mange timer med konfigurasjon for å få noenlunde pålitelige opptak uten alt for mange feilopptak så har BI dramatisk mer strømlinjeformet brukerinterface med 100 ganger bedre respons enn Frigate... Noen som har lignende erfaring og tips om løsninger?
-
HAN-leser eller direkteavlesning?
SveinHa svarte på JoeHugin sitt emne i Strømsparing og strøm-overvåkning
Jeg får data fra HAN ca hvert 2 sekund og jeg har også 32A hovedsikring (ca 7.4kW) men ser at jeg enkelte ganger kan ligge rundt 9kW i noe som i alle fall føles som 10 sekund, har ikke timet det... Har ikke funnet ut hvorfor automatikken min ikke reagerer kjappere men mistenker at det kan være HAN som ikke ALLTID leverer data hvert 2 sek. Sikringen har aldri trippet... ...men det er heller ikke slik at en 32A sikring ryker på 33A... Den skal klare 36A tilnærmet uendelig og 64A i minst 10 sek... Både kabler, motorer og det meste elektrisk utstyr uten elektronikk tåler ganske bra med overbelastning om det ikke står på alt for lenge.- 5 svar
-
- 1
-
Jeg kjøpte nettopp en Beelink EQ13 på black friday tilbud på Amazon fordi den spesifikt ble anbefalt for Frigate og fordi den iflg reklamen har M2 A+E sokkel for intern Google Coral TPU men den porten har den IKKE... Ellers ser den helt ok ut etter noen få dagers drift.
-
Joda, jeg skjønner at netteier ønsker faste inntekter til å dekke faste kostnader men det sparker jo bein under incentivene om å redusere forbruket...om det nå virkelig er poenget... Nettopp!!! For en del tiår siden jobbet nettselskapene preventivt men det er det jo slutt med når strøm er en markedsvare i stedet for en nødvendig del av livsgrunnlaget her på berget. Så lenge jeg kan huske har der vært politisk styring som ønsker at strømmen skal gå foran alle andre energikilder fordi den er billig, ren, fornybar og finnes i rikelige mengder...men når vi skal forsyne hele EU samtidig som alternative energikilder forbys og kroner plutselig er det eneste som teller... jaja, da får vi det slik som i dag...
-
Absolutt. Og skal en først dra på med større forskjeller så er jo både fastledd og abonnementsavgift det første som skulle forsvinne. Slik det er i dag så kan du jo skru ned forbruket helt til null og ender likevel opp med å betale ikke så rent få hundrelapper pr mnd.
- 41 svar
-
- 1
-
Har hatt både V2N og Heimgard men har endt opp med en helt standard klassisk lås med Yale Linus med keypad. Nå hører jeg ikke når folk kommer og om døren lukkes ved å gi den et dytt så går den faktisk i lås. V2N var fæl slik, om vinden tok døren og smalt den igjen så hardt at huset nesten flytta seg på grunnmuren så gikk den ikke i lås og døren åpnet seg igjen...