diff --git a/skins/Standard/NOAA/NOAA-YYYY-MM.txt.tmpl b/skins/Standard/NOAA/NOAA-YYYY-MM.txt.tmpl new file mode 100644 index 00000000..ee9d4a81 --- /dev/null +++ b/skins/Standard/NOAA/NOAA-YYYY-MM.txt.tmpl @@ -0,0 +1,39 @@ +#errorCatcher Echo +#set $YM="%Y %m" +#set $D=" %d" +#set $M=" %b" +#set $Time=" %H:%M" +#set $NODAY=" N/A" +#set $Temp="%6.1f" +#set $Wind="%6.1f" +#set $Dir="%6.0f" +#set $Count="%6d" +#set $NONE=" N/A" +#if $unit.unit_type_dict.group_rain == "mm" +#set $Rain="%6.1f" +#else +#set $Rain="%6.2f" +#end if + MONTHLY CLIMATOLOGICAL SUMMARY for $month_name $year_name + + +NAME: $station.location +ELEV: $station.altitude LAT: $station.latitude[0]-$station.latitude[1] $station.latitude[2] LONG: $station.longitude[0]-$station.longitude[1] $station.longitude[2] + + + TEMPERATURE ($unit.label.outTemp.strip()), RAIN ($unit.label.rain.strip()), WIND SPEED ($unit.label.windSpeed.strip()) + + HEAT COOL AVG + MEAN DEG DEG WIND DOM +DAY TEMP HIGH TIME LOW TIME DAYS DAYS RAIN SPEED HIGH TIME DIR +--------------------------------------------------------------------------------------- +#for $day in $month.days +#if $day.barometer.count.raw +$day.dateTime.format($D) $day.outTemp.avg.nolabel($Temp,$NONE) $day.outTemp.max.nolabel($Temp,$NONE) $day.outTemp.maxtime.format($Time) $day.outTemp.min.nolabel($Temp,$NONE) $day.outTemp.mintime.format($Time) $day.heatdeg.sum.nolabel($Temp,$NONE) $day.cooldeg.sum.nolabel($Temp,$NONE) $day.rain.sum.nolabel($Rain,$NONE) $day.wind.avg.nolabel($Wind,$NONE) $day.wind.max.nolabel($Wind,$NONE) $day.wind.maxtime.format($Time) $day.wind.vecdir.nolabel($Dir,$NONE) +#else +$day.dateTime.format($D) +#end if +#end for +--------------------------------------------------------------------------------------- + $month.outTemp.avg.nolabel($Temp,$NONE) $month.outTemp.max.nolabel($Temp,$NONE) $month.outTemp.maxtime.format($D) $month.outTemp.min.nolabel($Temp,$NONE) $month.outTemp.mintime.format($D) $month.heatdeg.sum.nolabel($Temp,$NONE) $month.cooldeg.sum.nolabel($Temp,$NONE) $month.rain.sum.nolabel($Rain,$NONE) $month.wind.avg.nolabel($Wind,$NONE) $month.wind.max.nolabel($Wind,$NONE) $month.wind.maxtime.format($D) $month.wind.vecdir.nolabel($Dir) + diff --git a/skins/Standard/NOAA/NOAA-YYYY.txt.tmpl b/skins/Standard/NOAA/NOAA-YYYY.txt.tmpl new file mode 100644 index 00000000..2a34cdd3 --- /dev/null +++ b/skins/Standard/NOAA/NOAA-YYYY.txt.tmpl @@ -0,0 +1,96 @@ +#errorCatcher Echo +#set $YM="%Y %m" +#set $D=" %d" +#set $M=" %b" +#set $NODAY=" N/A" +#set $Temp="%6.1f" +#set $Wind="%6.1f" +#set $Dir="%6.0f" +#set $Count="%6d" +#set $NONE=" N/A" +#if $unit.unit_type_dict.group_temperature == "degree_F" +#set $Hot =(90.0,"degree_F") +#set $Cold =(32.0,"degree_F") +#set $VeryCold=(0.0, "degree_F") +#else +#set $Hot =(30.0,"degree_C") +#set $Cold =(0.0,"degree_C") +#set $VeryCold=(-20.0,"degree_C") +#end if +#if $unit.unit_type_dict.group_rain == "inch" +#set $Trace =(0.01,"inch") +#set $SomeRain =(0.1, "inch") +#set $Soak =(1.0, "inch") +#set $Rain="%6.2f" +#elif $unit.unit_type_dict.group_rain == "mm" +#set $Trace =(.3, "mm") +#set $SomeRain =(3, "mm") +#set $Soak =(30.0,"mm") +#set $Rain="%6.1f" +#else +#set $Trace =(.03,"cm") +#set $SomeRain =(.3, "cm") +#set $Soak =(3.0,"cm") +#set $Rain="%6.2f" +#end if +#def ShowInt($T) +$("%6d" % $T[0])#slurp +#end def +#def ShowFloat($R) +$("%6.2f" % $R[0])#slurp +#end def + CLIMATOLOGICAL SUMMARY for year $year_name + + +NAME: $station.location +ELEV: $station.altitude LAT: $station.latitude[0]-$station.latitude[1] $station.latitude[2] LONG: $station.longitude[0]-$station.longitude[1] $station.longitude[2] + + + TEMPERATURE ($unit.label.outTemp.strip()) + + HEAT COOL MAX MAX MIN MIN + MEAN MEAN DEG DEG >= <= <= <= + YR MO MAX MIN MEAN DAYS DAYS HI DAY LOW DAY $ShowInt($Hot) $ShowInt($Cold) $ShowInt($Cold) $ShowInt($VeryCold) +------------------------------------------------------------------------------------------------ +#for $month in $year.months +#if $month.barometer.count.raw +$month.dateTime.format($YM) $month.outTemp.meanmax.nolabel($Temp,$NONE) $month.outTemp.meanmin.nolabel($Temp,$NONE) $month.outTemp.avg.nolabel($Temp,$NONE) $month.heatdeg.sum.nolabel($Temp,$NONE) $month.cooldeg.sum.nolabel($Temp,$NONE) $month.outTemp.max.nolabel($Temp,$NONE) $month.outTemp.maxtime.format($D,$NODAY) $month.outTemp.min.nolabel($Temp,$NONE) $month.outTemp.mintime.format($D,$NODAY) $month.outTemp.max_ge($Hot).nolabel($Count,$NONE) $month.outTemp.max_le($Cold).nolabel($Count,$NONE) $month.outTemp.min_le($Cold).nolabel($Count,$NONE) $month.outTemp.min_le($VeryCold).nolabel($Count,$NONE) +#else +$month.dateTime.format($YM) +#end if +#end for +------------------------------------------------------------------------------------------------ + $year.outTemp.meanmax.nolabel($Temp,$NONE) $year.outTemp.meanmin.nolabel($Temp,$NONE) $year.outTemp.avg.nolabel($Temp,$NONE) $year.heatdeg.sum.nolabel($Temp,$NONE) $year.cooldeg.sum.nolabel($Temp,$NONE) $year.outTemp.max.nolabel($Temp,$NONE) $year.outTemp.maxtime.format($M,$NODAY) $year.outTemp.min.nolabel($Temp,$NONE) $year.outTemp.mintime.format($M,$NODAY) $year.outTemp.max_ge($Hot).nolabel($Count,$NONE) $year.outTemp.max_le($Cold).nolabel($Count,$NONE) $year.outTemp.min_le($Cold).nolabel($Count,$NONE) $year.outTemp.min_le($VeryCold).nolabel($Count,$NONE) + + + PRECIPITATION ($unit.label.rain.strip()) + + MAX ---DAYS OF RAIN--- + OBS. OVER + YR MO TOTAL DAY DATE $ShowFloat(Trace) $ShowFloat($SomeRain) $ShowFloat($Soak) +------------------------------------------------ +#for $month in $year.months +#if $month.barometer.count.raw +$month.dateTime.format($YM) $month.rain.sum.nolabel($Rain,$NONE) $month.rain.maxsum.nolabel($Rain,$NONE) $month.rain.maxsumtime.format($D,$NODAY) $month.rain.sum_ge($Trace).nolabel($Count,$NONE) $month.rain.sum_ge($SomeRain).nolabel($Count,$NONE) $month.rain.sum_ge($Soak).nolabel($Count,$NONE) +#else +$month.dateTime.format($YM) +#end if +#end for +------------------------------------------------ + $year.rain.sum.nolabel($Rain,$NONE) $year.rain.maxsum.nolabel($Rain,$NONE) $year.rain.maxsumtime.format($M,$NODAY) $year.rain.sum_ge($Trace).nolabel($Count,$NONE) $year.rain.sum_ge($SomeRain).nolabel($Count,$NONE) $year.rain.sum_ge($Soak).nolabel($Count,$NONE) + + + WIND SPEED ($unit.label.windSpeed.strip()) + + DOM + YR MO AVG HI DATE DIR +----------------------------------- +#for $month in $year.months +#if $month.barometer.count.raw +$month.dateTime.format($YM) $month.wind.avg.nolabel($Wind,$NONE) $month.wind.max.nolabel($Wind,$NONE) $month.wind.maxtime.format($D,$NODAY) $month.wind.vecdir.nolabel($Dir,$NONE) +#else +$month.dateTime.format($YM) +#end if +#end for +----------------------------------- + $year.wind.avg.nolabel($Wind,$NONE) $year.wind.max.nolabel($Wind,$NONE) $year.wind.maxtime.format($M,$NODAY) $year.wind.vecdir.nolabel($Dir,$NONE) diff --git a/skins/Standard/RSS/weewx_rss.xml.tmpl b/skins/Standard/RSS/weewx_rss.xml.tmpl new file mode 100644 index 00000000..ece8e5d7 --- /dev/null +++ b/skins/Standard/RSS/weewx_rss.xml.tmpl @@ -0,0 +1,136 @@ + + + + $station.location, Weather Conditions + $station.station_url + Current conditions, and daily, monthly, and yearly summaries + en-us + $current.dateTime.format("%a, %d %b %Y %H:%M:%S %Z") + + $current.dateTime.format("%a, %d %b %Y %H:%M:%S %Z") + http://blogs.law.harvard.edu/tech/rss + weewx $station.version + $current.interval.string('') + + + Weather Conditions at $current.dateTime + $station.station_url + + Outside temperature: $current.outTemp; + Barometer: $current.barometer; + Wind: $current.windSpeed from $current.windDir; + Rain rate: $current.rainRate; + Inside temperature: $current.inTemp + + $current.dateTime.format("%a, %d %b %Y %H:%M:%S %Z") + $station.latitude_f + $station.longitude_f + + Time: $current.dateTime
+ Outside Temperature: $current.outTemp
+ Inside Temperature: $current.inTemp
+ Wind Chill: $current.windchill
+ Heat Index: $current.heatindex
+ Dewpoint: $current.dewpoint
+ Humidity: $current.outHumidity
+ Barometer: $current.barometer
+ Wind: $current.windSpeed from $current.windDir
+ Rain Rate: $current.rainRate
+

