[RELEASE] Rain Bird LNK/LNK2 WiFi Module Controller

Also... run this:
image

That will populate which commands the controller is capable of handling:

commandSupport
Supported: 0x02=true, 0x03=true, 0x04=true, 0x05=true, 0x10=true, 0x12=true, 0x30=true, 0x36=true, 0x37=true, 0x38=true, 0x39=true, 0x3A=true, 0x3E=true, 0x3F=true, 0x40=true, 0x42=true, 0x48=true | Unsupported: 0x32=false, 0x49=false, 0x4A=false, 0x4B=false, 0x4C=false | Unknown: none

I have an ESP-Me controller connected with one of the LNK modules.

Mine doesn't show available stations.

You have one of those wonderful edge cases with Rain Bird.

00A3A02 is the tell.

Rain Bird's APIs are not well documented, and their firmware changes are often not backwards compatible, and the firmware version does not reliably indicate opcode support.

So… I made a slight change to the code and pushed it to HPM. Run an update to get v0.1.3.5 and it should report all 10 zones and then be able to control zones 9 and 10 properly.

Hmmmmm. HPM is now showing 1.3.5, Device prefrenes also shows 1.3.5, however the driver info in "current states" still shows 1.3.3

And clicking run on the create zone children doesn't fix it. Also test all supported commands yields the errors shown below.

image

image

image

The version number attribute not being updated is a Hubitat thing. It repopulates when the preferences are updated or the driver is reinitialized.

Just click on the "Initialize" command and it will update and ensure you're running the newly updated code.

Double-check your preferences too. The URI in your screenshot is http://null/irrigation/status.json

It shouldn't be null.

I did the initialize and then retried everything with no luck. I am still getting the null as well. My preferences are this:

I found the 'null' :beetle:. :slightly_frowning_face:

It didn't appear when I tested it against my controller. Updating the code to address your 00A3A02 issue exposed it. So, I thank you for the testing.

I'll fix it on my end and push another update.

I appreciate you doing this. Sorry to be a pain in the butt......hate to be "that guy" :grimacing:

1 Like

You're far from being “that guy.” :wink:

AAMOF, your timing was perfect. I started this back in November after my irrigation system was already winterized. I watched the LNK run the controller, but it never actually furned on any solenoids.

I turned my system back on last week (now controlled by WET-IT), so I was just starting to bring this driver forward and try to get it to a 1.0 release. I couldn't really do that without your input. You helped me find a couple of latent :beetle: :beetle:.

v0.1.3.11 is available on Git and HPM.

I know it fixes the 'null' site issue you saw (I had some stale code that wasn't being called until your module/controller firmware hit it). I also fixed the issue with zones 9 and 10 wrapping to zones 1 and 2. The driver can now handle up to 22 zones (Rain Bird's max).

I believe :crossed_fingers:t3: you should get the proper zoneCount and availableStations now.

Take it for a spin and let me know if we've made it around the test track or crashed in turn 2.

We may have crashed in pit row........i clicked Initialize and then test all supported commands. Stoll no available stations listed, an also now the command support has gone wonky.

image

No... Getting Controller Firmware 2.9 is a good sign. What happens when you refresh and/or reinitialize? Command Support is just for diags. We don't need that at the moment. I've seen that with my controller and then when it refreshes, it populates. It has to do with the timing.

Screenshots are close to useless for troubleshooting. Make sure you turn on Log All Events and Debug Logging. The logs are what we need to figure out what's happening, not screenshots.

It's like sending a cell phone pic of your car dashboard vs connecting to the OBDII and reading the codes. "Check Engine" isn't helpful. The actual codes from the ECU is. :wink:

Also... Outside of the command list. Are you able to properly control zones 9 and 10 now? That should be working.

FWIW - I have the same thing occassionally:

image

When I run the get command again, it populates just fine. I might just add a 'retry' to it if we get the '?' responses. The important thing it to verify if you try again, it populates.

That button is only for diags, it doesn't have any influence on the operation or gathering of zones. Like I said in the previous post, the fact that your populating both controller firmware and module firmware is important.

It is stuck in some sort of death loop......it is running non stop. I'd don't think this is normal, right? I know you said photos are worthless, but you can see the repeated commands.....this just keeps running.

How is best to share logs for troubleshooting?

Hmmmm. That's one I haven't seen before.

First, turn off
image

That will quiet the logs so we can get back to sussing out your firmware versions.

