182 lines
7.0 KiB
Markdown
182 lines
7.0 KiB
Markdown
|
---
|
||
|
id: satel
|
||
|
label: Satel
|
||
|
title: Satel - Actions
|
||
|
type: action
|
||
|
description: "The Satel Action bundle provides actions to read the event log of the connected alarm system, check current connection status and override configured user code."
|
||
|
source: https://github.com/openhab/openhab1-addons/blob/master/bundles/action/org.openhab.action.satel/README.md
|
||
|
since: 1x
|
||
|
install: auto
|
||
|
---
|
||
|
|
||
|
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
|
||
|
|
||
|
{% include base.html %}
|
||
|
|
||
|
## Satel Actions
|
||
|
|
||
|
The Satel Action bundle provides actions to read the event log of the connected alarm system, check current connection status and override configured user code.
|
||
|
|
||
|
## Prerequisites
|
||
|
|
||
|
Satel Binding v1.x must be installed and configured in order to use Satel actions.
|
||
|
|
||
|
## Actions
|
||
|
|
||
|
* `boolean satelIsConnected()` - returns `true` if connected to communication module and `false` otherwise
|
||
|
* `Object[] satelReadEvent(int eventIndex)` - reads event log record for given index; records must be read one by one from most recent record under index `-1`; see record description below
|
||
|
* `String satelReadDeviceName(String deviceType, int deviceNumber)` - reads description of a device; device type must be one of PARTITION, ZONE, USER, EXPANDER, LCD, OUTPUT, TIMER, TELEPHONE, OBJECT
|
||
|
* `void satelSetUserCode(String newUserCode)` - overrides configured user code to a given one; allows to execute commands not available for default user configured in the settings
|
||
|
* `void satelResetUserCode()` - reverts user code set by `satelSetUserCode(String newUserCode)` to the value configured in openhab.cfg/satel.cfg.
|
||
|
|
||
|
### Event record fields
|
||
|
|
||
|
| Field | Type | Description |
|
||
|
|-------|------|-------------|
|
||
|
| timestamp | DateTimeType | time when the event happened |
|
||
|
| partition | Integer | partition number |
|
||
|
| event class | Enum | one of ZONE_ALARMS, PARTITION_ALARMS, ARMING, BYPASSES, ACCESS_CONTROL, TROUBLES, USER_FUNCTIONS, SYSTEM_EVENTS |
|
||
|
| event code | Integer | code of the event |
|
||
|
| restoration flag | Boolean | |
|
||
|
| event description | String | |
|
||
|
| kind of description | Integer | |
|
||
|
| source | Integer | |
|
||
|
| object | Integer | |
|
||
|
| user control number | Integer | |
|
||
|
| next event index | Integer | index that must be passed to read next record from the log |
|
||
|
| current event index | Integer | index of the current record |
|
||
|
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
### Rule to send email on each alarm with 10 most recent records from the event log
|
||
|
|
||
|
satel.rules
|
||
|
|
||
|
```
|
||
|
rule "Satel Action test"
|
||
|
when
|
||
|
AlarmPart1 changed to ON
|
||
|
then
|
||
|
var Integer eventIdx = -1
|
||
|
var String details
|
||
|
var String msgBody = ""
|
||
|
|
||
|
if (satelIsConnected()) {
|
||
|
logInfo("EventLog", "Start")
|
||
|
(1..10).forEach[
|
||
|
val Object[] eventRec = satelReadEvent(eventIdx)
|
||
|
val kind = eventRec.get(6) as Integer
|
||
|
val source = eventRec.get(7) as Integer
|
||
|
val object = eventRec.get(8) as Integer
|
||
|
val ucn = eventRec.get(9) as Integer
|
||
|
|
||
|
if (kind == 0) {
|
||
|
details = ""
|
||
|
} else if (kind == 1) {
|
||
|
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1)) + ", zone: " + satelReadDeviceName("ZONE", source)
|
||
|
} else if (kind == 2) {
|
||
|
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1)) + ", user: " + satelReadDeviceName("USER", source)
|
||
|
} else if (kind == 4) {
|
||
|
if (source == 0) {
|
||
|
details = " (mainboard)"
|
||
|
} else if (source <= 128) {
|
||
|
details = ", zone: " + satelReadDeviceName("ZONE", source)
|
||
|
} else if (source <= 192) {
|
||
|
details = ", expander: " + satelReadDeviceName("EXPANDER", source)
|
||
|
} else {
|
||
|
details = ", lcd: " + satelReadDeviceName("LCD", source)
|
||
|
}
|
||
|
} else if (kind == 5) {
|
||
|
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1))
|
||
|
} else if (kind == 6) {
|
||
|
details = ", keypad: " + satelReadDeviceName("LCD", eventRec.get(1)) + ", user: " + satelReadDeviceName("USER", source)
|
||
|
} else if (kind == 7) {
|
||
|
details = ", user: " + satelReadDeviceName("USER", source)
|
||
|
} else if (kind == 15) {
|
||
|
details = ", partition: " + satelReadDeviceName("PARTITION", eventRec.get(1)) + ", timer: " + satelReadDeviceName("TIMER", source)
|
||
|
} else if (kind == 30) {
|
||
|
details = ", keypad: " + satelReadDeviceName("LCD", eventRec.get(1)) + ", ip: " + source + "." + (object*32 + ucn) + details
|
||
|
} else if (kind == 31) {
|
||
|
details = "." + source + "." + (object*32 + ucn)
|
||
|
} else {
|
||
|
details = ", kind=" + kind + ", partition=" + eventRec.get(1) + ", source=" + source + ", object=" + object + ", ucn=" + ucn
|
||
|
}
|
||
|
|
||
|
if (kind != 31) {
|
||
|
msgBody = msgBody + "\n" + eventRec.get(0) + ": " + eventRec.get(5) + details
|
||
|
}
|
||
|
eventIdx = eventRec.get(10)
|
||
|
]
|
||
|
logInfo("EventLog", "End")
|
||
|
sendMail("you@email.net", "Even log", msgBody)
|
||
|
}
|
||
|
end
|
||
|
```
|
||
|
|
||
|
satel.items:
|
||
|
|
||
|
```
|
||
|
Switch AlarmPart1 "Alarm on partition #1" { satel="partition:alarm_memory:1" }
|
||
|
```
|
||
|
|
||
|
### Rule that changes user code for 10 minutes
|
||
|
|
||
|
After that time user code is reverted to the one configured in the Satel binding (1.x) configuration
|
||
|
|
||
|
satel.rules
|
||
|
|
||
|
```
|
||
|
var String userCode = ""
|
||
|
var Timer keypadTimer = null
|
||
|
var Timer userCodeTimer = null
|
||
|
|
||
|
rule "Keypad char entered"
|
||
|
when
|
||
|
Item Keypad_Char changed
|
||
|
then
|
||
|
if (Keypad_Char.state == "-") {
|
||
|
satelSetUserCode(userCode)
|
||
|
userCode = ""
|
||
|
if (userCodeTimer != null) {
|
||
|
userCodeTime.cancel
|
||
|
}
|
||
|
userCodeTimer = createTimer(now.plusMinutes(10)) [|
|
||
|
logInfo("Keypad", "Reverting user code")
|
||
|
satelResetUserCode()
|
||
|
]
|
||
|
} else if (Keypad_Char.state == "*") {
|
||
|
satelResetUserCode()
|
||
|
userCode = ""
|
||
|
} else {
|
||
|
userCode = userCode + Keypad_Char.state
|
||
|
}
|
||
|
|
||
|
if (keypadTimer != null) {
|
||
|
keypadTimer.cancel
|
||
|
}
|
||
|
keypadTimer = createTimer(now.plusSeconds(5)) [|
|
||
|
userCode = ""
|
||
|
Keypad_Char.postUpdate("")
|
||
|
]
|
||
|
end
|
||
|
|
||
|
```
|
||
|
|
||
|
satel.items
|
||
|
|
||
|
```
|
||
|
String Keypad_Char ">"
|
||
|
```
|
||
|
|
||
|
satel.sitemap
|
||
|
|
||
|
```
|
||
|
Text label="Enter user code" icon="settings" {
|
||
|
Switch item=Keypad_Char mappings=[ "1"="1", "2"="2", "3"="3" ]
|
||
|
Switch item=Keypad_Char mappings=[ "4"="4", "5"="5", "6"="6" ]
|
||
|
Switch item=Keypad_Char mappings=[ "7"="7", "8"="8", "9"="9" ]
|
||
|
Switch item=Keypad_Char mappings=[ "*"="*", "0"="0", "-"="#" ]
|
||
|
}
|
||
|
```
|