+ ]]>
+
+ + + Daily Weather Summary as of $current.dateTime + $station.station_url + + Min outside temperature: $day.outTemp.min at $day.outTemp.mintime; + Max outside temperature: $day.outTemp.max at $day.outTemp.maxtime; + Min inside temperature: $day.inTemp.min at $day.inTemp.mintime; + Max inside temperature: $day.inTemp.max at $day.inTemp.maxtime; + Min barometer: $day.barometer.min at $day.barometer.mintime; + Max barometer: $day.barometer.max at $day.barometer.maxtime; + Max wind : $day.wind.max from $day.wind.gustdir at $day.wind.maxtime; + Rain today: $day.rain.sum + + $current.dateTime.format("%a, %d %b %Y %H:%M:%S %Z") + $station.latitude_f + $station.longitude_f + + Day: $day.dateTime.format("%d %b %Y")
+ Min Outside Temperature: $day.outTemp.min at $day.outTemp.mintime
+ Max Outside Temperature: $day.outTemp.max at $day.outTemp.maxtime
+ Min Inside Temperature: $day.inTemp.min at $day.inTemp.mintime
+ Max Inside Temperature: $day.inTemp.max at $day.inTemp.maxtime
+ Min Barometer: $day.barometer.min at $day.barometer.mintime
+ Max Barometer: $day.barometer.max at $day.barometer.maxtime
+ Max Wind : $day.wind.max from $day.wind.gustdir at $day.wind.maxtime
+ Rain today: $day.rain.sum
+

+ ]]>
+
+ + + Monthly Weather Summary as of $current.dateTime + $station.station_url/month.html + + Min outside temperature: $month.outTemp.min at $month.outTemp.mintime; + Max outside temperature: $month.outTemp.max at $month.outTemp.maxtime; + Min inside temperature: $month.inTemp.min at $month.inTemp.mintime; + Max inside temperature: $month.inTemp.max at $month.inTemp.maxtime; + Min barometer: $month.barometer.min at $month.barometer.mintime; + Max barometer: $month.barometer.max at $month.barometer.maxtime; + Max wind : $month.wind.max from $month.wind.gustdir at $month.wind.maxtime; + Rain total for month: $month.rain.sum + + $current.dateTime.format("%a, %d %b %Y %H:%M:%S %Z") + + Month: $month.dateTime.format("%B %Y")
+ Max Outside Temperature: $month.outTemp.max at $month.outTemp.maxtime
+ Min Outside Temperature: $month.outTemp.min at $month.outTemp.mintime
+ Max Inside Temperature: $month.inTemp.max at $month.inTemp.maxtime
+ Min Inside Temperature: $month.inTemp.min at $month.inTemp.mintime
+ Min Barometer: $month.barometer.min at $month.barometer.mintime
+ Max Barometer: $month.barometer.max at $month.barometer.maxtime
+ Max Wind : $month.wind.max from $month.wind.gustdir at $month.wind.maxtime
+ Rain total for month: $month.rain.sum
+

+ ]]>
+
+ + + Yearly Weather Summary as of $current.dateTime + $station.station_url/year.html + + Min outside temperature: $year.outTemp.min at $year.outTemp.mintime; + Max outside temperature: $year.outTemp.max at $year.outTemp.maxtime; + Min inside temperature: $year.inTemp.min at $year.inTemp.mintime; + Max inside temperature: $year.inTemp.max at $year.inTemp.maxtime; + Min barometer: $year.barometer.min at $year.barometer.mintime; + Max barometer: $year.barometer.max at $year.barometer.maxtime; + Max wind : $year.wind.max from $year.wind.gustdir at $year.wind.maxtime; + Rain total for year: $year.rain.sum + + $current.dateTime.format("%a, %d %b %Y %H:%M:%S %Z") + + Year: $year.dateTime.format("%Y")
+ Max Outside Temperature: $year.outTemp.max at $year.outTemp.maxtime
+ Min Outside Temperature: $year.outTemp.min at $year.outTemp.mintime
+ Max Inside Temperature: $year.inTemp.max at $year.inTemp.maxtime
+ Min Inside Temperature: $year.inTemp.min at $year.inTemp.mintime
+ Min Barometer: $year.barometer.min at $year.barometer.mintime
+ Max Barometer: $year.barometer.max at $year.barometer.maxtime
+ Max Wind : $year.wind.max from $year.wind.gustdir at $year.wind.maxtime
+ Rain total for year: $year.rain.sum
+

+ ]]>
+
+ +
+
diff --git a/skins/Standard/backgrounds/band.gif b/skins/Standard/backgrounds/band.gif new file mode 100644 index 00000000..fdfd5cdb Binary files /dev/null and b/skins/Standard/backgrounds/band.gif differ diff --git a/skins/Standard/backgrounds/butterfly.jpg b/skins/Standard/backgrounds/butterfly.jpg new file mode 100644 index 00000000..e33a26ff Binary files /dev/null and b/skins/Standard/backgrounds/butterfly.jpg differ diff --git a/skins/Standard/backgrounds/drops.gif b/skins/Standard/backgrounds/drops.gif new file mode 100644 index 00000000..6d3814ec Binary files /dev/null and b/skins/Standard/backgrounds/drops.gif differ diff --git a/skins/Standard/backgrounds/flower.jpg b/skins/Standard/backgrounds/flower.jpg new file mode 100644 index 00000000..4b33f6d3 Binary files /dev/null and b/skins/Standard/backgrounds/flower.jpg differ diff --git a/skins/Standard/backgrounds/leaf.jpg b/skins/Standard/backgrounds/leaf.jpg new file mode 100644 index 00000000..dd3b02c6 Binary files /dev/null and b/skins/Standard/backgrounds/leaf.jpg differ diff --git a/skins/Standard/backgrounds/night.gif b/skins/Standard/backgrounds/night.gif new file mode 100644 index 00000000..e6a17743 Binary files /dev/null and b/skins/Standard/backgrounds/night.gif differ diff --git a/skins/Standard/favicon.ico b/skins/Standard/favicon.ico new file mode 100644 index 00000000..bd0f996f Binary files /dev/null and b/skins/Standard/favicon.ico differ diff --git a/skins/Standard/index.html.tmpl b/skins/Standard/index.html.tmpl new file mode 100644 index 00000000..75f890a4 --- /dev/null +++ b/skins/Standard/index.html.tmpl @@ -0,0 +1,527 @@ +#errorCatcher Echo +## +## Specifying an encoding of UTF-8 is usually safe, but if your text is +## actually in Latin-1, then you should replace the string "UTF-8" with "latin-1" +## If you do this, you should also change the 'Content-Type' metadata below. +#encoding UTF-8 +## + + + + ## This choice should match the #encoding directive above + + $station.location Current Weather Conditions + + + + + + +
+
+