That error is date-related. Some firmware versions use a single code to update date/time and others use two, one date, one time. Clearly, you have one that is different from mine. The clock is being reset, but the date in your controller is still off by one day so it keeps retrying. I'll add a guard so it will stop retrying forever if the update fails like this.

This is what it should look like:

Good Log

dev:8252026-04-11 07:00:04.316info[Rain Bird LNK/LNK2 WiFi Module Controller] clockDrift=3 (Clock drift: 3s)
dev:8252026-04-11 07:00:04.041info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=07:00:01 (2026-04-11 07:00:01)
dev:8252026-04-11 03:00:04.437info[Rain Bird LNK/LNK2 WiFi Module Controller] clockDrift=4 (Clock drift: 4s)
dev:8252026-04-11 03:00:04.051info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=03:00:00 (2026-04-10 03:00:00)
dev:8252026-04-11 03:00:03.857info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerDate=2026-04-11 (2026-04-11 23:00:01)
dev:8252026-04-11 03:00:03.089info[Rain Bird LNK/LNK2 WiFi Module Controller] waterBudget=65 (Water budget: 65%)
dev:8252026-04-10 23:00:04.659info[Rain Bird LNK/LNK2 WiFi Module Controller] clockDrift=3 (Clock drift: 3s)
dev:8252026-04-10 23:00:04.381info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=23:00:01 (2026-04-10 23:00:01)
dev:8252026-04-10 19:00:04.424info[Rain Bird LNK/LNK2 WiFi Module Controller] clockDrift=2 (Clock drift: 2s)
dev:8252026-04-10 19:00:04.143info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=19:00:02 (2026-04-10 19:00:02)
dev:8252026-04-10 15:00:04.182info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=15:00:01 (2026-04-10 15:00:01)
dev:8252026-04-10 11:00:04.084info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=11:00:01 (2026-04-10 11:00:01)
dev:8252026-04-10 07:00:04.262info[Rain Bird LNK/LNK2 WiFi Module Controller] clockDrift=3 (Clock drift: 3s)
dev:8252026-04-10 07:00:03.938info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=07:00:01 (2026-04-10 07:00:01)
dev:8252026-04-10 06:20:40.907info[Rain Bird LNK/LNK2 WiFi Module Controller] clockDrift=2 (Clock drift: 2s)
dev:8252026-04-10 06:20:40.634info[Rain Bird LNK/LNK2 WiFi Module Controller] controllerTime=06:20:38 (2026-04-10 06:20:38)
dev:8252026-04-10 06:20:36.800info[Rain Bird LNK/LNK2 WiFi Module Controller] Watering: Fast polling ended; reverting to scheduled refresh.
dev:8252026-04-10 06:20:36.732info[Rain Bird LNK/LNK2 WiFi Module Controller] valve=closed
dev:8252026-04-10 06:20:36.729info[Rain Bird LNK/LNK2 WiFi Module Controller] switch=off
dev:8252026-04-10 06:20:36.719info[Rain Bird LNK/LNK2 WiFi Module Controller] activeZone=0
dev:8252026-04-10 06:20:36.716info[Rain Bird LNK/LNK2 WiFi Module Controller] watering=false
dev:8252026-04-10 06:20:36.712info[Rain Bird LNK/LNK2 WiFi Module Controller] irrigationState=Idle
dev:8252026-04-10 06:20:35.890info[Rain Bird LNK/LNK2 WiFi Module Controller] Controller acknowledged stop all.
dev:8252026-04-10 06:20:34.230info[Rain Bird LNK/LNK2 WiFi Module Controller] Controller reports watering (zone=7).
dev:8252026-04-10 06:20:28.920info[Rain Bird LNK/LNK2 WiFi Module Controller] Controller reports watering (zone=7).
dev:8252026-04-10 06:20:23.680info[Rain Bird LNK/LNK2 WiFi Module Controller] Controller reports watering (zone=7).

The clock sync is minor compared to getting the driver to control the valves.

Are you able to control the valves now, or was that also reverted? We need to get you back where you were when the main issue was zones 9 and 10 not working. I know that's fixed as log as you can control anything. That was a simple clamping issue.

As for how to share the logs, do what I did above. Instead of a screenshot, highlight the log text you want to share and then right-click and copy. You can paste it in as text and use the Hide Details option here to shrink it down. Or, just DM it to me.

Also, what versions of firmware are being reported (controller and module)? The error is real, but without knowing which firmware you're running, I don't know which opcodes are available for us.

