LightwaveRF Binding Updated


I have just submitted a pull request for the Lightwave binding. This change includes:

  1. Adding Energy Monitor
  2. Adding Relays
  3. Adding support for Wifi Link Status Messages
  4. Fixing issue where send and receive wouldn’t work at the same time.
  5. Fix dimming issue.

If you want to try it out before 1.8 is released you can find a compiled file here:

Please let me know how you get on.


Cheers @neil_renaud,

I’ll give it a whirl when I get home tonight. Much appreciated.


Hey Neil,

Great work.

I have just run through some tests, sadly I don’t have an energy monitor and my relay hasn’t arrived yet so cant comment on those but dimming is now working correctly on the OH iOS app, when you zero a dimmer it switches off and when you select a percentage its all working.

Any changes made in the iOS OpenHAB or Lightwave app are updated to the OH desktop web interface, dimming still doesnt work from the desktop OH GUI but I think that is either a browser or OH interface issue as its working from the iOS OH app.

I have not yet received a full status message in the logs, so dont know what happens with that yet, I am seeing these messages though :-

2015-11-23 14:06:23.765 [DEBUG] [.l.i.LightwaveRFReceiverThread:128 ]- Message received: 100,?V="N2.91Y"
2015-11-23 14:06:23.766 [DEBUG] [.l.internal.LightwaveRfBinding:292 ]- Publishing Update org.openhab.binding.lightwaverf.internal.command.LightwaveRfVersionMessage@66c46bb4 to []
2015-11-23 14:06:23.767 [WARN ] [.l.internal.LightwaveRfBinding:312 ]- No item for incoming message[100,?V="N2.91Y"

Is it possible to create an Item for this?

I have already created Items for the new Wifi Link items but they have not updated yet, this is what I have added, will keep you posted :-

/* LightwaveRF Link Info */
String    LW_WifiL_Ver     "Wifi Link Version [%s]"                   <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=VERSION"}
String    LW_WifiL_IP      "Wifi Link IP Address [%s]"                <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_IP"}
DateTime  LW_WifiL_Dusk    "Wifi Link Dusk Time [%1$tT, %1$tF]"       <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_DUSK_TIME"}
DateTime  LW_WifiL_Dawn    "Wifi Link Dawn Time [%1$tT, %1$tF]"       <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_DAWN_TIME"}
Number    LW_WifiL_Uptime  "Wifi Link Uptime [%.2f]"                  <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_UPTIME"}
String    LW_WifiL_Long    "Wifi Link Longitude [%s]"                 <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_LONGITUDE"}
String    LW_WifiL_Lat     "Wifi Link Latitude [%s]"                  <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_LATITUDE"}

UPDATED: added formatting…

Once again, great work Neil :smile:

1 Like


Yeah I’ve not implemented increase/decrease as I can’t easily get the percentage.

However I think that in the demo.rules there is an example way round this:

 * This is a demo rule which simulates a real dimmer by reacting to increase/decrease commands 
 * and posting an updated state on the bus 
rule "Dimmed Light"
		Item DimmedLight received command
		var Number percent = 0
		if(DimmedLight.state instanceof DecimalType) percent = DimmedLight.state as DecimalType 
		if(receivedCommand==INCREASE) percent = percent + 5
		if(receivedCommand==DECREASE) percent = percent - 5

		if(percent<0)   percent = 0
		if(percent>100) percent = 100
		postUpdate(DimmedLight, percent);


For the v=“N2.91Y” add an Item type = “VERSION” and see if that works - it might not…

Also for the Link stuff you need to set the binding like this:


Thanks Neil, I have updated the Items, I also missed the formatting, corrected that and just waiting on status and version message :smile:

Update :smile:

The status messages are not working and I still haven’t had another version message, so unconfirmed, looks like the version is also available in the status message.

2015-11-23 15:34:45.120 [DEBUG] [.l.i.LightwaveRFReceiverThread:128 ]- Message received: *!{"trans":256,"mac":"*:*:*","time":1448292897,"type":"hub","prod":"lwl","fw":"N2.91Y","uptime":835410,"timeZone":0,"lat":*.*,"long":*.*,"duskTime":1448294681,"dawnTime":1448264600,"tmrs":0,"evns":0,"run":0,"macs":9,"ip":"*.*.*.*","devs":0}
2015-11-23 15:34:45.147 [ERROR] [l.internal.LightwaveRfWifiLink:158 ]- Error converting message: *!{"trans":256,"mac":"*:*:*","time":1448292897,"type":"hub","prod":"lwl","fw":"N2.91Y","uptime":835410,"timeZone":0,"lat":*.*,"long":*.*,"duskTime":1448294681,"dawnTime":1448264600,"tmrs":0,"evns":0,"run":0,"macs":9,"ip":"*.*.*.*","devs":0}

Hi all,

I’ve not had any success with this new version either.

Here’s my log output at startup:

> 2015-11-23 20:39:15.222 [INFO ] [.o.core.internal.CoreActivator] - openHAB runtime has been started (v1.7.1).
> 2015-11-23 20:39:20.284 [INFO ] [o.o.i.s.i.DiscoveryServiceImpl] - mDNS service has been started
> 2015-11-23 20:39:20.497 [INFO ] [o.o.i.s.i.DiscoveryServiceImpl] - Service Discovery initialization completed.
> 2015-11-23 20:39:28.747 [INFO ] [c.internal.ModelRepositoryImpl] - Loading model 'default.sitemap'
> 2015-11-23 20:39:30.185 [INFO ] [c.internal.ModelRepositoryImpl] - Loading model 'mysql.persist'
> 2015-11-23 20:39:30.374 [INFO ] [c.internal.ModelRepositoryImpl] - Loading model 'alarm.items'
> 2015-11-23 20:39:30.589 [INFO ] [] - Started REST API at /rest
> 2015-11-23 20:39:30.902 [INFO ] [c.internal.ModelRepositoryImpl] - Loading model 'lightwave.items'
> 2015-11-23 20:39:30.979 [INFO ] [c.internal.ModelRepositoryImpl] - Loading model 'nest.items'
> 2015-11-23 20:39:31.056 [INFO ] [c.internal.ModelRepositoryImpl] - Loading model 'weather.items'
> 2015-11-23 20:39:36.184 [INFO ] [.o.u.w.i.servlet.WebAppServlet] - Started Classic UI at /
> 2015-11-23 20:39:40.651 [INFO ] [.service.AbstractActiveService] - DSC Alarm Monitor Service has been started
> 2015-11-23 20:39:41.308 [INFO ] [c.internal.ModelRepositoryImpl] - Loading model 'alarm.rules'
> 2015-11-23 20:39:42.959 [INFO ] [] - Started HABmin REST API at /services/habmin
> 2015-11-23 20:39:48.298 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[room=1,device=1,type=DIMMER] Room[1] Device[1] Serial[null] Type[DIMMER] Poll[-1]
> 2015-11-23 20:39:48.300 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[room=1,device=2,type=DIMMER] Room[1] Device[2] Serial[null] Type[DIMMER] Poll[-1]
> 2015-11-23 20:39:48.304 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[room=1,device=3,type=SWITCH] Room[1] Device[3] Serial[null] Type[SWITCH] Poll[-1]
> 2015-11-23 20:39:48.306 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[room=1,device=4,type=SWITCH] Room[1] Device[4] Serial[null] Type[SWITCH] Poll[-1]
> 2015-11-23 20:39:48.309 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[serial=wifilink,type=WIFILINK_IP] Room[null] Device[null] Serial[wifilink] Type[WIFILINK_IP] Poll[-1]
> 2015-11-23 20:39:48.311 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[serial=wifilink,type=WIFILINK_DUSK_TIME] Room[null] Device[null] Serial[wifilink] Type[WIFILINK_DUSK_TIME] Poll[-1]
> 2015-11-23 20:39:48.314 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[serial=wifilink,type=WIFILINK_DAWN_TIME] Room[null] Device[null] Serial[wifilink] Type[WIFILINK_DAWN_TIME] Poll[-1]
> 2015-11-23 20:39:48.318 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[serial=wifilink,type=WIFILINK_UPTIME] Room[null] Device[null] Serial[wifilink] Type[WIFILINK_UPTIME] Poll[-1]
> 2015-11-23 20:39:48.321 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[serial=wifilink,type=WIFILINK_LONGITUDE] Room[null] Device[null] Serial[wifilink] Type[WIFILINK_LONGITUDE] Poll[-1]
> 2015-11-23 20:39:48.323 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[serial=wifilink,type=WIFILINK_LATITUDE] Room[null] Device[null] Serial[wifilink] Type[WIFILINK_LATITUDE] Poll[-1]
> 2015-11-23 20:39:48.325 [INFO ] [htwaveRfGenericBindingProvider] - ConfigString[serial=wifilink,type=VERSION] Room[null] Device[null] Serial[wifilink] Type[VERSION] Poll[-1]
> 2015-11-23 20:39:48.364 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: IP[192.168.x.xx]
> 2015-11-23 20:39:48.366 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: ReceivePort[9760]
> 2015-11-23 20:39:48.367 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Send Port[9761]
> 2015-11-23 20:39:48.369 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Register On Startup[true]
> 2015-11-23 20:39:48.370 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Send Delay [2000]
> 2015-11-23 20:39:48.371 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Timeout for Ok Messages [500]
> 2015-11-23 20:39:48.401 [INFO ] [l.internal.LightwaveRfWifiLink] - Starting LightwaveRfWifiLink Connection
> 2015-11-23 20:39:48.976 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 100,!F*p
> , retrying again. Retry count 2
> 2015-11-23 20:39:49.102 [INFO ] [o.o.b.w.i.common.WeatherConfig] - ProviderConfig[providerName=WUNDERGROUND,apiKey=xxxxxxxxxxxxxxxxx]
> 2015-11-23 20:39:49.109 [INFO ] [o.o.b.w.i.common.WeatherConfig] - LocationConfig[providerName=WUNDERGROUND,language=en,updateInterval=30,latitude=xx.xxxxxx,longitude=-x.xxxxxx,locationId=home,name=<null>]
> 2015-11-23 20:39:49.116 [INFO ] [.service.AbstractActiveService] - NTP Refresh Service has been started
> 2015-11-23 20:39:49.173 [INFO ] [.z.internal.ZWaveActiveBinding] - ZWave 'updated' with null config
> 2015-11-23 20:39:51.414 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'PARTITIONSTATE'.
> 2015-11-23 20:39:51.420 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'allLights'.
> 2015-11-23 20:39:51.469 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'LW_WifiL_IP'.
> 2015-11-23 20:39:51.476 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'LW_WifiL_Dusk'.
> 2015-11-23 20:39:51.481 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'LW_WifiL_Dawn'.
> 2015-11-23 20:39:51.488 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'LW_WifiL_Uptime'.
> 2015-11-23 20:39:51.494 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'LW_WifiL_Long'.
> 2015-11-23 20:39:51.501 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'LW_WifiL_Lat'.
> 2015-11-23 20:39:51.508 [ERROR] [.p.m.i.MysqlPersistenceService] - mySQL: Unable to find table for query 'LW_WifiL_Vers'.
> 2015-11-23 20:39:51.541 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 100,!F*p
> , retrying again. Retry count 3
> 2015-11-23 20:39:51.816 [INFO ] [.service.AbstractActiveService] - Nest Refresh Service has been started
> 2015-11-23 20:39:52.552 [INFO ] [.o.b.w.i.s.WeatherJobScheduler] - Starting and scheduling weatherJob-home with interval of 30 minutes
> 2015-11-23 20:39:54.048 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 100,!F*p
> , retrying again. Retry count 4
> 2015-11-23 20:39:56.555 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 100,!F*p
> , retrying again. Retry count 5
> 2015-11-23 20:39:59.061 [ERROR] [.b.l.i.LightwaveRFSenderThread] - Unable to send message 100,!F*p
>  after 5 attemps giving up

Just a thought. Should I be using openHAB v1.8.1? Rather than v1.7.1?

Waiting for a broadcast from the WiFi Link to see if those new items get populated.


It should work with 1.7.1. Those first messages are “OK” just means I’ve not detected the acknowledgement so it tries 5 times then gives us.

After that it should work.

Hi Neil,

Still getting nothing:

> 2015-11-23 21:20:31.270 [ERROR] [l.internal.LightwaveRfWifiLink] - Error converting message: *!{"trans":650,"mac":"xx:xx:xx","time":1448313631,"type":"hub","prod":"wfl","fw":"U2.91Y","uptime":1991217,"timeZone":0,"lat":xx.xx,"long":-x.xx,"duskTime":14482xxxxx,"dawnTime":14482xxxxx,"tmrs":0,"evns":0,"run":0,"macs":2,"ip":"192.168.x.xx","devs":0}
> 2015-11-23 21:24:57.788 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 202,!R1D3F1
> , retrying again. Retry count 2
> 2015-11-23 21:25:00.290 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 202,!R1D3F1
> , retrying again. Retry count 3
> 2015-11-23 21:25:02.796 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 202,!R1D3F1
> , retrying again. Retry count 4
> 2015-11-23 21:25:05.299 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message not received for 202,!R1D3F1
> , retrying again. Retry count 5
> 2015-11-23 21:25:07.802 [ERROR] [.b.l.i.LightwaveRFSenderThread] - Unable to send message 202,!R1D3F1
>  after 5 attemps giving up

So it had received the status broadcast, but wasn’t able to process it. And I still have no control from the desktop UI or iOS.

Hi Chris/Wez,

I know why it didn’t work on the status message and I’ll push a new version out as soon as I can.

Chris: Are the ports correct in your openhab.cfg or could they be wrong from when you swapped them?


New release here that should fix the status message.

No they’re back to how they should be, which I’m guessing is also shown by this bit in openhab.log at startup:

I’m loving this speed of development though! Thanks a lot Neil, it really is very much appreciated. I’ll download that update tonight and give it a whirl.

Try swapping them round. I have them as:

Sorry I can’t test some of this at home as I use the rfxcom to send messages so don’t use all the functionality i’ve created.

Just to confirm @tinkerfailure alpha3 is working for me except the status messages.

@neil_renaud I am just testing alpha4, will report back shortly :smile:


Neil, great work, it is now decoding the status message and updating the configured items.

IP, Longitude, Latitude and Uptime are displaying what is in the packet, I think uptime might possibly be number of seconds, not sure how the dusk and dawn times should be formatted but the data is being read by the binding as is displayed in the packet.

The only one that isn’t working is VERSION, I recall you saying this may not work. There are separate version packets which are seen occasionally although version is also included in the status message under prefex fw, I have not yet received another separate version packet.

2015-11-24 18:25:26.324 [DEBUG] [.l.internal.LightwaveRfBinding:292 ]- Publishing Update org.openhab.binding.lightwaverf.internal.command.LightwaveRfWifiLinkStatusMessage@5bf926c5 to [LW_WifiL_Long, LW_WifiL_Dawn, LW_WifiL_IP, LW_WifiL_Ver, LW_WifiL_Lat, LW_WifiL_Dusk, LW_WifiL_Uptime]
2015-11-24 18:25:26.325 [INFO ] [.l.internal.LightwaveRfBinding:300 ]- Update from LightwaveRf ItemName[LW_WifiL_Long], State[*.*]
2015-11-24 18:25:26.328 [INFO ] [.l.internal.LightwaveRfBinding:300 ]- Update from LightwaveRf ItemName[LW_WifiL_Dawn], State[1970-01-17T19:19:11]
2015-11-24 18:25:26.330 [INFO ] [.l.internal.LightwaveRfBinding:300 ]- Update from LightwaveRf ItemName[LW_WifiL_IP], State[*.*.*.*]
2015-11-24 18:25:26.331 [INFO ] [.l.internal.LightwaveRfBinding:306 ]- State was null for LW_WifiL_Ver type VERSION, message org.openhab.binding.lightwaverf.internal.command.LightwaveRfWifiLinkStatusMessage@5bf926c5
2015-11-24 18:25:26.332 [INFO ] [.l.internal.LightwaveRfBinding:300 ]- Update from LightwaveRf ItemName[LW_WifiL_Lat], State[*.*]
2015-11-24 18:25:26.334 [INFO ] [.l.internal.LightwaveRfBinding:300 ]- Update from LightwaveRf ItemName[LW_WifiL_Dusk], State[1970-01-17T19:19:41]
2015-11-24 18:25:26.335 [INFO ] [.l.internal.LightwaveRfBinding:300 ]- Update from LightwaveRf ItemName[LW_WifiL_Uptime], State[932627]


I’ve installed alpha4, and swapped the ports over as Neil suggested. Still no control of the actual devices, and still getting the failure to send messages error. But I did get a version update from the WiFi Link!

> 2015-11-24 21:06:43.387 [ERROR] [.b.l.i.LightwaveRFSenderThread] - Unable to send message 100,!F*p
>  after 5 attemps giving up
> 2015-11-24 21:07:34.149 [INFO ] [.l.internal.LightwaveRfBinding] - Update from LightwaveRf ItemName[LW_WifiL_Vers], State[U2.91Y]


Realised my Cyberduck wasn’t saving to the Pi, so restarted it and found the port swapping hadn’t been saved. So swapped them over as Neil suggested and restarted openHAB:

> 2015-11-24 21:18:39.199 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: IP[]
> 2015-11-24 21:18:39.211 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: ReceivePort[9761]
> 2015-11-24 21:18:39.228 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Send Port[9760]
> 2015-11-24 21:18:39.239 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Register On Startup[true]
> 2015-11-24 21:18:39.243 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Send Delay [2000]
> 2015-11-24 21:18:39.248 [INFO ] [.l.internal.LightwaveRfBinding] - LightwaveBinding: Timeout for Ok Messages [500]
> 2015-11-24 21:18:39.287 [INFO ] [l.internal.LightwaveRfWifiLink] - Starting LightwaveRfWifiLink Connection
> 2015-11-24 21:18:39.450 [INFO ] [.b.l.i.LightwaveRFSenderThread] - Ok message received for 100,!F*p

Happy days!

(Thanks Neil!)

I wanted to clarify too, should the items be as follows?

> String    LW_WifiL_IP      "Wifi Link IP Address"      <network>      (gLWTEST)      {lightwaverf="serial=wifilink,type=WIFILINK_IP"}
> DateTime  LW_WifiL_Dusk    "Wifi Link Dusk Time"       <network>      (gLWTEST)       {lightwaverf="serial=wifilink,type=WIFILINK_DUSK_TIME"}
> DateTime  LW_WifiL_Dawn    "Wifi Link Dawn Time"       <network>      (gLWTEST)       {lightwaverf="serial=wifilink,type=WIFILINK_DAWN_TIME"}
> Number    LW_WifiL_Uptime  "Wifi Link Uptime"          <network>      (gLWTEST)       {lightwaverf="serial=wifilink,type=WIFILINK_UPTIME"}
> String    LW_WifiL_Long    "Wifi Link Longitude"       <network>      (gLWTEST)       {lightwaverf="serial=wifilink,type=WIFILINK_LONGITUDE"}
> String    LW_WifiL_Lat     "Wifi Link Latitude"        <network>      (gLWTEST)       {lightwaverf="serial=wifilink,type=WIFILINK_LATITUDE"}
> String    LW_WifiL_Vers     "Wifi Link Latitude"        <network>      (gLWTEST)       {lightwaverf="serial=wifilink,type=VERSION"}

So ‘VERSION’ is different to the rest? I’m still waiting for a broadcast from the WiFi Link to get them populated…

I had missed the formatting, these should work better, although the dusk, dawn and uptime are not 100% yet :-

/* LightwaveRF Link Info */
String    LW_WifiL_Ver     "Wifi Link Version [%s]"                   <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=VERSION"}
String    LW_WifiL_IP      "Wifi Link IP Address [%s]"                <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_IP"}
DateTime  LW_WifiL_Dusk    "Wifi Link Dusk Time [%1$tT, %1$tF]"       <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_DUSK_TIME"}
DateTime  LW_WifiL_Dawn    "Wifi Link Dawn Time [%1$tT, %1$tF]"       <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_DAWN_TIME"}
Number    LW_WifiL_Uptime  "Wifi Link Uptime [%.2f]"                  <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_UPTIME"}
String    LW_WifiL_Long    "Wifi Link Longitude [%s]"                 <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_LONGITUDE"}
String    LW_WifiL_Lat     "Wifi Link Latitude [%s]"                  <network>      (gLWTEST)   {lightwaverf="serial=wifilink,type=WIFILINK_LATITUDE"}

Ah yeah, they’re great thanks.

What are you getting for the dawn/dusk timestamps? Mine are defaulting to Linux epoch. I get the same thing with the panel time from my DSC alarm. So I assume it’s me doing something wrong with the time formatting in Java.

I have not quite worked that out yet, I just copied the formatting from another DateTime component but it doesn’t appear to be correct, once I have something better I will post an update.

I’ve just copied the same formatting that I’ve got working (correctly) for the Nest binding:

> [%1$td %1$tB %1$tY at %1$tH:%1$tM:%1$tS]

And it still outputs:

17 January 1970 at 19:19:40

So it looks like maybe the data coming in is not what Java is expecting. I changed the formatting to [%s] and got this:


My dawn time and dusk time are only 30 seconds apart at the moment, which would make for a nice short day!