$station.location

+

Current Weather Conditions

+

$current.dateTime

+
+ +
+ +
+
+ Current Conditions +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $day.UV.has_data + + + + + #end if + #if $day.ET.has_data and $day.ET.sum.raw > 0.0 + + + + + #end if + #if $day.radiation.has_data + + + + + #end if + +
Outside Temperature$current.outTemp
Wind Chill$current.windchill
Heat Index$current.heatindex
Dewpoint$current.dewpoint
Humidity$current.outHumidity
Barometer$current.barometer
Barometer Trend ($trend.time_delta.hour.format("%.0f"))$trend.barometer
Wind$current.windSpeed from $current.windDir ($current.windDir.ordinal_compass)
Rain Rate$current.rainRate
Inside Temperature$current.inTemp
UV$current.UV
ET$current.ET
Solar Radiation$current.radiation
+
+ +

 

+ +
+
+ Since Midnight +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $day.UV.has_data + + + + + #end if + #if $day.ET.has_data and $day.ET.sum.raw >0.0 + + + + + #end if + #if $day.radiation.has_data + + + + + #end if + +
+ High Temperature
+ Low Temperature +
+ $day.outTemp.max at $day.outTemp.maxtime
+ $day.outTemp.min at $day.outTemp.mintime +
+ High Heat Index
+ Low Wind Chill +
+ $day.heatindex.max at $day.heatindex.maxtime
+ $day.windchill.min at $day.windchill.mintime +
+ High Humidity
+ Low Humidity +
+ $day.outHumidity.max at $day.outHumidity.maxtime
+ $day.outHumidity.min at $day.outHumidity.mintime +
+ High Dewpoint
+ Low Dewpoint +
+ $day.dewpoint.max at $day.dewpoint.maxtime
+ $day.dewpoint.min at $day.dewpoint.mintime +
+ High Barometer
+ Low Barometer +
+ $day.barometer.max at $day.barometer.maxtime
+ $day.barometer.min at $day.barometer.mintime +
Today's Rain$day.rain.sum
High Rain Rate$day.rainRate.max at $day.rainRate.maxtime
+ High Wind + + $day.wind.max from $day.wind.gustdir at $day.wind.maxtime +
+ Average Wind + + $day.wind.avg +
+ RMS Wind + + $day.wind.rms +
+ Vector Average Speed
+ Vector Average Direction +
+ $day.wind.vecavg
+ $day.wind.vecdir +
+ High Inside Temperature
+ Low Inside Temperature +
+ $day.inTemp.max at $day.inTemp.maxtime
+ $day.inTemp.min at $day.inTemp.mintime +
+ High UV
+ Low UV +
+ $day.UV.max at $day.UV.maxtime
+ $day.UV.min at $day.UV.mintime +
+ High ET
+ Low ET +
+ $day.ET.max at $day.ET.maxtime
+ $day.ET.min at $day.ET.mintime +
+ High Radiation
+ Low Radiation +
+ $day.radiation.max at $day.radiation.maxtime
+ $day.radiation.min at $day.radiation.mintime +
+
+ +

 

+ + #if $Extras.has_key('radar_img') +
+ #if $Extras.has_key('radar_url') + + #end if + Radar + #if $Extras.has_key('radar_url') + +

Click image for expanded radar loop

+ #end if +
+ #end if + +
+ +
+
+
+ About this weather station: +
+ + + + + + + + + + + + + + +
Location
Latitude:$station.latitude[0]° $station.latitude[1]' $station.latitude[2]
Longitude:$station.longitude[0]° $station.longitude[1]' $station.longitude[2]
Altitude:$station.altitude
+

+ This station uses a $station.hardware, controlled by + 'weewx', an experimental + weather software system written in Python. Weewx + was designed to be simple, fast, and easy to understand by + leveraging modern software concepts. +

+

RSS feed

+

Mobile formatted

+

Smartphone formatted

+

Weewx uptime: $station.uptime
+ Server uptime: $station.os_uptime
+ weewx v$station.version

+
+ +
+
+ Today's Almanac +
+
+ #if $almanac.hasExtras + ## Extended almanac information is available. Do the full set of tables. + #set $sun_altitude = $almanac.sun.alt + #if $sun_altitude < 0 + #set $sun_None="(Always down)" + #else + #set $sun_None="(Always up)" + #end if +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $almanac.next_equinox.raw < $almanac.next_solstice.raw + ## The equinox is before the solstice. Display them in order. + + + + + + + + + #else + ## The solstice is before the equinox. Display them in order. + + + + + + + + + #end if +
Sun
Start civil twilight:$almanac(horizon=-6).sun(use_center=1).rise
Sunrise:$almanac.sun.rise.string($sun_None)
Transit:$almanac.sun.transit
Sunset:$almanac.sun.set.string($sun_None)
End civil twilight:$almanac(horizon=-6).sun(use_center=1).set
Azimuth:$("%.1f°" % $almanac.sun.az)
Altitude:$("%.1f°" % $sun_altitude)
Right ascension:$("%.1f°" % $almanac.sun.ra)
Declination:$("%.1f°" % $almanac.sun.dec)
Equinox:$almanac.next_equinox
Solstice:$almanac.next_solstice
Solstice:$almanac.next_solstice
Equinox:$almanac.next_equinox
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $almanac.next_full_moon.raw < $almanac.next_new_moon.raw + + + + + + + + + #else + + + + + + + + + #end if + + + + +
Moon
Rise:$almanac.moon.rise
Transit:$almanac.moon.transit
Set:$almanac.moon.set
Azimuth:$("%.1f°" % $almanac.moon.az)
Altitude:$("%.1f°" % $almanac.moon.alt)
Right ascension:$("%.1f°" % $almanac.moon.ra)
Declination:$("%.1f°" % $almanac.moon.dec)
Full moon:$almanac.next_full_moon
New moon:$almanac.next_new_moon
New moon:$almanac.next_new_moon
Full moon:$almanac.next_full_moon
Phase:$almanac.moon_phase
($almanac.moon_fullness% full)
+
+ #else + ## No extended almanac information available. Fall back to a simple table. + + + + + + + + + + + + + +
Sunrise:$almanac.sunrise
Sunset:$almanac.sunset
Moon Phase:$almanac.moon_phase
($almanac.moon_fullness% full)
+ #end if +
+
+ +
+ temperatures + heatchill + outside humidity + rain + wind + barometer + Hi Wind + Inside + Wind Vector + #if $day.radiation.has_data + Radiation + #end if + #if $day.UV.has_data + UV Index + #end if + #if $day.rxCheckPercent.has_data + day rx percent + #end if +
+
+ + +
+ + ## Include the Google Analytics code if the user has supplied an ID: + #if $Extras.has_key('googleAnalyticsId') + + + #end if + + + + diff --git a/skins/Standard/mobile.css b/skins/Standard/mobile.css new file mode 100644 index 00000000..3d06f0a7 --- /dev/null +++ b/skins/Standard/mobile.css @@ -0,0 +1,49 @@ +/* + * weewx mobile CSS settings + */ + +/* Global */ + +body { + background-color: #75a1d0; + font-family: helvetica, arial; + text-align: center; + width: 305px; +} + +a { + text-decoration: none; + color: black; +} + +table.readings { + font-size: 13px; + width: 100%; + border: 2px solid black; + border-collapse: collapse; +} + +tr.alt { + background-color: #9bc4e2; +} + +td { + text-align: right; + font-weight: 600; + border: 1px solid black; + width: 50%; + padding: 2px; +} + +td.data { + text-align: left; + color: #990000; +} + +div.radar { +} + +img { + width: 301px; + border: 2px solid black; +} diff --git a/skins/Standard/mobile.html.tmpl b/skins/Standard/mobile.html.tmpl new file mode 100644 index 00000000..93950b0f --- /dev/null +++ b/skins/Standard/mobile.html.tmpl @@ -0,0 +1,92 @@ +#encoding UTF-8 + + + + + + + + $station.location Weather + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Temp / Dewpoint: $current.outTemp / $current.dewpoint
High Temp: $day.outTemp.max at $day.outTemp.maxtime
Low Temp: $day.outTemp.min at $day.outTemp.mintime
Heat Index / Wind Chill: $current.heatindex / $current.windchill
Humidity: $current.outHumidity
Rainfall: $day.rain.sum
High Rain Rate: $day.rainRate.max at $day.rainRate.maxtime
Wind Speed: $current.windSpeed
High Wind Speed: $day.wind.max at $day.wind.maxtime
+
+ + +#if $Extras.has_key('radar_img') +
+ #if $Extras.has_key('radar_url') + + #end if + Radar + #if $Extras.has_key('radar_url') + + #end if + +

