Thanks for updating to include the rain rate for the WS90. The GW2001 is a combination of the GW2000 hub and the WS90 7 in 1 sensor (array). I mention this distinction because I foresee a potential conflict. The GW2000 is compatible with the full range of Ecowitt sensors including other rain guages.
As further evidence of the potential for conflict, I found this in the Ecowitt wiki under the GW2000
The GW2000 console (gateway) (firmware 2.1.1, 03 March 2022) can also display a classic rain sensor (WH65, WH40) synoptically when using a WS90 combo sensor array with haptic (piezoelectric) rain gauge.
The null values were only for the attributes because they aren't handled for the WS90 _piezo data. The values are present in the state variables.
Updating the ,groovy, I'm able to get all the values into attributes.
I declared new variables:
// WS90 7 in 1 Sensor
// WS90 Attributes that have been created for conversion between measurement standards
attribute "rRate", "number"
attribute "hRain", "number"
attribute "dRain", "number"
attribute "wRain", "number"
attribute "mRain", "number"
attribute "yRain", "number"
attribute "eRain", "number"
// WS90 Attributes for returned data
attribute "rrain_piezo", "number"
attribute "hrain_piezo", "number"
attribute "drain_piezo", "number"
attribute "wrain_piezo", "number"
attribute "mrain_piezo", "number"
attribute "yrain_piezo", "number"
attribute "erain_piezo", "number"
Added these new cases and returned case "rainratein" to it's original state
case "erain_piezo": //WS90
ProcessState( "erain_piezo", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "eRain", ConvertInches( "Imperial", state.erain_piezo ), "mm" )
PostEventToChild( "Outdoor Station", "eRain", state.eRain, "mm" )
} else {
ProcessEvent( "eRain", state.erain_piezo, "in" )
PostEventToChild( "Outdoor Station", "eRain", state.eRain, "in" )
}
break
case "rrain_piezo": //WS90
ProcessState( "rrain_piezo", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "rRate", ConvertInches( "Imperial", state.rrain_piezo ), "mm" )
PostEventToChild( "Outdoor Station", "rRate", state.rRate, "mm" )
} else {
ProcessEvent( "rRate", state.rrain_piezo, "in" )
PostEventToChild( "Outdoor Station", "rRate", state.rRate, "in" )
}
break
case "hrain_piezo": //WS90
ProcessState( "hrain_piezo", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "hRain", ConvertInches( "Imperial", state.hrain_piezo ), "mm" )
PostEventToChild( "Outdoor Station", "hRain", state.hRain, "mm" )
} else {
ProcessEvent( "hRain", state.hrain_piezo, "in" )
PostEventToChild( "Outdoor Station", "hRain", state.hRain, "in" )
}
break
case "drain_piezo": //WS90
ProcessState( "drain_piezo", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "dRain", ConvertInches( "Imperial", state.drain_piezo ), "mm" )
PostEventToChild( "Outdoor Station", "dRain", state.dRain, "mm" )
} else {
ProcessEvent( "dRain", state.drain_piezo, "in" )
PostEventToChild( "Outdoor Station", "dRain", state.dRain, "in" )
}
break
case "wrain_piezo": //WS90
ProcessState( "wrain_piezo", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "wRain", ConvertInches( "Imperial", state.wrain_piezo ), "mm" )
PostEventToChild( "Outdoor Station", "wRain", state.wRain, "mm" )
} else {
ProcessEvent( "wRain", state.wrain_piezo, "in" )
PostEventToChild( "Outdoor Station", "wRain", state.wRain, "in" )
}
break
case "mrain_piezo": //WS90
ProcessState( "mrain_piezo", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "mRain", ConvertInches( "Imperial", state.mrain_piezo ), "mm" )
PostEventToChild( "Outdoor Station", "mRain", state.mRain, "mm" )
} else {
ProcessEvent( "mRain", state.mrain_piezo, "in" )
PostEventToChild( "Outdoor Station", "mRain", state.mRain, "in" )
}
break
case "yrain_piezo": //WS90
ProcessState( "yrain_piezo", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "yRain", ConvertInches( "Imperial", state.yrain_piezo ), "mm" )
PostEventToChild( "Outdoor Station", "yRain", state.yRain, "mm" )
} else {
ProcessEvent( "yRain", state.yrain_piezo, "in" )
PostEventToChild( "Outdoor Station", "yRain", state.yRain, "in" )
}
break
case "rainratein":
ProcessState( "rainratein", it.value as float )
if( MeasurementStandard == "Metric" ){
ProcessEvent( "RainRate", ConvertInches( "Imperial", state.rainratein ), "mm" )
PostEventToChild( "Outdoor Station", "RainRate", state.RainRate, "mm" )
} else {
ProcessEvent( "RainRate", state.rainratein, "in" )
PostEventToChild( "Outdoor Station", "RainRate", state.RainRate, "in" )
}
break