From 1241043384d2a35ca00247c5af0ab7b6dd4b2335 Mon Sep 17 00:00:00 2001 From: Tim Orme Date: Mon, 22 May 2023 20:03:15 -0700 Subject: [PATCH] Add logo and favicon --- README.md | 2 +- aqimon/static/favicon.ico | Bin 15406 -> 1001 bytes aqimon/static/images/aqimon.png | Bin 0 -> 9197 bytes aqimon/static/index.html | 1 + aqimon/templates/index.html | 157 -------------------------------- elm/src/Main.elm | 11 ++- header.png | Bin 0 -> 12070 bytes logo.svg | 78 ++++++++++++++++ 8 files changed, 86 insertions(+), 163 deletions(-) create mode 100644 aqimon/static/images/aqimon.png delete mode 100644 aqimon/templates/index.html create mode 100644 header.png create mode 100644 logo.svg diff --git a/README.md b/README.md index 11ff843..0c873d6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# AQIMON +# ![AQIMON](header.png) A simple Air Quality Index monitor, designed to work on the Raspberry Pi with the SDS011 Nova PM Sensor. diff --git a/aqimon/static/favicon.ico b/aqimon/static/favicon.ico index 47fb7232b191132b37f3d539d19180aff5e93334..ea62ddc7db9d7f78d370c9bd9eae4a38695214bd 100644 GIT binary patch literal 1001 zcmVGx-=TiWIeV)rwLqf)N)k{h)=4(4C-U(M?fkDJX6P zsSE8kD!5P=TB*gh?nK3@h*7k(T^Z6gnZ_YAllkt<0)bB7=#Z!qA0ym74@B92+USX+YxlkVtmHllCRe^=2BKZ~7gV%NhEgPwb z;RuYSN11S~RDy8YiA*4q9_8WqDvu<*XaWdJz!-zZ5-L0_k! zR9V3YxQ;_$Ei0`Ki(TR8_E4k~&^LivtIfq`T&q^;SmDo3TF*C9+Od%(&}ScTT+TI8 zdZs=SIpaHRr`$;Or2#>R^{JNA&P(PEd0!@|+;z<;O+JquHv1-jAMY!y4Sb5;)`Hv3 z9M5LIlau!yGgq>EoP2W1%(&BLFPGQXyvR3_Pd#m3zV}Os4f|%xE$DW;sI|=A+FEdj z%xOsvHNb&fxpmL@c%H}2WqF`zk3`kaCvycuj4DOYMPm4$GTlZXF zjfDcfZBuSuaDf0!)vf{e(Pi9PYrc2gjRrn#W@LZzR|vqV1u((pS#L%l3h-XJ%)7A@ z=9%n|l1y|k6$|72gNG)NrN(=)W9Eg_Imx9<07zYtj1D|s2O=OSN6jgj9-5I|<8!hO zX2Ap&LhR%~1fJ6i@@D!SlS$V%e3!Pu$l%~GV8PDI^ZIe~Rqd`0Z6x3+#J7O}!13Uu zJzF`T*8kU4B>a>PbtQYn`@~+XJf$dL*V^i~67Yy|u=lmSTHd1sAkH>d03btyk$4jf zXoRa-=tlHm{57*Pb3U0`}KRTU%&2t|9fv7XPk4V zGk(0oy1dnPK!&iyryK)9l`+`;#G zK;?_T@eROA*74S>xr%hY29B%*Hp~KAHb>!_H=6e&tDc{;wj_-}s}U(Yhr{t7X%T>5JAsWq|PLz4~1<|AWgo|2byf$JVo^tSn!7 zUULr&j&&~DKjBb%`#0{PkV2!*nF5vvS#&;)_Mq6g1Es;aLVAuCR_iiJD70;S+t6ybXBha%K zSo4|}S0eiA6YiQ%y<=o!S^28&+U4!nxQ=@2z=%z!-?I6RuDKrWM)dbA1}>c-?|Y(U zh;y%+ZEy`}5Q4)sT6H&*(R@3kRgA8-AL_8x7$bCikrR-c}D_HJz7Sm}#S zdmSKsi@a~+`{LZv-|``Fw%OR%gMDV+cHJa@$;JM*wf2tWUpAt<>CC@u5_O>0$i9QJ zuryR3r@bw`7L2>S^Ka^(>kLSXKI!Z)HF~g>vT)PUw}51G>M*ePS76UCK<|FGwNOq^ z8`yO-xj*-rcI{pF_+;NJp9l8+#<4N;)cB>31KYm@4p*>L8eJ`)5~ZX4A-+`NtyQu- z_;68~`m*q4ks%!z`4;RQ)47lV9!S57-=Xtv7X8RKu)e<|{<=Ucgdh{#>kAs=8^`H+UJPg$*bvEE3P+ zJ-p_|5uS?>3fAR{X2$7+f(_F5 zjN{GGI�>l6y5-c~Xb6?w3uL7auOa&L4lh{Pps6z}JD>QU~OR+RpfX-RD5Xh)+02 zHb>g>u6Pb;-3km}rGI@LWA9JpkKHRDocwX(T|QjJCbBJe`S;hpVSIv#XbDbn0r?Is zoZeTxWO5nmzo0+!cltaBfs=3fInWjW1d88vR!MNPcYTiG0~r?=Y8!{$7>!Zv$<$hDXI(+&Z*; zI%6{*GXTLyc{T37RCtbsl|Nhl>Ud{G`Bdt|L9Wp`uK!HKfAt*7d;s{DK6mTykHx9H zAi*dW=I&FBOHV3sG57d*?+ptWA7h+CG7)}vQQngDOF2t6uGUWZYCcu7yu7(_E2b%Z z>T2}DWP|_87pRv#CVry$in}PL5)K23uSEFco>7}(eu_D{d3L`mR;cw+EK9jlwl5p} zOP`gaHOzf*pq%H(5>pgI>7xwKwnphIcBV&rQ9N3{Vr!i@I{)=3o?`p6!M||pzEqsi z=8CCJ`mVLu^<9*{&OkldznZt@E4G%dDQ>E#dUg~pTm0*+Qyf~cO3Rnl;$pWq2CSSt zJ<5N(k^D7BJ$Bz~j@ja0xRukVeJowq925(Wz!WRigy?Yy$6Q9%h7cbAUt%m2%1+QLMzHP0$T6bC}=V05i&A;%=Zqb={`iP@C&@x~k{;z<=)NB9&Ue#G>7(Y1cb|K)I0UEou7w@A z$azzzbT{ZeZ~DV~Kge#0NEt z$yInMZ`~iZ=-#w=Y@0x3Rz#No4+#ha()$H=i>wl2nYbXdcO2^u!A{)y?kEeY%8*X zK-{4JAWw_~KW@zjy?1m972Dmpn6haL&>Q8Jih~KzL`mR5@soO`DdeX4`4`rRcaGLg z;wcI-b*?asfo)RUA64!rMNhq21Eu+B5HuZl%n;rmTIPg=aEs;&M0s^+Q21FAFDk2xg&Y@t8d|Ou-MUGi}dNu z_k@S}d4xyPD=Yks9v-v}c zSB#wcob0=8Qc{u%Bu#_gJ$z)b=)@jZO92u3$EhsE_VnIhw-6lK-Nyn}mQheh&@7HB z7I^LZKtV31#`EG?$Scp8!_%@KX=i4aCD&AEW#u<4vFggQ5)zR=ei+R5<;kK7o$)g{ zmHGC`;S_ex&cutbpHsCGqJh{(hS9q-bb54AhUHa^pAQ6$+!7`!JR%oWK@l*yr1*F; ztG-^;pF8)Y+&1_IMp?iO&OSbLkt!WiwKW`iQcxEoN@mNVcXifnmzE94MiTjlg;Olx z30rsfA=9Hm&?e__ZE!&rP@?i6CQ#9H5ygLWGMYjPhsuxxu z*vn!pWVK^wQMP+nFcs*pp8*9o9X$c%ip0o)3vY+!&lvcruw4*>>;t;9cE_;2(-fEu zAU$^)ae1R=-MGR27wgy68w|LzMHH{5F-ck)NsbxZILokl=yp zepPPSG=p|~ioH!m8y>(Zco0~-u&{;Wy;LSupL?;81|t8P6O6WCG=$gg<@j8A1-+36 zyG~dSY_C?=b1V3Tg5Yn>o@~(u0eIq_Oso?>9ocL~Q-x_#FGe`tckVMKdhA%0Atczi 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 literal 0 HcmV?d00001 diff --git a/aqimon/static/index.html b/aqimon/static/index.html index 908b7f1..3169898 100644 --- a/aqimon/static/index.html +++ b/aqimon/static/index.html @@ -4,6 +4,7 @@ + diff --git a/aqimon/templates/index.html b/aqimon/templates/index.html deleted file mode 100644 index 548ec62..0000000 --- a/aqimon/templates/index.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - AQI Reading - - - - - - - - - - - -
-
-
-
-
-

