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

Real-time solar data without any hardware sensor


Anbefalte innlegg

Edit April 2019: Dessverre har dette skriptet sluttet å virke grunnet endringer i Weather Undergrounds tjenester. Forhåpentligvis kommer det en ny versjon her, men tidsaspektet er uvisst.

 

Edit: Dersom du hopper til denne posten, finner du en lua-implementasjon for HomeSeer med dette skriptet: https://www.hjemmeautomasjon.no/forums/topic/122-real-time-solar-data-without-any-hardware-sensor/?do=findComment&comment=7954

 

Dette er jo det jeg har drømt om:

https://www.domoticz.com/wiki/Real-time_solar_data_without_any_hardware_sensor_:_azimuth,_Altitude,_Lux_sensor...

 

Supert initiativ med lux og diverse andre værdata beregnet real-time og ut fra tid, vær, skylag. Jeg synes lux-sensorer for mange formål blir vel lokale.

 

Dessverre er jeg ikke så stødig i LUA, forøsøkte å gjøre dette om til noe jeg kan bruke i HS3, dvs, bare et skript som gir meg tallene slik at jeg bruke curl for å oppdatere en virtual device i Homeseer, men no luck.

Endret av DiderikFrom
Lenke til kommentar
Del på andre sider

  • 6 måneder senere...

Da har jeg endelig fått dette i opp og i gang!

 

Det er ikke pent, for jeg kan ikke lua, men jeg har knotet meg til en slags bash/lua-hybrid som gjør at jeg hvert femte minutt får oppdatert fire virtuelle devicer i HS:

 

Octa (skylagets tykkelse 0-8) basert på data fra Ogimet-stasjoner

Solens høyde (nå er den 40 grader under horisonten)

Azimuth (noe greier med solens vinkel mot nord, trengs for den siste devicen)

Lux eller utendørs lysintensitet (estimert ut fra de foregående) nokså nøyaktig, virker det som så langt.

 

Jeg har ikke vært så fornøyd med mine lux-sensorer fordi de er så avhengig av å plasseres riktig, og jeg har ikke villet la dem oppdatere seg så ofte pga. batterilevetid.

 

I tillegg kan man legge til alskens devicer som angir "Solar Radiation" og lignende, men jeg nøyer meg med dette foreløpig. Jeg følger litt med på verdiene i HomeSeer før jeg tar dette i bruk, men planen er å la dette overta for lux-sensorene som måler belysning utenfra og styrer dimmere og fargetemperatur.

Når man i tillegg får solens høyde, kan det være nyttig å kombinere med lux (ev. "Solar Radiation") for å stye rullegardiner &c.

 

Lenke til kommentar
Del på andre sider

Screen Shot 2016-12-04 at 11.32.19.pngScreen Shot 2016-12-04 at 11.24.43.png

 

Jeg måtte visst kode litt mer lua. Det viser seg at ogimet ofte sender tom octa-data, og da kan ikke lux beregnes. Det er tatt høyde for i det opprinnelige skriptet ved at forrige octa-verdi hentes fra domoticz -- jeg måtte finne en alternativ måte å hente forrige verdi, men nå håper jeg det blir stabilt.

 

Jeg legger så til (når jeg gidder) "direct" og "scattered solar radiation" i W/m2.

 

  • Like 2
Lenke til kommentar
Del på andre sider

Så bra noen andre synes dette er gøy!

 

Enda mer lua, men nå skal siste octa (skydekketetthet) lastes inn som lua-variabel ved starten av scriptet. Og så har jeg også lagt til direct, indirect (scattered) og total solar radiation.

Nå er jo solen gått ned, så det meste er "0".

 

Plugin aner jeg ikke hvordan man lager, men kjører man HS3 på linux er det bare å konfigurere høyde over havet, by, land, lengde- og breddgrad samt nærmeste Ogimet-stasjon (for skydekkedata), samt få en konto hos weather underground, og så funker det.

Jeg kjører dette jevnlig sammen med de andre skriptene mine, men man kan bare lage en event i HS der man "Run another program or process" hvert kvarter eller hvert femte min.

 

Dog er det ganske lite som er linux-spesifikt av det jeg har gjort, så det skulle være ganske lett å portere til Windows/.NET. Og sikkert til gjennomført lua også, men da må man kunne lua bedre enn meg...

 