$current.dateTime

+
+#end if + +
+ + + diff --git a/skins/Standard/month.html.tmpl b/skins/Standard/month.html.tmpl new file mode 100644 index 00000000..c2d8b298 --- /dev/null +++ b/skins/Standard/month.html.tmpl @@ -0,0 +1,418 @@ +#errorCatcher Echo +## +## Specifying an encoding of UTF-8 is usually safe, but if your text is +## actually in Latin-1, then you should replace the string "UTF-8" with "latin-1" +## If you do this, you should also change the 'Content-Type' metadata below. +#encoding UTF-8 +## + + + + ## This choice should match the #encoding directive above + + $station.location Monthly weather summary + + + + + + +
+
+

$station.location

+

Monthly Weather Summary

+

$current.dateTime

+
+ +
+ +
+
+ This Month +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $month.UV.has_data + + + + + #end if + #if $month.ET.has_data and $month.ET.sum.raw > 0.0 + + + + + #end if + #if $month.radiation.has_data + + + + + #end if + +
+ High Temperature
+ Low Temperature +
+ $month.outTemp.max at $month.outTemp.maxtime
+ $month.outTemp.min at $month.outTemp.mintime +
+ High Heat Index + + $month.heatindex.max at $month.heatindex.maxtime +
+ Low Wind Chill + + $month.windchill.min at $month.windchill.mintime +
+ High Humidity
+ Low Humidity +
+ $month.outHumidity.max $month.outHumidity.maxtime
+ $month.outHumidity.min $month.outHumidity.mintime +
+ High Dewpoint
+ Low Dewpoint +
+ $month.dewpoint.max $month.dewpoint.maxtime
+ $month.dewpoint.min $month.dewpoint.mintime +
+ High Barometer
+ Low Barometer +
+ $month.barometer.max at $month.barometer.maxtime
+ $month.barometer.min at $month.barometer.mintime +
+ Rain Total + + $month.rain.sum +
+ High Rain Rate + + $month.rainRate.max at $month.rainRate.maxtime +
+ High Wind Speed + + $month.wind.max from $month.wind.gustdir at $month.wind.maxtime +
+ Average Wind + + $month.wind.avg +
+ RMS Wind + + $month.wind.rms +
+ Vector Average Speed
+ Vector Average Direction +
+ $month.wind.vecavg
+ $month.wind.vecdir +
+ High Inside Temperature
+ Low Inside Temperature +
+ $month.inTemp.max at $month.inTemp.maxtime
+ $month.inTemp.min at $month.inTemp.mintime +
+ High UV
+ Low UV +
+ $month.UV.max at $month.UV.maxtime
+ $month.UV.min at $month.UV.mintime +
+ High ET
+ Low ET +
+ $month.ET.max at $month.ET.maxtime
+ $month.ET.min at $month.ET.mintime +
+ High Radiation
+ Low Radiation +
+ $month.radiation.max at $month.radiation.maxtime
+ $month.radiation.min at $month.radiation.mintime +
+
+ +

 

+ +
+
+ Calendar Year +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $year.UV.has_data + + + + + #end if + #if $year.ET.has_data and $year.ET.sum.raw >0.0 + + + + + #end if + #if $year.radiation.has_data + + + + + #end if + +
+ High Temperature
+ Low Temperature +
+ $year.outTemp.max at $year.outTemp.maxtime
+ $year.outTemp.min at $year.outTemp.mintime +
+ High Heat Index + + $year.heatindex.max at $year.heatindex.maxtime +
+ Low Wind Chill + + $year.windchill.min at $year.windchill.mintime +
+ High Humidity
+ Low Humidity +
+ $year.outHumidity.max at $year.outHumidity.maxtime
+ $year.outHumidity.min at $year.outHumidity.mintime +
+ High Dewpoint
+ Low Dewpoint +
+ $year.dewpoint.max at $year.dewpoint.maxtime
+ $year.dewpoint.min at $year.dewpoint.mintime +
+ High Barometer
+ Low Barometer +
+ $year.barometer.max at $year.barometer.maxtime
+ $year.barometer.min at $year.barometer.mintime +
+ Rain Total + + $year.rain.sum +
+ High Rain Rate + + $year.rainRate.max at $year.rainRate.maxtime +
+ High Wind Speed + + $year.wind.max from $year.wind.gustdir at $year.wind.maxtime +
+ Average Wind + + $year.wind.avg +
+ RMS Wind + + $year.wind.rms +
+ Vector Average Speed
+ Vector Average Direction +
+ $year.wind.vecavg
+ $year.wind.vecdir +
+ High Inside Temperature
+ Low Inside Temperature +
+ $year.inTemp.max at $year.inTemp.maxtime
+ $year.inTemp.min at $year.inTemp.mintime +
+ High UV
+ Low UV +
+ $year.UV.max at $year.UV.maxtime
+ $year.UV.min at $year.UV.mintime +
+ High ET
+ Low ET +
+ $year.ET.max at $year.ET.maxtime
+ $year.ET.min at $year.ET.mintime +
+ High Radiation
+ Low Radiation +
+ $year.radiation.max at $year.radiation.maxtime
+ $year.radiation.min at $year.radiation.mintime +
+
+ +
+ +
+ +
+

Monthly Statistics and Plots