-
-
-
EPA PM2.5 AQI
-
-
-
-
-
-
-

-
-
-
Raw PM2.5
-
-
-
- -
-
-
-

-
-
-
Raw PM10
-
-
-
-
-
- -
-
-
- -
-
-
- - - - - diff --git a/elm/src/Main.elm b/elm/src/Main.elm index 12e5da1..6817d85 100644 --- a/elm/src/Main.elm +++ b/elm/src/Main.elm @@ -6,7 +6,6 @@ import Bootstrap.Form.Select as Select import Bootstrap.Grid as Grid import Bootstrap.Grid.Col as Col import Bootstrap.Grid.Row as Row -import Bootstrap.Text as Text import Browser import Chart.Item as CI import CurrentReads as CR exposing (..) @@ -14,8 +13,8 @@ import DeviceStatus as DS exposing (..) import EpaCommon as EC exposing (..) import EpaLevel as EL exposing (..) import Graph as G exposing (..) -import Html exposing (Attribute, Html, div, h1, h2, h5, text) -import Html.Attributes exposing (class, style, value) +import Html exposing (Attribute, Html, div, h1, h2, h5, img, text) +import Html.Attributes exposing (class, height, src, style, value, width) import Http import Json.Decode exposing (Decoder, andThen, fail, field, float, int, list, map2, map3, map4, maybe, string, succeed) import Task @@ -312,8 +311,10 @@ view model = [ Grid.row [ Row.attrs [ style "padding" "1em" ] ] [ Grid.col [] [ h1 - [] - [ text "AQI Monitor" ] + [ class "d-flex", class "align-items-center" ] + [ img [ src "/static/images/aqimon.png", style "margin-right" "0.5em", width 75, height 75, class "d-inline-block", class "align-text-top" ] [] + , text "AQI Monitor" + ] ] ] , Grid.row [ Row.attrs [ style "padding" "1em" ] ] diff --git a/header.png b/header.png new file mode 100644 index 0000000000000000000000000000000000000000..dac9a7cac0d4ed58c38fa4bab8e32b5f3cf30b2c GIT binary patch literal 12070 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

*rNy}Ldy3LG396c{C# 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 u5;@Oc%Rm<<8vNgSkYI5A_gq2O$&*yhYYvD + + + + + + + + + + + + +