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

Vinnerliste

  1. stigvi

    stigvi

    Medlemmer


    • Poeng

      27

    • Innlegg

      2 609


  2. SveinHa

    SveinHa

    Medlemmer


    • Poeng

      9

    • Innlegg

      1 495


  3. TurboJens

    TurboJens

    Medlemmer


    • Poeng

      6

    • Innlegg

      55


  4. Hr Kotelett

    Hr Kotelett

    Medlemmer


    • Poeng

      5

    • Innlegg

      684


Populært innhold

Viser innholdet med mest poeng siden 28. feb. 2024 i alle områder

  1. Kjøpte leilighet ferdigstilt våren 2022, var tidleg nok ute til å kunne velge ein del ting (var berre reisverk som var kome opp på det tidspunktet). IT skap utskilt fra sikringsskap. Gull verdt. Ekstra strømpunkt 230v inni der. Her har eg egen router/fiberterminering og ein Intel pc som køyrer HA. Kabla nettverk til alle rom utenom kjøkken og bad. Mest doble punkt, er både på vegg til TV og ved gulv. til evt. omgjering av soverom til heimekontor. Kabla punkt i tak til aksesspunkt, midt i stove/kjøkken, to soverom og kabel til bod i garasje for å få skikkeleg dekning (mykje betong). Valgte masse ekstra spottar i forhold til det som var inkludert. Valgte ein spot eg hadde erfaring med fra før som er alt for kraftig, men dimtowarm så brukar sjelden meir enn 40%, men fint å kunne guffe opp når det skal holdast på med ulike prosjekt eller rydding/vasking. Valgte vanlege dimmerar som eg hadde fra før, men angra så har skifta til Namrom Zigbee dimmer (RS16 look, kan betjene med dimmehjul og zigbee) Litt ekstra stikkontakter (har vannbåren varme i alle golv, så treng ikkje tenke på oppvarming på 230v) Sentralstøvsuger (gull verdt, men blir ikkje så mykje brukt pga. robotstøvsuger) Trekkerør til zip-screen var planlagt pga. store vindusflater mot sør. Har brukt Namrom markisekontroller til å styre screens frå HA basert på temperatur og lux verdi frå Philips Outdoor sensor. Så er det nokre ekstra trekkerør her og der, blandt anna til sisterner for å kunne montere dusjtoalett seinare. Bevegelsessensor/dimmer på begge bad. Genialt, men er ikkje fornøgd med at det ikkje går å justere vinkelen på den så vurderar å 3D printe en adapter for å kunne vinkle den litt. Når ungane sitte på do klara dei ikkje å få på lyset. Har dei dårleg tid er dei komen på doen uten at sensoren har sett dei. Hugsa ikkje heilt, meina det var i størrelsesorden 80-90.000kr tillegg på el. installasjonen. Men det er det verdt. Edit: ja og ein del av desse tusenlappane ekstra, eg utvida brannvarslingsanlegget med meldarar på alle soverom. Kravet var en i tilknytning til kjøkken og en i gang utanfor soverom. Men sidan eg valgte karmar for innerdører med pakning ville eg ha varsling i alle soverom, detta er jo rein sikkerhet så det går nesten ikkje an å prioritere ned.
    5 poeng
  2. Dette er bare et kort innlegg om min erfaring. Jeg har brukt en raspberry pi med minnekort noen år nå og har aldri fått bruk for å gjenopprette fra en sikkerhetskopi. Men på fredag var planen å gjøre nettopp det. Det var bare meg hjemme og en raspberry pi 5 med en M.2 disk var allerede satt opp med HA 2024.3 dagen i forveien. Jeg så egentlig for meg timesvis med fikling, men jeg logget av Nabu Casa på den gamle og startet sikkerhetskopiering som tok 20 sekund, omtrent. Disse lagres automatisk på en NAS boks og på Google Disk så jeg hadde ikke mer å gjøre enn å stoppe HA og dra ut ledningene. Å plugge inn den nye tok ikke mange sekundene, det heller. Zigbee koordinator ble også flyttet, sammen med en usb ledning til en UPS. Så starket jeg opp den nye, valgte menyen for sikkerhetskopier og valgte opprett fra kopien som jeg nettopp hadde lagd. Etter ca 1 minutt tok den en automatisk omstart og deretter var egentlig alt på plass. Jeg viste ikke helt om jeg skulle føle meg slukøret. Det hele var gjort før jeg hadde tatt første slurk av kaffekoppen. Etter å ha logget inn på Nabu Casa på den nye, var appen på telefon også fornøyd. Den gamle raspberry skal jeg nå sette opp med en blank HA og sørge for å ha oppdatert den til nyeste versjon noen ganger i året. Så vet jeg at dersom den nye rpi5 skulle svikte, er det kun snakk om noen minutter å få opp en ny.
    4 poeng
  3. Jeg hadde lyst å ha en temperaturføler på kontor/arbeidsplass som rapporterte måleverdier til min egen Home Assistant. Her er et innlegg om hvordan det ble løst. Jeg bestemte meg for å bruke en esp32 sammen med en BME280 sensor. På esp32 har jeg brukt esphome. På arbeidsplass er det et gjestenettverk som denne kan bruke. I esphome settes wifi opp slik som vist nedenfor. Hvis den ikke kommer på nett innen 1 minutt, vil den opprette et lokalt wifi nett som en kan koble seg til med mobil og deretter legge inn hvilket wifi nett sammen med passord som esp32 skal bruke. Esphome kaller det et "Fallback hotspot". Dette er en engangs-konfigurasjon. wifi: ssid: "hjemmenett" password: !secret heime_wifi domain: .lan power_save_mode: none ap: ssid: "Kontordings Fallback Hotspot" password: "et eller annet passord" Og så har jeg tatt vekk api: i fra yaml-filen fordi jeg ikke vil at esp32 skal prøve å sende data til en Home Assistant som ikke er der via standard api. Deretter laget jeg en time komponent der en hvert 15. minutt sender temperatur, fuktighet og trykk via en https post til en webhook. time: - platform: sntp id: sntp_time timezone: Europe/Oslo servers: - 0.pool.ntp.org - 1.pool.ntp.org - 2.pool.ntp.org on_time: - seconds: 0 minutes: /15 then: - http_request.post: url: https://hooks.nabu.casa/en_eller_annen_url.......... verify_ssl: false headers: Content-Type: application/json json: |- root["kontortemperatur"] = id(temp).state; root["kontorfuktighet"] = id(hum).state; root["kontortrykk"] = id(pres).state; Så gjenstår bittelitt konfigurasjon i HA En lager en ny automasjon som har en webhook trigger. Data som esp32 sender, kan en hente ved hjelp av {{ trigger.json.navnpåsensor | float(0) }} Webhook ID som automasjonen foreslå, lar en være uforandret. Trykk på tannhjulet bak webhook ID og ta vekk avkrysningen på "kun tilgjengelig fra det lokale nettverket" Så må en inn på oppsett for Home Assistant Cloud. Nederst der er det en seksjon for Webhook'er. Her trykker en "Administrer" på den webhook som automasjonen har opprettet og kopierer url som står der. Denne url skal en bruke i sin helhet i esp32. Så det var egentlig det hele. Dataene tikker inn hver 15. minutt. Har en ikke Nabu Casa sin skytjeneste så er det andre måter å sette opp denne url'en på, men har en først gått denne veien så har en vel kontroll på hvordan en får aksess til sin HA utenfra via en webhook. Oppsettet for BME280 er her, men ikke så veldig relevant for dette med webhooks. Den er standard esphome.... sensor: - platform: bme280_i2c temperature: name: "${devicename} Temperature" id: temp oversampling: 16x filters: - offset: -3.3 pressure: name: "${devicename} Pressure" id: pres filters: - offset: 7.0 humidity: name: "${devicename} Humidity" id: hum address: 0x76 iir_filter: 16x update_interval: 60s
    3 poeng
  4. Jeg har solceller på taket, og ønsker selvfølgelig å utnytte disse maksimalt. For å klare dette har jeg laget en styrings-rutine som jeg gjerne mottar kommentarer på. Kanskje har du en bedre metode, eller kanskje kan du få inspirasjon til å gjøre noe tilsvarende selv? Jeg bruker Homeseer, men det er sikkert mulig å lage tilsvarende med andre systemer. Her er min oppskrift, steg for steg: 1: Systemet starter på kvelden med å finne ut hva som er teoretisk produksjon neste dag, under optimale forhold. Dette gjøres ved å se på statistikk fra tilsvarende måned. 2: Deretter sjekkes værvarselet, for å finne ut hvor mye reduksjon i effekten jeg kan vente meg. Systemet sjekke skyer og regn, og finner ut hvor mye som blir tapt, sånn ca. 3: Deretter regner systemet ut sannsynlig forbruk. dette gjøres på bakgrunn av temperatur, vind, termostater og antall personer hjemme. 4: På dette punktet vet systemet om det vil være kraftoverskudd. Nå må avgjørelsen tas om strømmen skal brukes eller selges. Dersom strømmen er dyr så lønner det seg å selge, og heller kjøpe med strømstøtte til eget forbruk. Denne avgjørelsen vises ved hjelp av et tall, som indikerer hvor lurt det er å bruke selv opp i mot å selge. 5. Ved hjelp av tallet fra punkt 4 så styres oppvarming av vann og et lite basseng. Dersom det blir lav strømproduksjon dagen etter så varmes vannet om natten, da nettleien er rimeligere. Dersom det er ventet bra produksjon så utsettes oppvarmingen av vannet til solcellene har begynt å levere overskudd. Mange spør meg om det er mye å spare på dette, og faktisk så ble total besparelse i 2023 på over 3000 kr! Dermed er det vel ingen tvil om at det lønner seg å automatisere! Er det andre som har gjort noe tilsvarende, eller kanskje noe som er enda bedre? I så fall så håper jeg du legger igjen en kommentar. Regnestykke for sist natt: Dersom jeg ikke hadde styrt noe som helst, så ville vannet blitt varmet på natten, i timene etter bruk. Det hadde kostet Kr 1,27 pr KWH, altså totalt kr 51 i strøm. På dagtid ville da solstrømmen blitt solgt i stedet, noe som ville gitt meg kr 29. Totalt har det varme vannet da kostet meg Kr 22,- Dersom jeg i stedet varmer vannet med solstrøm så koster det meg ingenting. forskjellen her blir altså på 22 pr natt. Ja, jeg er klar over at den egenproduserte strømmen ikke er gratis. Men siden denne prisen er konstant uansett så har jeg valgt å trekke den ut i fra regnestykket.
    3 poeng
  5. Pynta litt på dieselprisbildet. Har valgt meg ut 10 aktuelle stasjoner som jeg overvåker spesielt: Trenden skal bli 4 uker men pr i dag er der bare litt mer enn 2 uker, resten kommer av seg selv med tiden... Listen til høyre sorterer seg selv med billigst øverst og div fargekoder, ta f.eks CircleK Kvala: Gul tittel: 1-6 timer siden sist oppdatering Rød pris: Er i øverste 1/3 av de 10 valgte stasjonene Grønn endring: Sist prisen endret seg var det ned (derfor grønn) med 90 øre og det var for 92.2 timer siden. Har også et eget søkbart bilde for for alle stasjoner med favoritter men det har nå ikke den store nytteverdien pr. i dag...
    3 poeng
  6. Det skal de og å betale abonnement er for meg helt naturlig. Men jeg jobber i IT bransjen og har vel nettopp en forståelse for at noen skal ha lønn. Ser derimot både her på forumet og i andre forum at det er noen som er prinsipielle motstandere på å betale. For meg er det en merkelig holdning, men folk må jo få ha sine prinsipper selv om de ikke fører til noe positivt. Prinsipper gjør sjelden det.......
    3 poeng
  7. Gøy å våkne til at det har kommet så mange svar på innlegget mitt. Det er tydelig at dette engasjerer! Jeg får begynne fra toppen 😉 Stigvi: du påpeker at jeg har tatt ut denne prisen fra regnestykket. Det har jeg gjort fordi innlegget mitt dreide seg om besparelsen ved automasjonen, ikke besparelser ved solcellene i seg selv. Men jeg skal komme tilbake til spørsmålet ditt om litt 🙂 hflatoey: Jeg kjenner ingen som tar opp lån for så å investere de lånte pengene i aksjefond. Jeg har gjort denne investeringen for å spare penger, og for meg så fungerer det. Men det er ikke dermed sagt at det fungerer for alle. Jeg har dette som en liten bi-jobb, og har sett mange prosjekter som rett og slett ikke lønner seg. Alt avhenger av ditt forbruksmønster. Men jeg skal som sagt komme tilbake til mitt regnestykke om litt. SveinHa: Jeg synes det høres rart ut at det ville ta så lang tid å tjene inn en ny varmepumpe. Riktignok er det en dyrere med luft/vann, men jeg synes dette hørtes dyrt ut. Selv hadde jeg en luft/luft varmepumpe som tok kvelden for 2 år siden, og de måledataene jeg har fra den perioden viser ganske tydelig at besparelsen med varmepumpe er ganske stor. Jeg husker ikke tallene i farten, men det var ikke snakk om mange årene. For øvrig så ser det ut som om vi har ganske like fremgangsmåter. Jeg liker oppsettet ditt, og ser at vi har tenkt ganske så likt. Jeg har også vurdert å bruke en leverandør av soldata som en faktor i systemet mitt, men jeg synes det var gøy å se hvor godt jeg kunne treffe ut i fra de faktorene jeg hadde. thoralex: Det er tydelig at du enten har et langt lavere strømforbruk enn hva jeg har eller et langt større solcelle-anlegg. Sannsynligvis det første. Jeg er langt ifra å kunne dekke 60% fra solcellene nå i mars. Grunnen er nok et dårligere isolert hus i kombinasjon med at jeg ikke bor alene. Ikke har jeg mulighet til å fyre med ved, heller. Jeg holder meg under 10kwt-trinnet på vinteren, og satser på 5kwt-trinnet på sommeren. I Julen måtte jeg bite i det sure eplet i forbindelse med julebesøk, og da røyk jeg faktisk på 10kwt-trinnet også. Ellers så er det interessant å lese om din tilnærming 😉 Men så til det som sikkert flere av dere har ventet på, nemlig regnestykket som viser hva dette koster meg. Jeg finansierer innkjøpet gjennom huslånet, og levetiden er omtrent like lang som nedbetalingstiden på lånet. Mine kostnader er derfor en %-andel av huslånet, noe som også betyr at prisen svinger etter hva rentene er. Jeg betalte selv 185.000 etter enova-støtte, og betaler ca 12.000 i året. For det får jeg levert ca 12.500-13.000 kwt. Dette gir meg altså en pris på max 96 øre pr kwt. For ett år siden, når rentene var lavere, så var prisen nøyaktig halvparten, 48 øre. Dette er rimelig, spesielt siden det ikke er nettleie på egenprodusert strøm. Nettopp derfor er det viktig å bruke så mye av strømmen selv. Dersom man baserer seg på å selge strømmen for å tjene penger, da har man investert feil. Jeg skal legge frem flere tall senere, men akkurat nå har jeg jobb som venter 🙂
    2 poeng
  8. Fram til nå har jeg hatt en Aeotec door/window sensor 7 i postkassen, men denne har aldri funket optimalt da det blir for langt imellom huset og postkassen, og denne virker til og spise batterier når dekningen til z-wave nettverket er dårlig. Jeg kom over et innlegg i en Facebook gruppe en som hadde kjøpt 5stk av disse: https://www.espthings.io/index.php/2022/11/05/et-sw01-a-very-low-consumption-mailbox-switch/ I skrivende stund har han en igjen: ESPHome Postkasse-sensor - 1 igjen | FINN torget Mottok enheten etter noen få dager og startet testingen og løste noen utfordringer underveis som man alltids gjør med nye dippedutter 🙂 ESP-en eksponerer automatisk de nødvendige entitetene: Reset-bryter (Denne bryteren gjør at ESP-en går i deep sleep igjen) Batterispenning Status på switch 1 og 2. WiFi signalstyrke (RSSI). 3D-print kabinettet på espthings var for lite pga molex-kontakten til bryter inngangene blir for høg, så måtte lære meg litt Fusion360 for å modifisere høyden på det, la nok på ca 2cm. Det ble da også nok plass til og montere WiFi-antennen rett i boksen også. Den fjærbelastede trykkbryteren ble koblet slik at den er NO når lokket til postkassen er igjen. Når postkassen åpnes er den NC og trigger ESP-en. Neste utfordring var en liten nøtt. Jeg fikk som regel varsel annenhver gang om at postkassen var åpnet, årsak måtte finnes.. Jeg sjekket først nettverket: RSSI-en var for lav (89 dBm), så jeg flyttet aksesspunktet opp på kaldloftet, da ble den umiddelbart noe bedre (80dBm), dette er greit nok når det er snakk om såpass lave datamenger som skal over. Men fremdeles var det noe trøbbel. EIRP-en på aksesspunktet på 2,4ghz var satt til minimum 12dBm, så klienter under dette blir automatisk sparket ut for å ikke forringe WiFi-opplevelsen til andre. Satt EIRP-en ned til 0 og da funket den straks bedre, deaktiverte dermed 2.4ghz for klientene, slik at de nå kun kjører på 5ghz, så får IoT-enhetene bruke 2,4ghz/5ghz alt etter hva de velger selv. Neste utfordring var at Home-Asssistant ikke rakk og polle ESP-en før den gikk i deep-sleep etter 30 sekunder. Økte deep-sleep tiden til 60 sekunder og problemet var egentlig løst sånn sett, men med økt strømforbruk. Etter litt googling fant jeg ut at for deep-sleep enheter er ikke API-et og foretrekke, men MQTT. Da er det ESP-en selv som sender ut data til MQTT, i stedet for at HA skal polle data. Koden for dette er ganske rett fram: MQTT Client Component — ESPHome Alle entitetene dukker automatisk opp i HA også på MQTT. #api: # encryption: # key: !secret esphome_api_secret mqtt: broker: 1.1.1.1 username: esp-postkasse password: !secret esphome_mqtt_password Med MQTT fungerer enheten mye bedre, med det samme den har koblet til WiFi sender den ut data. Har testet ved og kjøre ping kontinuerlig mot enheten, og ved første ping-reply så sender den også ut data på MQTT. Jeg kan dermed putte den i deep sleep igjen etter 1 sekund og strømforbruket blir minimalt. Slik ser automasjonen i node-red:
    2 poeng
  9. Forsøker med en pantomime her. Følg bildene i den rekkefølgen de står, altså "Innstillinger" - "Tilbehør" - "Sensor X"
    2 poeng
  10. Ble litt inspirert, og fant ut at YR har et tilgjengelig API for observasjoner. Dette er observasjoner registert av hvem som helst, jeg antar at observasjoner fra feks "badetassen" ikke er tilgjengelig selv om de vises på yr.no. Så jeg laget en sensor for å hente temperatur for et spesifikt sted: 1. Send en e-post som beskrevet i APIet til for å få en API-key 🗝️ https://hjelp.yr.no/hc/no/articles/5949243432850 2. Finn ønsket sted https://www.yr.no/nb/badetemperaturer 3. I URL hent ut location ID, i dette tilfellet: 1-73316. https://www.yr.no/nb/værvarsel/daglig-tabell/1-73316/Norge/Akershus/Asker/Sjøstrand 4. I din secrets.yaml legg til: yr_api_key: din_nøkkel_her 5. Kopier inn kode i configuration.yaml / evt. sensor.yaml: sensor: - platform: rest resource: "https://badetemperaturer.yr.no/api/locations/1-73316/watertemperatures" headers: apikey: !secret yr_api_key name: "Sjøstrand" value_template: "{{ value_json[0]['temperature'] }}" device_class: temperature json_attributes: - time 6. Endre ID i URL i resource 7. Endre name til noe som gir deg mening. 8. Reload YAML 🙂 Også kopierer jeg bare sensoren jeg laget i node-red mens jeg testet APIet: [{"id":"131349fa60f6bae7","type":"inject","z":"99ca70d46a3640b3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1800","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":390,"y":160,"wires":[["511d11b641562c6b"]]},{"id":"511d11b641562c6b","type":"http request","z":"99ca70d46a3640b3","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://badetemperaturer.yr.no/api/locations/1-73316/watertemperatures","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"apikey","valueType":"other","valueValue":""}],"x":830,"y":160,"wires":[["71de08f0ed88af81"]]},{"id":"d81c10cc4c76b2e7","type":"debug","z":"99ca70d46a3640b3","name":"debug 39","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1300,"y":120,"wires":[]},{"id":"71de08f0ed88af81","type":"json","z":"99ca70d46a3640b3","name":"","property":"payload","action":"obj","pretty":true,"x":1070,"y":160,"wires":[["d81c10cc4c76b2e7","18707207b5f2409d"]]},{"id":"18707207b5f2409d","type":"ha-sensor","z":"99ca70d46a3640b3","name":"","entityConfig":"395a8b7dcabd24f6","version":0,"state":"payload[0].temperature","stateType":"msg","attributes":[{"property":"time","value":"payload[0].time","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1310,"y":160,"wires":[[]]},{"id":"e1efc409a84fc75e","type":"comment","z":"99ca70d46a3640b3","name":"Change APIKEY and URL","info":"","x":830,"y":120,"wires":[]},{"id":"395a8b7dcabd24f6","type":"ha-entity-config","server":"dc0802f6.645fa","deviceConfig":"","name":"Badetemperatur sjøstrand","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Badetemperatur sjøstrand"},{"property":"icon","value":""},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"dc0802f6.645fa","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}] Også et kort for UI: type: custom:mushroom-template-card primary: '{{states(''sensor.sjostrand'') +''° '' + ''Sjøstrand'' }}' secondary: >- {{ as_timestamp(state_attr('sensor.sjostrand', 'time')) | timestamp_custom('%d.%m.%Y %H:%M') }} icon: mdi:coolant-temperature icon_color: |- {% if (states('sensor.sjostrand')|float >= 20) %} red {% else %} blue {% endif %} multiline_secondary: false entity: sensor.sjostrand God sommer! 🏖️
    2 poeng
  11. Mitt Dieselprisbilde ser for tiden slik ut: Og et søkbart bilde med mer fleksibelitet men mindre nytteverdi... Her finner en ID som trengs i hovedbildet: Node-RED Flow: De 10 funksjonsnodene med bensinstasjonsnavn er det eneste som trenger endres for å tilpasse favorittene. Innholdet er slik: [{"id":"9103052baf82e5d0","type":"inject","z":"2447f70b5f1095ba","g":"1187eef693a5d073","name":"Hvert 10 min","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"*/10 6-23 * * *","once":true,"onceDelay":"5","topic":"","payload":"","payloadType":"date","x":140,"y":80,"wires":[["fb25d94b.139e78"]]},{"id":"c622a1c1b5d187fe","type":"function","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"List all stations & create flow.stations","func":"var brands = flow.get(\"brands\");\nvar statsRaw = flow.get(\"stationsRaw\");\n//flow.set(\"Stations\",msg.payload);\n//node.warn( \"pl.length: \" + statsRaw.length);\nvar arr = [];\nvar arr2 = [];\nvar obj2 = {}\nvar msg2 = {}\nvar i = 0;\nvar j = 0;\nfor (i = 0;i < statsRaw.length;i++){\n let obj = {}\n obj.id = statsRaw[i].id;\n// obj.name = msg.payload[i].name || \"-\"\n// obj.brand = msg.payload[i].brand || \"-\"\n// obj.discountInfo = msg.payload[i].discountInfo || \"-\"\n obj.name = statsRaw[i].name || \"-\"\n // Find brand from brandId\n for (j = 0;j < brands.length;j++){\n if (Number(statsRaw[i].brandId) == Number(brands[j].id)){\n obj.brand = brands[j].name || \"-\"\n obj.logo = brands[j].pictureUrl || \"-\"\n //node.warn(i + \" \" + j + \" \" + brands[j].name);\n break;\n }\n }\n// obj.brandId = msg.payload[i].brandId || \"-\"\n obj.location = statsRaw[i].location || \"-\"\n // Add prices\n var obj3 = {}\n //console.log(statsRaw[i].prices.length);\n for (j = 0;j < statsRaw[i].prices.length;j++){\n var ftid = statsRaw[i].prices[j].fuelTypeId;\n if (ftid == 1 && statsRaw[i].prices[j].price != 0){ \n obj3.D = {}\n obj3.D.price = statsRaw[i].prices[j].price;\n obj3.D.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.D.type = \"D\";\n }\n if (ftid == 2 && statsRaw[i].prices[j].price != 0){ \n obj3.B95 = {}\n obj3.B95.price = statsRaw[i].prices[j].price;\n obj3.B95.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B95.type = \"B95\";\n } \n if (ftid == 3 && statsRaw[i].prices[j].price != 0){\n obj3.B98 = {}\n obj3.B98.price = statsRaw[i].prices[j].price;\n obj3.B98.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B98.type = \"B98\";\n }\n if (ftid == 4 && statsRaw[i].prices[j].price != 0){\n obj3.FD = {}\n obj3.FD.price = statsRaw[i].prices[j].price;\n obj3.FD.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.FD.type = \"FD\";\n }\n }\n// console.log(obj3);\n obj.prices = obj3;\n\n \n arr.push(obj);\n}\nmsg2.payload = arr;\nflow.set(\"stationsPrepd\",arr);\nreturn msg2;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":880,"wires":[["6ffebf4f1340a92e","f193882be2dc7762"]]},{"id":"6ffebf4f1340a92e","type":"ui_table","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","group":"0d788a3660f620b1","name":"All stations","order":4,"width":"12","height":"22","columns":[{"field":"name","title":"","width":"26%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"brand","title":"","width":"27%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"location","title":"","width":"31%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"id","title":"id","width":"13%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":1,"cts":true,"x":1100,"y":880,"wires":[["fc1b2554d6e80f6b"]]},{"id":"fc1b2554d6e80f6b","type":"function","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"add to favs","func":"var favs = flow.get(\"Favs\") || []\nvar pl = msg.payload;\nvar arr = [];\nvar exists = false;\narr = favs;\n\nfor (var i = 0;i < favs.length;i++){\n if (favs[i].id == pl.id) exists = true;\n}\nif (exists == false) arr.push(pl);\n\nflow.set(\"Favs\", arr);\nreturn msg; ","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":920,"wires":[["6bfcbbe7c43dcc84"]]},{"id":"5fd3c4e366a636d6","type":"ui_table","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","group":"0d788a3660f620b1","name":"Selected stations","order":5,"width":"14","height":"23","columns":[{"field":"name","title":"name","width":"30%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"brand","title":"brand","width":"30%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"location","title":"location","width":"30%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"id","title":"id","width":"10%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":1,"cts":true,"x":1120,"y":920,"wires":[["03dc6f5b94c49e02"]]},{"id":"6bfcbbe7c43dcc84","type":"function","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"List fav stations","func":"var favs = flow.get(\"Favs\") || []\nvar arr = []\nvar msg2 = {}\nfor (var i = 0;i < favs.length;i++){\n let obj = {}\n obj.id = favs[i].id;\n obj.name = favs[i].name;\n obj.brand = favs[i].brand;\n obj.location = favs[i].location;\n arr.push(obj);\n}\nmsg2.payload = arr;\nreturn msg2; ","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":860,"y":920,"wires":[["5fd3c4e366a636d6","f193882be2dc7762"]]},{"id":"03dc6f5b94c49e02","type":"function","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"Remove station from fav","func":"var i,j = 0;\nvar favs = flow.get(\"Favs\") || []\nvar favs2 = []\nvar remove = msg.payload;\nvar arr = []\nvar msg2 = {}\nfor (i = 0;i < favs.length;i++){\n if (favs[i].id != remove.id){\n favs2[j] = favs[i];\n j++;\n }\n}\nflow.set(\"Favs\", favs2)\nreturn msg; ","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":890,"y":970,"wires":[["6bfcbbe7c43dcc84"]]},{"id":"4d95ecb3e17e80a4","type":"ui_table","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","group":"0d788a3660f620b1","name":"Drivstoffpriser","order":6,"width":"13","height":"23","columns":[{"field":"brand","title":"","width":"20%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"name","title":"","width":"25%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"type","title":"","width":"15%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"price","title":"Kr","width":"15%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"age","title":"hrs.","width":"15%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":1,"cts":true,"x":1110,"y":1010,"wires":[[]]},{"id":"bf43e528a5851b0d","type":"function","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"List priser for favs","func":"var favs = flow.get(\"Favs\") || []\nvar stats = flow.get(\"stationsPrepd\") || []\nvar arr = []\nvar msg2 = {}\nvar now = Number(new Date());\nvar age = 0;\n\nfor (var i = 0;i < stats.length;i++){ //bla gjennom alle stasjoner\n for (var j = 0;j < favs.length;j++){ // bla gjennom favoritter\n if (stats[i].id == favs[j].id){ //er gjeldende stasjon i favoritter?\n// console.log(stats[i].prices);\n// for (var k = 0; k < stats[i].prices.length; k++){ // bla gjennom drivstofftyper\n for (var k in stats[i].prices){ // bla gjennom drivstofftyper\n// console.log(stats[i].id);\n let obj = {}\n obj.name = stats[i].name;\n obj.brand = stats[i].brand;\n obj.location = stats[i].location;\n obj.type = stats[i].prices[k].type;\n obj.price = stats[i].prices[k].price;\n obj.age = ((now - stats[i].prices[k].lastUpdated) / 3600 / 1000).toFixed(1);// + \"h\"; //age in hours\n arr.push(obj);\n }\n }\n }\n}\nmsg2.payload = arr;\nreturn msg2;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":870,"y":1010,"wires":[["4d95ecb3e17e80a4"]]},{"id":"f193882be2dc7762","type":"delay","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":660,"y":1010,"wires":[["bf43e528a5851b0d"]]},{"id":"d9d0882ba114f2ae","type":"ui_text_input","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"","label":"Søk...","tooltip":"","group":"0d788a3660f620b1","order":7,"width":"10","height":"1","passthru":true,"mode":"text","delay":300,"topic":"topic","sendOnBlur":true,"className":"","topicType":"msg","x":610,"y":840,"wires":[["dd937fc64214f72d"]]},{"id":"dd937fc64214f72d","type":"function","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"List selected stations","func":"var stats = flow.get(\"stationsPrepd\") || []\nvar searchText = msg.payload;\nvar arr = [];\nvar msg2 = {}\nfor (var i = 0;i < stats.length;i++){\n let obj = {}\n obj.id = stats[i].id;\n obj.name = stats[i].name || \"-\"\n obj.brand = stats[i].brand || \"-\"\n obj.location = stats[i].location || \"-\"\n // plukk ut bare stasjoner som inneholder søkebegrepet\n if (obj.name.includes(searchText) || obj.brand.includes(searchText) || obj.location.includes(searchText)){\n arr.push(obj);\n }\n}\nmsg2.payload = arr;\nreturn msg2;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":840,"wires":[["6ffebf4f1340a92e"]]},{"id":"13d4a47fe1d5ae74","type":"ui_text","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","group":"0d788a3660f620b1","order":1,"width":"12","height":"1","name":"","label":"Alle stasjoner","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1340,"y":850,"wires":[]},{"id":"65cdb903a6486baf","type":"ui_text","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","group":"0d788a3660f620b1","order":2,"width":"14","height":"1","name":"","label":"Favoritter","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1320,"y":880,"wires":[]},{"id":"6e102042f9d3270e","type":"ui_text","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","group":"0d788a3660f620b1","order":3,"width":"13","height":"1","name":"","label":"Priser","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1310,"y":910,"wires":[]},{"id":"8aef97ddf9f7d1d0","type":"comment","z":"2447f70b5f1095ba","g":"1187eef693a5d073","name":"Hent drivstoffpriser fra Drivstoffappen","info":"","x":190,"y":50,"wires":[]},{"id":"cf5b28121ebac9d8","type":"comment","z":"2447f70b5f1095ba","g":"516b853f82e2fd07","name":"Vis universalliste drivstoffpriser i egen tab","info":"","x":720,"y":790,"wires":[]},{"id":"08c3e48feae420a1","type":"inject","z":"2447f70b5f1095ba","g":"1187eef693a5d073","name":"Hvert 60 min","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"0 0-5 * * *","once":true,"onceDelay":"5","topic":"","payload":"","payloadType":"date","x":140,"y":110,"wires":[["fb25d94b.139e78"]]},{"id":"fb25d94b.139e78","type":"http request","z":"2447f70b5f1095ba","g":"19e9dd7c0992a4db","name":"Get Token","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/authorization-sessions","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":140,"y":280,"wires":[["9b28d83a.0226d"]]},{"id":"9b28d83a.0226d","type":"function","z":"2447f70b5f1095ba","g":"19e9dd7c0992a4db","name":"Process Token","func":"msg.token = JSON.parse(msg.payload).token;\nmsg.tokenBytes = Buffer.from(msg.token);\nmsg.shiftedBytes = Buffer.concat([msg.tokenBytes.slice(1), msg.tokenBytes.slice(0, 1)]);\nmsg.shiftedToken = msg.shiftedBytes.toString();\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":150,"y":320,"wires":[["bc5b206f4b80b029"]]},{"id":"bc5b206f4b80b029","type":"md5","z":"2447f70b5f1095ba","g":"19e9dd7c0992a4db","name":"MD5","fieldToHash":"shiftedToken","fieldTypeToHash":"msg","hashField":"md5Hash","hashFieldType":"msg","x":120,"y":360,"wires":[["09f4eac7c81a8f68","372632c4f60d8424"]]},{"id":"36db2ee7d9dbc9dc","type":"json","z":"2447f70b5f1095ba","g":"19e9dd7c0992a4db","name":"","property":"payload","action":"","pretty":false,"x":120,"y":440,"wires":[["029b804564b2042d"]]},{"id":"372632c4f60d8424","type":"http request","z":"2447f70b5f1095ba","g":"66fed02de14cd5a7","name":"API Request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/brands?stationTypeId=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"X-API-KEY","valueType":"msg","valueValue":"md5Hash"},{"keyType":"other","keyValue":"X-CLIENT-ID","valueType":"other","valueValue":"com.raskebiler.drivstoff.appen.ios"}],"x":130,"y":610,"wires":[["77f438e4db6a6f68"]]},{"id":"77f438e4db6a6f68","type":"json","z":"2447f70b5f1095ba","g":"66fed02de14cd5a7","name":"","property":"payload","action":"","pretty":false,"x":110,"y":650,"wires":[["82d67472bd4bb8a0"]]},{"id":"82d67472bd4bb8a0","type":"change","z":"2447f70b5f1095ba","g":"66fed02de14cd5a7","name":"set flow.brands","rules":[{"t":"set","p":"brands","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":140,"y":690,"wires":[[]]},{"id":"09f4eac7c81a8f68","type":"http request","z":"2447f70b5f1095ba","g":"19e9dd7c0992a4db","name":"API Request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/stations?stationTypeId=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"X-API-KEY","valueType":"msg","valueValue":"md5Hash"},{"keyType":"other","keyValue":"X-CLIENT-ID","valueType":"other","valueValue":"com.raskebiler.drivstoff.appen.ios"}],"x":140,"y":400,"wires":[["36db2ee7d9dbc9dc"]]},{"id":"32028735556d59eb","type":"comment","z":"2447f70b5f1095ba","g":"66fed02de14cd5a7","name":"Hente \"brands\" fra drivstoffappen","info":"","x":170,"y":570,"wires":[]},{"id":"029b804564b2042d","type":"change","z":"2447f70b5f1095ba","g":"19e9dd7c0992a4db","name":"set flow.stationsRaw","rules":[{"t":"set","p":"stationsRaw","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":170,"y":480,"wires":[["e6a31dc9dfb2064d"]]},{"id":"d9262ca78f365ae0","type":"comment","z":"2447f70b5f1095ba","g":"19e9dd7c0992a4db","name":"Hente \"stations\" fra drivstoffappen","info":"","x":180,"y":240,"wires":[]},{"id":"6d9e547c291b0fbc","type":"delay","z":"2447f70b5f1095ba","name":"+1 gang","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":420,"y":530,"wires":[["920c8e464a11c598"]]},{"id":"e6a31dc9dfb2064d","type":"change","z":"2447f70b5f1095ba","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"stationsPrepd","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":480,"wires":[["6d9e547c291b0fbc","920c8e464a11c598","c622a1c1b5d187fe"]]},{"id":"5301761a12ee53d3","type":"ui_button","z":"2447f70b5f1095ba","g":"1187eef693a5d073","name":"","group":"c5147f5beba7be52","order":23,"width":"3","height":"2","passthru":false,"label":"Oppdater","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":150,"wires":[["fb25d94b.139e78"]]},{"id":"77e67d4e89c2c546","type":"group","z":"2447f70b5f1095ba","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["dc20c0baebcded39","52943a1fc077d28f","7014c2032a87fc3b","671050bdedc0c3cb","8e502b90702d3857","b1eaf76d80b124b2","13527989f83e29d2","a789bc33845b6aae","28fe85a134fe0971","dfb010ed7eafaf57","f10d3ac86fabfb52","4fdfe701f4a3afa0","920c8e464a11c598","80fadd7556b173c2","a25c248dc4ebd8e1","4845524c229e5de4","4bc7a1bfe0edbd3d","a0ed1589c7578ebc","313d717f04abb611","df6111373c9fcb74","9115f8c79d2fb5bf","bb875534cb2f1287","ef238c7de03c89ba","342412d6ccffa890","deb634361ea88282","7d2c0b671fe55eb5","73f01377bb3987bb","2ca32bed009a91c7","c4e4ad48e1be3967","fedddf6d961e47e1","f004caf9b1859658","f280cce61136ea5f","35afefb923880a86","13a80ea70008ef69","de080617e02b76c0","efb09c551659ae8e","c9be417364a0636a","c1e1c529d2ebbbe3","ba85ec803b447086","575ebc0b7826b668","a5b30e2c9a5b185b","5cdf4a4e44ba3e96","7907e0a5a1ff80b6","ee11d26aa7381961","c6597ae705c493fd","197fde062f906fe2","d3117ab9bbdc344d","a76caa7a16bac95c","99fbdbd6f1247a74","f41e2331b0b830d3","98ad46a8c1cec362","b4db27ab8e1249f9","211a49ea39c47dbf","345e2bc8bcaeeffd","f3a5b1da15641fda","f82266bbecc5f929","7ec8a975f4e62ea5","b4c42883c0d1b421","89f905a2a16a5653","bd92fd80ba8708f5","919354dd3a9d85e1","af920dde227a02ba","42965b35532dc0a6","198ea5a17cf29258","591771770c56781a","72b2d1bb06c9fd47","835b0df2bd3edcbb","69d3c375167219d4","e329d720082ab3ca"],"x":534,"y":9,"w":1182,"h":742},{"id":"2835c4be2e0c346c","type":"subflow","name":"subDrivstoffpris","info":"","category":"","in":[{"x":60,"y":80,"wires":[{"id":"629ced2da13dc595"}]}],"out":[{"x":440,"y":50,"wires":[{"id":"629ced2da13dc595","port":0}]},{"x":440,"y":110,"wires":[{"id":"629ced2da13dc595","port":1}]}],"env":[{"name":"station","type":"str","value":""},{"name":"statInt","type":"str","value":""},{"name":"statInt_Prev","type":"str","value":""}],"meta":{"version":"1.0","author":"SveinHa"},"color":"#DDAA99","outputLabels":["Trend","Skilt"]},{"id":"629ced2da13dc595","type":"function","z":"2835c4be2e0c346c","name":"Hjernen ;-)","func":"let sid = msg.id;\nvar station = msg.station;\nvar statInt = msg.statInt;\n//var statInt_Prev = statInt_Prev;\n\nvar prev = 0;\nvar diff = 0;\nvar msg2 = {}\n//console.log(msg.payload);\n//msg.payload = msg.payload.filter((/** @type {{ id: string; }} */ e) => e.id == sid);\nmsg.payload = msg.payload.filter((e) => e.id == sid);\n//console.log(msg.payload[0].brandId);\n//node.warn(msg);\n\n//msg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == station); \n//console.log(msg.payload[0].prices.D.type);\n//msg.payload[0].type = msg.payload[0].prices.D.type;//.filter(e => e.type == 'D');\nvar price = msg.payload[0].prices.D.price;\n//console.log(price);\nvar now = Number(new Date());\nvar age = (now - msg.payload[0].prices.D.lastUpdated) / 3600 / 1000; //age in hours\nvar diffSymbol = \"\";\nflow.set(\"$parent.\" + statInt, price);\nprev = flow.get(\"$parent.\" + statInt + \"_Prev\") || 0\n\n//node.warn(\"ID: \" + msg.payload[0].id + \", name: \" + msg.payload[0].name + \", brand: \" + msg.payload[0].brand );\n\nvar snitt = flow.get(\"$parent.AvgPrice\");\nvar min = flow.get(\"$parent.MinPrice\");\nvar max = flow.get(\"$parent.MaxPrice\");\nvar lolim = snitt - ((max - min)/6);\nvar hilim = snitt + ((max - min)/6);\nif (price < lolim) msg2.color = \"LIME\";\nelse if (price > hilim) msg2.color = \"RED\";\nelse msg2.color = \"YELLOW\";\n//node.warn(min + \"-\" + lolim + \"-\" + snitt + \"-\" + hilim + \"-\" + max);\n\nif (price != prev) {\n var ts = new Date();\n flow.set(\"$parent.\" + statInt + \"_Diff\", Number((price - prev).toFixed(2)));\n flow.set(\"$parent.\" + statInt + \"_Prev\", price);\n flow.set(\"$parent.\" + statInt + \"_PrevT\", Number(ts));\n}\n\ndiff = flow.get(\"$parent.\" + statInt + \"_Diff\") || \"-\"\nvar tss = flow.get(\"$parent.\" + statInt + \"_PrevT\") || 0\nvar ageD = Number((Number(now) - Number(tss))) / 3600 / 1000; //age in hours\nif (ageD > 999.9) ageD = 999.9;\n\nif (diff >= 0) diffSymbol = \"<font color=RED> \" + diff;//.toFixed(2);\nelse diffSymbol = \"<font color=LIME> \" + diff;//.toFixed(2);\nflow.set(\"$parent.\" + statInt + \"_DiffS\", diffSymbol);\n\ndiffSymbol = flow.get(\"$parent.\" + statInt + \"_DiffS\") || \"-\"\nmsg2.payload = \"<font size=6>\" + price.toFixed(2) + \"<font size=2>\" + diffSymbol + \"(\" + ageD.toFixed(1) + \"h)\";\nmsg2.topic = station.slice(0,15); //Forkort for lange navn\nmsg2.age = age.toFixed(1);\nif (age < 1) { msg2.stationcolor = \"LIME\"; }\nelse if (age < 6) { msg2.stationcolor = \"YELLOW\"; }\nelse if (age <= 12) { msg2.stationcolor = \"ORANGE\"; }\nelse if (age > 12) { msg2.stationcolor = \"RED\"; }\n\n//node.warn(msg2.topic + \"Price: \" + price + \" Prev: \" + prev + \"Diff: \" + diff);\nmsg2.pri = flow.get(\"$parent.\" + statInt + \"_Pri\") \n//node.send([null,msg2]);\n//node.warn(\"$parent.\" + statInt + \"-\" + msg2.pri);\nmsg2.src = msg.payload[0].logo;\n\nmsg.payload = Number(price.toFixed(2));\nmsg.topic = station;\n\nreturn [msg, msg2];","outputs":2,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":220,"y":80,"wires":[[],[]]},{"id":"dc20c0baebcded39","type":"persist in","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Dieselpriser","storageNode":"8a6654beead70801","x":1500,"y":690,"wires":[]},{"id":"52943a1fc077d28f","type":"persist out","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Dieselpriser","storageNode":"8a6654beead70801","x":1280,"y":690,"wires":[["835b0df2bd3edcbb"]]},{"id":"7014c2032a87fc3b","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":5,"width":"6","height":"2","name":"Price 1","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":140,"wires":[]},{"id":"671050bdedc0c3cb","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":15,"width":"6","height":"2","name":"Price 6","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":440,"wires":[]},{"id":"8e502b90702d3857","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":17,"width":"6","height":"2","name":"Price 7","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":500,"wires":[]},{"id":"b1eaf76d80b124b2","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":13,"width":"6","height":"2","name":"Price 5","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":380,"wires":[]},{"id":"13527989f83e29d2","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":3,"width":"6","height":"2","name":"Price 0","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":80,"wires":[]},{"id":"a789bc33845b6aae","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":9,"width":"6","height":"2","name":"Price 3","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":260,"wires":[]},{"id":"28fe85a134fe0971","type":"debug","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"debug 89","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":710,"y":590,"wires":[]},{"id":"dfb010ed7eafaf57","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Last update","func":"msg.label = \"Siste oppdatering\";\n//var d = new Date(msg.headers.date);\nvar d = new Date();\n//node.warn(d);\nmsg.payload = d.toLocaleString('nb-NO' );//.slice(0,16);\n//node.warn(msg.payload);\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":520,"wires":[["f10d3ac86fabfb52","a25c248dc4ebd8e1"]]},{"id":"f10d3ac86fabfb52","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":24,"width":"6","height":"2","name":"Siste oppdat","label":"{{msg.label}}","format":"{{msg.payload}}","layout":"row-left","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1090,"y":520,"wires":[]},{"id":"4fdfe701f4a3afa0","type":"comment","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Vis utvalgte dieselpriser m/trend","info":"","x":690,"y":50,"wires":[]},{"id":"920c8e464a11c598","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":560,"y":360,"wires":[["28fe85a134fe0971","dfb010ed7eafaf57","313d717f04abb611","7d2c0b671fe55eb5","9115f8c79d2fb5bf","bb875534cb2f1287","ef238c7de03c89ba","342412d6ccffa890","deb634361ea88282","73f01377bb3987bb","efb09c551659ae8e","c1e1c529d2ebbbe3","7907e0a5a1ff80b6","72b2d1bb06c9fd47"]]},{"id":"80fadd7556b173c2","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":25,"width":"6","height":"1","name":"Legend","label":"<font color=\"LIME\"><1h <font color=\"YELLOW\"><6h <font color=\"ORANGE\"><=12h <font color=\"RED\">>12h<font color=#43464B>","format":"","layout":"row-left","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1080,"y":590,"wires":[]},{"id":"a25c248dc4ebd8e1","type":"change","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"flow.get.AvgPrice","rules":[{"t":"set","p":"payload","pt":"msg","to":"AvgPrice","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":590,"wires":[["80fadd7556b173c2","4845524c229e5de4","575ebc0b7826b668"]]},{"id":"4845524c229e5de4","type":"change","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"Snitt","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":560,"wires":[[]]},{"id":"4bc7a1bfe0edbd3d","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":7,"width":"6","height":"2","name":"Price 2","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":200,"wires":[]},{"id":"a0ed1589c7578ebc","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":11,"width":"6","height":"2","name":"Price 4","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":320,"wires":[]},{"id":"313d717f04abb611","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Esso Avaldsnes","func":"msg.id = 203; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Esso Avaldsnes'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'EssoAval'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":120,"wires":[["df6111373c9fcb74"]]},{"id":"df6111373c9fcb74","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":120,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"9115f8c79d2fb5bf","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Uno-X Avaldsnes","func":"msg.id = 137; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Uno-X Avaldsnes'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'UnoXAval'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":200,"wires":[["c4e4ad48e1be3967"]]},{"id":"bb875534cb2f1287","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"YX 7-Eleven Norheim","func":"msg.id = 269; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'YX 7-Eleven Norheim'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'YX7ENorh'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":240,"wires":[["fedddf6d961e47e1"]]},{"id":"ef238c7de03c89ba","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Tanken Helganes - Flyplassvegen","func":"msg.id = 1546; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Tanken Helganes - Flyplassvegen'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'TankFlyp'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":280,"wires":[["f004caf9b1859658"]]},{"id":"342412d6ccffa890","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Cirkle K Kvala","func":"msg.id = 187; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Circle K Kvala'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'CirKKval'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":320,"wires":[["f280cce61136ea5f"]]},{"id":"deb634361ea88282","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Revheim Storbilvask","func":"msg.id = 22828; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Revheim Storbilvask'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'RevhStor'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":360,"wires":[["35afefb923880a86"]]},{"id":"7d2c0b671fe55eb5","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Esso Raglamyr","func":"msg.id = 216; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Esso Raglamyr'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'EssoRagl'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":160,"wires":[["2ca32bed009a91c7"]]},{"id":"73f01377bb3987bb","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Shell Norheim","func":"msg.id = 1342; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Shell Norheim'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'ShelNorh'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":400,"wires":[["13a80ea70008ef69"]]},{"id":"2ca32bed009a91c7","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":160,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"c4e4ad48e1be3967","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":200,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"fedddf6d961e47e1","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":240,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"f004caf9b1859658","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":280,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"f280cce61136ea5f","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":320,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"35afefb923880a86","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":360,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"13a80ea70008ef69","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":400,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"de080617e02b76c0","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Beregn snittpris","func":"var sum = 0;\nvar temp = 0;\nvar antall = 0;\nvar minPrice = 999;\nvar maxPrice = 0;\n\nflow.keys().forEach(function(element) {\n// if(element.substring(element.length -5,element.length)!=\"_Prev\"){\n if(element.slice(-5) == \"_Prev\"){\n temp = flow.get(element.slice(0, element.length -5));\n sum += temp;\n antall += 1;\n if (temp > maxPrice) maxPrice = temp;\n if (temp < minPrice) minPrice = temp;\n //node.warn(element.slice(0,element.length -5) + \" Sum: \" + sum + \" Antall: \" + antall + \" temp: \" + temp);\n }\n})\nmsg.payload = (sum / antall).toFixed(2);\nflow.set(\"AvgPrice\", Number(msg.payload));\nflow.set(\"MaxPrice\", Number(maxPrice));\nflow.set(\"MinPrice\", Number(minPrice));\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":900,"y":660,"wires":[["ba85ec803b447086"]]},{"id":"efb09c551659ae8e","type":"delay","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":710,"y":660,"wires":[["de080617e02b76c0"]]},{"id":"c9be417364a0636a","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Sorter på pris, store in flow","func":"var statList = []\nvar i = 0;\nvar temp = \"\";\n// Hent alle stasjoner of pris\nflow.keys().forEach(function(element) {\n if(element.slice(-5) == \"_Prev\"){\n temp = flow.get(element.slice(0, element.length -5));\n var name = element.slice(0, element.length - 5);\n var value = flow.get(element.slice(0, element.length - 5));\n statList.push({ name, value });\n }\n})\n// Sort lav->høy pris\nstatList.sort( (A,B) => A.value - B.value ) \n//node.warn((statList));\nstatList.forEach(function(element) {\n flow.set(element.name + \"_Pri\", i);\n i++;\n// node.warn(element);\n})","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":710,"wires":[[]]},{"id":"c1e1c529d2ebbbe3","type":"delay","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","pauseType":"delay","timeout":"100","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":720,"y":710,"wires":[["c9be417364a0636a"]]},{"id":"ba85ec803b447086","type":"debug","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Snittpris","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1080,"y":660,"wires":[]},{"id":"575ebc0b7826b668","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":26,"width":"6","height":"1","name":"Legend price","label":"","format":"<font color=\"LIME\" size=5>1/3 < <font color=\"YELLOW\">{{msg.payload}}<font color=\"RED\">< 1/3","layout":"row-left","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1090,"y":620,"wires":[]},{"id":"a5b30e2c9a5b185b","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":19,"width":"6","height":"2","name":"Price 8","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":560,"wires":[]},{"id":"5cdf4a4e44ba3e96","type":"ui_text","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","order":21,"width":"6","height":"2","name":"Price 9","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1630,"y":620,"wires":[]},{"id":"7907e0a5a1ff80b6","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"CircleK Hafrsfjord","func":"msg.id = 3691; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'CircleK Hafrsfjord'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'CirKHafr'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":440,"wires":[["ee11d26aa7381961"]]},{"id":"ee11d26aa7381961","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":440,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"c6597ae705c493fd","type":"subflow:2835c4be2e0c346c","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","x":1100,"y":480,"wires":[["69d3c375167219d4"],["e329d720082ab3ca"]]},{"id":"197fde062f906fe2","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 0","width":"2","height":"2","order":2,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":50,"wires":[[]]},{"id":"d3117ab9bbdc344d","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 1","width":"2","height":"2","order":4,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":110,"wires":[[]]},{"id":"a76caa7a16bac95c","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 2","width":"2","height":"2","order":6,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":170,"wires":[[]]},{"id":"99fbdbd6f1247a74","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 3","width":"2","height":"2","order":8,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":230,"wires":[[]]},{"id":"f41e2331b0b830d3","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 4","width":"2","height":"2","order":10,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":290,"wires":[[]]},{"id":"98ad46a8c1cec362","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 5","width":"2","height":"2","order":12,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":350,"wires":[[]]},{"id":"b4db27ab8e1249f9","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 6","width":"2","height":"2","order":14,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":410,"wires":[[]]},{"id":"211a49ea39c47dbf","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 7","width":"2","height":"2","order":16,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":470,"wires":[[]]},{"id":"345e2bc8bcaeeffd","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 8","width":"2","height":"2","order":18,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":530,"wires":[[]]},{"id":"f3a5b1da15641fda","type":"ui_media","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","group":"c5147f5beba7be52","name":"Brand 9","width":"2","height":"2","order":20,"category":"","file":"","layout":"adjust","showcontrols":false,"loop":false,"onstart":false,"scope":"local","tooltip":"","x":1630,"y":590,"wires":[[]]},{"id":"f82266bbecc5f929","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":70,"wires":[["13527989f83e29d2","197fde062f906fe2"]]},{"id":"7ec8a975f4e62ea5","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":130,"wires":[["7014c2032a87fc3b","d3117ab9bbdc344d"]]},{"id":"b4c42883c0d1b421","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":190,"wires":[["4bc7a1bfe0edbd3d","a76caa7a16bac95c"]]},{"id":"89f905a2a16a5653","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":250,"wires":[["a789bc33845b6aae","99fbdbd6f1247a74"]]},{"id":"bd92fd80ba8708f5","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":300,"wires":[["a0ed1589c7578ebc","f41e2331b0b830d3"]]},{"id":"919354dd3a9d85e1","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":360,"wires":[["b1eaf76d80b124b2","98ad46a8c1cec362"]]},{"id":"af920dde227a02ba","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":420,"wires":[["b4db27ab8e1249f9","671050bdedc0c3cb"]]},{"id":"42965b35532dc0a6","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":490,"wires":[["8e502b90702d3857","211a49ea39c47dbf"]]},{"id":"198ea5a17cf29258","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":550,"wires":[["a5b30e2c9a5b185b","345e2bc8bcaeeffd"]]},{"id":"591771770c56781a","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1530,"y":610,"wires":[["5cdf4a4e44ba3e96","f3a5b1da15641fda"]]},{"id":"72b2d1bb06c9fd47","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"Uno-X Tananger","func":"msg.id = 3589; // StasjonsID fra Drivstoffappen. Finnes i generelt \"Drivstoff\" tab.\nmsg.station = 'Uno-X Tananger'; // Visningsnavn. Kan tilpasses da stasjonsnavn i drivstoffappen ikke alltid er like beskrivende\nmsg.statInt = 'UnoXTana'; // Unikt kortnavn, 8 tegn, for bruk i flow-variabler\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":480,"wires":[["c6597ae705c493fd"]]},{"id":"835b0df2bd3edcbb","type":"ui_chart","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"","group":"c5147f5beba7be52","order":1,"width":"32","height":"20","label":"Dieselpris (4u).","chartType":"line","legend":"true","xformat":"dddd","interpolate":"step","nodata":"No data...","dot":false,"ymin":"","ymax":"","removeOlder":"4","removeOlderPoints":"","removeOlderUnit":"604800","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#f9fafa","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#0501f9","#9467bd","#f5ed00"],"outputs":1,"useDifferentColor":false,"className":"","x":1410,"y":640,"wires":[["dc20c0baebcded39"]]},{"id":"69d3c375167219d4","type":"junction","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","x":1240,"y":630,"wires":[["835b0df2bd3edcbb"]]},{"id":"e329d720082ab3ca","type":"function","z":"2447f70b5f1095ba","g":"77e67d4e89c2c546","name":"pri-pens","func":"switch (msg.pri){\n case 0:\n return [msg,null,null,null,null,null,null,null,null,null]\n case 1:\n return [null,msg,null,null,null,null,null,null,null,null]\n case 2:\n return [null,null,msg,null,null,null,null,null,null,null]\n case 3:\n return [null,null,null,msg,null,null,null,null,null,null]\n case 4:\n return [null,null,null,null,msg,null,null,null,null,null]\n case 5:\n return [null,null,null,null,null,msg,null,null,null,null]\n case 6:\n return [null,null,null,null,null,null,msg,null,null,null]\n case 7:\n return [null,null,null,null,null,null,null,msg,null,null]\n case 8:\n return [null,null,null,null,null,null,null,null,msg,null]\n case 9:\n return [null,null,null,null,null,null,null,null,null,msg]\n}\n","outputs":10,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1370,"y":310,"wires":[["f82266bbecc5f929"],["7ec8a975f4e62ea5"],["b4c42883c0d1b421"],["89f905a2a16a5653"],["bd92fd80ba8708f5"],["919354dd3a9d85e1"],["af920dde227a02ba"],["42965b35532dc0a6"],["198ea5a17cf29258"],["591771770c56781a"]]},{"id":"8a6654beead70801","type":"persist-store","filename":"persist-diesel.json","interval":"600"},{"id":"0d788a3660f620b1","type":"ui_group","name":"Drivstoffpriser","tab":"1083c01bcc75e66c","order":1,"disp":true,"width":"40","collapse":false,"className":""},{"id":"c5147f5beba7be52","type":"ui_group","name":"Wide","tab":"8b4128994ad0c3a1","order":2,"disp":false,"width":"40","collapse":false,"className":""},{"id":"1083c01bcc75e66c","type":"ui_tab","name":"Drivstoff","icon":"local_gas_station","order":24,"disabled":false,"hidden":false},{"id":"8b4128994ad0c3a1","type":"ui_tab","name":"Dieselpriser","icon":"drive_eta","order":23,"disabled":false,"hidden":false}] Regner med denne flow bare er å importere men må nok ha 2 opppdateringer av pris før tallene begynner å rime... Persist nodene er viktige på slike chart der tidsspennet er 1 mnd. (trasig å miste historikken ved blink i lyset...).
    2 poeng
  12. "Velg en (strømforsyning) med 30V og minst 3A som har instilling av Spenning og Strøm og display. " Helt enig, en (eller et par) skikkelig(e) strømforsyning(er) på labben gjør livet mye bedre. En ting som gjerne forvirrer de som kommer borti en slik første gang, er instillingene av spenning og strøm. Spenningsinstillingen er i utgangspunktet ubelastet, strøminstillingen er maksimalstrømmen forsyningen kan gi. Normalt behøver man ikke tenke på denne, men om man skrur maksimalstrømmen ned kan man redde komponenter om noe går galt. Tenk ohms lov, om motstanden er for lav og strømmen er begrenset må spenningen synke. For eksempel, om man kobler til noe som skal ha 5V og bruker maks 0,5W, det vil si maks strømforbruk på 0.1 A. Om man da setter strøminnstillingen på 0.01A vil sannsynligvis spenningen falle for tidlig og det vil ikke virke. Om man setter strøminstillingen på 3A og kobler noe feil, kan det gå 3*5=15W et sted det ikke burde, den magiske blå røyken slipper ut og ting virker ikke mer. Med å sette maksstrøm på 0.1A, eller kanskje litt over, skal alt virke og om man kobler feil, vil spenningen synke og sannsynligvis har man reddet det man jobbet med. For all del, i en del situasjoner kan det være vanskelig å anslå hva som er et fornuftig maksimalt strømtrekk, men det er skjelden noe går galt om spenningen faller. (For de som ikke vet det, elektroniske komponenter virker fordi de er fylt me magisk blå røyk. Om man kobler feil sipper den magiske blå røyken ut og det virker ikke lenger ... 😉 )
    2 poeng
  13. Jeg fiklet litt med dette i september. Jeg endte opp med scrape badevann.no, gjennom node-red. Hvis jeg ikke husker helt feil fikk jeg til det samme fra YR. Men det kan også være at jeg ikke fikk det til ettersom jeg brukte badevann.no. Badevann.no leverer temp til YR. Jeg er ganske langt fra en å være utvikler, så det er sikkert mye dårlig kode og praksis. Men den rapporterte hvertfall noen dager frem til de tok opp sensoren fra vannet. 🙂 [{"id":"0c39566e81bb8ea4","type":"debug","z":"c57ff172a079b457","name":"","active":false,"console":"false","complete":"false","x":1090,"y":480,"wires":[]},{"id":"7816e081d8cc62cc","type":"http request","z":"c57ff172a079b457","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://badevann.no/sjostrand/index.html","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":330,"y":440,"wires":[["a4e03e5132d659fc","7301681fd3aa1562"]]},{"id":"a4e03e5132d659fc","type":"html","z":"c57ff172a079b457","name":"","property":"payload","outproperty":"payload","tag":".container-maaling>p.temperatur","ret":"text","as":"single","x":635.5,"y":440,"wires":[["e414479b3204989a"]]},{"id":"5bd28de075baf5a8","type":"debug","z":"c57ff172a079b457","name":"","active":false,"console":"false","complete":"false","x":1090,"y":440,"wires":[]},{"id":"e414479b3204989a","type":"function","z":"c57ff172a079b457","name":"function 3","func":"msg.payload = msg.payload[0].trim();\nmsg.payload = msg.payload.replace('°', '');\nmsg.payload = msg.payload.replace(',', '.');\nmsg.payload = parseFloat(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":440,"wires":[["5bd28de075baf5a8","0ea7be013cddfc0a"]]},{"id":"7301681fd3aa1562","type":"html","z":"c57ff172a079b457","name":"","property":"payload","outproperty":"payload","tag":".container-maaling>p.observasjon","ret":"html","as":"single","x":640,"y":480,"wires":[["0c39566e81bb8ea4","e7319214d52a1b23"]]},{"id":"2dca4837390903ca","type":"inject","z":"c57ff172a079b457","name":"make request","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10800","crontab":"","once":true,"onceDelay":"5","topic":"","payload":"","payloadType":"date","x":160,"y":440,"wires":[["7816e081d8cc62cc"]]},{"id":"e7319214d52a1b23","type":"function","z":"c57ff172a079b457","name":"function 4","func":"let string = msg.payload[0];\nstring = string.replaceAll(\"<br/>\", \" \")\nstring = string.split(' ')\n// convert strings to date\n// time\nconst time = string[2]\n\n//day\nlet day = string[4].replace('.', ' ')\nday = day.split(' ')\nday = day[0]\n\n// month\nlet month = string[4].replace('.', ' ')\nmonth = month.split(' ')\nvar month1 = month[1]\n\nmonth1 = month1.toLowerCase();\nvar months = [\"januar\", \"februar\", \"mars\", \"april\", \"mai\", \"juni\", \"juli\", \"august\", \"september\", \"okotber\", \"november\", \"desember\"];\nmonth1 = months.indexOf(month1) + 1;\nif (month1 < 10){\n month1 = \"0\" + month1;\n}\n\n// year\nvar year = string[5].replace(',', '');\n\n//formatted date\nvar fulldate = time + \", \" + day + \"-\" + month1 + \"-\" + year;\n\n//messages\nmsg.payload[0] = time;\nmsg.payload[1] = day;\nmsg.payload[2] = month1;\nmsg.payload[3] = year;\nmsg.payload[4] = fulldate;\n\nmsg.unconverted = string;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":520,"wires":[["dd5cf51d5db1e569","89930a5dc84489d4"]]},{"id":"dd5cf51d5db1e569","type":"debug","z":"c57ff172a079b457","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1070,"y":520,"wires":[]},{"id":"89930a5dc84489d4","type":"ha-sensor","z":"c57ff172a079b457","name":"","entityConfig":"a28569d1428149b7","version":0,"state":"payload[4]","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1070,"y":560,"wires":[[]]},{"id":"0ea7be013cddfc0a","type":"ha-sensor","z":"c57ff172a079b457","name":"temp","entityConfig":"a5f24590b9fa0e64","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1070,"y":400,"wires":[[]]},{"id":"2e2322c710db25e2","type":"comment","z":"c57ff172a079b457","name":"Get bath temperature","info":"","x":480,"y":360,"wires":[]},{"id":"a28569d1428149b7","type":"ha-entity-config","server":"dc0802f6.645fa","deviceConfig":"8feaeddb449a1627","name":"Sea temperature","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Sea temperature"},{"property":"icon","value":"mdi:swim"},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"a5f24590b9fa0e64","type":"ha-entity-config","server":"dc0802f6.645fa","deviceConfig":"8feaeddb449a1627","name":"Sea temp","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Sea temp"},{"property":"icon","value":"mdi:swim"},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":"temperature"},{"property":"unit_of_measurement","value":"°C"},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"dc0802f6.645fa","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"8feaeddb449a1627","type":"ha-device-config","name":"Sea-temp","hwVersion":"","manufacturer":"Node-RED","model":"","swVersion":""}]
    2 poeng
  14. Da pakker jeg denne og får den endelig sendt avgårde 👍
    2 poeng
  15. Jeg prøver meg med en liten "leksjon". Du kan belaste 3 stk. 16 A sikringer fult ut på 3x32A hovedsikring. På skolen lærte jeg å sette opp antall kurser og belastning i Ampere i en tabell med fasene som kolonner og sikringene som rader. I moderne regneark er det en kjapp måte å få oversikt over sikringsstørrelsen som kreves som hovedsikring Normalt regnes det med en samtidighetsfaktor for dimensjonering av sikringsstørrelser på inntak/Hovedsikringer. Dette fordi det er sjeldent det utnyttes full effekt på en kurs som ikke har fast effektforbruk og det er sjeldent alle effekter benyttes akkurat samtidig. Samtidighetsfaktoren settes til 0,6 som en tommelfingerregel i bransjen. Dersom samtidighetsfaktoren settes til 0,5 kan det settes inn 6 stk. 1-fase 16A sikringer. Da må risikovurderingen fra elektriker inneholde et punkt om hvorfor samtidighetsfaktoren er redusert til 0,5. Dette er etter mine erfaringer for lite reserve til at jeg vil anbefale denne installasjonen. Når tilførsel er 3-fase bør belastning pr fase være nærmest mulig likt. Forskjellig strøm igjennom fasene vil gi det som kalles skjevlast og kan føre til at hovedsikringen slår ut tidligere enn ønskelig. Gitt eksemplene over ville jeg gått for 4 16A kurser på 3-fase 32A sikring. Da har du også reserve kapasitet så hovedsikringen ikke skal trippe ved maks belastning i henhold til prosjektert anlegg.(Ref. NEK400:2018 §132) Dette vil svekke automaten over tid og den vil trippe tidligere og tidligere. Da blir du forbannet og klager på den teite elektrikeren som installerte dette. Ved 3-fase 40A blir bildet litt annerledes. Her vil samtidighetsfaktor på 0,6 være akseptabelt for 6 stk. 1-fase sikringer på 16A. Faktisk er samtidighetsfaktoren 0,625. Noe som er høyere enn normalt. 40A/64A=0,625 I dette eksempelet har du også en liten reserve (eller buffer om du vil kalle det det) opp til hovedsikringens størrelse. Et annet tema er om du har kapasitet i eksisterende installasjon til å ta ut en så betydelig sikringsstørrelse til garasjen. Det må elektriker som skal utføre arbeide vurdere og gi deg den informasjonen du trenger for å sette av nok økonomiske ressurser til at oppdraget kan gjennomføres. Dersom det er tenkt elbil lading i garasjen blir det ikke så rett frem som i eksemplene over. Da må det legges til grunn at kursen til laderen skal beregnes som 100% belastet til enhver tid. 4. sikring i tabell 2 blir da ikke mulig å installere. Og vi er tilbake til tabell 1 med en liten twist på 2 av kursene som fortsatt har 0,6 i samtidighetsfaktor. Det samme vil gjelde for resterende eksempler og redusere antall sikringer som det er mulig å installere i garasjen. 3-fase 32A sikring og samtidighetsfaktor = 0,5 3-fase 40A sikring og samtidighetsfaktor = 0,6 3-fase lading av elbil er et omdiskutert tema da det ikke pr. dags dato finnes ladere beregnet for 3 fase tilkobling av IT/TT nett på markedet. EASE laderen kan kobles for 3-fase 230V lading, men da utføres ikke installasjonen i henhold til standarder definert av Norges tekniske komite (NEK). Link til artikkel i Teknisk Ukeblad: https://www.tu.no/artikler/er-trefaselading-pa-det-saernorske-stromnettet-egentlig-tillatt/509999 Om dere er forvirret nå så forstår jeg det. Selv erfarne elektrikere går surr i alle regler og krav i en hektisk hverdag, så "sit back and let the pros do their job". Dette er ikke fasit, men er basert på erfaringer fra arbeid som elektriker og som prosjektleder i boligprosjekter. Andre har andre erfaringer og vil kunne komme med annen informasjon og/eller utfyllende informasjon. La elektriker som skal utføre arbeidet ta avgjørelsen på hva som er best da det er de som skal skrive samsvarserklæring til slutt.
    2 poeng
  16. Det kan være en smart løsning. Jeg valgte en litt annen variant av det: En variabel settes til verdien "Dag", "Kveld"(som også er skumringstiden om morgenen) og "Natt" ut fra klokke og soloppgang/solnedgang. Ved "Dag" går lyset på 100%, "Kveld" rundt 30% og "Natt" rundt 1%. Dimmeprosentene kan variere noe ut fra dimmertype og lyskilde. Mange veier til en smart løsning av dette... En lysautomasjon jeg er spesielt fornøyd med er på soverommet. En HUE LED-stripe og HUE bevegelssensor under sengen. Ved bevegelse dimmer LED-stripen opp til 100/255 i løpet av 5 sekund, står på et minutt og dimmer ned igjen i løpet av 2 minutt. Da kommer lyset på ikke så veldig brått og forsvinner igjen helt umerkelig. Veldig enkelt å få til når en kan sette "transition time" i dimmeren til litt høye verdier. Noen dimmere har ikke denne funksjonen og andre har en max på 5 sek. For å skryte litt av taklyset på soverommet også: Trådløs bryter limt på skapdøren til garderobeskapet (eneste praktiske plassen den kunne være) slår lyset på 1% om det er av og slår av om det er på. Så tar automasjonen over og sjekker om dimmeren står på 1%. Hvis så dimmes opp til 30% på kveld og 100% på dag. Langt trykk på bryter gir 100% uansett.
    1 poeng
  17. Kommer an på om knappen sender event for hold og slipp.......
    1 poeng
  18. For min del kan jeg ikke si noe om det, men vil gjerne bemerke to ting. Containeren er hos meg utrolig stabil, virker som en drøm. Homely fortalte meg at det vil komme en stor oppdatering slutten av mars, uten at jeg vet, hva den vil inneholder.
    1 poeng
  19. Det er slik struct tm er spesifisert. tm_year er "year minus 1900". Se f.eks https://man7.org/linux/man-pages/man3/tm.3type.html
    1 poeng
  20. Dessverre har jeg tabbet meg ut når jeg mener at jeg selv fint kan ta jobben med å måle opp bredde og høyde på et vindu. Når noen anbefaler at butikkens ansatte heller kommer og gjør det så er det ikke fordi ens egne evner til å måle opp er i tvil. Det er fordi ansatte i butikken sine evner til å bestille riktig som settes i tvil. Jeg dummet meg ut der. Jeg har målt riktig bredde, men i steden for å få gardiner som har noen millimeter klaring på hver side, har jeg nå to dyre gardiner som faktisk er 1-2mm bredere enn oppgitte mål. Jeg hadde tilogmed en gammel gardin med meg i butikken da jeg bestilte så de i butikk kunne målt på denne, men det gjorde de ikke. Nå hevder de at det hele er min egen feil og må ta tapet på 19.000,- Men det skal vi bli to om, djiizes for en gjeng............ Så dette er et tips. La butikken selv møte opp og måle når de reklamerer for gratis befaring. Jeg er snart 60 år og lærer dette først nå, dessverre.
    1 poeng
  21. Har sendt deg noen timers log på DM @Guahtdim, gi lyd hvis du trenger noe mer.
    1 poeng
  22. @Teknor Ja, Node Red er bare en bonus til brukere av andre systemer. 🙂
    1 poeng
  23. Uansett hva jeg kommer opp med, jeg skal skrive om det her.
    1 poeng
  24. Men det er jo en "kjedelig" løsning. Hva med en vibrasjonssensor over zigbee i barbermaskinen? Edit: Eller, hvis barbermaskinen har en lade-/vaskestasjon, en proximity switch i basestasjonen?
    1 poeng
  25. For å lettere kunne styre lysstyrke på bad om morgenen, har jeg laget en binær sensor som indikerer om noen sover. Dette er en bayesisk sensor som bruker CO2 nivå på soverom og Android sin "Sleep Confidence" som hentes fra tlf via Home Assistant appen. I HA appen er det en lang liste med sensorer en kan sende til HA og som en kan bruke til automatiseringer. Det jeg bruker er først og fremst om jeg er hjemme eller i andre definerte soner som feks jobb. Jeg har også en sensor for om jeg er i bilen. Batterinivå på tlf er også greit å ha et varsel på hjemme - dvs. det er greit for meg å ha oversikt over kona sin tlf's batteri. Hun glemmer å lade den..... Sleep Confidence er en sensor som mer eller mindre nøyaktig forteller om eieren sover eller ikke. Med å fore dette inn i en bayesisk sensor i HA sammen med CO2 nivå og en "sleeptime" sensor som igjen er styrt av knappetrykk og bevegelse i huset, så har jeg en "noen sover" sensor som treffer overraskende bra. binary_sensor: - platform: bayesian name: "Noen sover" unique_id: fc5256c9-0bbf-4b4a-94c7-01bc6ae28f2c prior: 0.5 probability_threshold: 0.5 device_class: presence observations: - entity_id: sensor.pixel_7_sleep_confidence platform: "numeric_state" above: 94 prob_given_true: 0.5 prob_given_false: 0.1 - entity_id: sensor.sm_s901b_sleep_confidence platform: "numeric_state" above: 94 prob_given_true: 0.5 prob_given_false: 0.1 - entity_id: input_boolean.sleeptime prob_given_true: 0.6 prob_given_false: 0.05 platform: "state" to_state: "on" - entity_id: sensor.soverom_co2_value platform: "numeric_state" above: 520 prob_given_true: 0.6 prob_given_false: 0.05 Deretter bruker jeg en template sensor som tar hensyn til klokkeslett lagt inn et tidsfelt og som styrer svakt lys på bad om kveld. Her er det også en forsinkelse på 20 minutt slik at det ikke blir sterkt lys etter at en har stått opp og fortsatt er på badet. template: - binary_sensor: - unique_id: lowlightlevel name: lowlightlevel state: >- {{ now().hour < 5 or now().hour*3600+now().minute*60 >= (state_attr("input_datetime.lowlightlevel_from", "timestamp") | int(0)) or is_state("binary_sensor.noen_sover", "on") }} delay_off: minutes: 20
    1 poeng
  26. Jeg startet selv med Philips Hue Hub og hadde nærmere 80 lys, ute og inne. Og en mengde dimme brytere og bevegelsesensorer. Etterhvert ble det Home Assistant på meg, men det var fordi jeg ønsket å styre varme, ventilasjon, alarm, garasjeport, vanning osv. Hadde det kun vært lys så kunne jeg fint brukt Philips Hue Hub. Den hadde fortsatt dekket mitt behov der. Den er forholdsvis lett å bruke, men allikevel ganske kraftig på lysstyring.
    1 poeng
  27. Tusen takk @stigvi for å oppdatere koden. Da fikk jeg egenlig tilbake timer med regn, som er mer normalt her på vestlandet😁 Oppdaget nå at alle mine template er laget på gamlemåten.🤓
    1 poeng
  28. Merk at weather.orstad_utsyn går igjen 3 ganger i koden nedenfor. Dette må du endre til navnet på din vær sensor. Den oppdateres hver hele time så når du legger den inn vil den stå med tilstand "unknown" en stund til kl. blir hel time. Edit: jeg endret trigger fra timebasert til hver endring på værmelding. Så da er weather.orstad_utsyn nevnt 4 ganger. Årsaken til endringen er her: https://github.com/home-assistant/core/issues/99914 Mulig jeg gjør flere endringer når dette er testet noen dager. template: - trigger: - platform: state entity_id: weather.orstad_utsyn action: - service: weather.get_forecasts data: type: hourly target: entity_id: weather.orstad_utsyn response_variable: w sensor: - unique_id: timer_med_sol name: "Timer med sol" unit_of_measurement: "h" device_class: duration state: >- {% set vars = namespace(count=0) %} {% set vars = namespace(found=true) %} {% set vars.count = 0 %} {% set l = w['weather.orstad_utsyn'].forecast|map(attribute='condition')|list %} {% for item in l %} {% if vars.found == true and item == 'sunny' %} {% set vars.count = loop.index %} {% else %} {% set vars.found = false %} {% endif %} {% endfor %} {{ vars.count }} - unique_id: timer_med_opphold name: "Timer med opphold" unit_of_measurement: "h" device_class: duration state: >- {% set vars = namespace(count=0) %} {% set vars = namespace(found=true) %} {% set vars.count = 0 %} {% set l = w['weather.orstad_utsyn'].forecast|map(attribute='precipitation_probability')|list %} {% for item in l %} {% if vars.found == true and item|float(0) <= 2 %} {% set vars.count = loop.index %} {% else %} {% set vars.found = false %} {% endif %} {% endfor %} {{ vars.count }}
    1 poeng
  29. 1 poeng
  30. Please send the debug message as a text file to me as DM here on the forum. I will look into it.
    1 poeng
  31. For meg høres det ut som sløsing. Jeg har en 6'er og en 7'er på hvert sitt bad. Ved direkte sammenligning så virker 7eren marginalt raskere i responsen, men det er ikke noe jeg tenker på i praktisk bruk.
    1 poeng
  32. Jeg ønsket meg flere signaler direkte inn til Home Assistant, og selv om Raspberry'n har mange IO så kan disse ikke brukes. Det fins mange ideer på nett, men felles er at de krever mye kløkt og er gjerne begrenset til bestemte releaser av Home Assistant. Så fant jeg muligheten til å benytte en ESP, som jo har mange IO, både digitale og analoge. Jeg har noen ESP-WROOM-32 men de fleste lignende kan vel brukes. Så jeg prøvde meg på den "enkleste", å bruke HACS. Det fikk jeg ikke til, sannsynligvis pga manglende ressurser (RAM, CPU-kapasitet, ?) i min Raspberry 3B+. For spesielt interesserte, Her er problemer og løsning av hva jeg gjorde, bare som eksempel på at man trenger ekspertise: https://community.home-assistant.io/t/esphome-setup-yaml-file-not-in-config-esphome/682926/12 Det var en mix av flere metoder som gikk i konflikt med hverandre. Ikke gjør det slik... Jeg fjernet alle spor av ESP i Home Assistant og startet på ny. Mitt utgangspunkt: Home Assistant kjører på Raspberry Pi 3B+. PC med Windows 10. ESP-WROOM-32. Gjør det slik isteden En grunn til at jeg lager denne beskrivelsen er at det er mange tråder som beskriver dette, men jeg fant ikke den røde tråden som ga meg rett vei gjennom, så jeg samlet denne oppskriften med referanse til de viktigste trådene. (En "ulempe" er at .yaml-fila blir liggende lokalt på din PC og ikke på Raspberry'n. Men det er greit for min del) Manual steps- Første gang, beskrevet her: https://esphome.io/guides/installing_esphome.html Du må ha installert Python. Her står det beskrevet hvordan dette gjøres, og hvordan du deretter installerer ESPHome - Merk: Dette installerer verktøyet på din PC, ingenting er lagt på ESP'n enda. Følg denne oppskriften ned til og med sjekk av versjon. Så til programmering av ESP32: ESP'n koples til PC'n med en USBkabel. (Kommando linje i Ledetekst (Cmd) er her indikert med ">") https://esphome.io/guides/getting_started_command_line ESPHome has a friendly setup wizard that will guide you through creating your first configuration file. For example, if you want to create a configuration file called livingroom.yaml: > esphome wizard livingroom.yaml Nå har du fått laget en .yaml-fil som er lagret på din PC. Den finner du på C:\Users\Navnetditt\ Det kan være litt upraktisk, jeg flyttet den til egen katalog under .\Documents\SmartHome\ Da må du også endre stien dit i vinduet for Ledetekst. Det neste blir å kompilere og laste denne opp til ESP32: Dette må gjøres hver gang jeg endrer .yaml. Merk at dette kan ta et kvarters tid ! > esphome run livingroom.yaml Når det er på plass får du beskjed: This time when uploading, you don’t need to have the device plugged in through USB again. The upload will magically happen “over the air”. Using ESPHome directly, this is the same as from a USB cable. For min del har det ikke alltid fungert, så da må jeg bruke kabel igjen. Hva du kan legge i din .yaml-fil finner du en start til i linken over, https://esphome.io/guides/getting_started_command_line og her er utgangspunktet / Index for det meste - ESPHome.io Her må du eksperimentere, det er (for) mange muligheter og det beste er nok å leite opp eksempler og lære/bygge på disse. Når ESP'n er oppdatert vil du finne den i Home Assistant som enhet og med entities som definert i .yaml-fila. Noen ganger må man oppdatere til siste versjon. Sjekk din versjon: > esphome version Version: 2021.12.3 Eller, bruk: > pip3 install -U esphome Dersom du ikke har siste versjon så oppdateres esphome nå. Info: https://esphome.io/guides/faq.html#how-do-i-update-to-the-latest-version Hva som er endret siden sist finner du her: https://esphome.io/changelog/ Noen ganger må også Python oppdateres, du får varsel og klartekst på hva du må gjøre: [notice] A new release of pip is available: 23.3.2 -> 24.0 [notice] To update, run: python.exe -m pip install --upgrade pip Annet: More info on Esphome command line interface: https://esphome.io/guides/cli Av en eller annen grunnn virker ESP32 dårlig på WiFi kanal 1-4, så ruteren må sette kanal til fex 5 eller høyere. Og båndbredde må settes fast til 20MHz. Sjekke at .yaml er ok(ikke last opp): Esphome config livingroom.yaml Merk at en modul med ESP32 montert benytter noen av IO for å styre Flash, WiFi og periferikretser samt styre boot. Disse bør helst ikke brukes med mindre man vet begrensningene. Det fins mange artikler om dette. Noen opplever at ESP'n ikke kopler seg til nett uten at USB Serial er tilkoplet: https://community.home-assistant.io/t/esp32-device-only-connecting-to-wi-fi-when-also-directly-connected-via-usb-serial/599885/4
    1 poeng
  33. Fantastisk stykke arbeid som har blitt gjort i forhold til dette 🙂 Men for dem som ikke er helt rå på dette med koding å slikt og helt klarer å se for seg hvordan dette skal gjøres, så kan kanskje noen lage en liten forklaring for hvordan få dette til i node red med ferdig flow og eventuelt en ferdig .json fil?
    1 poeng
  34. Jeg leverer i all hovedsak Fibaro i mine smarthus løsninger, uten de helt store utfordringene. Fra tid til annen vil du finne elektronikk produkter som blir defekt, eller slutter å reagere. Prøv å slette den og legg den inn igjen på nytt - det kan av og til hjelpe.
    1 poeng
  35. Er vel ikke noe revolusjonerende ifra 6rn til 7rn? Jeg kjører selv 6rn og bruker den i hovedsak til temperatur og bevegelsedetektering, og den fungerer utmerket til det, så for meg er det sløsing ^^
    1 poeng
  36. Dersom du skaffar ei røykmaskin som har enten en knapp på maskina eller lang ledning med knapp du må holde inne for å lage røyk kan du erstatte knappen med ein Shelly1. Den har isolert kontakt så kan koble sammen to ledningar og imitere at den er bryteren. Samtidig har den eit vidt spenningsområde du kan strømforsyne den med, 12v, 24-60v og vanleg 230v. (Her må du lese manualen nøye om du skal bruke 12v). Eg anbefaler 12v eller 24v om du kan finne det inni røykmaskina eller med ein batterieliminator ex. https://www.clasohlson.com/no/Batterieliminator-24-W/p/39-1511 Shelly1 er litt tryggare i bruk om du unngår å koble den på 230v. Shelly1 kan du bruke på same måte til å fjernstyre garasjeporten. Dei fleste portar har 24VDC på ein skruterminal så du kan strømforsyne Shelly1 med det og så brukar du releutgangen til å koble sammen bryterinngangen for åpne lukke port. Legg inn i Shelly1 en auto-off timer på ex 500ms. Då vil kvar aktivering av Shelly1 sende en puls til garasjeporten så vil porten enten gå opp eller ned. Du kan og montere en magnetkontakt og koble den til inngangen (velg detatched mode) og då vil du få status på om porten er åpen. Så kan du bruke enhver smartplugg til strømforsyninga til røykmaskina. La av/på bryteren på maskina stå på så kan du styre den med å slå av og på smartpluggen. Så kan du bruke ditt favorittautomasjonsprogram, eg ville brukt Home Assistant sidan det er det eg har og laga en automasjon. 2stk hjelpera input_boolean: Forvarme røykmaskin og input_button Kjør røykmaskin. 1 Automasjon trigges av Forvarme røykmaskin. Slå på smartplugg med en gang. Så legg du inn en timer slik at smartplugg slår seg av etter ex. 30 minutt. 1 Automasjon trigges av Kjør røykmaskin, aktiver Shelly1, slå på lys, vent x sekund, aktiver garasjeportåpner, etter x sekund slå av røykmaskin, slå av smartplugg. Så kan du vurdere om du vil ha automatisk lukking av porten etter x sekund, men det kan jo vere problematisk så det må du nesten risikovurdere. Røykmaskina burde du kunne montere i ei hylle på veggen opp under taket, så laga du eit rør ex. takrennerør eller PE-rør slik at du kan skyve maskina inn i røret. Når du då skal fylle røykvæske treng du berre trekke den litt til side og løfte den ned for å fylle. Rørkoblinga treng ikkje vere 100% tett, røyk blir det uansett. Så kan du forgreine og legge rør dit du vil. For å justere kor mykje røyk som kjem ut på kvar plass kan du strupe litt åpningen der det kjem mest røyk.
    1 poeng
  37. Kjenner ikke til noen norske, dessverre. Selv bestilte jeg fra Geekbord Official Store (Aliexpress). For en bundle med M.2 adapter, powersupply og original aktiv kjøler betalte jeg 42,5 Euro inkl. frakt og moms, men de har også M.2 alternativer. Frakten tar jo litt lenger tid da. For min del gikk det 3 uker fra bestilling til mottak
    1 poeng
  38. Ikke akkurat i Norge men ThePiHut har mye rart... Jeg kjøpte resten av Pi-ene de hadde da der var vakuum i markedet for et år og to siden...
    1 poeng
  39. Jeg har hatt det på Android en god stund, men har ennå ikke kommet på noe å bruke det til. Garasjeport er nok det nærmeste, men jeg har allerede en løsning som fungerer bedre. Jeg har en NFC brikke skjult under dashbord og bare "tæpper" telefonen der for å åpne eller lukke. Mulig jeg hadde brukt Android Auto hvis bilen hadde støttet trådløs tilkobling. Det er stort sett på lengre turer jeg tar meg bryet å koble til ledning. Ellers ser jeg at en kan opprette sensorer for å lese status på bilen som feks km-teller. Men disse virker ikke på min bil, dessverre.
    1 poeng
  40. Disse kom fra en bilsjapp på Oslokanten. Godt priset og forsvant fort... Ser de har steget litt i pris nå, mine var nok litt for billige (kr 1990 inkl mva)... https://www.finn.no/bap/forsale/ad.html?finnkode=311355249&ci=4
    1 poeng
  41. Jeg vil gjerne be om at dere gir en stemme på denne: https://community.home-assistant.io/t/energy-dashboard-is-shifted-one-hour/685596
    1 poeng
  42. Jeg har delt det opp i funksjonalitet/tema. Alt lys på et kort. Alt for varme på et annet. I tillegg har jeg delt det opp i enkle kort som kun gjør det viktigste og mer tekniske "nerde" kort hvis en vil studere detaljer. Og så kan du også styre hvilke kort som skal være tilgjengelig for hvilke brukere så du kan unngå å presentere for mye dilldall til de som ikke har interesse av det. Men min filosofi er egentlig at det meste skal gå automatisk. En skal slippe å trykke på knapper på veggene og slippe å åpne appen på telefon. Men det er vanskelig å gjennomføre dette 100%
    1 poeng
  43. @Hr Kotelett bare si ifra om du trenger hjelp
    1 poeng
  44. Som jeg lovet: Koden øverst Det finnes en million guider om det å komme igang med Arduino eller ESP32 så egentlig burde jeg bare henvise til nettet, men for å gjøre dette komplett får jeg ta en miniversjon her også: Skaff deg en ESP32 🙂 Dessverre ser jeg at Kjell&co ikke fører den versjonen lengre så da blir det Aliexpress kanskje? Last ned Arduino IDE. Etterhvert ønsker du kanskje å bruke platform.io for VS Code, men i starten er Arduino IDE helt greit Trykk på BOARDS MANAGEREN og last ned ESP32 Sjekk i Tools/Port menyen hvilke seriell porter du har FØR du plugger inn ESP32 Koble prosessoren til PCen med en USB kabel. (Sjekk at det røde lyset tenner på ESP32'en) Gå i Tools/Port menyen og velg den porten som nå (helst) har dukket opp Gå i Tools/Board:/ESP32 menyen og velg ESP32 Dev Module Kopier og lim inn programmet (istedet for det som ligger i den høyre delen av vinduet (void setup() osv)) Trykk på toolbar inkon Pil til høyre (Upload) og vent på at programmet kompilerer og laster ESP32'en Om alt går bra står det Leaving... Hard resetting via RTS pin... Nå skal det blå lyset blinke hvert sekund. Hurra du har laget et program og kjører det på en mikroprosessor. La oss koble til serial monitoren for å følge med i hva som skjer i programmet. Endre programmet til dette: Trykk på toolbar pila igjen og vent på kompilering og upload. Når den er ferdig velger du Tools/Serial Monitor og endrer dropdown boksen til høyre til 115200 Du ser nå teksten som mikroprosessoren skriver ut til deg. Om du trykker på den lille bryteren til venstre for USBen på ESP32 kortet vil den restarte. La oss nå bruke en "bryter" til å tenne LEDen istedet. Last ned og print ut dette kartet og heng det på veggen i laben din: Vi skal nå bruke GPOI pin 13 som input pinne. Vi definerer den som INPUT og sier ifra at vi ønsker at ESP32'en internt skal sørge for å dra den opp til HIGH dersom den ikke er tilkoblet til noe. For å aktivere den trenger vi da kun å koble den til jord (GND) Vi endrer programmet til å teste på denne pinnen og styre lyset. For at ikke teksten skal rase forbi (prøv uten den linja så skal du se) beholder vi den lille pausen på 1 sek. ( delay(1000); ) Da blir programmet slik: Om du nå kobler en ledning mellom GND og GPOI_13 vil du se at LEDen tenner. Når vi har gått gjennom MQTT Komme i gang skal vi bygge dette ut og styre LEDen og lese pinnen over MQTT i ESP32/MQTT Det første programmet
    1 poeng
  45. ...og dukk!!! Meteorologene vil ha seg frabedt påstanden om at de spår været. Det er noen ganske så heftige, matematiske modeller bak disse værmeldingene, men når det er så mange usikkerhetsmomenter blir resultatet uansett aldri 100 % sikkert. Det du egentlig er på jakt etter er jo en mer nøyaktig værmelding enn det de forskjellige meteorologiske instituttene klarer å hoste opp. Jeg er ganske trygg på at om du klarer å komme opp med en løsning på det vil du kunne tjene en god del penger på den løsningen 😉
    1 poeng
  46. Beklager sent svar 🙂 Det gikk meget bra. 1. Kjøp Rithum Violet switch 2. Knytt den opp på WiFi 3. Kjøp Homey Pro Core hos Rithum (blir sendt automatisk til Violet switch) 4. Installer Rithum app på Homey Pro 5. Lag flow og den dukker automatisk opp på Violet switchen
    1 poeng
  47. Nå er jeg veldig sent ute med å svare på denne, og sikkert ikke aktuelt for deg lengre. Men her er noen ord tilfelle andre lurer. Det sagt så er det ingen tvil om at det er billigere systemer der ute. Personlig har jeg gått all in i Ubiquiti sitt UniFi økosystem med nettverk og Protect av to hoved grunner: Alt av opptak er lokalt, ingen skytjeneste men fremdeles tilgjengelig fra utenfor nettverket via portal. Semi proft nettverk som er skalerbar med et stort brukerforum på reddit m.m Har 2 PoE kamera, 2 WiFi kamera og smart ringeklokke på WiFi med strøm fra ringeklokketrafo. Unifi kan brukes til alt fra lys, bevegelse og lyd deteksjon m.m: Stream kan enkelt legges til i Dashboard, og på Home Assistant Stream Deck både som live view og klikkbar knapp som åpner RTSP stream: Personlig er UniFi 10/10 for meg
    1 poeng
  48. Som @NilsOF sier: Kvaliteten varierer MYE, og man vet ikke hva man får. Denne synes jeg er fantastisk:
    1 poeng
  49. Jeg har lagt en planke på tvers, så rygger jeg til bakhjulene treffer den
    1 poeng
Vinnerlisten er satt til Oslo/GMT+01:00
×
×
  • 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.