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

Snøkart


Thomas

Anbefalte innlegg

Noen som har skills nok til å hente ut snødybde og vannekvivalent (er et mål på aktuell snømengde omgjort til millimeter vann) fra dette kartet ?. Jeg klarer å trykke meg frem til det manuelt og kan velge export av både txt og json. lengdegrad og breddegrad er jo definert i configuration i hass, så burde være mulig å lage en plugin uten å måtte oppgi dette. Anyone ?


http://www.senorge.no/index.html?p=senorgeny&st=snow

 

Her er litt om kartet:

https://www.nve.no/hydrologi/sno/snokart/

Endret av Thomas
Lenke til kommentar
Del på andre sider

Ikke svaret på spørsmålet ditt, men relatert:

 

Jeg har en supersimpel webscraper gående mot snødybdelista til yr. Det er en one-liner i bash (skallet  til Linux) som gjør jobben:

snodybde=`curl -s "https://www.yr.no/observasjonar/sn%C3%B8lista.html" | grep -A 4 lfjell | tail -n 1 | cut -f2 -d\> | cut -f1 -d' ' | tr -d '[:space:]'`

(så er det et ny curl-kommando som sender variabelen snodybde til OpenHAB via REST-interfacet)

Lenke til kommentar
Del på andre sider

11 hours ago, berland said:

Ikke svaret på spørsmålet ditt, men relatert:

 

Jeg har en supersimpel webscraper gående mot snødybdelista til yr. Det er en one-liner i bash (skallet  til Linux) som gjør jobben:


snodybde=`curl -s "https://www.yr.no/observasjonar/sn%C3%B8lista.html" | grep -A 4 lfjell | tail -n 1 | cut -f2 -d\> | cut -f1 -d' ' | tr -d '[:space:]'`

(så er det et ny curl-kommando som sender variabelen snodybde til OpenHAB via REST-interfacet)

 

Jeg har fått det til (tror jeg). Har ikke kommet snø enda ?

 

Lagde et script jeg kjører i cron en gang i døgnet. URL-ene kan sikkert ryddes litt i

 

thomas@ubuntu:~$ cat snokart.sh 
yesterday=$(date --date="yesterday" '+%Y%m%dT0000')
today=$(date '+%Y%m%dT0000')
id="264511;6745296"

snodybde=$(curl -s "http://h-web01.nve.no/chartserver/ShowData.aspx?req=getchart&ver=1.0&vfmt=json&time=$yesterday;$today&chs=10x10&lang=no&chlf=desc&chsl=0;+0&chhl=2|0|2&timeo=-06:00&app=3d&chd=ds=hgts,da=29,id=$id;sd,cht=area,mth=inst&nocache=0.08958826222640814" | jq .[0].SeriesPoints[-1].Value)

vannekvivalent=$(curl -s "http://h-web01.nve.no/chartserver/ShowData.aspx?req=getchart&ver=1.0&vfmt=json&time=$yesterday;$today&chs=10x10&lang=no&chlf=desc&chsl=0;+0&chhl=2|0|2&timeo=-06:00&app=3d&chd=ds=hgts,da=29,id=$id;swe,cht=line,mth=inst&nocache=0.09229379378894098" | jq .[0].SeriesPoints[-1].Value)

echo "{"'"'senorge_snodybde'"':'"'$snodybde'"','"'senorge_vannekvivalent'"':'"'$vannekvivalent'"'"}" > /home/thomas/.homeassistant/senorge.json

 

json fila ser da slik ut

 

thomas@ubuntu:~$ cat .homeassistant/senorge.json | jq
{
  "senorge_snodybde": "0",
  "senorge_vannekvivalent": "0"
}

 Og så lagde jeg 2 sensorer i HA

 

Sensorer:
  - platform: file
    name: Snødybde
    file_path: /home/thomas/.homeassistant/senorge.json
    value_template: '{{ value_json.senorge_snodybde }}'
    unit_of_measurement: 'cm'

  - platform: file
    name: Vannekvivalent
    file_path: /home/thomas/.homeassistant/senorge.json
    value_template: '{{ value_json.senorge_vannekvivalent }}'
    unit_of_measurement: 'mm'

 

