<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>en-us</language>
    <title>Tiki RSS feed for blogs</title>
    <description>Last posts to weblogs.</description>
    <image>
      <url>http://stovenour.net/img/tiki/Tiki_WCG.png</url>
      <title>Feed logo</title>
      <link>http://stovenour.net/</link>
    </image>
    <pubDate>Thu, 16 Apr 2026 22:28:27 +0000</pubDate>
    <generator>Zend_Feed_Writer 2 (http://framework.zend.com)</generator>
    <link>http://stovenour.net/</link>
    <atom:link rel="self" type="application/rss+xml" href="http://stovenour.net/tiki-blogs_rss.php"/>
    <item>
      <title>Pool Fill:  Debugging ESP8266 with no serial port</title>
      <description><![CDATA[I realized that once I hook in the command library it will take over the serial port.  If I write debugging information it will send that to the connected AVR which <em>should</em> ignore it as garbage.  (note to self: make sure command library can detect garbage)  There is a solution using a second serial port on the ESP8266, but it is only one way because the RX pin can not be used.  I would also need to make an adapter for my FTDI cable.  Then I had an idea; why not just publish an MQTT debug topic?  It seems like this might be handy even after development is done for debugging live issues.  I planned to add MQTT support regardless so it should be relatively easy to add another topic.<br />
<ol><li>Research and install MQTT broker on local LAN
<ul><li>Decided to use <a class="wiki external" target="_blank" href="http://mosquitto.org/documentation/" rel="external">Mosquitto</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span>
</li><li>Followed: <a class="wiki external" target="_blank" href="https://www.digitalocean.com/community/questions/how-to-setup-a-mosquitto-mqtt-server-and-receive-data-from-owntracks" rel="external">How to Setup a Mosquitto MQTT Server</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span>
</li><li>Installed on Ian so it can server both LANs
</li></ul></li><li>Configure the MQTT <a class="wiki" href="http://www.arduino.cc/" target='_blank'>Arduino</a> client
</li><li>Add MQTT configuration parameters to the web configuration screen
</li></ol><br />]]></description>
      <pubDate>Sat, 25 Feb 2017 15:03:00 +0000</pubDate>
      <link>http://stovenour.net/blogpost121-Pool-Fill-Debugging-ESP8266-with-no-serial-port</link>
      <guid>http://stovenour.net/blogpost121-Pool-Fill-Debugging-ESP8266-with-no-serial-port</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Pool Fill: SNTP Client</title>
      <description><![CDATA[I spent quite a bit of time thinking through various implementations and the resulting user experience for DST time shifts. I don't like any of the options I've studied. The idea of shifting the scheduler time, skipping (spring forward) or duplicating (fall back) set points in the process, is a non-starter for me. I could write a bunch of complex code that would try to schedule all the otherwise skipped items and know not to duplicate set points, but that seems like a lot of testing, debugging, and places for code defects that I'll find a decade from now. I've settled on a solution that at its core comes down to this one design philosophy:<br />
<ul><li>Always operate the software in either UTC or local standard time; apply DST shifts when viewing or setting the schedule and clock
</li></ul>For the controller I plan to always operate it in local standard time because again testing and debugging the scheduler where local time and UTC can be +/- 12 hours seemed like way too much work. This also means that the controller does not need to be told the timezone or timezone offset. It only needs to be told about the DST offset (0 or some positive integer minutes). The user will always interact with the controller in local time (DST or ST). The controller will store and schedule set points in standard time. For the user this is all as one would expect except for one effect. The previously scheduled entries will shift an hour at the DST shift. This is no worse than a controller that doesn't accommodate DST at all and a big improvement when the user is trying to set the schedule.<br />
For the web server I plan to always operate it in UTC. The user will need to set a timezone with offset from UTC and DST start /end data (all the timezone data for the Timezone.h library). That should be relatively easy with the web interface. Timezone information is needed regardless since the SNTP client only receives UTC and must be offset for local time. Handling DST shifts on the Web Server are trivial since there is no scheduling logic. Again the internals will all use UTC and will be offset to local time when interacting with the user.<br />
<br />
Some fun facts I learned along the way:<br />
<ul><li>The DST begin and end points vary all over the world and have changed many times in history; even in recent history. The shift has not and is not always 60 minutes; even today at least one country (Australia) has a region using 30 minutes
</li><li>The ESP8266 internal SNTP client can be set for timezone and automatically adjust for DST; however the DST shift points are fixed to align with some undocumented region, making the capability practically useless</li></ul>]]></description>
      <pubDate>Thu, 16 Feb 2017 14:43:00 +0000</pubDate>
      <link>http://stovenour.net/blogpost120-Pool-Fill-SNTP-Client</link>
      <guid>http://stovenour.net/blogpost120-Pool-Fill-SNTP-Client</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Pool Fill: SNTP Client </title>
      <description><![CDATA[Thought through this some more today. I considered several approaches and settled on the approach of making local time a display artifact. All internal time will be in UTC (same as NTP servers) and adjusted for the user when viewing the time. This has a couple of implications for the pool fill controller:<br />
<br />
<ol><li>controller needs to be told the current local time shift (including DST)
</li><li>controller needs to shift all interactions with the user
</li><li>does the controller store set points in localtime or UTC?</li></ol>]]></description>
      <pubDate>Mon, 13 Feb 2017 14:42:00 +0000</pubDate>
      <link>http://stovenour.net/blogpost119-Pool-Fill-SNTP-Client</link>
      <guid>http://stovenour.net/blogpost119-Pool-Fill-SNTP-Client</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Pool Fill: SNTP Client</title>
      <description><![CDATA[TimeLib and the Timezone library don't really work together like the Timezone examples imply. All of the TimeLib transformation functions use the currently stored TimeLib value. If TimeLib is tracking UTC then all of the transformation functions will only work for UTC. The approach here will be to place the Timezone library functions into the TimeLib SyncProvider function. Every time the SyncProvider is called it will grab the UTC time from the ESP library and convert it to local time before returning that time to TimeLib. TimeLib will always track local time. This has one potential side-effect. At the DST shift, the time returned by now() (i.e. sysTime) will jump forward or backward causing any timing functions that use now() to possibly break. This is user beware.... Timing functions should use the <a class="wiki" href="http://www.arduino.cc/" target='_blank'>Arduino</a> millis() function for checking elapsed time! See this for an overview of timing best practices: <a class="wiki external" target="_blank" href="http://arduino.stackexchange.com/a/12588" rel="external">How can I handle the millis() rollover?</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span><br />
<br />
Need to debug the scheduler for days past sunday. Found a real doozie of an error and corrected it but the fix is untested.<br />
<br />
Always set the clock to a date past 1/1/1971 or the schedule timing functions will not work correctly. The best thing here is to force the clock to something like 1/1/2017 at startup; then free run from there until something sets the time.<br />
<br />
Need code to handle inhibit &gt; unix epoc rollover; also scheduling for the week following the unix epoc rollover needs to be studied.<br />
<br />
On a DST spring forward; anything scheduled between 2am and 3am will be skipped.<br />
On a DST fall back; anything scheduled between 1am and 2am will be scheduled twice.<br />
<br />
remainingRunTime will also break across the shift<br />
<br />]]></description>
      <pubDate>Sun, 12 Feb 2017 14:40:00 +0000</pubDate>
      <link>http://stovenour.net/blogpost118-Pool-Fill-SNTP-Client</link>
      <guid>http://stovenour.net/blogpost118-Pool-Fill-SNTP-Client</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Pool Fill:  SNTP Client</title>
      <description><![CDATA[First a little rant.  There are a couple <em>NTP</em> libraries for <a class="wiki" href="http://www.arduino.cc/" target='_blank'>Arduino</a>.  None of them are actually NTP.  All of them are <em>SNTP</em> but probably not even fully <a class="wiki external" target="_blank" href="https://tools.ietf.org/html/rfc4330" rel="external">SNTP compliant</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span>.<br />
<br />
Need to combine:<br />
<ul><li>TimeLib
</li><li>Arduino Timezone Library
</li><li>ESP Library time.h (includes sntp.h)
</li></ul><br />
<ol><li>Need to work out the linkage between <a class="wiki" href="http://www.arduino.cc/" target='_blank'>Arduino</a> time library and the ESP time library
</li><li>Need to work out the linkage between the Timezone Library and the ESP time library
<ul><li>It seems that the ESP time library uses some fixed DST start/end values....
</li></ul></li><li>Need a prototype for testing</li></ol>]]></description>
      <pubDate>Fri, 03 Feb 2017 14:33:00 +0000</pubDate>
      <link>http://stovenour.net/blogpost117-Pool-Fill-SNTP-Client</link>
      <guid>http://stovenour.net/blogpost117-Pool-Fill-SNTP-Client</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Updating Spamassassin</title>
      <description><![CDATA[I desparately need to update spamassassin and clamav.  Here's an example:<br />
<a class="wiki external" target="_blank" href="http://blog.exeko.com/2008/05/30/update-clamav-daemon-on-debian-etch/" rel="external">http://blog.exeko.com/2008/05/30/update-clamav-daemon-on-debian-etch/</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span><br />
<br />
<br />
<br />]]></description>
      <pubDate>Sun, 09 Nov 2008 14:07:25 +0000</pubDate>
      <link>http://stovenour.net/blogpost60-Updating-Spamassassin</link>
      <guid>http://stovenour.net/blogpost60-Updating-Spamassassin</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Annual bluegrass</title>
      <description><![CDATA[This weed took over my lawn this year.  It has been around since the lawn was first established over 10 years ago, but this year it is out of control.<br />
<br />
<a class="wiki external" target="_blank" href="http://www.ipm.ucdavis.edu/PMG/P/W-GM-PANN-MP.001.html" rel="external">Annual bluegrass, Poa annua</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span><br />
<br />
It looks like short of hiring a professional to use some of the specialized chemicals, I need to:<br />
<ol><li> Concentrate on fall pre-emergent control; I think I'm generally too late for this one.  I'll try to get it out in early September this year.  Most references say that germination starts at soil temperatures of 70 degrees.
</li><li> Physically remove the weed
</li></ol><br />
I think it is edging out the bermudagrass.  Then in the middle of summer, when the bluegrass dies, the weeds like oxalias take off.  Once the other weeds are established the bermudagrass has a hard time competing.<br />]]></description>
      <pubDate>Sun, 30 Mar 2008 05:18:37 +0000</pubDate>
      <link>http://stovenour.net/blogpost54-Annual-bluegrass</link>
      <guid>http://stovenour.net/blogpost54-Annual-bluegrass</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Web and Mail Server Log Reports</title>
      <description><![CDATA[Yesterday I realized that bots had figured out how to send Blog traceback pings to my blogs to inject spam.  Such joy....  I disabled the Tikiwik feature and removed the entries from the database, but later discovered that the bots were chewing up my measly server cpu and ram with all the traceback requests.  A quick update to the firewall and all is quiet again.  However, this got me thinking about monitoring the apache access log.  I found a great report tool that should work out of the box.  When I get bored again with my current cube project I plan to add this little tool.  As a bonus it appears to nicely parse mail logs.<br />
<br />
<a class="wiki external" target="_blank" href="http://awstats.sourceforge.net/" rel="external">AWStats</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span><br />
<br />]]></description>
      <pubDate>Sat, 22 Mar 2008 17:21:59 +0000</pubDate>
      <link>http://stovenour.net/blogpost53-Web-and-Mail-Server-Log-Reports</link>
      <guid>http://stovenour.net/blogpost53-Web-and-Mail-Server-Log-Reports</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Adding anonymous contact capability</title>
      <description><![CDATA[I meant for this to exist all along, but apparently it must be enabled in two separate places.  "General-&gt;Contact us" and "Feature-&gt;Contact us (anonymous)".  To make the web form work, I also had to add permissions for group anonymous:  tiki_p_messages --&gt; true<br />
<br />
Let the spammers loose!  I'm hiding behind my desk now.<br />]]></description>
      <pubDate>Fri, 07 Dec 2007 22:39:18 +0000</pubDate>
      <link>http://stovenour.net/blogpost50-Adding-anonymous-contact-capability</link>
      <guid>http://stovenour.net/blogpost50-Adding-anonymous-contact-capability</guid>
      <slash:comments>0</slash:comments>
    </item>
    <item>
      <title>Why I can't program my VCR</title>
      <description><![CDATA[Every device in my home with a user interface has a, well..., different user interface.  Some are better than others.  I can easily program my TiVo DVR, but programming my VCR is still highly unreliable.  Why?  Well TiVo is better integrated into the published listings and it just has a better and simple interface.  Why can't my TiVo pick recordings for my VCR?  Heck, why can't my TiVo set my sprinklers for me?<br />
<br />
A couple of years ago I purchased an X-10 based home control bundle.  X-10 modules are simple devices that allow control over lights and other electric items in the home.  I purchased a bundle that came with computer software for scheduling control.  Initially I wanted to control my Christmas lights.  I thought it would be nice to have the lights scheduled to come on at dusk and go off at midnight.  Well...  Three years later, I have six accent lamps in my home on two different zones plus the outdoor Christmas light circuit all on X-10.  But I can't even tell you where I put the computer software.  That interface was well, just too inconvenient.  I use a tiny wireless remote with two buttons; two zones, on-off; that's it.  No timers, nothing fancy; it's just easier that way.<br />
<br />
A well written research thesis from the University of Maryland, <a class="wiki external" target="_blank" href="http://www.cs.umd.edu/Honors/reports/finalthesis.doc" rel="external">Protocol and Interface for Device Control in the Home Environment</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span>, points out that our inability to learn each device and more recently our inability to coordinate multiple devices is a direct consequence of device centric user interface design where every device has a unique interface.  These interfaces tend to be excellent when they get it right (e.g. TiVo) and horrible when they do not (e.g. my sprinkler timer).  There is very little in between.<br />
<br />
This quote from the paper illustrates the point.<br />
<div class="well">devices feature their own unique interface that forces users to relearn the same tasks anew for every device.  Devices also lack the ability to be coordinated; the only interface most devices offer is a set of buttons and a remote control.  This egocentricity inherently limits a userâ€™s ability to orchestrate and manipulate their devices; the device presumes it knows every way it would want to be used.</div><br />
<br />
Ok, so I need to schedule my X-10 lights, DVR, VCR, sprinklers, and while we are at it my HVAC.  Scheduling is somewhat the same, pick a time to start, pick a time to stop...  Ok, recording live broadcasts requires access to schedule information, but a device that gets that right (i.e. TiVo) could surely get the others right.  Right?  Well, no; as it turns out none of those devices are capable of talking to each other.  Why? Because each manufacturer is only interested in their own user interface.<br />
<br />
Let me stop for a second and dispel what I believe is a myth.  Some might say the reason all of these devices can not talk to each other is cost.  After all it is more expensive to imbed radio links or install wired interfaces.  Well, when I see people shelling out $1500+ for a TV, yes a flat panel, I can't help but think that there are plenty of folks out there that have the cash.  They just don't want home automation; at least not the kind that we've all been building for them.<br />
<br />
<h2 class="showhide_heading" id="Solution">Solution<a href="#Solution" class="heading-link"><span class="icon icon-link fa fa-link fa-fw "   ></span></a></h2>
Separate the device interface from the device and use common interfaces for all similar items in the home.<br />
<br />
If TiVo is great at building user interfaces then they could become THE user interface for the home.  But clearly TiVo can not build all devices for the home so they need some way to communicate with all the devices in the home.  This requires an open communication bus that is independent of the physical layer it runs on (e.g. Ethernet, wireless, power line carrier, etc.) but that supports auto detection and auto configuration.<br />
<br />
In this model, I envision two industries; those that compete for the user interface and those that compete for the devices.<br />
<br />
What protocol you ask?  I believe something simpler than <a class="wiki external" target="_blank" href="http://www.upnp.org/" rel="external">UPnP</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span> maybe like <a class="wiki external" target="_blank" href="http://www.xpl-home.org" rel="external">xPL</a><span class="icon icon-link-external fa fa-external-link fa-fw "   ></span>.<br />
<br />]]></description>
      <pubDate>Mon, 18 Dec 2006 15:18:20 +0000</pubDate>
      <link>http://stovenour.net/blogpost19-Why-I-can-t-program-my-VCR</link>
      <guid>http://stovenour.net/blogpost19-Why-I-can-t-program-my-VCR</guid>
      <slash:comments>0</slash:comments>
    </item>
  </channel>
</rss>
