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

Vinnerliste

  1. stigvi

    stigvi

    Medlemmer


    • Poeng

      26

    • Innlegg

      2 609


  2. SveinHa

    SveinHa

    Medlemmer


    • Poeng

      8

    • 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 29. 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. https://rc.home-assistant.io/blog/2024/03/27/release-20244/ Det er ikke så mye mer å si enn JUHU!!!! Endelig muligheter for å kategorisere automasjoner og så flesker de til med å kunne kategorisere og merke hva som helst annet. Jeg tenkte på min egen PID regulering som holder huset i rette effekttrinn på nettleie. Her er listen over gulvvarme og andre varmekilder hardkodet i et skript for å få rett prioritering. Men det kunne vært løst mer elegant med å sette en merkelapp på hver varmekilde som angir prioritering. Da kan skriptet lages universelt og blir lettere å dele.
    2 poeng
  8. 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
  9. 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
  10. Forsøker med en pantomime her. Følg bildene i den rekkefølgen de står, altså "Innstillinger" - "Tilbehør" - "Sensor X"
    2 poeng
  11. 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
  12. 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
  13. "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
  14. 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
  15. Da pakker jeg denne og får den endelig sendt avgårde 👍
    2 poeng
  16. 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
  17. 40 A * 397,9 = 15 916 W maks strømtrekk. Bare husk nok sikringer. Ut ifra listen din kan du dele opp ganske bra. Egen til fryser egen til kompressor egen til mikro egen til ventilasjon egen til stikk og lys kjøkkenområde egen til garasjeport egen til elbillader egen til generelle stikk og lys osv..
    1 poeng
  18. Jeg driver med fotografering når jeg får tid til å unslippe husets automatiseringer. Da er det nyttig å vite når gylden og blå time starter og stopper så jeg har lagd et kort i Home Assistant som viser meg dette. Men dette har vært basert på hjemmeposisjon. Det er jo mindre interessant når en er på reise så jeg endret dette til å være basert på telefonens posisjon. Sun2 er navnet på en integrasjon som jeg bruker for å hente klokkeslett når solen er i bestemte høyder. Og telefonens posisjon kommer i fra Home Assistant appen for Android. Jeg setter en ny posisjon når jeg selv har flyttet meg mer enn 50km. alias: Ny posisjon til sun2 description: "" trigger: - platform: state entity_id: - device_tracker.pixel_7 condition: [] action: - service: sun2.get_location data: location: phone response_variable: location - if: - condition: template value_template: >- {{ distance(location.latitude, location.longitude, 'device_tracker.pixel_7') > 50 }} then: - service: sun2.update_location metadata: {} data: location: phone latitude: "{{ state_attr('device_tracker.pixel_7', 'latitude') }}" longitude: "{{ state_attr('device_tracker.pixel_7', 'longitude') }}" time_zone: "{{ state_attr('sensor.pixel_7_current_time_zone', 'time_zone_id') }}" mode: single
    1 poeng
  19. Har automatisert en Viwa vannstopper sammen med et Fibaro smart implant. Nå kan jeg se og styre vannstopper fra Homey. Betydelig rimeligere å kjøpe billige Tuya zigbee sensorer (har 6 st allerede) fra Aliexpress enn å kjøpe et komplett system fra f.eks. Høiax eller Waterguard.
    1 poeng
  20. https://www.elektroimportoren.no/fibaro-z-wave-roller-shutter-4/95019/Product.html Fibaro Z-Wave Roller Shutter 4 med 800-chipen. Spennende at Fibaro lanserer noe nytt, kanskje vi ser flere produkter fremover. De har ikke skrevet noe på side egne sider enda, så er nok ganske nytt. Fant en sammenligningstabell med Shutter 3 vs Shutter 4.
    1 poeng
  21. 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
  22. 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
  23. Jeg hadde heller kjøpt denne: https://www.silabs.com/development-tools/wireless/z-wave/z-wave-800-dev-kit?tab=overview
    1 poeng
  24. Har sendt deg noen timers log på DM @Guahtdim, gi lyd hvis du trenger noe mer.
    1 poeng
  25. @Teknor Ja, Node Red er bare en bonus til brukere av andre systemer. 🙂
    1 poeng
  26. Bør gå an å få til noe lignende i HA ja. Ikke så vanskelig heller, men litt jobb og kan bli litt knot for en nybegynner uten mye erfaring med data. Trenger egentlig bare Home Assistant på en Raspberry Pi eller annen enhet, en addon som heter "Mosquitto broker" og MQTT-integrasjonen. (Edit: Og en skjerm, der en eller annen for for android-enhet er vanligste og enkleste løsning.) Du kan også sette opp HA på en gammel laptop eller noe om du vil teste det ut før du begynner å bruke penger på det. Oppsett av home assistant: https://www.home-assistant.io/getting-started/ Mosquitto: https://github.com/home-assistant/addons/blob/master/mosquitto/DOCS.md MQTT: https://www.home-assistant.io/integrations/mqtt/ AMS-leser oppsett mot HA: https://github.com/UtilitechAS/amsreader-firmware/wiki/How-to-add-to-Home-Assistant Det bør være det meste av guider du trenger for å komme i gang 🙂
    1 poeng
  27. 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
  28. Det vil jeg også. Men kona bestemmer. Men jeg har lagd "sterkt lys på speil" med et knappetrykk.......
    1 poeng
  29. 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
  30. Uten at det har noe med problemene med bygging av prosjektet, men du skriver at du har fått dekryptert nøkkelen til din Multical 22. Er det faktisk det du mener, eller har du fått tak i nøkkelen på annet vis? Det å dekryptere den er bortimot umulig uten enorme mengder datakraft (eller særdeles mye flaks), så jeg ble litt nysgjerrig på det. Når det gjelder problemet med å bygge, så testet jeg å klone det repoet du nevner, og det bygger fint i Visual Studio Code med PlatformIO her hos meg. De eneste to endringene jeg gjorde var å rename config_template.h til config.h (ingen endringer i filen), samt å bytte navn på board (under env:esp8266) i platformio.ini fra d1_mini_lite til nodemcuv2. Hvorfor det da ikke bygger hos deg er vanskelig å svare på. @monsivar Ja, det er FlowIQ 2200 jeg har, og leser av data fra. Har du laget noen hardware enda, og har du tilgang på nøkkelen til måleren din? @Dezzorex Har du bygget sammen en mottaker med D1 mini og CC1101 enda?
    1 poeng
  31. 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
  32. Når det gjelder Aqara sin lyssensorer så må jeg innrømme at jeg aldri har åpnet disse for å bytte batteri. Så jeg vet egentlig ikke om det står et 2032 knappebatteri i de. Noe nevneverdig større enn det er det ikke plass til. Men de har rapportert lysstyrke i mange år så enten er de ekstremt strømgjerrige eller så har de et lite solcellepanel på innsiden som de lader batteri med. Det siste er ikke helt fjernt når en ser batterinivå siste døgn. Det går opp fra 60-80% om morgenen til 100% på ettermiddag. Edit: Jeg ser i en omtale at de har CR2450 batteri så da er det ikke den helt minste typen. Og at batterikapasiteten går til 100% skyldes nok at de ligger i solen og varmes opp.
    1 poeng
  33. Eg bruker Aeotec Multisensor 6 (fast strøm) og er godt fornøyd med det 🙂
    1 poeng
  34. Etter en opptelling har jeg 17 slike sensorer. Jeg bruker Philips Hue utendørs og innendørs bevegelsesensorer. De sender lysstyrke hvert 5. minutt og går til >60000 lux. Jeg har noen få Aqara bevegelsesensorer, men de stopper på 1000 lux. Og så har jeg noen få Aqara lyssensorer som ligger løst i enkelte vinduskarmer. Det er for å måle om sol skinner inn vinduet med hensyn til automatiske gardiner. De klarer også >30000-60000 lux. Alle sensorer, bortsett fra Aqara bevegelsesensor, fungerer helt topp. Philips sine bruker AAA/AA batteri og har veldig god levetid. Aqara sine lyssensorer har også gått i mange år nå på et lite 2032 knappebatteri.
    1 poeng
  35. Please send the debug message as a text file to me as DM here on the forum. I will look into it.
    1 poeng
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. Danske raspberrypi.dk sender til Norge (ink mva), og har stort utvalg. Ser at den delen du er ute etter er utsolgt: https://raspberrypi.dk/en/product/pcie-to-m-2-adapter-to-raspberry-pi-5/ Men her er jo et alternativ: https://raspberrypi.dk/en/product/pimoroni-nvme-base-for-raspberry-pi-5/
    1 poeng
  42. 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
  43. @DeVille Forsøk og sett opp en cron-job på PI-en som pinger VPN-serveren hvert 15 min, om tunellen ramler ned, så skal også ping forespørselen være nok til og reetablere den.
    1 poeng
  44. Prøv å sjekk denne guiden https://www.themoderncoder.com/openvpn-installation-and-debugging-raspberry-pi/ FYI, det ser ut tii at det er flere som sliter med det samme, Google: raspberry openvpn restart when connection drops logs
    1 poeng
  45. 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
  46. @Hr Kotelett bare si ifra om du trenger hjelp
    1 poeng
  47. ...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
  48. Mitt beste tips er: Du bestemmer selv. Hvis du har et system som fungerer for deg, og du er tydeligvis oppegående nok til å finne ut av det meste selv, så ikke hør på hva jeg eller noen andre sier. Alle får bare 24 timer i døgnet, og det er opp til folk selv hva de vil bruke de timene på. Home Assistant gjør mye riktig. De har en rivende rask utvikling og det kan være en fordel. Og det kan være en ulempe. De har bred (og god?) støtte Og det er vanskelig å argumentere mot en pris på kr. 0,-. HomeSeer stuper ikke akkurat med hodet først inn i fremtiden. Men jeg har holdt på så lenge at jeg ikke tar meg tid til å dille så mye, det får andre, yngre sjeler gjøre. Det frustrerer meg hvis jeg må bruke mer enn 2 minutter på vedlikehold i uka. I vårt helautomatiserte hus så må det Bare Virke™ og jeg simpelthen digger at det fungerer dag etter dag, år etter år, og at jeg slipper å måtte følge med på hvilke X komponenter må oppdateres, hvilke som slutter å virke på grunn av manglende oppgradering av Y eller slutter å virker på grunn av oppdatering Z. Hvis du vil ha det beste fra begge (evt alle) verdener, så gjør det: Koble dem sammen.
    1 poeng
  49. Endelig oppe med en løsning og et design jeg inntil videre er fornøyd med. Jeg var møkklei HSTouch og de begrensningene der + prisen den til slutt havnet på. Siden jeg har jobbet med webutvikling de siste 20 årene, måtte jeg se om det lot seg gjøre å lage noe bedre. Skrevet med ReactJS og dermed kun avhengig av nettleser. Skalerer noenlunde greit på mobiltelefon også, men for øyeblikket har jeg bare tweaket den for et nettbrett. Brukte litt tid på å få panelene til å se "riktig ut" i CSS, men synes resultatet med hevede og senkede paneler ser ok ut. Snakker med HomeSeer via JSON-API'et. Kan sette en timer på hver enkelt device, for å kunne styre hvor ofte informasjon skal oppdateres. Merk at RoboRock støvsugeren har en feilmarkering. Den vil nemlig ikke stå i ladestasjonen sin til den er ferdigladet. Her er nattmodus skrudd på, og viser hvilken farge aktiverte knapper har: Musikksida: Flere bilder kommer etterhvert
    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.