Ok, I turned off the time sync. I reenabled the device, clicked initialize and then clicked the test all commands. Following that, I tried zone 1 and then zone 5. Now none of the zones work. My for this entire process are as follows:

Summary

dev:1582026-04-11 03:24:34.914 PM

error

[Rain Bird LNK/LNK2 WiFi Module Controller] runZone() failed: Cannot invoke method toInteger() on null object

dev:1582026-04-11 03:24:34.913 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Command 0x39 is supported by controller

dev:1582026-04-11 03:24:34.819 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Querying command support for 0x39...

dev:1582026-04-11 03:24:34.818 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Current firmware version 2.9 checked against minimum required: 3.0. isLegacyFirmware=true

dev:1582026-04-11 03:24:34.816 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Starting zone 5 for 1 minute(s)

dev:1582026-04-11 03:23:03.571 PM

error

[Rain Bird LNK/LNK2 WiFi Module Controller] runZone() failed: Cannot invoke method toInteger() on null object

dev:1582026-04-11 03:23:03.567 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Command 0x39 is supported by controller

dev:1582026-04-11 03:23:03.468 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Querying command support for 0x39...

dev:1582026-04-11 03:23:03.466 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Current firmware version 2.9 checked against minimum required: 3.0. isLegacyFirmware=true

dev:1582026-04-11 03:23:03.465 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Starting zone 1 for 1 minute(s)

dev:1582026-04-11 03:22:38.051 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] commandSupport=Supported: none | Unsupported: none | Unknown: 0x02=?, 0x03=?, 0x04=?, 0x05=?, 0x10=?, 0x12=?, 0x30=?, 0x32=?, 0x36=?, 0x37=?, 0x38=?, 0x39=?, 0x3A=?, 0x3E=?, 0x3F=?, 0x40=?, 0x42=?, 0x48=?, 0x49=?, 0x4A=?, 0x4B=?, 0x4C=? (Command support diagnostic complete.)

dev:1582026-04-11 03:22:38.039 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:38.031 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:38.022 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:38.013 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:38.003 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.995 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.986 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.976 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.967 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.958 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.949 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.937 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.927 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.919 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.910 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.893 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.884 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.875 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.866 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.857 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.848 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.839 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.829 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] Adapter firmware check failed: status code: 404, reason phrase: Not Found

dev:1582026-04-11 03:22:37.818 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] moduleFirmwareVersion=unknown (Module firmware unknown)

dev:1582026-04-11 03:22:37.816 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:37.806 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] Running full command and firmware diagnostic...

dev:1582026-04-11 03:22:27.904 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Zones: None | Rain Delay: 0 | FailCount: 0

dev:1582026-04-11 03:22:27.902 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.893 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting controller time...

dev:1582026-04-11 03:22:27.891 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.880 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting controller date...

dev:1582026-04-11 03:22:27.879 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Skipping getControllerEventTimestamp(): requires firmware ≥4.0

dev:1582026-04-11 03:22:27.877 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Current firmware version 2.9 checked against minimum required: 4.0. isLegacyFirmware=true

dev:1582026-04-11 03:22:27.876 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getAvailableStations(): No response

dev:1582026-04-11 03:22:27.874 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.866 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Current firmware version 2.9 checked against minimum required: 3.0. isLegacyFirmware=true

dev:1582026-04-11 03:22:27.864 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting available stations (fw=2.9)...

dev:1582026-04-11 03:22:27.863 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Skipping getZoneSeasonalAdjustments(): requires firmware ≥3.1

dev:1582026-04-11 03:22:27.861 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Current firmware version 2.9 checked against minimum required: 3.1. isLegacyFirmware=true

dev:1582026-04-11 03:22:27.860 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting per-zone seasonal adjustments...

dev:1582026-04-11 03:22:27.859 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getRainDelay: No valid response

dev:1582026-04-11 03:22:27.857 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.850 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting current rain delay...

dev:1582026-04-11 03:22:27.849 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getWaterBudget: No valid response

dev:1582026-04-11 03:22:27.847 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.834 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting water budget...

dev:1582026-04-11 03:22:27.833 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getRainSensorState(): No valid response

dev:1582026-04-11 03:22:27.831 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.825 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting rain sensor state...

dev:1582026-04-11 03:22:27.823 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] No compatible controller-state opcode (4C/3F) supported; skipping zone status refresh.

dev:1582026-04-11 03:22:27.822 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getCommandSupport(): No valid response

dev:1582026-04-11 03:22:27.820 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.812 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Querying command support for 0x3F...

