Brian,
Yes WD works great for web cam image overlay and wunderground web cam upload and I recommend that for most users.
I recently changed to all PHP for the text overlay and wunderground web cam upload.
Yes it is harder to do and took me some programming hours, but I prefer the flexibility of using my PHP method because I can alter any of the weather tags before putting them on my cam image.
Specifically, I use some php code to alter the current_summary to my own specifications. I have a solar sensor and do not use a Metar so I have coded some current conditions icon and summary optimizations/corrections. I use my new php web cam text overlay methods to integrate my conditions summary optimizations/corrections onto my web cam image.
Here is a sample of the corrections/optimizations from my testtags.php
$forecasticonword = '%forecasticonword%'; # forecasticonword (used only at dawn / dusk)
$weathercond = '%weathercond%'; # weathercond
$current_summary = '%Currentsolardescription%'; # Currentsolardescription
$dayornight = '%dayornight%'; # dayornight
# fixes some issues at dusk where sunny icon shows up
$forecasticonword = str_replace("Mainly fine", 'Partly cloudy', $forecasticonword);
$forecasticonword = str_replace("Snow", 'Partly cloudy', $forecasticonword);
# clean up extra 'Dry'
$current_summary = str_replace('/Dry/Dry', '/Dry', $current_summary);
# fix Mostly sunny/Moderate drizzle
$current_summary = str_replace('Mostly sunny/Moderate drizzle', 'Cloudy/Moderate drizzle', $current_summary);
# remove a line break
$current_summary = str_replace('/\n/', '', $current_summary);
# replace both kinds of slashes, I like comma space instead
$slash = '\\';
$current_summary = str_replace($slash, ', ', $current_summary);
$current_summary = str_replace('/', ', ', $current_summary);
# if begins with comma space - remove the comma space
if( preg_match("/^, /", $current_summary) ) {
$current_summary = str_replace(', ', '', $current_summary);
}
# summary correction, fixes 'Windy' when it is supposed to be 'Windy, Rain'
if( preg_match("/Windy/", $current_summary) && ($currentrainratehr > 0) ) {
$current_summary = 'Windy, Rain';
if ($dayornight == 'Night') $current_summary = 'Windy, Rain, Night time';
}
# summary correction, windy is normally over 20 mph average
# changes icon and summary to 'Windy, Rain' when average above 10 mph with wind and rain
$avgspdnomph = str_replace(' mph', '', $avgspd);
if( $avgspdnomph > 10 && preg_match("/rain/", $current_summary) ) {
$current_icon = 'windy.gif';
$current_summary = "Windy, $current_summary";
}
# summary correction, fixes have windy icon, but not 'Windy' in summary
if($current_icon == 'windy.gif' && !preg_match("/Windy/", $current_summary)) {
$current_summary = "Windy, $current_summary";
}
# icon correction Sunny or Clear
if( preg_match("/Sunny/", $current_summary)
|| preg_match("/Clear/", $current_summary)) {
if ($dayornight == 'Day') $current_icon = 'day_clear.gif';
if ($dayornight == 'Night') $current_icon = 'night_clear.gif';
}
# icon correction Mostly sunny
if( preg_match("/Mostly sunny/", $current_summary) ) {
if ($dayornight == 'Day') $current_icon = 'day_mostly_sunny.gif';
}
# icon corrections for issues I have at Dusk when Mostly cloudy
# mostly because I do not use metar, wd icons get confused at dusk
if(
( preg_match("/Mostly cloudy/", $current_summary) )
|| ( preg_match("/^Dry$/", $current_summary) && preg_match("/^Partly cloudy$/", $forecasticonword ) )
|| ( preg_match("/^Dusk$/", $current_summary) && preg_match("/^Partly cloudy$/", $forecasticonword ) )
|| ( preg_match("/^Dusk, Dry$/", $current_summary) && preg_match("/^Partly cloudy$/", $forecasticonword ) )
|| ( preg_match("/^Dawn, Dry$/", $current_summary) && preg_match("/^Partly cloudy$/", $forecasticonword ) )
) {
if ($dayornight == 'Day') $current_icon = 'day_partly_cloudy.gif';
if ($dayornight == 'Night') $current_icon = 'night_partly_cloudy.gif';
}
# icon correction - fix Sunny icon when cloudy - at dawn dusk
if(
( preg_match("/Cloudy/", $current_summary) )
|| ( preg_match("/Dawn/", $current_summary) && preg_match("/^Cloudy$/", $forecasticonword ) )
|| ( preg_match("/Dusk/", $current_summary) && preg_match("/^Cloudy$/", $forecasticonword ) )
) {
if ($dayornight == 'Day') $current_icon = 'day_cloudy.gif';
if ($dayornight == 'Night') $current_icon = 'night_cloudy.gif';
}
# summary correction - fix Sunny summary when cloudy icon stopped raining
if( preg_match("/Stopped raining/", $current_summary) ) {
$current_summary = str_replace('Sunny', 'Cloudy', $current_summary);
$current_summary = str_replace('Mostly sunny', 'Cloudy', $current_summary);
}
# icon correction coudy
if( preg_match("/Stopped raining/", $current_summary)
|| preg_match("/Cloudy/", $current_summary)
|| preg_match("/Overcast/", $current_summary)
) {
if ($dayornight == 'Day') $current_icon = 'day_cloudy.gif';
if ($dayornight == 'Night') $current_icon = 'night_cloudy.gif';
}
# icon correction when rain
if( preg_match("/drizzle/", $current_summary) ) {
if ($dayornight == 'Day') $current_icon = 'mist.gif';
if ($dayornight == 'Night') $current_icon = 'night_mist.gif';
}
# icon correction when rain
if( preg_match("/Light rain/", $current_summary) ) {
if ($dayornight == 'Day') $current_icon = 'day_light_rain.gif';
if ($dayornight == 'Night') $current_icon = 'night_light_rain.gif';
}
# icon correction when rain
if( preg_match("/Moderate rain/", $current_summary) ) {
if ($dayornight == 'Day') $current_icon = 'day_rain.gif';
if ($dayornight == 'Night') $current_icon = 'night_rain.gif';
}
# icon correction when rain
if( preg_match("/Moderate drizzle/", $current_summary) ) {
if ($dayornight == 'Day') $current_icon = 'day_light_rain.gif';
if ($dayornight == 'Night') $current_icon = 'night_light_rain.gif';
}
# icon correction when rain
if( preg_match("/Heavy rain/", $current_summary) ) {
if ($dayornight == 'Day') $current_icon = 'day_heavy_rain.gif';
if ($dayornight == 'Night') $current_icon = 'night_heavy_rain.gif';
}
# icon correction, fixes sometimes summary and icon is 'Dry' when it was just raining
$totalrainlast3hoursnoin = str_replace(' in.', '', $totalrainlast3hours);
if( preg_match("/^Dry$/", $current_summary) && ($totalrainlast3hoursnoin > 0) ) {
if ($dayornight == 'Day') $current_icon = 'day_partly_cloudy.gif';
if ($dayornight == 'Night') $current_icon = 'night_partly_cloudy.gif';
}
# icon correction, fixes sometimes icon is 'Cloudy' when summary is sleet fall
if( preg_match("/Sleet fall/", $current_summary)
|| preg_match("/Snow fall/", $current_summary) ) {
if ($dayornight == 'Day') $current_icon = 'snow.gif';
if ($dayornight == 'Night') $current_icon = 'night_sleet.gif';
}
# I do not have a nearby METAR so this is how I use the davis forecast icon word
# to show if it is cloudy or not, but only at night when solar sensor is mute
# If any of these conditions, then fill with forecast icon word
if ($dayornight == 'Night' # at night when solar sensor is off
|| $current_summary == '' # sometimes there is nothing, so forecast icon word it is
|| preg_match("/Dusk/", $current_summary) # at dusk there is no solar cloud words
|| preg_match("/^Dry$/", $current_summary)) { # sometimes at dusk there is just 'Dry'
# at night do not use forecasticonword whith rain/snow/fog words
if( ! preg_match("/ain/", $current_summary)
&& ! preg_match("/drizzle/", $current_summary)
&& ! preg_match("/shower/", $current_summary)
&& ! preg_match("/thunder/", $current_summary)
&& ! preg_match("/Snow/", $current_summary)
&& ! preg_match("/Sleet/", $current_summary)
&& ! preg_match("/Fog/", $current_summary)
&& ! preg_match("/Haze/", $current_summary)
) {
$forecasticonword = str_replace(" night", '', $forecasticonword); # remove night word
$current_summary = $current_summary .', '. $forecasticonword; # add forecasticonword at night because no METAR
# fixes icon was night clear
if (preg_match("/^Partly cloudy$/", $forecasticonword ) ) {
if ($dayornight == 'Night') $current_icon = 'night_partly_cloudy.gif';
}
# fixes icon was night clear
if (preg_match("/^Cloudy$/", $forecasticonword ) ) {
if ($dayornight == 'Night') $current_icon = 'night_cloudy.gif';
}
}
}
# windy icon trumps all
if (preg_match("/Windy/", $current_summary)) {
if ($dayornight == 'Day') $current_icon = 'windy.gif';
if ($dayornight == 'Night') $current_icon = 'night_windy.gif';
}
# add heatcolor word to front of summary, but only if it is set
if( ! preg_match("/^---$/", $heatcolourword)) {
$current_summary = $heatcolourword .', '. $current_summary;
}
# cleanup - space on end
$current_summary = trim($current_summary);
# cleanup - if ends with comma - remove it
if( preg_match("/,$/", $current_summary) ) {
$current_summary = substr($current_summary, 0, -1);
}
For most, WD web cam image overlay is just fine.