Screen Shot 2016-12-04 at 17.46.20.png

  • Like 3
Lenke til kommentar
Del på andre sider

1 hour ago, Moskus said:

... men jeg ser ikke helt hva du har gjort? Har du eller har du ikke konvertert lua-koden?

 

Jeg har delvis skrevet om lua-skriptet slik at det ikke krever domoticz. Og så var det noe som ble for vanskelig til å skrive i lua. Jeg kunne nok oppdatert HomeSeer-devicene rett fra skriptet, men "octa" trenger en del prosessering, og det ble for vanskelig...

For å oppdatere hver av de virtuelle devicene starter jeg fra lua-skriptet et annet program med verdien som devicen skal ha som input. Jeg starter ett bash script (men det er bare å angi path til os.execute dersom man vil bruke noen annet enn bash) med to input: device og verdi. Dette gjør jeg fordi octa ikke oppdateres korrekt hver gang skriptet kjøres, men ofte bare returnerer "/". Da bruker jeg forrige octa-verdi, som i det opprinnelige skriptet hentes fra domoticz' uservariables lua-array. Tilsvarende fikk jeg ikke til i lua., men måtte ta en omvei om et språk jeg kan.

Det som er skrevet i bash er vedlig begrenset og sikkert enkelt å kovertere til .NET.

Lenke til kommentar
Del på andre sider

10 timer siden, DiderikFrom skrev:

Jeg kunne nok oppdatert HomeSeer-devicene rett fra skriptet, men "octa" trenger en del prosessering, og det ble for vanskelig...

 

10 timer siden, DiderikFrom skrev:

Det som er skrevet i bash er vedlig begrenset og sikkert enkelt å kovertere til .NET.

Okay, jeg må se enda litt nærmere på dette. Hvis det krever mye beregninger, så er muligens plugin veien å gå. Om ikke annet for å kjøre beregningene i en annen prosess...

 

Hvis du føler du har noe å dele, så send gjerne en PM. :) 

Lenke til kommentar
Del på andre sider

@Moskus

Det skal ganske lite til (nå som jeg har skjønt hva man må gjøre) for å endre lua-skriptet til å fungere uten domoticz.

Det eneste jeg slet med, var å finne en måte å laste inn siste octa-verdi til bruk dersom ny verdi ikke er tilgjengelig (dvs. ogimet svarer med "/").

 

Dette skriptet vedlikeholdes på domoticz' wiki, og jeg tenker det er litt undøvedig å finne opp hjulet to ganger, men heller gjøre enkle tilpassinger for HomeSeer. Det er i hvert fall veldig mye mindre arbeid, men forutsetter at man kan/vil kjøre lua. Dersom man ikke kan kjøre lua, må man oversette skriptet helt.

 

Hva har du tenkt å gjøre? Dersom du vil oversette helt eller delvis (bare det jeg har skrevet i bash) til .NET, eller lage plugin, er jeg gjerne med (med min begrensede kunnskap om .NET og plugins).

Sender gjerne en PM senere i dag nå rjeg har tilgang til scriptet.

Lenke til kommentar
Del på andre sider

4 minutter siden, DiderikFrom skrev:

Det eneste jeg slet med, var å finne en måte å laste inn siste octa-verdi til bruk dersom ny verdi ikke er tilgjengelig (dvs. ogimet svarer med "/").

Hvis den svarer med "/" trenger du jo ikke oppdatere noe, så det kan du jo bare hoppe over. :) 

 

Et øyeblikk siden, DiderikFrom skrev:

Det er i hvert fall veldig mye mindre arbeid, men forutsetter at man kan/vil kjøre lua.

Ja, det er vel det jeg vil unngå. Begynner å bli ferdig med å gå over bekker etter vann. 

Lenke til kommentar
Del på andre sider

51 minutes ago, Moskus said:

Hvis den svarer med "/" trenger du jo ikke oppdatere noe, så det kan du jo bare hoppe over. :)

Det gjorde jeg først, men da oppdateres heller ikke LUX igjen (man får Nan: not a number) basert på nye verdier for altitude og azimuth, og ev. annen data fra wunderground. Derfor henter jeg (og det opprinnelige lua-skriptet) den sist lagrede verdien for octa i (domoticz) HomeSeer slik at den kan brukes i beregningen.

 

56 minutes ago, Moskus said:

Ja, det er vel det jeg vil unngå. Begynner å bli ferdig med å gå over bekker etter vann. 

Ja, hvorfor ikke. Man kunne kanskje lage eller opprette et sted her der man kunne samarbeide om et prosjekt. En ting for denne saken er å få rådata ut av wunderground, ogimet &c, en annen å få regnestykkene å plass i klartekst, en annen ting å få dem skrevet i .NET/bash/lua, og til sist å få det hele satt sammen som et skript eller plugin. Jeg har så mye annet på tapetet at jeg ikke klarer å skrive om hele skriptet fra lua til et annet språk alene, men tar gjerne deler av oppgaven (og er godt i gang).

Og jeg har jo noe som funker for meg.

Lenke til kommentar
Del på andre sider

7 minutter siden, DiderikFrom skrev:

Det gjorde jeg først, men da oppdateres heller ikke LUX igjen (man får Nan: not a number) basert på nye verdier for altitude og azimuth, og ev. annen data fra wunderground. Derfor henter jeg (og det opprinnelige lua-skriptet) den sist lagrede verdien for octa i (domoticz) HomeSeer slik at den kan brukes i beregningen.

Aha, da forstår jeg problemstillingen. Men her kommer fordelen av å ha alt i HomeSeer, man kan jo mye enklere hente de verdiene som ligger der allerede.

 

8 minutter siden, DiderikFrom skrev:

En ting for denne saken er å få rådata ut av wunderground, ogimet &c, en annen å få regnestykkene å plass i klartekst, en annen ting å få dem skrevet i .NET/bash/lua, og til sist å få det hele satt sammen som et skript eller plugin

Tenker jeg starter med et helt grunnleggende.NET console program. Og så løses et problem om gangen. Mulig jeg kan spørre deg om hva "det eller det" returnerer, eller hvilken verdi du får.

Lenke til kommentar
Del på andre sider

19 hours ago, Moskus said:

Tenker jeg starter med et helt grunnleggende.NET console program. Og så løses et problem om gangen. Mulig jeg kan spørre deg om hva "det eller det" returnerer, eller hvilken verdi du får.

OK, greit å kunne lime noe inn i scriptboksen i en event.

 

Jeg har skrevet om det originale skriptet enda en gang... Nå gjør jeg alt i lua i ett skript, og bruker curl fra lua-skriptet til å hente ut gammel octa-verdi samt oppdatere devicene. (curl til HomeSeer for å stye med JSON). Tenkte teste litt videre, men ser ut til å funke utmerket (dog er jo solen så mye nede på denne tiden av året).

Endret av DiderikFrom
Lenke til kommentar
Del på andre sider

Da begynner jeg å bli veldig fornøyd med min versjon av dette, og jeg deler gjerne. Vi får se om @Moskus får lagd en plugin (som sikkert blir enda enklere), men oppsett av dette skulle være ganske greit. Veldig greit på linux, og sikkert passe greit på Windooze. På Windows har jeg ikke testet, men med riktige dependencies burde det fungere.

 

Det du får: I HomeSeer, automatisk oppdatering av utendørs lysstyrke (LUX), skydekketetthet (octa), direkte, indirekte og total solstråling (i W/m2) samt solens høyde (i grader) og solens Azimuth (vinkel mot nord, også i grader).

 

Det du trenger: HomeSeer, lua og curl.

For å installere lua og curl på debian/ubuntu (dersom du ikke allerede har det): sudo apt-get install lua5.1 curl

En annen versjon av lua fungerer sannsynligvis også greit. lua er et programmeringsspråk, og skriptet er skrevet i lua. curl brukes for å kommunisere med HomeSeers innebygde JSON API slik at vi kan oppdatere devicene.

 

Start med å lage virtuelle devicer som under:

Screen Shot 2016-12-04 at 17.46.20.png

 

For hver av devicene, noteres "Reference ID", under "Advanced".

Og slik har jeg (f.eks. for LUX) satt opp "Status graphics" for at det skal være mulig å oppdatere via skriptet (dvs. JSON som skriptet bruker). Obs! Under Status-Control kan det gå galt, devicen oppdateres ikke dersom denne står på en spesiell måte.

Screen Shot 2016-12-07 at 17.36.42.png