Endret av Thomas
  • Like 2
Lenke til kommentar
Del på andre sider

  • 1 år senere...

Yr har oppgradert websidene sine, så løsningen min over for snødybde sluttet da selvsagt å funke.

 

Denne gang gjorde jeg det skikkelig, via HTTP-api'et på  http://frost.met.no og instruksjonene der.

 

Man må:

* Lage seg en API-bruker hos met, slik at man får en client_id som skal brukes uten passord når man bruker HTTP-API'et.

* Finne en målestasjon som man vil hente data for,  og finne 'id' til denne. Endepunktet https://frost.met.no/sources/v0.jsonld ga meg en lang json hvor jeg kunne lete meg fram til riktig 'id'.

* Så bruker man observations-endepunktet med argumentene 'sources' (målestasjonid), referencetime satt til latest, og elements satt til surface_snow_thickness for å si hvilken datatype man vil hente ut (mange andre muligheter finnes). Man får en json hvor man man lete seg fram til tallet man vil ha.

 

I OpenHAB så konfigurerer man en item mot http-bindingen, og min konfigurasjonslinje ble til:

Number Snodybde "Snødybde" {http="<[https://frost.met.no/observations/v0.jsonld?sources=SN51800&referencetime=latest&elements=surface_snow_thickness{Authorization=Basic base64encodedauthstring}:3600000:JSONPATH($.data[0].observations[0].value)]"}

Her må man legge inn en streng med base64-enkoding av "brukernavn:passord", der brukernavn er client_id som du har fått fra API'et i starten, og passord er en tom streng. Kodingen kan gjøres på base64encode.org eller i en Python-sesjon. I konfigurasjonen over, er denne URL'en satt til å polles hver time (3600000 millisekunder), og utifra json-responsen hentes verdi fra en JSONPATH.

 

  • Like 2
Lenke til kommentar
Del på andre sider

21 timer siden, berland skrev:

Yr har oppgradert websidene sine, så løsningen min over for snødybde sluttet da selvsagt å funke.

 

Denne gang gjorde jeg det skikkelig, via HTTP-api'et på  http://frost.met.no og instruksjonene der.

 

Det viser seg at værstasjonen på fjellet oppdaterer snødybden omtrent hver time (minst), så dette ble mye artigere enn det var før med webside-scraper som ikke kunne oppdatere seg mer enn en gang i døgnet.

  • Like 1
Lenke til kommentar
Del på andre sider

  • 1 år senere...

Liten oppdatering for OpenHAB-interesserte. OH3 støtter ikke lenger http-bindingen fra OH1, så metoden over virker ikke der. For OH3 http binding gjør man slik (dette krevde mye fikling):


 

Thing http:url:yrmjolfjell "MjølfjellYrAPI" [baseURL="https://frost.met.no/observations", refresh="3600", username="", username="edxxxxx8-9xx8-4xxb-8fxxa-xxxxxxxxxx", password=""] {
    Channels:
        Type number : snodybde "Snødybde" [stateExtension="v0.jsonld?sources=SN51800&referencetime=latest&elements=surface_snow_thickness", mode="READONLY", 
                                          stateTransformation="JSONPATH:$.data[0].observations[0].value"]
        Type number : temperatur "Temperatur" [stateExtension="v0.jsonld?sources=SN51800&referencetime=latest&elements=air_temperature", mode="READONLY",
                                          stateTransformation="JSONPATH:$.data[0].observations[0].value"]
}

 

og Items som refererer til kanalene:

Number SnodybdeMjolfjell "Snødybde Mjølfjell" (gYr, gResetExpire) {channel="http:url:yrmjolfjell:snodybde", expire="48h"}
Number TemperaturMjolfjell "Temperatur Mjølfjell" (gYr,gResetExpire) {channel="http:url:yrmjolfjell:temperatur", expire="48h"}

 

Endret av berland
refresh satt fornuftigere
  • Like 1
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

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