I made this binding to connect my La Crosse TX60-U sensors to openHAB. It also works with the La Crosse C84612 Weather stations (not yet tested). For the previous 3 years I was using the Python script weewx-interceptor modified to send the received sensor values into openHAB via @Piotr_Bojko’s Webhook binding. However, weewx-interceptor would only work with Python 2 and after upgrading my openHAB server, Python 2 was no longer available.
Using GitHub Copilot, I was able to quickly translate the Python code from weewx-interceptor that handled low-level communication with the La Crosse GW1000U ERF gateway into Java and thus allow openHAB to natively support these devices.
This binding fully emulates registering the gateway and the TX60 sensors for new or recycled devices. Registering a weather station that was previously registered with the La Crosse server should work but has not been tested. The best chance for success when using this binding is to use it with a weather station or sensors that were setup on and communicating with the lacrossealertsmobile.com server.
Note that both the C84612 weather station and the TX60-U sensors are discontinued but can still be found on eBay in limited quantities. The TX60-U sensor can be found in a kit containing the GW1000U gateway under part number 926-25101-GP. Individual sensors seem to be very hard to find. It is not recommended to purchase these devices now unless the price is very low. It is no longer possible to register/re-register a gateway with the La Crosse server. If still using the La Crosse server, do not factory reset any of the devices that are currently registered as it might not be possible to re-register with them.
La Crosse Wireless Weather Station: Wind Rain Temp Model #C84612
La Crosse 926-25101-GP (TX60-U sensor and GW1000U gateway)
Use the following instructions to configure the devices to work with openHAB:
-
Create the appropriate Thing and enter the hex serial number for the gateway and for the TX-60 sensors all of the serial numbers found on the stickers on the back. If the sensors are already registered with the gateway, they must be entered in the same order as recognized by the gateway. Enter the serial number for the weather station if available.
-
As outlined in post #2, use the gateway configuration tool to change the gateway’s Proxyserver IP to your openHAB server’s IP address and port 8080 and save the configuration. Then remove and re-apply power to the gateway. The gateway LED should blink and if previously registered will eventually become solid red. Check
http://$OPENHAB_IP:8080/request.breqto verify that the gateway is listed and shows as online. If the gateway is not registered, the LED will blink in groups of 4 blinks. In this case, press the gateway button briefly to initiate registration. The LED will turn solid red or blink and then turn to solid red. Upon rebooting the gateway, the LED should blink and then eventually turn solid red. -
If the sensors or weather station are already registered to the gateway, the data they periodically transmit should now flow into the binding. At this point configuration is complete.
-
If the weather station is not currently registered to the gateway, follow its instructions to register it. If the TX-60 sensors are not registered to the gateway and the sensor is not displaying a temperature, they must now be registered in the order that the serial numbers are entered in the Thing. To register with the sensor near the gateway, press the button on the sensor and hold for one second and then immediately press and release the button on the gateway. The LEDs on the gateway will blink and then the sensor will reboot and start displaying the temperature if registration was successful. If the sensor is not registered but still displays a temperature it must be reset by holding the button until all segments on the display illuminate. After this remove and replace the batteries and then attempt registration again.
-
If it is necessary to factory reset the gateway, first remove power to it. Then hold the button and re-apply the power. While continuing to hold the button wait until the red LED comes on, then goes off and then comes on again. Then release the button and the gateway should reboot to factory settings. Now repeat steps 2 thru 4 to re-register the gateway and weather station or sensors.
And now the standard README…
La Crosse Binding
This binding receives data from La Crosse C84612 weather stations or TX60-U temperature sensors via the hardwired Ethernet GW1000U ERF gateway.
Please note that this binding has not yet been tested with the La Crosse C84612 weather station.
The GW1000U must be configured to use the IP address and web server port of the openHAB server as its Proxyserver in order to use this binding.
The Gateway Advanced Setup (GAS) utility from La Crosse is used to change the gateway’s settings.
After this setting is changed in the gateway all data transmitted will be re-directed to openHAB.
Note that this also prevents any of these devices used with openHAB from using La Crosse’s online services (lacrossealertsmobile.com).
The routines used to allow communication with the gateway were adapted from weewx-interceptor and translated into Java using GitHub Copilot.
Most of the knowledge on how the GW1000U communicates was originally discussed here: https://www.wxforum.net/index.php?topic=14299.0
Discovery
Discovery is not supported. All things must be added manually.
The LacrosseInterceptorServlet can be accessed at http://$OPENHAB_IP:8080/request.breq to verify that it is active.
Any gateways that are configured to connect to openHAB will be displayed here along with the hex serial number that is needed for the Thing configuration. The hex serial number value can also be found on the gateway’s web page.
The easiest way to obtain the serial number for the C84612 weather station is to register it with La Crosse Alerts and then view the serial number on their Device Settings page.
If the weather station was previously registered with the La Crosse Alerts, and is still registered with the gateway then entering the station serial number is optional. The default value of 0000000000000000 should work.
The serial number for a TX60-U sensor can be found on the sticker on the back of the sensor.
Once the things are configured properly, they will change to ONLINE status upon receipt of data from the gateway. Note however the status will never change to OFFLINE.
Supported Things
C84612 Weather Station
Thing type ID: weatherstation
Receives all measurements from the weather station and its outdoor sensors (Wind, Rain and Temp).
The weather station cannot be used along with TX60-U sensors on a single GW1000U gateway.
Using the weather station and TX60-U sensors requires at least 2 gateways.
Thing Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| gatewaySn | text | yes | The serial number (8 chars hex) of the GW1000U gateway hosting the weather station, found on the gateway’s web page |
| stationSn | text | yes | The serial number (16 chars) of the weather station, default 0000000000000000 |
Channels
The C84612 Weather Station has the following channels (All channels are read-only):
| Channel ID | Label | Item Type | Description |
|---|---|---|---|
| temperatureIn | Indoor Temperature | Number:Temperature | Measured indoor temperature (°C) |
| humidityIn | Indoor Humidity | Number:Dimensionless | Measured indoor humidity (%) |
| temperatureOut | Outdoor Temperature | Number:Temperature | Measured outdoor temperature (°C) |
| humidityOut | Outdoor Humidity | Number:Dimensionless | Measured outdoor humidity (%) |
| windChill | Wind Chill | Number:Temperature | Calculated wind chill temperature (°C) |
| rainTotal | Total Rainfall | Number:Length | Total rainfall measured (cm) |
| rain | Rainfall | Number:Length | Rainfall over the latest period (cm) |
| windDirection | Wind Direction | Number:Angle | Current wind direction in degrees (1-360) |
| windSpeed | Wind Speed | Number:Speed | Current wind speed (km/h) |
| gustDirection | Gust Direction | Number:Angle | Current gust direction in degrees (1-360) |
| gustSpeed | Gust Speed | Number:Speed | Current wind gust speed (km/h) |
| barometer | Barometric Pressure | Number:Pressure | Current barometric pressure (mbar) |
| rfSignalStrength | RF Signal Strength | Number:Dimensionless | RF signal strength as received at gateway (%) |
| status | Status | String | Status of the weather station?? |
| forecast | Forecast | String | Weather forecast?? |
| lastSeenDateTime | Last Seen | DateTime | Last time data was received |
TX60-U Sensor
Thing type ID: sensor
Supports up to 5 TX60-U sensors per gateway, each as a channel group.
The sensors display the temperature reading in °F only.
If the sensors were previously connected to the gateway, the sensor serial number of each sensor must be entered into the same number configuration parameter as currently registered in the gateway.
Thing Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| gatewaySn | text | yes | The serial number (8 chars hex) of the GW1000U gateway hosting the sensors, found on the gateway’s web page |
| sensor1sn | text | yes | Serial number (16 chars) of the first TX60-U sensor |
| sensor2sn | text | no | Serial number (16 chars) of the second TX60-U sensor (optional) |
| sensor3sn | text | no | Serial number (16 chars) of the third TX60-U sensor (optional) |
| sensor4sn | text | no | Serial number (16 chars) of the fourth TX60-U sensor (optional) |
| sensor5sn | text | no | Serial number (16 chars) of the fifth TX60-U sensor (optional) |
Channel Groups
Each sensor (1-5) provides the following channels (All channels are read-only):
| Channel ID | Label | Item Type | Description |
|---|---|---|---|
| temperature | Temperature | Number:Temperature | Temperature measured at the sensor (°F) |
| temperatureProbe | External Temperature | Number:Temperature | Temperature measured by the external probe (°F) |
| humidity | Humidity | Number:Dimensionless | Humidity measured at the sensor (%) |
| heatIndex | Heat Index | Number:Temperature | Calculated heat index (°F) |
| dewPoint | Dew Point | Number:Temperature | Calculated dew point (°F) |
| rfSignalStrength | RF Signal Strength | Number:Dimensionless | RF signal strength as received at gateway (%) |
| batteryStatus | Battery Status | String | Battery status (OK or Low) Does not seem to work |
| lastSeenDateTime | Last Seen DateTime | DateTime | Last time data was received from the sensor |
Full Example
lacrosse.things Example
lacrosse:weatherstation:ws1 "Weather Station" [ gatewaySn="AABBCCDD", stationSn="1234567890ABCDEF" ]
lacrosse:sensor:mysensors "Temperature Sensors" [ gatewaySn="AABBCCDD", sensor1sn="1111222233334444", sensor2sn="5555666677778888" ]
lacrosse.items Example
Note that the expire directives will cause the state of the items to change to UNDEF if no updates are received for more than 45 minutes.
// Weather Station Items
Number:Temperature Weather_Indoor_Temp "Indoor Temperature [%.1f %unit%]" <temperature> { channel="lacrosse:weatherstation:ws1:temperatureIn", expire="45m" }
Number:Dimensionless Weather_Indoor_Humidity "Indoor Humidity [%d %%]" <humidity> { channel="lacrosse:weatherstation:ws1:humidityIn", expire="45m" }
Number:Temperature Weather_Outdoor_Temp "Outdoor Temperature [%.1f %unit%]" <temperature> { channel="lacrosse:weatherstation:ws1:temperatureOut", expire="45m" }
Number:Dimensionless Weather_Outdoor_Humidity "Outdoor Humidity [%d %%]" <humidity> { channel="lacrosse:weatherstation:ws1:humidityOut", expire="45m" }
Number:Temperature Weather_Wind_Chill "Wind Chill [%.1f %unit%]" { channel="lacrosse:weatherstation:ws1:windChill", expire="45m" }
Number:Length Weather_Rain_Total "Total Rainfall [%.1f %unit%]" { channel="lacrosse:weatherstation:ws1:rainTotal", expire="45m" }
Number:Length Weather_Rain "Rainfall [%.1f %unit%]" { channel="lacrosse:weatherstation:ws1:rain", expire="45m" }
Number:Angle Weather_Wind_Direction "Wind Direction [%d %unit%]" { channel="lacrosse:weatherstation:ws1:windDirection", expire="45m" }
Number:Speed Weather_Wind_Speed "Wind Speed [%.1f %unit%]" { channel="lacrosse:weatherstation:ws1:windSpeed", expire="45m" }
Number:Angle Weather_Gust_Direction "Gust Direction [%d %unit%]" { channel="lacrosse:weatherstation:ws1:gustDirection", expire="45m" }
Number:Speed Weather_Gust_Speed "Gust Speed [%.1f %unit%]" { channel="lacrosse:weatherstation:ws1:gustSpeed", expire="45m" }
Number:Pressure Weather_Barometer "Barometric Pressure [%.1f %unit%]" { channel="lacrosse:weatherstation:ws1:barometer", expire="45m" }
Number:Dimensionless Weather_RF_Signal "RF Signal Strength [%d %%]" { channel="lacrosse:weatherstation:ws1:rfSignalStrength", expire="45m" }
String Weather_Status "Status [%s]" { channel="lacrosse:weatherstation:ws1:status", expire="45m" }
String Weather_Forecast "Forecast [%s]" { channel="lacrosse:weatherstation:ws1:forecast", expire="45m" }
DateTime Weather_Last_Seen "Last Seen [%1$tA, %1$tm-%1$td-%1$tY %1$tl:%1$tM %1$tp]" { channel="lacrosse:weatherstation:ws1:lastSeenDateTime" }
// TX60-U Sensor 1 Items
Number:Temperature TX60U1_Temperature "Sensor 1 Temperature [%.1f %unit%]" <temperature> { channel="lacrosse:sensor:mysensors:sensor1#temperature", expire="45m" }
Number:Temperature TX60U1_External_Temperature "Sensor 1 External Temp [%.1f %unit%]" <temperature> { channel="lacrosse:sensor:mysensors:sensor1#temperatureProbe", expire="45m" }
Number:Dimensionless TX60U1_Humidity "Sensor 1 Humidity [%d %%]" <humidity> { channel="lacrosse:sensor:mysensors:sensor1#humidity", expire="45m" }
Number:Temperature TX60U1_Heat_Index "Sensor 1 Heat Index [%.1f %unit%]" { channel="lacrosse:sensor:mysensors:sensor1#heatIndex", expire="45m" }
Number:Temperature TX60U1_Dew_Point "Sensor 1 Dew Point [%.1f %unit%]" { channel="lacrosse:sensor:mysensors:sensor1#dewPoint", expire="45m" }
Number:Dimensionless TX60U1_RF_Signal "Sensor 1 RF Signal [%d %%]" { channel="lacrosse:sensor:mysensors:sensor1#rfSignalStrength", expire="45m" }
String TX60U1_Battery_Status "Sensor 1 Battery [%s]" { channel="lacrosse:sensor:mysensors:sensor1#batteryStatus" }
DateTime TX60U1_Last_Seen "Sensor 1 Last Seen [%1$tA, %1$tm-%1$td-%1$tY %1$tl:%1$tM %1$tp]" { channel="lacrosse:sensor:mysensors:sensor1#lastSeenDateTime" }
// TX60-U Sensor 2 Items
Number:Temperature TX60U2_Temperature "Sensor 2 Temperature [%.1f %unit%]" <temperature> { channel="lacrosse:sensor:mysensors:sensor2#temperature", expire="45m" }
Number:Temperature TX60U2_External_Temperature "Sensor 2 External Temp [%.1f %unit%]" <temperature> { channel="lacrosse:sensor:mysensors:sensor2#temperatureProbe", expire="45m" }
Number:Dimensionless TX60U2_Humidity "Sensor 2 Humidity [%d %%]" <humidity> { channel="lacrosse:sensor:mysensors:sensor2#humidity", expire="45m" }
Number:Temperature TX60U2_Heat_Index "Sensor 2 Heat Index [%.1f %unit%]" { channel="lacrosse:sensor:mysensors:sensor2#heatIndex", expire="45m" }
Number:Temperature TX60U2_Dew_Point "Sensor 2 Dew Point [%.1f %unit%]" { channel="lacrosse:sensor:mysensors:sensor2#dewPoint", expire="45m" }
Number:Dimensionless TX60U2_RF_Signal "Sensor 2 RF Signal [%d %%]" { channel="lacrosse:sensor:mysensors:sensor2#rfSignalStrength", expire="45m" }
String TX60U2_Battery_Status "Sensor 2 Battery [%s]" { channel="lacrosse:sensor:mysensors:sensor2#batteryStatus" }
DateTime TX60U2_Last_Seen "Sensor 2 Last Seen [%1$tA, %1$tm-%1$td-%1$tY %1$tl:%1$tM %1$tp]" { channel="lacrosse:sensor:mysensors:sensor2#lastSeenDateTime" }
// Add more TX60-U sensor items as needed
lacrosse.sitemap Example
sitemap lacrosse label="La Crosse" {
Frame label="Weather Station" {
Text item=Weather_Indoor_Temp icon="temperature"
Text item=Weather_Indoor_Humidity icon="humidity"
Text item=Weather_Outdoor_Temp icon="temperature"
Text item=Weather_Outdoor_Humidity icon="humidity"
Text item=Weather_Wind_Chill icon="temperature_cold"
Text item=Weather_Rain_Total icon="rain"
Text item=Weather_Rain icon="rain"
Text item=Weather_Wind_Direction icon="wind"
Text item=Weather_Wind_Speed icon="wind"
Text item=Weather_Gust_Direction icon="wind"
Text item=Weather_Gust_Speed icon="wind"
Text item=Weather_Barometer icon="pressure"
Text item=Weather_RF_Signal icon="qualityofservice"
Text item=Weather_Status
Text item=Weather_Forecast
Text item=Weather_Last_Seen icon="time"
}
Frame label="TX60-U Sensor 1" {
Text item=TX60U1_Temperature icon="temperature"
Text item=TX60U1_External_Temperature icon="temperature"
Text item=TX60U1_Humidity icon="humidity"
Text item=TX60U1_Heat_Index icon="temperature_hot"
Text item=TX60U1_Dew_Point icon="temperature"
Text item=TX60U1_RF_Signal icon="qualityofservice"
Text item=TX60U1_Battery_Status icon="batterylevel"
Text item=TX60U1_Last_Seen icon="time"
}
Frame label="TX60-U Sensor 2" {
Text item=TX60U2_Temperature icon="temperature"
Text item=TX60U2_External_Temperature icon="temperature"
Text item=TX60U2_Humidity icon="humidity"
Text item=TX60U2_Heat_Index icon="temperature_hot"
Text item=TX60U2_Dew_Point icon="temperature"
Text item=TX60U2_RF_Signal icon="qualityofservice"
Text item=TX60U2_Battery_Status icon="batterylevel"
Text item=TX60U2_Last_Seen icon="time"
}
// Add more TX60-U sensor frames as needed
}
Changelog
Version 0.1
- Initial Add-on Marketplace release
Version 0.2
- Implement TX-60 sensor registration and some small fixes
Resources
Source code: openhab-addons/bundles/org.openhab.binding.lacrosse at lacrosse · mlobstein/openhab-addons · GitHub



