Sample rule to catch zone events (replace rachio_zone_1_xxxxxxxx_1_zoneEvent with the connect item name):
var int totalRunTime = 0
/* ------- Alarm handler ----- */
rule "Zone started"
when
Item rachio_zone_1_xxxxxxxx_1_zoneEvent changed
then
var jsonString = rachio_zone_1_xxxxxxxx_1_zoneEvent.state.toString
logDebug("RachioEvent", "Event triggered (JSON='" + jsonString + "')")
var eventTimestamp = transform("JSONPATH","$.timestamp",jsonString);
var eventType = transform("JSONPATH","$.type",jsonString)
var eventSubType = transform("JSONPATH","$.subType",jsonString)
var eventSummary = transform("JSONPATH","$.summary",jsonString)
if (eventType == "ZONE_STATUS") {
var zoneName = transform("JSONPATH","$.zoneName",jsonString)
var zoneNumber = transform("JSONPATH","$.zoneNumber",jsonString)
var runState = transform("JSONPATH","$.zoneRunState",jsonString)
var runStart = transform("JSONPATH","$.startTime",jsonString)
var runEnd = transform("JSONPATH","$.endTime",jsonString)
var runDuration = transform("JSONPATH","$.duration",jsonString)
var scheduleType = transform("JSONPATH","$.scheduleType",jsonString)
logInfo("RachioEvent", eventTimestamp + " " + zoneName + "[" + zoneNumber + "]: " + eventSummary + "(type='" + scheduleType + "', state='" + runState + "')")
if (eventSubType == "ZONE_COMPLETED") {
totalRunTime = totalRunTime + Integer::parseInt(runDuration)
logInfo("RachioZone", "Zone [" + zoneNumber + "]: start: " + runStart + ", end: " + runEnd + ", duration: " + runDuration + " => Total run time = " + totalRunTime)
}
}
else {
// generic message
logInfo("RachioEvent", eventTimestamp + " [" + eventSubType + "]: " + eventSummary)
}
end
see openhab.log
2018-05-13 18:11:59.659 [INFO ] [e.smarthome.model.script.RachioEvent] - 2018-05-13T22:11:52Z Driveway-rechts[1]: Driveway-rechts completed watering at 06:11 PM (EDT) for 2 minutes.(type='FIXED', state='COMPLETED')
2018-05-13 18:11:59.683 [INFO ] [se.smarthome.model.script.RachioZone] - Zone [1]: start: 2018-05-13T22:09:55.968Z, end: 2018-05-13T22:11:55.968Z, duration: 120 => Total run time = 120
using a OH item for totalRunTime and making it persistent will provide the total run time (if you lile per zone and on the controller and you could combine this with a Garfana graph).
Sniplet 1 for HABpanel template / widget: show zone event and properties
<div class="text-left" ng-init="event=$eval(itemValue('rachio_zone_1_xxxxxxxx_1_zoneEvent'))">
Zone [{{itemValue('rachio_zone_1_F0038CC690BE_1_number')}}]: {{itemValue('rachio_zone_1_F0038CC690BE_1_name')}}<br/>
{{event.summary}}<br/>
Last run: {{event.startTime}} for {{event.duration}}s<p/>
</div>
Sniplet 2 - “dump” event attributes
<div class="text-left" ng-repeat="(key, value) in $eval(itemValue('rachio_zone_1_xxxxxxxx_1_zoneEvent'))">
{{key}}:{{value}}
</div>
<p/>