47 lines
1.6 KiB
Plaintext
47 lines
1.6 KiB
Plaintext
import java.util.concurrent.locks.ReentrantLock
|
|
|
|
val ReentrantLock transmitter = new ReentrantLock
|
|
|
|
rule "Single Plug"
|
|
when
|
|
Member of Gplugs received command
|
|
// Item Power_Plug_Socket_1 received command or
|
|
// Item Power_Plug_Socket_2 received command or
|
|
// Item Power_Plug_Socket_3 received command or
|
|
// Item Power_Plug_Socket_4 received command
|
|
then
|
|
|
|
logInfo("Power_Plug", "Member " + triggeringItem.name + " to " + receivedCommand)
|
|
|
|
try {
|
|
// Lock transmitter so other executed rules dont't use it at the same time.
|
|
// Concurrent calls of the rule will wait till the resource is free again.
|
|
transmitter.lock()
|
|
|
|
// Get the item which triggered the rule
|
|
// Split the name and get the second part, the number to set as command.
|
|
val num = triggeringItem.name.toString.split("Power_Plug_Socket_").get(1)
|
|
|
|
// Set the command which should be executed to the output channel
|
|
// Auto trigger will then execute the Thing.
|
|
if(receivedCommand == ON){
|
|
Remote_Send_Args.sendCommand("10010 " + num +" 1")
|
|
}else{
|
|
Remote_Send_Args.sendCommand("10010 " + num +" 0")
|
|
}
|
|
|
|
// Wait for the command to complete
|
|
while(Remote_Send.state != OFF){
|
|
Thread::sleep(100)
|
|
}
|
|
|
|
// Mulltiple trigger do not work if there is no break here
|
|
// maybe external skript needs some time to properly free resources.
|
|
Thread::sleep(400)
|
|
logInfo("Power_Plug", Remote_Send_Out.state.toString.replaceAll("\r|\n"," ") )
|
|
}catch(Throwable t) {}
|
|
finally {
|
|
// Free the resource for the next call.
|
|
transmitter.unlock()
|
|
}
|
|
end |