+
+
+ temperatures + heatchill + outside humidity + rain + wind + barometer + Hi Wind + Inside + Wind Vector + #if $month.radiation.has_data + Radiation + #end if + #if $month.UV.has_data + UV Index + #end if + #if $month.rxCheckPercent.has_data + month rx percent + #end if +
+
+ + +
+ + ## Include the Google Analytics code if the user has supplied an ID: + #if $Extras.has_key('googleAnalyticsId') + + + #end if + + + diff --git a/skins/Standard/skin.conf b/skins/Standard/skin.conf new file mode 100644 index 00000000..6684d5fa --- /dev/null +++ b/skins/Standard/skin.conf @@ -0,0 +1,680 @@ +############################################################################### +# STANDARD SKIN CONFIGURATION FILE # +# Copyright (c) 2010 Tom Keffer # +############################################################################### + +[Extras] + # Put any extra tags here that you want to be available in the templates + + # Here's an example. + # This radar image would be available as $Extras.radar_img + #radar_img = http://radar.weather.gov/ridge/lite/N0R/RTX_loop.gif + # This URL will be used as the image hyperlink: + #radar_url = http://radar.weather.gov/ridge/radar.php?product=NCR&rid=RTX&loop=yes + + # Here's another. If you have a Google Analytics ID, uncomment and edit + # the next line, and the analytics code will automatically be included + # in your generated HTML files: + #googleAnalyticsId = UA-12345678-1 + +############################################################################### + +[Units] + # This section is for managing the selection and formatting of units. + + [[Groups]] + # For each group of measurements, this section sets what units to + # use for it. + # NB: The unit is always in the singular. I.e., 'mile_per_hour', + # NOT 'miles_per_hour' + + group_altitude = foot # Options are 'foot' or 'meter' + group_degree_day = degree_F_day # Options are 'degree_F_day' or 'degree_C_day' + group_direction = degree_compass + group_moisture = centibar + group_percent = percent + group_pressure = inHg # Options are 'inHg', 'mmHg', 'mbar', or 'hPa' + group_radiation = watt_per_meter_squared + group_rain = inch # Options are 'inch', 'cm', or 'mm' + group_rainrate = inch_per_hour # Options are 'inch_per_hour', 'cm_per_hour', or 'mm_per_hour' + group_speed = mile_per_hour # Options are 'mile_per_hour', 'km_per_hour', 'knot', or 'meter_per_second' + group_speed2 = mile_per_hour2 # Options are 'mile_per_hour2', 'km_per_hour2', 'knot2', or 'meter_per_second2' + group_temperature = degree_F # Options are 'degree_F' or 'degree_C' + group_uv = uv_index + group_volt = volt + + # The following are used internally and should not be changed: + group_count = count + group_interval = minute + group_time = unix_epoch + group_elapsed = second + + [[StringFormats]] + # This section sets the string formatting for each type of unit. + + centibar = %.0f + cm = %.2f + cm_per_hour = %.2f + degree_C = %.1f + degree_F = %.1f + degree_compass = %.0f + foot = %.0f + hPa = %.1f + hour = %.1f + inHg = %.3f + inch = %.2f + inch_per_hour = %.2f + km_per_hour = %.0f + km_per_hour2 = %.1f + knot = %.0f + knot2 = %.1f + mbar = %.1f + meter = %.0f + meter_per_second = %.1f + meter_per_second2 = %.1f + mile_per_hour = %.0f + mile_per_hour2 = %.1f + mm = %.1f + mmHg = %.1f + mm_per_hour = %.1f + percent = %.0f + second = %.0f + uv_index = %.1f + volt = %.1f + watt_per_meter_squared = %.0f + NONE = " N/A" + + [[Labels]] + # This section sets a label to be used for each type of unit. + + centibar = " cb" + cm = " cm" + cm_per_hour = " cm/hr" + degree_C = °C + degree_F = °F + degree_compass = ° + foot = " feet" + hPa = " hPa" + inHg = " inHg" + inch = " in" + inch_per_hour = " in/hr" + km_per_hour = " km/h" + km_per_hour2 = " km/h" + knot = " knots" + knot2 = " knots" + mbar = " mbar" + meter = " meters" + meter_per_second = " m/s" + meter_per_second2 = " m/s" + mile_per_hour = " mph" + mile_per_hour2 = " mph" + mm = " mm" + mmHg = " mmHg" + mm_per_hour = " mm/hr" + percent = % + volt = " V" + watt_per_meter_squared = " W/m²" + day = " day", " days" + hour = " hour", " hours" + minute = " minute", " minutes" + second = " second", " seconds" + NONE = "" + + [[TimeFormats]] + # This section sets the string format to be used for each time scale. + # The values below will work in every locale, but may not look + # particularly attractive. See the Customization Guide for alternatives. + + day = %X + week = %X (%A) + month = %x %X + year = %x %X + rainyear = %x %X + current = %x %X + ephem_day = %X + ephem_year = %x %X + + [[Ordinates]] + # The ordinal directions. The last one should be for no wind direction + directions = N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW, N/A + + [[DegreeDays]] + # This section sets the base temperatures used for the calculation + # of heating and cooling degree-days. + + # Base temperature for heating days, with unit: + heating_base = 65, degree_F + # Base temperature for cooling days, with unit: + cooling_base = 65, degree_F + + [[Trend]] + time_delta = 10800 # 3 hours + time_grace = 300 # 5 minutes + +############################################################################### + +[Labels] + # Labels used in this skin + + # Set to hemisphere abbreviations suitable for your location: + hemispheres = N, S, E, W + # Formats to be used for latitude whole degrees, longitude whole degrees, + # and minutes: + latlon_formats = "%02d", "%03d", "%05.2f" + + [[Generic]] + # Generic labels, keyed by an observation type. + + barometer = Barometer + dewpoint = Dew Point + heatindex = Heat Index + inHumidity = Inside Humidity + inTemp = Inside Temperature + outHumidity = Outside Humidity + outTemp = Outside Temperature + radiation = Radiation + rain = Rain + rainRate = Rain Rate + rxCheckPercent = ISS Signal Quality + UV = UV Index + windDir = Wind Direction + windGust = Gust Speed + windGustDir = Gust Direction + windSpeed = Wind Speed + windchill = Wind Chill + windgustvec = Gust Vector + windvec = Wind Vector + +############################################################################### + +[Almanac] + # The labels to be used for the phases of the moon: + moon_phases = New, Waxing crescent, First quarter, Waxing gibbous, Full, Waning gibbous, Last quarter, Waning crescent + +############################################################################### + +[CheetahGenerator] + # This section is used by the generator CheetahGenerator, and specifies + # which files are to be generated from which template. + + # Possible encodings are 'html_entities', 'utf8', or 'strict_ascii' + encoding = html_entities + + [[SummaryByMonth]] + # Reports that summarize "by month" + [[[NOAA_month]]] + encoding = strict_ascii + template = NOAA/NOAA-YYYY-MM.txt.tmpl + + [[SummaryByYear]] + # Reports that summarize "by year" + [[[NOAA_year]]] + encoding = strict_ascii + template = NOAA/NOAA-YYYY.txt.tmpl + + [[ToDate]] + # Reports that show statistics "to date", such as day-to-date, + # week-to-date, month-to-date, etc. + [[[day]]] + template = index.html.tmpl + + [[[week]]] + template = week.html.tmpl + + [[[month]]] + template = month.html.tmpl + + [[[year]]] + template = year.html.tmpl + + [[[RSS]]] + template = RSS/weewx_rss.xml.tmpl + + [[[Mobile]]] + template = mobile.html.tmpl + + [[[MobileSmartphone]]] + template = smartphone/index.html.tmpl + + [[[MobileTempOutside]]] + template = smartphone/temp_outside.html.tmpl + + [[[MobileRain]]] + template = smartphone/rain.html.tmpl + + [[[MobileBarometer]]] + template = smartphone/barometer.html.tmpl + + [[[MobileWind]]] + template = smartphone/wind.html.tmpl + + [[[MobileRadar]]] + template = smartphone/radar.html.tmpl + +############################################################################### + +[CopyGenerator] + + # This section is used by the generator CopyGenerator + + # List of files to be copied only the first time the generator runs + copy_once = backgrounds/*, weewx.css, mobile.css, favicon.ico, smartphone/icons/*, smartphone/custom.js + + # List of files to be copied each time the generator runs + # copy_always = + + +############################################################################### + +[ImageGenerator] + + # This section lists all the images to be generated, what SQL types are to + # be included in them, along with many plotting options, such as color or + # font. There's a default for almost everything, if not specified below. + # Nevertheless, I have explicitly put in values, to make it easy to see + # and understand the options. + # + # Fonts can be anything accepted by the Python Imaging Library (PIL), which + # is currently truetype (.ttf), or PIL's own font format (.pil). See + # http://www.pythonware.com/library/pil/handbook/imagefont.htm for more + # details. Note that "font size" is only used with truetype (.ttf) + # fonts. For others, font size is determined by the bit-mapped size, + # usually encoded in the file name (e.g., courB010.pil). If a font cannot + # be found, then a default font will be used. + # + # Colors can be specified any of three ways: + # 1. Notation 0xBBGGRR; + # 2. Notation #RRGGBB; or + # 3. Using an English name, such as 'yellow', or 'blue'. + # So, 0xff0000, #0000ff, or 'blue' would all specify a pure blue color. + + image_width = 300 + image_height = 180 + image_background_color = 0xf5f5f5 + + chart_background_color = 0xd8d8d8 + chart_gridline_color = 0xa0a0a0 + + # Setting to 2 or more might give a sharper image with fewer jagged edges. + anti_alias = 1 + + top_label_font_path = /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf + top_label_font_size = 10 + + unit_label_font_path = /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf + unit_label_font_size = 10 + unit_label_font_color = 0x000000 + + bottom_label_font_path = /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf + bottom_label_font_size = 12 + bottom_label_font_color = 0x000000 + bottom_label_offset = 3 + + axis_label_font_path = /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf + axis_label_font_size = 10 + axis_label_font_color = 0x000000 + + # Options for the compass rose, used for progressive vector plots + rose_label = N + rose_label_font_path = /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf + rose_label_font_size = 10 + rose_label_font_color = 0x000000 + + # Default colors for the plot lines. These can be overridden for + # individual lines using option 'color' + chart_line_colors = 0xb48242, 0x4242b4, 0x42b442 + + # Type of line. Only 'solid' or 'none' is offered now + line_type = 'solid' + + # Size of marker in pixels + marker_size = 8 + # Type of marker. Pick one of 'cross', 'x', 'circle', 'box', or 'none' + marker_type ='none' + + # Default fill colors for bar charts. These can be overridden for + # individual bar plots using option 'fill_color' + chart_fill_colors = 0xc4b272, 0x7272c4, 0x72c472 + + # The following option merits an explanation. The y-axis scale used for + # plotting can be controlled using option 'yscale'. It is a 3-way tuple, + # with values (ylow, yhigh, min_interval). If set to "None", a parameter is + # set automatically, otherwise the value is used. However, in the case of + # min_interval, what is set is the *minimum* y-axis tick interval. + yscale = None, None, None + + # For progressive vector plots, you can choose to rotate the vectors. + # Positive is clockwise. + # For my area, westerlies overwhelmingly predominate, so by rotating + # positive 90 degrees, the average vector will point straight up. + vector_rotate = 90 + + # This defines what fraction of the difference between maximum and minimum + # horizontal chart bounds is considered a gap in the samples and should not + # be plotted. + line_gap_fraction = 0.01 + + # This controls whether day/night bands will be shown. They only look good + # on the day and week plots. + show_daynight = true + # These control the appearance of the bands if they are shown. + # Here's a monochrome scheme: + daynight_day_color = 0xdfdfdf + daynight_night_color = 0xbbbbbb + daynight_edge_color = 0xd0d0d0 + # Here's an alternative, using a blue/yellow tint: + #daynight_day_color = 0xf8ffff + #daynight_night_color = 0xfff8f8 + #daynight_edge_color = 0xf8f8ff + + ## What follows is a list of subsections, each specifying a time span, such + ## as a day, week, month, or year. There's nothing special about them or + ## their names: it's just a convenient way to group plots with a time span + ## in common. You could add a time span [[biweek_images]] and add the + ## appropriate time length, aggregation strategy, etc., without changing + ## any code. + ## + ## Within each time span, each sub-subsection is the name of a plot to be + ## generated for that time span. The generated plot will be stored using + ## that name, in whatever directory was specified by option 'HTML_ROOT' + ## in weewx.conf. + ## + ## With one final nesting (four brackets!) is the sql type of each line to + ## be included within that plot. + ## + ## Unless overridden, leaf nodes inherit options from their parent + + # Default plot and aggregation. Can get overridden at any level. + plot_type = line + aggregate_type = none + width = 1 + time_length = 86400 # == 24 hours + + [[day_images]] + x_label_format = %H:%M + bottom_label_format = %x %X + time_length = 97200 # == 27 hours + + [[[daybarometer]]] + [[[[barometer]]]] + + [[[daytempdew]]] + [[[[outTemp]]]] + [[[[dewpoint]]]] + + [[[daytempchill]]] + [[[[windchill]]]] + [[[[heatindex]]]] + + [[[dayhumidity]]] + [[[[outHumidity]]]] + + [[[dayrain]]] + # Make sure the y-axis increment is at least 0.02 for the rain plot + yscale = None, None, 0.02 + plot_type = bar + [[[[rain]]]] + aggregate_type = sum + aggregate_interval = 3600 + label = Rain (hourly total) + + [[[dayrx]]] + [[[[rxCheckPercent]]]] + + [[[daywind]]] + [[[[windSpeed]]]] + [[[[windGust]]]] + + [[[dayinside]]] + [[[[inTemp]]]] + + [[[daywinddir]]] + # Hardwire in the y-axis scale for wind direction + yscale = 0.0, 360.0, 45.0 + [[[[windDir]]]] + + [[[daywindvec]]] + [[[[windvec]]]] + plot_type = vector + + [[[dayradiation]]] + [[[[radiation]]]] + [[[[radiation_max]]]] + data_type = radiation + aggregate_type = max + aggregate_interval = 3600 + label = max + + [[[dayuv]]] + yscale = 0, 16, 1 + [[[[UV]]]] + [[[[UV_max]]]] + data_type = UV + aggregate_type = max + aggregate_interval = 3600 + label = max + + [[week_images]] + x_label_format = %d + bottom_label_format = %x %X + time_length = 604800 # == 7 days + aggregate_type = avg + aggregate_interval = 3600 + + [[[weekbarometer]]] + [[[[barometer]]]] + + [[[weektempdew]]] + [[[[outTemp]]]] + [[[[dewpoint]]]] + + [[[weektempchill]]] + [[[[windchill]]]] + [[[[heatindex]]]] + + [[[weekhumidity]]] + [[[[outHumidity]]]] + + [[[weekrain]]] + yscale = None, None, 0.02 + plot_type = bar + [[[[rain]]]] + aggregate_type = sum + aggregate_interval = 86400 + label = Rain (daily total) + + [[[weekrx]]] + [[[[rxCheckPercent]]]] + + [[[weekwind]]] + [[[[windSpeed]]]] + [[[[windGust]]]] + aggregate_type = max + + [[[weekinside]]] + [[[[inTemp]]]] + + [[[weekwinddir]]] + yscale = 0.0, 360.0, 45.0 + [[[[windDir]]]] + + [[[weekwindvec]]] + [[[[windvec]]]] + plot_type = vector + + [[[weekradiation]]] + [[[[radiation]]]] + [[[[radiation_max]]]] + data_type = radiation + aggregate_type = max + label = max + + [[[weekuv]]] + yscale = 0, 16, 1 + [[[[UV]]]] + [[[[UV_max]]]] + data_type = UV + aggregate_type = max + label = max + + [[month_images]] + x_label_format = %d + bottom_label_format = %x %X + time_length = 2592000 # == 30 days + aggregate_type = avg + aggregate_interval = 10800 # == 3 hours + show_daynight = false + + [[[monthbarometer]]] + [[[[barometer]]]] + + [[[monthtempdew]]] + [[[[outTemp]]]] + [[[[dewpoint]]]] + + [[[monthtempchill]]] + [[[[windchill]]]] + [[[[heatindex]]]] + + [[[monthhumidity]]] + [[[[outHumidity]]]] + + [[[monthrain]]] + yscale = None, None, 0.02 + plot_type = bar + [[[[rain]]]] + aggregate_type = sum + aggregate_interval = 86400 + label = Rain (daily total) + + [[[monthrx]]] + [[[[rxCheckPercent]]]] + + [[[monthwind]]] + [[[[windSpeed]]]] + [[[[windGust]]]] + aggregate_type = max + + [[[monthinside]]] + [[[[inTemp]]]] + + [[[monthwinddir]]] + yscale = 0.0, 360.0, 45.0 + [[[[windDir]]]] + + [[[monthwindvec]]] + [[[[windvec]]]] + plot_type = vector + + [[[monthradiation]]] + [[[[radiation]]]] + [[[[radiation_max]]]] + data_type = radiation + aggregate_type = max + label = max + + [[[monthuv]]] + yscale = 0, 16, 1 + [[[[UV]]]] + [[[[UV_max]]]] + data_type = UV + aggregate_type = max + label = max + + [[year_images]] + x_label_format = %m/%d + bottom_label_format = %x %X + time_length = 31536000 # == 365 days + aggregate_type = avg + aggregate_interval = 86400 + show_daynight = false + + [[[yearbarometer]]] + [[[[barometer]]]] + + + [[[yeartempdew]]] + [[[[outTemp]]]] + [[[[dewpoint]]]] + + [[[yearhumidity]]] + [[[[outHumidity]]]] + + # Daily high/lows: + [[[yearhilow]]] + [[[[hi]]]] + data_type = outTemp + aggregate_type = max + label = High + [[[[low]]]] + data_type = outTemp + aggregate_type = min + label = Low Temperature + + [[[yearwind]]] + [[[[windSpeed]]]] + [[[[windGust]]]] + aggregate_type = max + + [[[yeartempchill]]] + [[[[windchill]]]] + [[[[heatindex]]]] + + [[[yearrain]]] + yscale = None, None, 0.02 + plot_type = bar + [[[[rain]]]] + aggregate_type = sum + # aggregate_interval = 2629800 # Magic number: the length of a nominal month + aggregate_interval = 604800 # == 1 week + label = Rain (weekly total) + + [[[yearrx]]] + [[[[rxCheckPercent]]]] + + [[[yearinside]]] + [[[[inTemp]]]] + + [[[yearwinddir]]] + yscale = 0.0, 360.0, 45.0 + [[[[windDir]]]] + + [[[yearwindvec]]] + [[[[windvec]]]] + plot_type = vector + + [[[yearradiation]]] + [[[[radiation]]]] + [[[[radiation_max]]]] + data_type = radiation + aggregate_type = max + label = max + + [[[yearuv]]] + yscale = 0, 16, 1 + [[[[UV]]]] + [[[[UV_max]]]] + data_type = UV + aggregate_type = max + label = max + + # A progressive vector plot of daily gust vectors overlayed + # with the daily wind average would look something like this: +# [[[yeargustvec]]] +# [[[[windvec]]]] +# plot_type = vector +# aggregate_type = avg +# [[[[windgustvec]]]] +# plot_type = vector +# aggregate_type = max + + +############################################################################### + +# +# The list of generators that are to be run: +# +[Generators] + generator_list = weewx.cheetahgenerator.CheetahGenerator, weewx.imagegenerator.ImageGenerator, weewx.reportengine.CopyGenerator + + diff --git a/skins/Standard/smartphone/barometer.html.tmpl b/skins/Standard/smartphone/barometer.html.tmpl new file mode 100644 index 00000000..be5f0a64 --- /dev/null +++ b/skins/Standard/smartphone/barometer.html.tmpl @@ -0,0 +1,35 @@ +#encoding UTF-8 + + + + Barometer in $station.location + + + + + + +
+
+

