From 1920f8158e21830b1c597a03da4fd925f8af6bd5 Mon Sep 17 00:00:00 2001 From: fewieden Date: Thu, 27 Dec 2018 18:52:35 +0100 Subject: [PATCH] config options and documentation --- modules/default/weather/README.md | 95 +++++++++++++++++-- modules/default/weather/current.png | Bin 0 -> 8141 bytes modules/default/weather/forecast.png | Bin 0 -> 16385 bytes modules/default/weather/providers/darksky.js | 2 +- modules/default/weather/weather.js | 9 +- 5 files changed, 91 insertions(+), 15 deletions(-) create mode 100644 modules/default/weather/current.png create mode 100644 modules/default/weather/forecast.png diff --git a/modules/default/weather/README.md b/modules/default/weather/README.md index 325732cc..d8766824 100644 --- a/modules/default/weather/README.md +++ b/modules/default/weather/README.md @@ -2,16 +2,93 @@ This module is aimed to be the replacement for the current `currentweather` and `weatherforcast` modules. The module will be configurable to be used as a current weather view, or to show the forecast. This way the module can be used twice to fullfil both purposes. -The biggest cange is the use of weather providers. This way we are not bound to one API source. And users can choose which API they want to use as their source. Initially the current OpenWeatherMap will be added as the first source, but more will follow soon. +The biggest cange is the use of weather providers. This way we are not bound to one API source. And users can choose which API they want to use as their source. The module is in a very early stage, and needs a lot of work. It's API isn't set in stone, so keep that in mind when you want to contribute. -## TODO +## Example -- [ ] Add Current Weather View -- [ ] Add Weather Forecast View -- [ ] Add Forecast API Call -- [ ] Add all original configuration options -- [ ] Add more providers -- [ ] Finish thi Todo list -- [ ] Write the documentation \ No newline at end of file +![Current Weather Screenshot](current.png) ![Weather Forecast Screenshot](forecast.png) + +## Usage + +To use this module, add it to the modules array in the `config/config.js` file: + +````javascript +modules: [ + { + module: "weather", + position: "top_right", + config: { + // See 'Configuration options' for more information. + type: 'current' + } + } +] +```` + +## Configuration options + +The following properties can be configured: + +### General options + +| Option | Description +| ---------------------------- | ----------- +| `weatherProvider` | Which weather provider should be used.

**Possible values:** `openweathermap` and `darksky`
**Default value:** `openweathermap` +| `type` | Which type of weather data should be displayed.

**Possible values:** `current` and `forecast`
**Default value:** `current` +| `units` | What units to use. Specified by config.js

**Possible values:** `config.units` = Specified by config.js, `default` = Kelvin, `metric` = Celsius, `imperial` =Fahrenheit
**Default value:** `config.units` +| `roundTemp` | Round temperature value to nearest integer.

**Possible values:** `true` (round to integer) or `false` (display exact value with decimal point)
**Default value:** `false` +| `degreeLabel` | Show the degree label for your chosen units (Metric = C, Imperial = F, Kelvins = K).

**Possible values:** `true` or `false`
**Default value:** `false` +| `updateInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `600000` (10 minutes) +| `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:**`0` - `5000`
**Default value:** `1000` (1 second) +| `timeFormat` | Use 12 or 24 hour format.

**Possible values:** `12` or `24`
**Default value:** uses value of _config.timeFormat_ +| `showPeriod` | Show the period (am/pm) with 12 hour format

**Possible values:** `true` or `false`
**Default value:** `true` +| `showPeriodUpper` | Show the period (AM/PM) with 12 hour format as uppercase

**Possible values:** `true` or `false`
**Default value:** `false` +| `lang` | The language of the days.

**Possible values:** `en`, `nl`, `ru`, etc ...
**Default value:** uses value of _config.language_ +| `decimalSymbol` | The decimal symbol to use.

**Possible values:** `.`, `,` or any other symbol.
**Default value:** `.` +| `initialLoadDelay` | The initial delay before loading. If you have multiple modules that use the same API key, you might want to delay one of the requests. (Milliseconds)

**Possible values:** `1000` - `5000`
**Default value:** `0` +| `retryDelay` | The delay before retrying after a request failure. (Milliseconds)

**Possible values:** `1000` - `60000`
**Default value:** `2500` +| `appendLocationNameToHeader` | If set to `true`, the returned location name will be appended to the header of the module, if the header is enabled. This is mainly intresting when using calender based weather.

**Default value:** `true` +| `calendarClass` | The class for the calender module to base the event based weather information on.

**Default value:** `'calendar'` + +#### Current weather options + +| Option | Description +| ---------------------------- | ----------- +| `onlyTemp` | Show only current Temperature and weather icon without windspeed, sunset, sunrise time and feels like.