dev:1582026-04-11 03:22:27.811 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getCommandSupport(): No valid response

dev:1582026-04-11 03:22:27.809 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.799 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Querying command support for 0x4C...

dev:1582026-04-11 03:22:27.798 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.787 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.778 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.765 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Starting driver self-test sequence...

dev:1582026-04-11 03:22:27.225 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] Refresh scheduled every 5 minute(s) (offset 1) using CRON '0 1/5 * ? * * *'.

dev:1582026-04-11 03:22:27.207 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Module firmware version unavailable

dev:1582026-04-11 03:22:27.206 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:22:27.095 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Module firmware probe via status.json skipped (status code: 404, reason phrase: Not Found)

dev:1582026-04-11 03:22:27.080 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] No change for serialNumber (still 4231A7B457820000)

dev:1582026-04-11 03:22:26.969 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] No change for controllerFirmwareVersion (still 2.9)

dev:1582026-04-11 03:22:26.968 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] No change for model (still RainBird 0007)

dev:1582026-04-11 03:22:26.966 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Parsed legacy 0x82 → modelID=0007, firmware=2.9

dev:1582026-04-11 03:22:26.872 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting controller identity (model/firmware/serial)...

dev:1582026-04-11 03:22:26.575 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Starting driver self-test sequence...

dev:1582026-04-11 03:22:26.540 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Controller IP = 192.168.4.28, Password = ********

dev:1582026-04-11 03:22:26.539 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] driverInfo=Rain Bird LNK/LNK2 WiFi Module Controller v0.1.3.11 (2026.04.08)

in the Current States portion, the Controller Firmware is said to be 2.9. Module firmware "unknown"

Also.....FWIW, I have the LNK Wifi Module (light gray) for my ESP-Me....not the LNK2 module (dark gray).

Just pushed v0.1.3.15 to Git and HPM.

:star2: What’s New in v0.1.3.15

  • Fixed clock sync retry loop by suppressing false ±86400-second drift after opcode 11 (Set Time)
  • Improved command support probing reliability by retrying ACK-only opcode 04XX responses.
  • Hardened opcode 04XX command-support detection
  • Added dynamic runtime controller-state opcode-family inference (4C vs 3F)

The “death spiral” should be a thing of the past. :wink: That infinite loop was a new one for me. There's something different in your controller firmware than I've seen. I still really need to know which version you have for both the controller and module.

The commandSupport diagnostic should work for you now. I add retry if the controller is busy so you should see something like this:

commandSupport=Supported: 0x02=true, 0x03=true, 0x04=true, 0x05=true, 0x10=true, 0x12=true, 0x3F=true, 0x30=true, 0x36=true, 0x37=true, 0x38=true, 0x39=true, 0x3A=true, 0x40=true, 0x42=true, 0x3E=true, 0x48=true | Unsupported: 0x4C=false, 0x32=false, 0x49=false, 0x4A=false, 0x4B=false | Unknown: none (Command support diagnostic complete.)

instead of all those unknowns like this:

commandSupport=Supported: 0x02=?, 0x03=?, 0x04=?, 0x05=?, 0x10=?, 0x12=?, 0x30=?, 0x36=?, 0x37=?, 0x38=?, 0x39=?, 0x3A=?, 0x3E=?, 0x3F=?, 0x40=?, 0x42=?, 0x48=? | Unsupported: 0x32=?, 0x49=?, 0x4A=?, 0x4B=?, 0x4C=? | Unknown: none (Command support diagnostic complete.)

I also reordered the controller capability probe order so it is now queried by capability group rather than opcode order.

OpCode Command Group
02,03,04,05 identity / firmware / capability handler
10,12 clock / date
4C,3F controller state (primary first)
30,32 configuration
36,37,38,39,3A program runtime ops
3E sensor
40,42 irrigation control
48,49,4A,4B extended telemetry

The theory here, from what I can gather from other implementations is this should remove

  • Hybrid fallback oscillation (v2.9)
  • LNK2 secure-mode stub masking
  • Controller-state opcode flip-flop selection

Give it a whirl and let me know what you're seeing. Unfortunately, I'm at the "works great here" stage and can't test against your controller.

in the Current States portion, the Controller Firmware is said to be 2.9. Module firmware "unknown"

Also.....FWIW, I have the LNK Wifi Module (light gray) for my ESP-Me....not the LNK2 module (dark gray).

Updated.

Death Spiral is Gone.

Still no zone functions at all.

Command support still shows all the question marks.