Barometer

+
+
+

24h barometer

+ +
    +
  • Today's min: $day.barometer.min at $day.barometer.mintime
  • +
  • Today's max: $day.barometer.max at $day.barometer.maxtime
  • +
+ +

7-day barometer

+ +
    +
  • This week's min: $week.barometer.min at $week.barometer.mintime
  • +
  • This week's max: $week.barometer.max at $week.barometer.maxtime
  • +
+
+
+

weewx v $station.version

+
+
+ diff --git a/skins/Standard/smartphone/custom.js b/skins/Standard/smartphone/custom.js new file mode 100644 index 00000000..83de7c8e --- /dev/null +++ b/skins/Standard/smartphone/custom.js @@ -0,0 +1,4 @@ +$(document).bind("mobileinit", function(){ + $.mobile.defaultPageTransition = 'slide'; + $.mobile.page.prototype.options.addBackBtn = true; +}); \ No newline at end of file diff --git a/skins/Standard/smartphone/humidity.html.tmpl b/skins/Standard/smartphone/humidity.html.tmpl new file mode 100644 index 00000000..c7c961ee --- /dev/null +++ b/skins/Standard/smartphone/humidity.html.tmpl @@ -0,0 +1,27 @@ +#encoding UTF-8 + + + + Humidity in $station.location + + + + + + +
+
+

Humidity

+
+
+

24h humidity

+ + +

Last 7 days

+ +
+
+

weewx v $station.version

+
+
+ diff --git a/skins/Standard/smartphone/icons/icon_ipad_x1.png b/skins/Standard/smartphone/icons/icon_ipad_x1.png new file mode 100644 index 00000000..aec7f0dd Binary files /dev/null and b/skins/Standard/smartphone/icons/icon_ipad_x1.png differ diff --git a/skins/Standard/smartphone/icons/icon_ipad_x2.png b/skins/Standard/smartphone/icons/icon_ipad_x2.png new file mode 100644 index 00000000..3dd7f78e Binary files /dev/null and b/skins/Standard/smartphone/icons/icon_ipad_x2.png differ diff --git a/skins/Standard/smartphone/icons/icon_iphone_x1.png b/skins/Standard/smartphone/icons/icon_iphone_x1.png new file mode 100644 index 00000000..985337f4 Binary files /dev/null and b/skins/Standard/smartphone/icons/icon_iphone_x1.png differ diff --git a/skins/Standard/smartphone/icons/icon_iphone_x2.png b/skins/Standard/smartphone/icons/icon_iphone_x2.png new file mode 100644 index 00000000..e2c54aaa Binary files /dev/null and b/skins/Standard/smartphone/icons/icon_iphone_x2.png differ diff --git a/skins/Standard/smartphone/index.html.tmpl b/skins/Standard/smartphone/index.html.tmpl new file mode 100644 index 00000000..fdc404ff --- /dev/null +++ b/skins/Standard/smartphone/index.html.tmpl @@ -0,0 +1,42 @@ +#encoding UTF-8 + + + + $station.location Current Weather Conditions + + + + + + + + + + + +
+
+

$station.location

+
+
+ + + + + +
+
+

weewx v$station.version

+
+
+ + diff --git a/skins/Standard/smartphone/rain.html.tmpl b/skins/Standard/smartphone/rain.html.tmpl new file mode 100644 index 00000000..f254d085 --- /dev/null +++ b/skins/Standard/smartphone/rain.html.tmpl @@ -0,0 +1,34 @@ +#encoding UTF-8 + + + + + Rain in $station.location + + + + + + +
+
+

Rain

+
+
+

24h rain

+ +
    +
  • Today's data
  • +
  • Total: $day.rain.sum
  • +
  • Min rate: $day.rainRate.min at $day.rainRate.mintime
  • +
  • Max rate: $day.rainRate.max at $day.rainRate.maxtime
  • +
+ +

Rain last 30 days

+ +
+
+

weewx v $station.version

+
+
+ diff --git a/skins/Standard/smartphone/temp_outside.html.tmpl b/skins/Standard/smartphone/temp_outside.html.tmpl new file mode 100644 index 00000000..5462004e --- /dev/null +++ b/skins/Standard/smartphone/temp_outside.html.tmpl @@ -0,0 +1,35 @@ +#encoding UTF-8 + + + + Outside temperature in $station.location + + + + + + +
+
+

Outside temperature

+
+
+

24h temperature

+ +
    +
  • Today's min: $day.outTemp.min at $day.outTemp.mintime
  • +
  • Today's max: $day.outTemp.max at $day.outTemp.maxtime
  • +
+

7-day temperature

+ +
    +
  • This week's min: $week.outTemp.min at $week.outTemp.mintime
  • +
  • This week's max: $week.outTemp.max at $week.outTemp.maxtime
  • +
+
+
+

weewx v$station.version

+
+
+ + diff --git a/skins/Standard/week.html.tmpl b/skins/Standard/week.html.tmpl new file mode 100644 index 00000000..8384a9ea --- /dev/null +++ b/skins/Standard/week.html.tmpl @@ -0,0 +1,418 @@ +#errorCatcher Echo +## +## Specifying an encoding of UTF-8 is usually safe, but if your text is +## actually in Latin-1, then you should replace the string "UTF-8" with "latin-1" +## If you do this, you should also change the 'Content-Type' metadata below. +#encoding UTF-8 +## + + + + ## This choice should match the #encoding directive above + + $station.location Weekly weather summary + + + + + + +
+
+

$station.location

+

Weekly Weather Summary

+

$current.dateTime

+
+ +
+ +
+
+ This Week +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $week.UV.has_data + + + + + #end if + #if $week.ET.has_data and $week.ET.sum.raw > 0.0 + + + + + #end if + #if $week.radiation.has_data + + + + + #end if + +
+ High Temperature
+ Low Temperature +
+ $week.outTemp.max at $week.outTemp.maxtime
+ $week.outTemp.min at $week.outTemp.mintime +
+ High Heat Index + + $week.heatindex.max at $week.heatindex.maxtime +
+ Low Wind Chill + + $week.windchill.min at $week.windchill.mintime +
+ High Humidity
+ Low Humidity +
+ $week.outHumidity.max $week.outHumidity.maxtime
+ $week.outHumidity.min $week.outHumidity.mintime +
+ High Dewpoint
+ Low Dewpoint +
+ $week.dewpoint.max $week.dewpoint.maxtime
+ $week.dewpoint.min $week.dewpoint.mintime +
+ High Barometer
+ Low Barometer +
+ $week.barometer.max at $week.barometer.maxtime
+ $week.barometer.min at $week.barometer.mintime +
+ Rain Total + + $week.rain.sum +
+ High Rain Rate + + $week.rainRate.max at $week.rainRate.maxtime +
+ High Wind Speed + + $week.wind.max from $week.wind.gustdir at $week.wind.maxtime +
+ Average Wind + + $week.wind.avg +
+ RMS Wind + + $week.wind.rms +
+ Vector Average Speed
+ Vector Average Direction +
+ $week.wind.vecavg
+ $week.wind.vecdir +
+ High Inside Temperature
+ Low Inside Temperature +
+ $week.inTemp.max at $week.inTemp.maxtime
+ $week.inTemp.min at $week.inTemp.mintime +
+ High UV
+ Low UV +
+ $week.UV.max at $week.UV.maxtime
+ $week.UV.min at $week.UV.mintime +
+ High ET
+ Low ET +
+ $week.ET.max at $week.ET.maxtime
+ $week.ET.min at $week.ET.mintime +
+ High Radiation
+ Low Radiation +
+ $week.radiation.max at $week.radiation.maxtime
+ $week.radiation.min at $week.radiation.mintime +
+
+ +

 

+ +
+
+ This Month +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $month.UV.has_data + + + + + #end if + #if $month.ET.has_data and $month.ET.sum.raw >0.0 + + + + + #end if + #if $month.radiation.has_data + + + + + #end if + +
+ High Temperature
+ Low Temperature +
+ $month.outTemp.max at $month.outTemp.maxtime
+ $month.outTemp.min at $month.outTemp.mintime +
+ High Heat Index + + $month.heatindex.max at $month.heatindex.maxtime +
+ Low Wind Chill + + $month.windchill.min at $month.windchill.mintime +
+ High Humidity
+ Low Humidity +
+ $month.outHumidity.max at $month.outHumidity.maxtime
+ $month.outHumidity.min at $month.outHumidity.mintime +
+ High Dewpoint
+ Low Dewpoint +
+ $month.dewpoint.max at $month.dewpoint.maxtime
+ $month.dewpoint.min at $month.dewpoint.mintime +
+ High Barometer
+ Low Barometer +
+ $month.barometer.max at $month.barometer.maxtime
+ $month.barometer.min at $month.barometer.mintime +
+ Rain Total + + $month.rain.sum +
+ High Rain Rate + + $month.rainRate.max at $month.rainRate.maxtime +
+ High Wind Speed + + $month.wind.max from $month.wind.gustdir at $month.wind.maxtime +
+ Average Wind + + $month.wind.avg +
+ RMS Wind + + $month.wind.rms +
+ Vector Average Speed
+ Vector Average Direction +
+ $month.wind.vecavg
+ $month.wind.vecdir +
+ High Inside Temperature
+ Low Inside Temperature +
+ $month.inTemp.max at $month.inTemp.maxtime
+ $month.inTemp.min at $month.inTemp.mintime +
+ High UV
+ Low UV +
+ $month.UV.max at $month.UV.maxtime
+ $month.UV.min at $month.UV.mintime +
+ High ET
+ Low ET +
+ $month.ET.max at $month.ET.maxtime
+ $month.ET.min at $month.ET.mintime +
+ High Radiation
+ Low Radiation +
+ $month.radiation.max at $month.radiation.maxtime
+ $month.radiation.min at $month.radiation.mintime +
+
+ +
+ +
+ +
+

Weekly Statistics and Plots

+
+
+ temperatures + heatchill + outside humidity + rain + wind + barometer + Hi Wind + Inside + Wind Vector + #if $week.radiation.has_data + Radiation + #end if + #if $week.UV.has_data + UV Index + #end if + #if $week.rxCheckPercent.has_data + week rx percent + #end if +
+
+ + +
+ + ## Include the Google Analytics code if the user has supplied an ID: + #if $Extras.has_key('googleAnalyticsId') + + + #end if + + + diff --git a/skins/Standard/weewx.css b/skins/Standard/weewx.css new file mode 100644 index 00000000..1908b8ea --- /dev/null +++ b/skins/Standard/weewx.css @@ -0,0 +1,210 @@ +/* CSS for the weewx Standard skin + * + * Copyright (c) 2015 Tom Keffer + * + * See the file LICENSE.txt for your rights. + */ + +/* Global */ + +body { + margin: 0; + padding: 0; + border: 0; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10pt; + background-color: #f2f2f7; + background-image: url('backgrounds/band.gif'); + background-repeat: repeat; + background-attachment: scroll; +} + +#container { + margin: 0; + padding: 0; + border: 0; +} + +/* + * This is the big header at the top of the page + */ +#masthead { + margin: 1% 1% 0 1%; + padding: 5px; + text-align: center; + border-top: 1px solid #dcdcdc; + border-right: 1px solid #a9a9a9; + border-bottom: 1px solid #808080; + border-left: 1px solid #a9a9a9; + background-color: #fafaff; +} + +#masthead h1 { + color: #3d6c87; +} +#masthead h3 { + color: #5f8ea9; +} + +/* + * This holds the statistics (daily high/low, etc.) on the left: + */ +#stats_group { + width: 30%; + min-height: 500px; + margin: 1%; + padding: 5px; + float: left; + border-top: 1px solid #dcdcdc; + border-right: 1px solid #a9a9a9; + border-bottom: 1px solid #808080; + border-left: 1px solid #a9a9a9; + background-color: #fafaff; +} + +.stats table { + border: thin solid #000000; + width: 100%; +} +.stats td { + border: thin solid #000000; + padding: 2px; +} + +.stats_header { + background-color: #000000; + color: #a8b8c8; + font-size: 14pt; + font-weight: bolder; +} + +.stats_label { + color: green; +} + +.stats_data { + color: red; +} + +/* + * This holds the "About", "Almanac", and plots on the right + */ +#content { + width: 62%; + min-height: 500px; + margin: 1%; + padding: 5px; + float: right; + border-top: 1px solid #dcdcdc; + border-right: 1px solid #a9a9a9; + border-bottom: 1px solid #808080; + border-left: 1px solid #a9a9a9; + background-color: #fafaff; + text-align: center; +} + +#content .header { + font-size: 14pt; + font-weight: bolder; + color: #3d6c87; + margin-bottom: 10px; +} + + +#content .caption { + font-weight: bold; + color: #3d6c87; +} + +#content table { + text-align: center; + width: 100%; +} + +#content td { + width: 50%; +} + +#content .label { + text-align: right; + font-style: italic; +} + +#content .data { + text-align: left; +} + +#about, #almanac { + width: 90%; + margin-left: auto; + margin-right: auto; + margin-bottom: 30px; +} + +.celestial_group { +} + +.celestial_body { + width: 48%; + vertical-align: top; + display:inline-block; +} + +#plots { + width: 90%; + display: block; + margin-left: auto; + margin-right: auto; +} + +#plots img { + border: thin solid #3d6c87; + margin: 3px; + padding: 3px; +} + +#radar_img { + width: 100%; + display: block; + margin-left: auto; + margin-right: auto; + margin: 3px; + padding: 3px; +} + +#radar_img img { + margin-left: auto; + margin-right: auto; + width: 90%; + margin: 3px; + padding: 3px; +} + +#radar_img p { + width: 90%; + font-style: italic; + font-size: smaller; + text-align: center; + margin-top: 0; +} + +/* + * Navigation bar (week, month, etc.) at the bottom + */ +#navbar { + margin: 0 1% 1% 1%; + padding: 5px; + text-align: center; + clear: both; + border-top: 1px solid #dcdcdc; + border-right: 1px solid #a9a9a9; + border-bottom: 1px solid #808080; + border-left: 1px solid #a9a9a9; + background-color: #fafaff; +} + +/*************** Global Styles ***************/ + +h2, h3, h4, h5, h6 { + color: #3d6c87; +} diff --git a/skins/Standard/year.html.tmpl b/skins/Standard/year.html.tmpl new file mode 100644 index 00000000..2476b094 --- /dev/null +++ b/skins/Standard/year.html.tmpl @@ -0,0 +1,281 @@ +#errorCatcher Echo +## +## Specifying an encoding of UTF-8 is usually safe, but if your text is +## actually in Latin-1, then you should replace the string "UTF-8" with "latin-1" +## If you do this, you should also change the 'Content-Type' metadata below. +#encoding UTF-8 +## + + + + ## This choice should match the #encoding directive above + + $station.location Yearly weather summary + + + + + + +
+
+

$station.location

+

Yearly Weather Summary

+

$current.dateTime

+
+ +
+ +
+
+ Calendar Year +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if $year.UV.has_data + + + + + #end if + #if $year.ET.has_data and $year.ET.sum.raw >0.0 + + + + + #end if + #if $year.radiation.has_data + + + + + #end if + +
+ High Temperature
+ Low Temperature +
+ $year.outTemp.max at $year.outTemp.maxtime
+ $year.outTemp.min at $year.outTemp.mintime +
+ High Heat Index + + $year.heatindex.max at $year.heatindex.maxtime +
+ Low Wind Chill + + $year.windchill.min at $year.windchill.mintime +
+ High Humidity
+ Low Humidity +
+ $year.outHumidity.max $year.outHumidity.maxtime
+ $year.outHumidity.min $year.outHumidity.mintime +
+ High Dewpoint
+ Low Dewpoint +
+ $year.dewpoint.max $year.dewpoint.maxtime
+ $year.dewpoint.min $year.dewpoint.mintime +
+ High Barometer
+ Low Barometer +
+ $year.barometer.max at $year.barometer.maxtime
+ $year.barometer.min at $year.barometer.mintime +
+ Rain Total + + $year.rain.sum +
+ High Rain Rate + + $year.rainRate.max at $year.rainRate.maxtime +
+ High Wind Speed + + $year.wind.max from $year.wind.gustdir at $year.wind.maxtime +
+ Average Wind + + $year.wind.avg +
+ RMS Wind + + $year.wind.rms +
+ Vector Average Speed
+ Vector Average Direction +
+ $year.wind.vecavg
+ $year.wind.vecdir +
+ High Inside Temperature
+ Low Inside Temperature +
+ $year.inTemp.max at $year.inTemp.maxtime
+ $year.inTemp.min at $year.inTemp.mintime +
+ High UV
+ Low UV +
+ $year.UV.max at $year.UV.maxtime
+ $year.UV.min at $year.UV.mintime +
+ High ET
+ Low ET +
+ $year.ET.max at $year.ET.maxtime
+ $year.ET.min at $year.ET.mintime +
+ High Radiation
+ Low Radiation +
+ $year.radiation.max at $year.radiation.maxtime
+ $year.radiation.min at $year.radiation.mintime +
+
+ +

 

+ +
+
+ Rain Year (1-$station.rain_year_str start) +
+ + + + + + + + + + + + +
+ Rain Year Total + + $rainyear.rain.sum +
+ High Rain Rate + + $rainyear.rainRate.max at $rainyear.rainRate.maxtime +
+
+ +
+ +
+ +
+

Yearly Statistics and Plots

+
+
+ temperatures + heatchill + outside humidity + Daily highs and lows for the year + rain + wind + barometer + Hi Wind + Inside + Wind Vector + #if $year.radiation.has_data + Radiation + #end if + #if $year.UV.has_data + UV Index + #end if + #if $year.rxCheckPercent.has_data + year rx percent + #end if +
+
+ + +
+ + ## Include the Google Analytics code if the user has supplied an ID: + #if $Extras.has_key('googleAnalyticsId') + + + #end if + + +