I slept on it and relized I made it very complicated!!
var itemName = triggeringItem.name
var state = 0
if (itemName == "arrbambounord") {
state = arrbambounordsec.state as Number
} else if (itemName == "arrpel") {
state = arrpel.state as Number
}
logInfo("VALUE", state.toString)
@Josar the thing is it worked flawlessly on 2.2.0 and when I migrated it in 2.3.0-SNAPSHOT it stopped working. Anyway, I will take time to sort it out soon.
Thanks all for the advices, I removed all single items and use exclusively groups.
It is a nice sequential start and stop of each pump.
I would be happy to clean it up a bit if you have other advices.
Also the programmable cron is still a bit tricky.
arr.rules
//import org.joda.time.DateTime
var Timer myTimer = null
// Todo configurable via l'interface
rule "timed watering"
when
//Time cron "0 28 22 1/1 * ? *"
Time cron "0 0 3 1/1 * ? *" // 3am everyday
then
waterAllZone.sendCommand(ON)
end
rule "waterAllZone"
when
Item waterAllZone changed
then
if (waterAllZone.state==OFF) {
waterValves.sendCommand(OFF)
//arrbambounord.sendCommand(OFF)
//arrpel.sendCommand(OFF)
}
else if (waterAllZone.state==ON) {
waterValve1.sendCommand(ON)
}
end
rule "waterValves changed"
when
Member of waterValves changed
//Item waterValves received update
then
logInfo("triggeringItem",triggeringItem.toString) //triggeringItem is not set
if (triggeringItem.state==OFF) {
if (myTimer!==null) {
myTimer.cancel
myTimer = null
}
}
else if (triggeringItem.state==ON) {
if (myTimer!==null) {
myTimer.cancel
myTimer = null
}
var itemName = triggeringItem.name
logInfo("waterValves = ", waterValves.toString)
var concatenateName = itemName + "Duration"
logInfo("concatenateName = ", concatenateName)
logInfo("triggering item = ", waterValves.members.toString)
var waterValveXDuration = waterValvesDuration.members.filter[ i | i.name == concatenateName ].get(0)
logInfo("state =", waterValveXDuration.state.toString)
//Get the name of the next item in the group ... how to simplify ?
var itemNameStr = itemName.toString
var itemNameWithoutNumberStr = itemNameStr.substring(0, itemNameStr.length() - 1)
var itemNumber = itemNameStr.substring(itemNameStr.length() - 1, itemNameStr.length())
var concatNext = itemNameWithoutNumberStr + (Integer.parseInt(itemNumber) + 1)
var duration = 0
if (waterValveXDuration.state !== NULL) {
duration = (waterValveXDuration.state as DecimalType).intValue
}
myTimer = createTimer(now.plusSeconds(duration)) [|
triggeringItem.sendCommand(OFF)
if (waterAllZone.state==ON) {
try { //How to avoid try and catch and use check ?
var waterValveNext = waterValves.members.filter[ i | i.name == concatNext ].get(0)
logInfo("open next watering valve =", concatNext)
waterValveNext.sendCommand(ON)
}
catch (Throwable t) {
logInfo("last valve", "this was the last valve")
}
}
]
}
end
rule "System started"
when
System started
then
Thread::sleep(10 * 1000)
logInfo("arr.rules", "Default system value loading")
if (waterValve1Duration.state == NULL) MyGroup.members.forEach[ i | i.postUpdate(5)]
//if (waterValve2Duration.state == NULL) waterValve2Duration.postUpdate(5)
if (wateringStartHour.state == NULL) wateringStartHour.postUpdate(3)
if (wateringStartMin.state == NULL) wateringStartMin.postUpdate(0)
end
all.items
Number waterValve1Duration (waterValvesDuration)
Number waterValve2Duration (waterValvesDuration)
Number waterValve3Duration (waterValvesDuration)
Number wateringStartHour
Number wateringStartMin
Switch scheduledWatering
Switch waterAllZone
Group waterValves
Group waterValvesDuration
Switch waterValve1 (waterValves)
{ mqtt=">[agde:ESPURNA_802DF2/relay/0/set:command:*:default],
<[agde:ESPURNA_802DF2/relay/0:state:MAP(onoff.map)]" }
Switch waterValve2 (waterValves)
{ mqtt=">[agde:ESPURNA_802DF2/relay/1/set:command:*:default],
<[agde:ESPURNA_802DF2/relay/1:state:MAP(onoff.map)]" }
Switch waterValve3 "grass watering valve" (waterValves)
{ mqtt=">[agde:ESPURNA_802DF2/relay/2/set:command:*:default],
<[agde:ESPURNA_802DF2/relay/2:state:MAP(onoff.map)]" }
Switch pacpool
{ mqtt=">[agde:ESPURNA_2BBB38/relay/1/set:command:*:default],
<[agde:ESPURNA_2BBB38/relay/1:state:MAP(onoff.map)]" }