# Flume Binding

This binding will interface with the cloud API to retrieve water usage from your Flume (opens new window) water monitor.

# Introduction

The Cloud Connector is required as a "bridge" to interface to the cloud service from Flume. While the Flume API supports a rich querying of historical usage data, this binding only retrieves the cumulative water used and instantaneous water used, thus relying on openHAB's rich persistence services for exploring historical values. The binding does support querying historical data through the use of the Rule Action.

# Supported Things

This binding supports the following things:

Thing id Type Description
Flume Cloud Connector cloud Bridge This represents the cloud account to interface with the Flume API.
Flume Meter Device meter-device Thing This interfaces to a specific Flume water monitor associated with the account.

This binding should work with multiple Flume monitors associated with the account, however it is currently only tested with a single device.

# Discovery

Once a Flume Cloud Connector is created and established, the binding will automatically discover any Flume Meter Devices' associated with the account.

# Flume Cloud Connector (Bridge) Configuration

The only configuration required is to create a Flume Cloud Connector thing and fill in the appropriate configuration parameters. The client id and client secret can be found under Settings/API access from the Flume portal online (opens new window). Note, there is a rate limit of 120 queries per hour imposed by Flume so use caution when selecting the Refresh Interfacl.

Name id Type Description Default Required Advanced
Flume Username username text Username to access Flume cloud N/A yes no
Flume Password password text Password to access Flume cloud N/A yes no
Flume Client ID clientId text ID retrieved from Flume cloud N/A yes no
Flume Client Secret clientSecret text Secret retrieved from Flume cloud N/A yes no
Instantaneous Refresh Interval refreshIntervalInstantaneous integer Polling interval (minutes) for instantaneous usage (rate limited to 120 queries/sec) 1 no yes
Cumulative Refresh Interval refreshIntervalCumulative integer Polling interval (minutes) for cumulative usage (rate-limited with above) 5 no yes

# Flume Meter Device Configuration

Name id Type Description Default Required Advanced
ID id text ID of the Flume device N/A yes no

# Flume Meter Device Channels

Channel id Type Read/Write Description
Instant Water Usage instant-usage Number:VolumetricFlowRate R Flow rate of water over the last minute
Cumulative Used cumulative-usage Number:Volume R Total volume of water used since the beginning of Flume install
Battery Level battery-level Number:Dimensionless R Estimate of percent of remaining battery level
Low Battery low-battery Switch R Indicator of low battery level
Last Seen last-seen DateTime R Date/Time when meter was last seen on the network
Usage Alert usage-alert Trigger n/a Trigger channel for usage alert notification

# Full Example

# Thing Configuration

Please note that the device meter ID is only available through the API and not available on the Flume portal. When the Bridge device is first created, there will be a log message with the ID of the discovered device which can be used in further configuring the device via the text files.

Bridge flume:cloud:cloudconnector [ username="xxx", password="xxx", clientId="xxx", clientSecret="xxx" ] {
    
    meter-device meter [ id="xxx" ]
}

# Item Configuration

Number:VolumetricFlowRate     InstantUsage     "Instant Usage"         { channel = "flume:meter-device:1:meter:instant-usage" }
Number:Volume                 CumulativeUsed   "Cumulative Used"       { channel = "flume:meter-device:1:meter:cumulative-usage" }
Number:Dimensionless          BatteryLevel     "Battery Level"         { channel = "flume:meter-device:1:meter:battery-level" }   
DateTime                      LastSeen         "Last Seen"             { channel = "flume:meter-device:1:meter:last-seen" }
Switch                        LowPower         "Battery Low Power"     { channel = "flume:meter-device:1:meter:low-battery" }  

# Rules

rule "Flume Usage Alert"
when
    Channel 'flume:device:cloud:meter:usageAlert' triggered
then
    logInfo("Flume Usage Alert", "Message: {}", receivedEvent)
end

# Rule Actions

There is an action where you can query the Flume Cloud for water usage as shown in the blow example:

val flumeActions = getActions("flume", "flume:device:cloud:meter")

if(null === flumeActions) {
    logInfo("actions", "flumeActions not found, check thing ID")
    return
}

val LocalDateTime untilDateTime = LocalDateTime.now
val LocalDateTime sinceDateTime = untilDateTime.minusHours(24)

val usage = flumeActions.queryWaterUsage(sinceDateTime, untilDateTime, "MIN", "SUM")
logInfo("Flume", "Water usage is {}", usage.toString())

# queryWaterUsage(sinceDateTime, untilDateTime, bucket, operation)

Queries the cloud for water usage between the two dates.

  • sinceDateTime (LocalDateTime): begin date/time of query range
  • untilDateTime (LocalDateTime): end date/time of query range
  • bucket (String), values: YR, MON, DAY, HR, MIN
  • operation (String), values: SUM, AVG, MIN, MAX, CNT