Edit 2: Jeg har satt en vid value range  slik at jeg er sikker på at oppdatering ikke feiler fordi verdien ikke er tillatt for devicen. For LUX, som over, For Solar Altidue/Azimuth: -360 til 360 °, for Radiation 0-200000 (aner ikke hvilken verdi man når på en solrik sommerdag, men sannsynligvis langt under 200000 W/m2 -- det skader ikke å ha litt høy maxverdi), og Octa:0-8. For Radiation-devicene samt Solar Altitude og Azimuth, kan du vise decimaler dersom du vil, men det tror jeg er et unødvendig presisjonsnivå.

 

Skriptet består av en hovedfil og en hjelpefil. Hjelpefilen må ligge i samme mappe som hovedskriptet og lastes automatisk for å dekode JSON-formatert input fra Weather Underground, HomeSeer, Ogimet og mer.

 

Nå er det bare å lagre mappen med de to skriptfilene et sted, oppdatere innloggingen og sted for Weather Underground, lengde- og breddegrad for der du bor (ev. ønsker varsel), høyde over havet samt "Reference IDs" du noterte lenger opp. Du må også oppdatere banen til hjelpeskriptet.

 

Sjekk at skriptet er kjørbart ('sudo chmod ug+x SolarSensor.lua'), og test med './SolarSensor.lua'

 

Edit: Devicene oppdateres hver gang skriptet kjøres. Den enkleste måten å få det til å kjøre regelmessig er å lage en Event i HomeSeer som kjører automatisk så ofte du vil. Jeg gjør det på en annen måte, men forslagsvis:

Screen Shot 2016-12-07 at 20.12.57.png

 

Det er litt vanskelig å poste begge skriptene her, men jeg tenkte gå igjennom og kommentere Jeg har gått gjennom skriptet og kommentert hva jeg har gjort, og lagt til header der jeg gir all ære til de som opprinnelig laget skriptet -- jeg har bare knotet meg gjennom et programmeringsspråk jeg ikke kan for å få skriptet til å snakke med HomeSeer i stedet for domoticz. Men det funker utmerket!

Og støter du på problemer, sjekk først om reference IDs er riktig definert i skriptet, samt at du har satt opp devicene som i guiden. Dersom devicene i HomeSeer feil satt opp, tar de ikke i mot curl/JSON-oppdateringer.

 

Gi lyd under dersom du er interessert! Skriptet finner du nå som vedlegg til denne posten: solar_data_for_distribution_vH.1.zip

@Lazarus har nå lagt til støtte for OpenHab i tillegg til HomeSeer i en ny versjon, tillegg er støtte for Windows sikret og testet: solar_data_for_distribution_vHO.1.zip

 

Ny versjon 09.01.17 @Lazarus: solar_data_for_distributionv2.2.1.zip

(Mulighet for å velge desimalskilletegn samt mer omfattende instruksjoner for windows, og både windows 32- og 64bit-støtte.)

 

Post gjerne erfaringer under.

 

Edit: Og slik kan det se ut i bruk på en desemberdag:

Screenshot - 12082016 - 12:28:27 PM.png

 

Jeg har brukt disse ikonene:

LUX/radiation: /images/HomeSeer/status/luminance-00.png

octa: images/HomeSeer/status/cyan.png

Sun, *: images/HomeSeer/status/yellow.png

Men det fins sikkert mye bedre ikoner der ute et sted dersom man gidder lete.

Endret av DiderikFrom
  • Like 7
Lenke til kommentar
Del på andre sider

3 hours ago, ZoRaC said:

de ble fikset så fungerer det utmerket! :) Sola er endelig på vei opp, så jeg får testet - 8 lux nå. :) 

 

Supert!

 

--------------

 

Jeg har utvidet posten med installeringsguide. Sender fortsatt gjerne PM med filer til de som vil ha. Ev. om det er en løsning med å hoste filene på forumet, eller som et attachment?

 

Og post gjerne erfaringer i tråden her.

Lenke til kommentar
Del på andre sider

15 minutes ago, ZoRaC said:

Hvordan har du satt opp grafikken på devicene dine?

Jeg har brukt disse ikonene:

LUX/radiation: /images/HomeSeer/status/luminance-00.png

octa: images/HomeSeer/status/cyan.png

Sun, *: images/HomeSeer/status/yellow.png

Men det fins sikkert mye bedre ikoner der ute et sted dersom man gidder lete.

 

Og så er posten min oppdatert med samme info!

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.