Skip to content

rbickel/ICV6-STA-Script

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ICV6 WiFi Configuration Tool

Why This Script Exists

The Maxspect ICV6 aquarium controller uses the Syna-G mobile app to connect the device to a home WiFi network. The app's built-in "Transmitting" feature (SmartConfig / EspTouch) frequently fails — it hangs indefinitely without ever completing the WiFi provisioning.

This script (icv6_wifi_config.py) bypasses the Syna-G app entirely. It was built by reverse-engineering the Syna-G APK and the ICV6's ESP8266 WiFi module firmware. The ICV6 exposes an AT command interface over UDP port 1025 when in AP (Access Point) mode. The script sends AT commands directly to the device to configure the home WiFi SSID and password, set a hostname, and reboot the device — all from the command line.

Technical Background

  • The ICV6 WiFi module is an ESP8266 running custom Maxspect/Lanvee firmware (branded "W20S").
  • AT commands are sent via UDP on port 1025, terminated with \r\n.
  • Query syntax: at+command=? — Set syntax: at+command=value
  • The device operates in sta_ap mode: it runs its own AP and connects to your home network simultaneously.

Prerequisites

  • Python 3.10+ (uses str | None type hints) — no third-party dependencies, stdlib only.
  • Linux — the script uses the ip route get command for source IP detection. It will still work on macOS/Windows if your computer only has one network interface active, but the source IP binding logic is Linux-specific.

Step 1: Put the ICV6 in AP Mode

  1. Long-press the power button on the ICV6 for more than 5 seconds.
  2. Hold until the red LED becomes steady (stops blinking).
  3. The device is now broadcasting its own WiFi access point.

Step 2: Connect Your Computer to the ICV6 AP

  1. Open your computer's WiFi settings and scan for available networks.
  2. Look for a network named maxspect-XXXXXXXXXXXX (e.g., maxspect-I6A1B014788). The suffix is the device's serial number.
  3. Connect to it — there is no password (open network).
  4. Your computer will get an IP in the 192.168.5.x range (DHCP pool: 192.168.5.100192.168.5.110). The device gateway is 192.168.5.1.

Tip: If you also have an Ethernet cable plugged in, the script handles dual-interface routing automatically by binding to the correct source IP.

Step 3: Run the Script

Configure WiFi (full provisioning + reboot)

python3 icv6_wifi_config.py --ssid "YourWiFiName" --password "YourWiFiPassword"

This runs a 6-step process:

  1. Verify device — confirms the ICV6 is reachable at 192.168.5.1
  2. Read current config — displays existing STA credentials and connection status
  3. Set WiFi credentials — writes the SSID and password to the device
  4. Ensure WiFi mode — confirms or sets sta_ap mode (AP + STA simultaneously)
  5. Set hostname — sets the device hostname (default: maxspect-icv6)
  6. Reboot — restarts the device to apply settings and connect to your home network

After reboot (~10 seconds), the device will attempt to connect to your home WiFi while keeping its own AP active.

Configure WiFi without rebooting

python3 icv6_wifi_config.py --ssid "YourWiFiName" --password "YourWiFiPassword" --no-reboot

Saves the credentials on the device but does not reboot. Useful for verifying settings before applying. You can reboot manually later:

python3 icv6_wifi_config.py --at "at+reboot"

All Options