**Possible values:** `true` or `false`
**Default value:** `false` +| `useBeaufort` | Pick between using the Beaufort scale for wind speed or using the default units.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showWindDirection` | Show the wind direction next to the wind speed.

**Possible values:** `true` or `false`
**Default value:** `true` +| `showWindDirectionAsArrow` | Show the wind direction as an arrow instead of abbreviation

**Possible values:** `true` or `false`
**Default value:** `false` +| `showHumidity` | Show the current humidity

**Possible values:** `true` or `false`
**Default value:** `false` +| `showIndoorTemperature` | If you have another module that emits the `INDOOR_TEMPERATURE` notification, the indoor temperature will be displayed
**Default value:** `false` +| `showIndoorHumidity` | If you have another module that emits the `INDOOR_HUMIDITY` notification, the indoor humidity will be displayed
**Default value:** `false` + +#### Weather forecast options + +| Option | Description +| ---------------------------- | ----------- +| `tableClass` | The class for the forecast table.

**Default value:** `'small'` +| `colored` | If set to `true`, the min and max temperature are color coded.

**Default value:** `false` +| `showRainAmount` | Show the amount of rain in the forecast

**Possible values:** `true` or `false`
**Default value:** `true` + +### Openweathermap options + +| Option | Description +| ---------------------------- | ----------- +| `apiVersion` | The OpenWeatherMap API version to use.

**Default value:** `2.5` +| `apiBase` | The OpenWeatherMap base URL.

**Default value:** `'http://api.openweathermap.org/data/'` +| `weatherEndpoint` | The OpenWeatherMap API endPoint.

**Possible values:** `/weather` or `/forecast/daily`
**Default value:** `'/weather'` +| `locationID` | Location ID from [OpenWeatherMap](https://openweathermap.org/find) **This will override anything you put in location.**
Leave blank if you want to use location.
**Example:** `1234567`
**Default value:** `false`

**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. +| `location` | The location used for weather information.

**Example:** `'Amsterdam,Netherlands'`
**Default value:** `false`

**Note:** When the `location` and `locationID` are both not set, the location will be based on the information provided by the calendar module. The first upcoming event with location data will be used. +| `apiKey` | The [OpenWeatherMap](https://home.openweathermap.org) API key, which can be obtained by creating an OpenWeatherMap account.

This value is **REQUIRED** + +### Darksky options + +| Option | Description +| ---------------------------- | ----------- +| `apiBase` | The DarkSky base URL. The darksky api has disabled [cors](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS), therefore a proxy is required.

**Possible value:** `'https://cors-anywhere.herokuapp.com/https://api.darksky.net'`
This value is **REQUIRED** +| `weatherEndpoint` | The DarkSky API endPoint.

**Possible values:** `/forecast`
This value is **REQUIRED** +| `apiKey` | The [DarkSky](https://darksky.net/dev/register) API key, which can be obtained by creating an DarkSky account.

This value is **REQUIRED** +| `lat` | The geo coordinate latitude.

This value is **REQUIRED** +| `lon` | The geo coordinate longitude.

This value is **REQUIRED** diff --git a/modules/default/weather/current.png b/modules/default/weather/current.png new file mode 100644 index 0000000000000000000000000000000000000000..de6c5a39ea341592fcd25d19d6a382457bad9e35 GIT binary patch literal 8141 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 BxD@~Z literal 0 HcmV?d00001 diff --git a/modules/default/weather/forecast.png b/modules/default/weather/forecast.png new file mode 100644 index 0000000000000000000000000000000000000000..1afd31913ffba849a334aeedb0aad2c799a3de20 GIT binary patch literal 16385 zcmeIZXH=8xzV?d+n1FzS^sW>QO=*!X5;}w$nl!1AE+rsULBN0%K|s0&q<2DZ(wmgf zd+!h+bO_~*bFTI7HP3#}KKp#w>&rQek-q`xrNHcW&FrsL9~rl|+(Uyu!!bCvsLa zaK*zTYx#Y<(czSBiH9d0rv#GG@iakCOG5=FuB7*}sX`7t*m+UC5RsM_tUC@5uCg4 zY5HUOlTnru2MPVjqDwR-ck%G*9*g{ehqqdc8`_f)(wlhiMD1~p{(2RNhi68{a2pTL zb(|Fs?`sRe4ZNR>e|u?ic-j>fc!?H0OpowAVYoaynLFIul1>-7wsl+IZM^>GA9j7c z9|Gkc&AOCnTu1-d6TZ4Y*FHJEC49A55p#uTCpTRWX*XTGP8dT?U1C)B4#-K*!`_BB z(o26lY8+rm@T@#|9)5iy4Ic}`-#r1o?TdW5rQGO2S(J2Ai@%#SwLQt-bj;-9r|Ot? zHkILjp*SLag>bC$tvv8wzQ{Ovb$z0t@k!!?O+Tv2e5xTjt>Itv%EX$0*atvT7U z5Mb;Bu&I7nLC5-{>f7m2*8?x0w>p-d3X9l{*hJF;q{Mc*Vq`tYahfV*X23uWarqpGPt>x!*Icr zbaNRQ8QnMMKjy&0vAZ4*< za#K)5UaN5wJ>T>5A524ps*=U{@N-{C%Sm7ittrsAE-?x~O*QMQ3f1OmYXC~>zkD+{uw8-@(j2?HGG1P2IOP9wU{#U=y)*Za<@(C&!UWC0 zZurh;Gx#f`I;7%ELo_v;61*KH%VT3_6j;Ta5^7Ve09u@@&B85HGe_Whib%ibjCPO6UA zG1Jnyi9QC1-UbEM7^vVD`I+QC1};+W1oM+BY9_eR*L`w*k1$N}Bg7!(1F&8v`u_Db zCoq=Sxh%o%;DvZt>>~x=AZ8E$X>;rM<%8GI(=0ZOVH=Q}c zbv=)*_4oWriLVbTcSq)^?XQF3x{ogT)J^;cSh^a~Gwsl{Gf5ZBZsb$LcfLUuWde`o z36&mD_lHPsKaa3xWzV9lw?WLHq>lUq3?x5(7+T5F!f)Y9m>|l1@X0BI32EBwFalS+ zb`ZB_y4@IZ2I{$DuC6-i$iMaO)(7n>t@w$iJGVut9=+X2^Jfh?crNH_6Zp0U&hGvR zgx$5QeSUr!;IM>Q-nNTf_Yh^@*Z9G5#pV~W8r2S*Bon{U^_}i*SIX%W;w_RacDUi3 z(D!6l8ni#6bVy23P<-UQtUH=;(jj5^t|f=TJmHqmS8ay5KVpX8^N|0#|EAbMl9Za5 zya7ra`yQ0!dp$qDM)6rO3bD9(#Z2xC-8dlu?4CY;x?0|Vg(qK=#6)LHh?9puVIy!k z3DfVma=4~6dCJb+RlwB}tzN+t1#Ll_9(sQ$I!W85boerV8B-L-gCx2`C2S(3)? zqU-H#aeBT{a~Av_ui13K*iKnlVfN_e&~rxqbkw`^NUECU$)+5OK*FIe*Q^GWHqca= z8uG=)4xBl6e~ztJ?@jY~K8+A&({jq)#Tdh1hVCls(eYkKISZt>xu_+DXLnb_M3JNz&W+d+G;j3FEDT5=e&1nib!MWk8?e!DU(fm~CIm=p$obpPnC)8$c zwj^b=5Z|Fu*w=m9h=!-8n0t6TGTS?exgxsjG;`wn73-|ufWwgQ8Mi?f%vsfb&n%4> zrCcG-@i`b2;EAwRY6S(jgpg2)uPN)!jH~csxhBohoO^<;)x~5kR9k-3dC)rP5#L1h zyZCr_H%1xiQUV>l*=x`15_*~GpfO29TTV$6Wh8og57LaZpScJqK02NCK`$P0UGkHt) z&kI7SoYM7mC`b07%i0HGbRiF4;YMYHII4Tn)qb&BiH2oGK`VWxLq%X_h;j$NZKMQs zjvgNzRI3ec2H)FtAHICa+7WYEtWx=dzWn0bHCYXBuCZ0j>;WGW|N0i8@#dDrciHmk z+>r+)ROrWMxDPi)K;p&QNbc2sa}rwxZio%-2vHVP*?TAEV8$aw4gMNh!yPY@Y`49hvEfdr$rE|Ik?fca zp{!)6iU+wHSM*j$viseqQG2b7`^jP?2;s+{iktMjWDwzE;Z^rZ_=(g-P`ZIC3kS&xJu|)J?J<>84I&F0 zAtGcmLu=rj>ipy_ZkdYA}eaB@wA z9}jS~#0g2{aJ9^GqjbAsw24|vQ)>uykJqB0uJ?Cy_@_97f5HGYGT3@bSBihU_cLX| zMPcCMquh;WShTUtwJ{;Tnx{zhE0H;#3mOT`k2w#erRkXA5~tu5Gu*o$e*iXJtP0oq z0eyM4bA#UqZi8@NNFWJ1l(IJtk2`tVSifZjuK>V;>EnDWHv1{ncMVThe$`MW%*N`$ zO@M(3LJKXTIS#a5d^@8vW3#&!t!gjyddP7ZIO^#R|qYt6aA)EHA0%)^ty9s4YWdkICjH5dCyvZ zL5$v!R>E5SZk-w5P7jOMM;86P&VupHlPGc?qZ#Dh&*s;-d9!?k+I-CqVBQ4gLM<`!Z-{iN0S)m!nsiwR{a_E2luA6tGb|aBkR-#v__k-+Q^_W&dHg``EKQt=sB`k z1_mDvS-5Voa^*0FF!%D?wIUEvDvSk@EsG1Gc9bK$M9pYlNHvHXB=5v``&553U;12E z?BCtG>K&OtNIm-urM$1a+n_cB(hT5_75#6Q{r`hH^WW<`{*41*%yt82w0X&TP5h-L zf(|$4hh7C{<&9>dprG^y6*J0fL44IP=gsl?q}+0=tga!h%1)=OKBa@#FP|&h=V3zoZXg=7EMY zGRWSayHPJ2RLjps4(!7KR@D;?Gu|&*?aQtQhK;w$b>0jiLbJlGASw zq(2+3t7wMN46lF6HV&(-g}On93+1H!OO%&GmuoM@-tSx<5V6eSGx%tWp*Y0{L?20h zlKa6)?y6ZWu;q}zGyEWgBG}EQW6LN(I2yie84ID%@o#hC0pxo=%h2VunzU}4DzuSw zQGQ@O))h0-U=$|{2ysZugQj!=#;waTN?wuy^fBU9EplHw*M?QL=PVut!H@U+j5LUJ z9H*RgI~(pk-QtdAX=$B#t-)rGHIlQN^9XbxU@B=Ok-@j4${vQs6fN@R>dU-*2EfhQ zu@bVz5IV+}gAg;*-(a>||CunL98pacxNx&Vt+UV@@WviwJ_45`efX=spn@xl@47FZ zQ$Uj_&mmq&)iKFaO}#_Q0=d}wg+9GLEO!FUO(?FqTKWRqK4&@*Y3hQnn_jWql1?@f ztu)Z^qYxY+7Dtzk&TNNUyu5L_|d-A4e>UO+w4ev6_xMAl6yg-zG4DBNE8|>lUKT?#*+eVd)izWLfK3( z_XUh(O!09?plcJ}G(F@n6mCC9gvJ?obh{y_Uc;WcdEBEJ%bxja?McL%_neFRclLc z(k_y4v_prs$khBG`^yvZJT9Fp#jj#q6_KK$CrwCR>6CW|##+^Mru9rByHtNFKG3}o zeysfwF!?5vUYh-EqDdo6-xA_~N@;ptA14Hsz>9`$C%qEQr*}UF`{@eF*$))f&%^ms zppq^w9UuM@Szr*zyBWb2z(E?LwDXE{)2+nb`tXZ={~xKzls#U`J7LkUB zEl)w!j?@GaMrk_EToho=ngw%#bYHtmtkI`h&zZ+|(p+=Uy^a0pHJce>^ znSXQQVbrP~47WXub}EZJeUBeG9a`W=e)h9@M2&=;Cz%>|lA@sMFLx}E`?ZXS(q;q-iTE^d<{CQU;eB1@c)Lf{TsFJ{|x#5rw8EtZEz-vdW&?!s?21d zH7}+YiT_SLgtQqfGE)DTckGq!57Gh}O0V3>Ca+pmu#>#qJyTpsSMhD!L&yju9yNNv z45@~trMSzL>!uN;-wT(&wJEK;9&JaM6+xQlYLJPA0k&k=LUhI#$)W3{w2g zop{6ufTy8LWv`6b!+QfRT&8zkXL3&q^9Fm^=*&#I0gW__zV%RcMeQgXP0i#kS)J0G z&#^C(yUgWh9qLr%EFVHSVRN>N85OZzRlt{=evy>5TG{1+QoVm_D`R{FjpJ0N;e)G! zjiKz_LH8yEN$rc?tB*C63q;10|L76@u4O9KPF9L6Ii{MPmdFV5*$snzP9GxT*(ROHH&@Q?5v(PNJKDjkZ^QmC`U;JK?{VlfGv8^>YiI!&VjCD3DFewwf4tCW zGQARj!xef%iIceE279%@7?-Uvt>O%BvyVpxQb8=*LC^$U8O+&Ghg#j zIgD1_(}7U>qu_VQgR^3X7qA&^xWz*XJJC-$uRc^)jvNnzxWZPRozMJm0ZYVBnhL~& z2)*}9nYnYoBEX+jX9w??2@XM^SdLXL25PZ()rdf+X z04g728!MUgVTT8CkydDPJyH z&M2Qq!yVFC9f6feE>PE)Bpj4SF%SkYw4NdI_C>fWk`~FMrEC!+z+!^s83I|O(XrFj z-2-4tGj~I_|3j3Yv;9CmNm3yLUwPf$>em5>IPHTQ{Gp__?nk8WKTs+mO>-^Yu+`p! zOwNS0L)8gAfTlXLj>T8y@QPdljTk|mK4H{msPJP^W;<;(>Y=Gg5JyFs8w+}NN8+*R zs2HM%D`X@JD*a64)H=Ut1v)BYsxJ9>mT-i7O^2euEHA53hrrXC$Z=;l(nl}(1cyr1 z*9;>lffcwR_kPEgrh$Jx_7aO#2lkrc+gjH)A*kat-SsZZ(+KZ?jQ2suWQ81)CTzEKPfW-&yU8N z0nde7x@Ky6Yo&_!;LEz1F5|4qj$Zjd=DC%6=eplQyWiurJp9zU*26+hJ=j6%5WOr^ zJhN2G&*(IB_D5m9+Y0VUaZe}v0ou0*D!w_Yhdd|mYS7*Qe>E_sCZjYj>-~n)qroAY z8aD=}X@u)sJ6bHf2tJ1AdVHpp00bkWjk%nnFC<%?T(nH3-^#SLKYZ)w9K?yu*p;+q z*7sZjaT}QC_{?QGx_w$uu>#-yFKw^?X+`{h^xgg~1Nd-D@|OrGjQJmwmvEnkouZ(> z@YXx^NYWRDfTK)T`dS!Zr#B&V6!uyoZ6GG)bR;e0CmV#gji5?{v zhCVZg>pPh1~U*tW~8iyKwe-7@6odO-nM7|}9=Wf)AJ4bZYLTdJLCatlo zwY?MOf&AvNMw?vXs?FbwvCdtiuq-6ClBMw5-)MMSpjtpC#ht@0CTR={ER$?cI*L+) z8K5!>r~WT&Sp1sxi_%2+6myUqM`i!<(dW4gyRa$F?_d4%Tj9q6^eOks?JzK!aI)~$ zlKb@$kOz9~rpN9dc6^^YVyU~ON?1-zI^KQ2in8$Hk}ALpm2huE+^a^AKOP+1>e3 ze;)fie8*-Lw#eicUdBxr9h>!9jw9En`M1v<_wDoef1EE<2Yz)ND>QI}*acC&tCFx2 zcRLDB30e6EjSiT%PtNatkUMBRG)zTg!RWvtVlkOYFRZS{)AMTcw$>QjY3IjO)^H$0 zP^kgG>)WJQ`t%vgcIYm`7KU}VhmiI-SgUuPiszL><`~^=b9!8{B8onNx*Ri7+|yFN zcb*7XAZLbY9X{_s%vm(@9*`up!VsM~In5netL_4h(G8oOe$?dmm*;Gx9=a!gT$z9U z`4tBbrCT`-)eQutraGxQB!>nch`g^S{l;{(u`K&*8)V3mF7;6>kuSoU0?u92rDadW zL$J$K+(eVDp#mv1uJO+td?ti~CHBs5C(i>LIVvQBBMnfKB5ABWn@-XGqlKV6etbDD zKFN<@Mi1D;t1a(c@=Gxl`c+4Zu({ZHPSrCh$LvG2|+$1-p!#MPzn2JbsK~`=1{1LVrrmjQH zH9aV+&(vd8pMgoK@~YTc7>U$J++<_M&hZ27+M8&-DQ^O2UiOSL0__(% zU6K)61oB(>{zy{rO?cS1c}XUmVpqyPh$d4*=D>7$85zWN*NDIDFt3As6j@wHWeg#V zcXL@n$=051S-@{ScQXglmkm(`XKS3$XG!;iybbIKeH*>8+iQhk(eFJ}#@s+LbS_iyt>C-nvF3%eHSSDo-Gv^~$g2^r#PD@`3t3EcoO+(B=^ z)V=ZzbjDCNdgPgJ=r=>`_aON%;DAcC&BK-m!Tp@2)_72nGE%daZ-#kmutZEZ@HEYw z*#Y8aJ3$CUlu3%$tFYirs9aTre)aD1Ox0FI%B?#3O#>^9Lj4|x^btJRKtHYTDU^&} zI~iKaLVSFd@08|&;FVTu{c#-}x3o+;>U&On-LUPw`DT7Sm>~^%q?+W$;ecc*m9gLp z#pK`eRkGwn?W`XD=RnT6~6jWr3?)zVqu41nauE!M;iFGWb9_-b@} zLQGE&1^RfaHNsnvhoaYlDhPze!2+P9HmjtENSYLNh0S>@_|#gTOlpI}cNOH#)OW|M zJ!_w$V6F~~6psh>XtV5xoE;aQe!n$=IcBkm;KvRgIGiN!P~zMJ-V1w(>w}@%FFjBr z2-tYqzv5kCT$$|cvEf7VjVa7wA&l4i7Wy#DW25ye^Mj8ah6gc+Heh62>Z~wpf58Xf z&*fVrq_%l|57V@W_@$kiML)VoY~@uAmp0%K4*Q6!8j@uV3#C*K=ItQtXZutUOHQ9H z-bkowrj9ce^ie`S&Mz9`mihy4t*sBOQK$#M?R&2-8OlCR7D068tnMtB|9tHHh#*qO zx^jwIx_JIGgVZxN)2+?Sqdsz;UjYn;gg&#Hrl={u$Dal7IMoe?wxeP`7^I1!i1!Qa zU=4N|yIM;A^O{=VLMJV4wQ$jX5cbt{5R>Z|0^rfmvMMd+Js;kb5;>pxQ>}f`_v#@s zu_j<>#IB}sRl3k`{%$J{u&CX!k+7Ika9-k}?KlkAwVv?hIO?J-aMQFONT*T9(3AS? zGcz<9h@<)dGg=+wSyhKD8}d38O$N;H<7~H%>GEx5q}F54O>VK^)oflpE9ca~)c8nd9xzmB@6i3|MmHjvalOP9Z`9a&gY{YZT( zuz&sl#~2xyiD6py^K`?-9)6?Jn0*qz+st90NII_JZs-*S%t)eSAy?uVX8uHjT09(3< zUS079!9^1OFkLB?cQA+zC9bfA=nL&xp_HK-I-kvI^e1uCU zXlBUgF+@nhRhSwdl5HOTh$y6;6b>u2EqL;pyweF+am}W5(B-``D9@h2M{LGitLa$X zgNzis-VFWlG@^nc>8XRdnk22ipXP&}spHqwcVuv!Il}^H>Z@6QI_Ar@UaS9QwNE21 zanBxl{N+<)qhZp<7{B#@4ggp<|3?78`D%o-PEe$ZFa?TTe(SDSmqiqcR^h)9zkx1$|Y(tzZZ}B5kkb9Zd66Bw3|?( zSznO-p(n?^NlB^h(OHfs^Nb&k)A&MTe1|U?j-4iURfKKNWEvUWUh33#bJnjJi=|FB z_z(PO$bL718TfAKxbW(8Q0Vdf;wH&f_^5jTXk9eO)Azd!(*(w_@=fg%6!r46m~GZT z5#jAWvjkpsJx+s_d%}pPPc+eDZQqPFO#$et8z(0AnmN8zPYqLe#!5N+`AS27>3${B zL@-%X?5j|s8_=<=if52DINZiE^sD?gI?BUW=f=c z(Chp$_R{vJsmUPwRF``VMJM|z|6IVB#?L} z$AjDE>skgn;jlA!rq^u{JIbv*(K*ZMgH`TZ??<-U)jk;@22KT(Y5mlL-?hFlqebuW zgv~lz#m;3!3@yo@_5|)H1bq^&;xoTMS3OAo;TC2BlyoVYS@D^Pk8#_E(qXu|RF-Nt zTTBPG*v1{X%c5Zs=s=c1zcyH&r33&2@1tgkBm_`OZ_qr4fIy(*J8h{3#dPU!Q4z zla%iVL4opDx4?;;Q|MCZ4zfIGWGr;WgGn`qrk9Accy87`V$S_81j%3j-D)U>F>7=J zCP{f=> zw{t@7m7@3Cq3*Rd?a;_n=v#oa?+2&d(BMA=Voz@g%GsF`Ix+k$`VcG^oQyS8ZFgO- zu6n8Njpq0bjW{AXh=yvxcNnH`X(#9!3f*Nne?EKnqvI!s$|=z;vprgf*4h`Sbl(Z8 zUEQ*akb0R^+8yW8P>?h2*#pLMb%_1rfFwt56TRDPLn5XZKbu1{CAmB$e`g}roT}=9 zn$-lC&d-^+>gaT<$gnk4rQW|%Sv{MKrsJg#@BXevUY3mPva#q_)x5?hV!_!p#JEe8 z6D99qt}y(1U65yNr}!-rmmZOhzGO}xArkd`@^G?&ar)7;;i&6A8C~A&*&jQPr!A2P zTeq-BthVtrOk>v;MQX@emL@e8b!Q!WXL2LL(&jg#%U?CY3R7MJztUGpuPtdQ&{z_H zrsM!%e|eOqWtrXZtaZ#MR&m(Qus0-EAfj?6<~J>(-KFYL^3C~_JT`;#b;x&kJO3p& zF{%fctIT1b7Txr0j_*#U|NnM5@t=a>f7Ua{ug1EPc%b#)oehRuHZ^CgCvX0=X(w0^ ztx$=H?JUltJ4zOqc%WOuFlf%ZkG56ji$*&hGm(z;5yu_XDL@KmY;24*3r4bA}`W{leE}22uUx zJ@=BG5dx;$pZE?z>EwXXlWE`W0rl=O^|Bzn5Lo2!&dhLQk8n7a-L zU(GQOe49eZV**~+_SWQT=H*o~l}!2BoeOQ&x)~R*Hy3J@Nh5X&Qfwc_VARTFFJ*i_ z{T%^?`cd$19?b3vmTobtwGsi(KLS~fbE8Nb#@7^)>g)%tE=Ja)zHBz7#L-X6b{J2? ziiZ?>uHZN(^yS$y#eakXJt5Mwh4*hG(pIPfCE{0j^SVmZEvaLtrREwHd|gzi%hX@)5$>O#0fZ3!VDM_*}cfYQ_z{@s_2c^V@!a08s6{*nBDCV>P5z?DLh< z)T7SF@UM&=sUhAL|A-ChrsOY|8Vrt;23uSHK$FodG^A+neuYH(su)jH5;9>tr~|q& z2t_bgzJ{E@uOdzo!251kAT02=#uewF$SRMLvl}J!P?IM!W=YGtul^-IF;)4WxR3n7 zs!UmSkxxm^PH%I+M+e3|b^IIKTX+R+YEaum?bnZElQLQNnDV|t{Wa~``EVH9X=Htq zR9v0;<>8&rejtu5t+z#ibs#YR`m?+@tEHzrA46r`&wVKi92+xUxm*u(-OuQ4eINfH zjAypTh%+qksp4OW3%wHkWy;rGq<|4s7I2B}u%_?C!>p)}H1t!LU$hQDVfmLC-tLT~ z*^n;X0qPMQfs>rKDW8%uio{CO+5&49r!MKLmrLO~{tX-4smS6q`0|dfcSipb4)hcO z#`JKYrws!r^jmzPaNUPc@4@o)?19+8>y&!O!b#KroAb!X-eI4tQ{j0t>OYrs(_QP~ zP1oJ|O{7?yYs*@&Uq_1>{N{fw&?iS{!!7?#S( z>lu{ws&e$vqu{#o`ht|pB&`hZxB`ZKr!OtuYVpkXEXz!w-{eLGGWJJ@Db5}h%q^JV zMx@6%86cZ_G2t}mj>H8pNt|A6Z~tn?2mUm1ft9rxXxS^ph&5ih(J6YONXaoL;=jB` z-*QZDlg`^@nX#cVt(?Be$757q26@j3Y#hAZqzxws$a2dv7ei%|q;W}(Ci4&=*!Uk_ zMv>C*cZ2f8Eh8GRsc>B#Ys86tD37HJ=H9G0s=L)-tc+}!aEy{gra~*sVl$8?{z2FRQ><2zE1$^_ zDt9?3-XtW=vX2`j&u5=2)biLAo^b0WE|U4Nxs^%V*{Y_Ci@mOdzdn(H&s*B% zE9;bI)p)g7U3%N^;D=7{YoCPE_d!%@-ry&P=J8#awS_H~w>8t1)_c$2DOwgVB=K2p zH)kfrrERn%gBo|9=}cpOHoM}yE(sUz1>7pL{tp_`na8sK^Tma8kF_unGb~D$a6yu^ zn&+a9!CVnZcLpELMOL(%VtcJMnmEOBeynjgZVX+T#Ov(_Hqya%VD3VNE$zQ!B{o?& z$7<(0aBQ}jW5msT`aw)l;S<;3TgP6vJ;=pbnqp&jI2uzPW2FKZY?>a$T~}4;gZ4=& z9umSu9!jISyOC~FY^J{Vf-iIt44M>7AN>91UqZS6;!2xT~M3SbYU?*Key>ML}=inKAtTUe>?Pz$+G5N?ljL zCZUeHh7>q(?!Ae+yvBIG>vCgO)<;Vb^ZUF#Qcj#jx_u%Dl(b ziWRjJ9zr_e-1>iyo#ghDXJ6}oS1Dvl785zG+u}UiZ`rNYQEew7dn+IX)#RY7#3@8d z+i!(n*%qQG5T{Zy7fjExe^GFbynE&$={|%hGas6HVvyqmt*0F{hTGK^96lifKU*j@ z0e9t1<%p0AmdC8;*lTxfpj45jYRNhb37@>ntQJr1HgyR&>(zEu5y|PxQZo3Me0e6WQ$~Sdm^s6_CX|?H6<<1Po)1p#S7-eA50G>ZcW|AlEMHz1M%_}b zlI8fw0k@56(brkR{$7V#7x9#_M!FyZ#yh)%Kz-M&rM|pq1AOL=-aX#BU31dU<>N_% zE9K>C^jL~zL`%$27%AR0qS%sAQDt#J|4HtvonUql3ea46Jy>(gbx&O*TM!J+8kQpTmcY1wF zdX~GDUlx4T-tBA={P6_ENx9%hjH_522+;%+G!I~}w9}b%D^n?t;{PHf_JZqC+JM_s z`H*i~=}bm%y19ES*=~0<6P#$h#%Fp6&K8-01(Id3N9Tfnc7a`f*CZ)_)+B(T$HOZS zY5S$hu6xof+^ES}ql`4%77b&-u6tB`=SHuNxqi4{d>dDHTlRH#rQavC1+K1a9VW;H^&GLC4D#GU6-&5H6u&boG~&3- ziW?QqA<*uUF#e+nRoqm+4sajHz5R6NeT{=HcF`0E<8lkYKjGw(yMs!}z3CB_knC7m z4=o?*XWEV4h=M#@HC?L^-K>$4Uw1l+eja}hA+2ct>K@A%LLQA__y1lo18$eXx1(Op zT72t<BDoEbP z@Ot`Ubxo<^8Rrl;6I?ns$;)WFp3=d2kE?^~Br|$A;(IWqIVXxtkSjf&bJBN;MK<|9 zc607F%G3!qv-i6Y5&T3z_$tu51}?SEfN^zpeQwg;I^vkcNs&=#f<2Mx7!;&LgaW@g z@g0ufH5AegTGZnb#!aNf1>#HI#on%;g>;2-4z|?0@+idY`S6VwvlAP?p>-PSsYIYW?nqvn}~v8?BD2bTrV#JxtUrPWPu* zN7gdmZ0;?lY$7;`PmmmFfRD)m%f6T~>JTVF8}G`Y$66%?;*ddaS%P z%k)6s|II=sLSBF^z2d=f6Knx>T%0jv3A5$e67_k;DzhC?e}-q8Zn0;XS&4m2jb;5I z#xD5krQ4@wNYFG)Fwv}l)2_z>s|H~49lfDIMrmn7>0BZh?P>N(lq^`{*xyX1G{-1U zUX}xOBK^@y(7O}aOCw!ejCjrO>HI>fc>eUjnRc;rXa!Vy2Yh;K^VvdgakIP7^b^nJ zH2OR2=l&hv7b6I%Qz`!rMHb!%4K)*x-|Z*+XiWuLWM?FQd^_Kg0=zL)-(X*J-{$HO zJOmW7uVW+C_C0XBxA-6o9|IZiFggwd+(p(7jLx;HJk?Q>gCwS4=fjDNkszZ39hH6Kg6~E))emi*^mfdEn~&*TQqxB(Jq98iKVhII|A_ znTb_DQU5&dv-|Ym=ZmYVEh$q#8O_@t9=NOx;!zWho&0@E`M=u<`9GtJzimT#*f4NS ZC??9%ZOK#@g4?!_rz8gk6}~VF_+LS8+!_D? literal 0 HcmV?d00001 diff --git a/modules/default/weather/providers/darksky.js b/modules/default/weather/providers/darksky.js index 4ce0c895..e5358a0f 100644 --- a/modules/default/weather/providers/darksky.js +++ b/modules/default/weather/providers/darksky.js @@ -46,7 +46,7 @@ WeatherProvider.register("darksky", { // Create a URL from the config and base URL. getUrl: function() { - return `https://cors-anywhere.herokuapp.com/https://api.darksky.net/forecast/${this.config.apiKey}/${this.config.lat},${this.config.lon}`; + return `${this.config.apiBase}${this.config.weatherEndpoint}/${this.config.apiKey}/${this.config.lat},${this.config.lon}`; }, // Implement WeatherDay generator. diff --git a/modules/default/weather/weather.js b/modules/default/weather/weather.js index b3832dd0..d94f774e 100644 --- a/modules/default/weather/weather.js +++ b/modules/default/weather/weather.js @@ -12,7 +12,6 @@ Module.register("weather",{ defaults: { updateInterval: 10 * 60 * 1000, weatherProvider: "openweathermap", - units: config.units, roundTemp: false, type: "current", //current, forecast @@ -43,11 +42,11 @@ Module.register("weather",{ appendLocationNameToHeader: true, calendarClass: "calendar", - tableClass: 'small', + tableClass: "small", onlyTemp: false, - roundTemp: false, - showRainAmount: true + showRainAmount: true, + colored: false }, // Module properties. @@ -191,7 +190,7 @@ Module.register("weather",{ this.nunjucksEnvironment().addFilter("unit", function (value, type) { if (type === "temperature") { value += "°"; - if (this.config.scale || this.config.degreeLabel) { + if (this.config.degreeLabel) { if (this.config.units === "metric") { value += "C"; } else if (this.config.units === "imperial") {