openhab-docs/_actions/satel/readme.md

182 lines
7.0 KiB
Markdown
Raw Normal View History

---
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", "-"="#" ]
}
```