Here are my logs from Initialize - All Commands - Run Zone 1

Summary

dev:1582026-04-11 03:39:06.930 PM

error

[Rain Bird LNK/LNK2 WiFi Module Controller] runZone() failed: null

dev:1582026-04-11 03:39:06.929 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Starting zone 1 for 1 minute(s)

dev:1582026-04-11 03:39:00.426 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] commandSupport=Supported: none | Unsupported: none | Unknown: 0x02=?, 0x03=?, 0x04=?, 0x05=?, 0x10=?, 0x12=?, 0x4C=?, 0x3F=?, 0x30=?, 0x32=?, 0x36=?, 0x37=?, 0x38=?, 0x39=?, 0x3A=?, 0x40=?, 0x42=?, 0x3E=?, 0x48=?, 0x49=?, 0x4A=?, 0x4B=? (Command support diagnostic complete.)

dev:1582026-04-11 03:39:00.422 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.413 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.404 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.395 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.386 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.378 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.368 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.359 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.350 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.341 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.332 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.323 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.291 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.282 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.273 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.263 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.253 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.240 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.231 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.221 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.212 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.203 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.194 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Module firmware check failed: status code: 404, reason phrase: Not Found

dev:1582026-04-11 03:39:00.184 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] moduleFirmwareVersion=unknown (Module firmware unknown)

dev:1582026-04-11 03:39:00.182 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:39:00.172 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] Running full command and firmware diagnostic...

dev:1582026-04-11 03:38:43.166 PM

error

[Rain Bird LNK/LNK2 WiFi Module Controller] Refresh failed (1): null

dev:1582026-04-11 03:38:43.162 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:43.150 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:43.140 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:43.131 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Starting driver self-test sequence...

dev:1582026-04-11 03:38:42.621 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] Refresh scheduled every 5 minute(s) (offset 0) using CRON '0 0/5 * ? * * *'.

dev:1582026-04-11 03:38:42.588 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Module firmware version unavailable

dev:1582026-04-11 03:38:42.587 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.574 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Module firmware probe via status.json skipped (status code: 404, reason phrase: Not Found)

dev:1582026-04-11 03:38:42.565 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getCommandSupport(): No valid response

dev:1582026-04-11 03:38:42.564 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.557 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Querying command support for 0x3F...

dev:1582026-04-11 03:38:42.556 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] getCommandSupport(): No valid response

dev:1582026-04-11 03:38:42.554 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.545 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Querying command support for 0x4C...

dev:1582026-04-11 03:38:42.544 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] serialNumber=Unavailable (Controller serial number: Unavailable)

dev:1582026-04-11 03:38:42.539 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.531 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] controllerFirmwareVersion=Unknown (Controller firmware version: Unknown)

dev:1582026-04-11 03:38:42.525 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] model=RainBird Unknown (Controller model: Rain Bird Unknown)

dev:1582026-04-11 03:38:42.523 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] ModelAndVersionRequest failed or unexpected: null

dev:1582026-04-11 03:38:42.522 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.514 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Requesting controller identity (model/firmware/serial)...

dev:1582026-04-11 03:38:42.512 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.503 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.494 PM

warn

[Rain Bird LNK/LNK2 WiFi Module Controller] sendRainbirdCommand() exception: status code: 503, reason phrase: Service Unavailable

dev:1582026-04-11 03:38:42.484 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Starting driver self-test sequence...

dev:1582026-04-11 03:38:42.460 PM

debug

[Rain Bird LNK/LNK2 WiFi Module Controller] Controller IP = 192.168.4.28, Password = ********

dev:1582026-04-11 03:38:42.459 PM

info

[Rain Bird LNK/LNK2 WiFi Module Controller] driverInfo=Rain Bird LNK/LNK2 WiFi Module Controller v0.1.3.15 (2026.04.11)

I only have one controller, but I do have both modules. The modules only control the Wi-Fi capability. Everything we're running into is related to the controller firmware. That's how I ended up with two modules. I was hoping the module would give me “newer” firmware; it doesn't. I learned the hard way here.

The controllers are not field upgradable.

Stick with the older module. If you look through the thread, you'll see what @rgr unfortunately learned about the module. Whatever you do, don't update the module's firmware. Stick with the LNK. Updating the module firmware locks you out of local control.

I believe 0.1.3.15 finally addresses the firmware version flapping he and I were seeing back in January. The module and controller firmware are now separate attributes. Looking back, that “flapping” was the driver seeing both attributes and conflating them into a single version.