Option Description
--ssid SSID Home WiFi network name to connect the ICV6 to. Required for provisioning (must be paired with --password).
--password PASSWORD Home WiFi password. Required when --ssid is specified.
--hostname NAME Device hostname. Default: maxspect-icv6. This is the name the device will use on your home network (visible in your router's client list).
--ip IP Device IP address. Default: 192.168.5.1. Only change this if the ICV6 AP uses a different gateway (e.g., 192.168.4.1 after a factory reset).
--status Display the full device configuration (firmware version, WiFi mode, AP/STA settings, MAC addresses, hostname, etc.) and exit.
--no-reboot Save credentials without rebooting. The device will not attempt to connect to your home WiFi until it is rebooted.
--at CMD Send a raw AT command to the device and print the response. For advanced use / debugging.

Usage Examples

Show device status

python3 icv6_wifi_config.py --status

Sample output:

=======================================================
  ICV6 Device Status
=======================================================
  Firmware Version    : w20s,v1.02(Oct 28 2015)
  WiFi Mode           : sta_ap
  AP SSID/Config      : maxspect-I6A1B014788,,open,1,show
  AP IP Address       : 192.168.5.1,255.255.255.0,192.168.5.1
  STA WiFi Config     : RbklHome_IoT,Bangkok2015!
  STA Status          : got_ip
  STA IP Address      : 192.168.50.xxx
  MAC Addresses       : 3c:e9:0e:cf:2f:b9,3e:e9:0e:cf:2f:b9
  Hostname            : maxspect-icv6
  ...
=======================================================

Provision with a custom hostname

python3 icv6_wifi_config.py --ssid "MyNetwork" --password "MySecret" --hostname "reef-light-1"

Send a raw AT command

# Query firmware version
python3 icv6_wifi_config.py --at "at+ver=?"

# Query current WiFi mode
python3 icv6_wifi_config.py --at "at+wifi_mode=?"

# Query STA connection status
python3 icv6_wifi_config.py --at "at+sta_status=?"

Use a non-default device IP

python3 icv6_wifi_config.py --ip 192.168.4.1 --status

Finding the Device After Provisioning

Once the device reboots and connects to your home WiFi, it will have a new IP assigned by your router. To discover it, send a $identify UDP broadcast on your home network:

python3 -c "
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.settimeout(5)
s.sendto(b'\$identify', ('255.255.255.255', 1025))
print(s.recvfrom(1024))
"

The response contains the device's new IP, MAC address, and firmware version.

You can also check your router's DHCP client list for a device named maxspect-icv6 (or whatever hostname you set).


Known AT Commands Reference

Command Query Set Description
at+ver at+ver=? Firmware version
at+wifi_mode at+wifi_mode=? at+wifi_mode=sta_ap WiFi mode (ap, sta, sta_ap)
at+sta_conf at+sta_conf=? at+sta_conf=SSID,PASSWORD STA (home WiFi) credentials
at+sta_status at+sta_status=? STA connection state (got_ip, connecting, ap_not_found)
at+sta_ip at+sta_ip=? STA IP address (from home router)
at+ap_conf at+ap_conf=? at+ap_conf=NAME,,open,1,show AP configuration
at+ap_ip at+ap_ip=? at+ap_ip=IP,MASK,GW AP IP address
at+mac at+mac=? MAC addresses (STA, AP)
at+hostname at+hostname=? at+hostname=NAME Device hostname
at+mode at+mode=? at+mode=VALUE Network mode (TCP/UDP)
at+port at+port=? at+port=VALUE TCP server port
at+uart_conf at+uart_conf=? UART configuration
at+smartconf at+smartconf=? SmartConfig state
at+reboot at+reboot Reboot the device
at+default at+default Factory reset (use with caution!)

Warning: at+default performs a full factory reset. The AP SSID will change to lanvee_cf2fb9, the AP IP will change to 192.168.4.1, and all saved WiFi credentials will be erased.


Troubleshooting

Problem Solution
Device not reachable Make sure you are connected to the ICV6 AP WiFi (maxspect-*). Check with ping 192.168.5.1.
(no response) on AT commands The device may not be in AP mode. Long-press the power button >5 seconds until the red LED is steady.
Script works but device doesn't connect to home WiFi Verify SSID and password are correct. The ICV6 only supports 2.4 GHz networks (ESP8266 limitation).
Device IP changed after factory reset Use --ip 192.168.4.1 — the factory-default AP IP is 192.168.4.1, not 192.168.5.1.
UDP packets lost / intermittent timeouts If both Ethernet and WiFi are connected, the script auto-binds to the correct source IP. If issues persist, disconnect Ethernet temporarily.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages