parent
33b5b3b782
commit
94952bf804
|
@ -0,0 +1,188 @@
|
|||
---
|
||||
id: ftpupload
|
||||
label: FTP Upload
|
||||
title: FTP Upload - Bindings
|
||||
type: binding
|
||||
description: "This binding can be used to receive image files from FTP clients."
|
||||
since: 2x
|
||||
install: auto
|
||||
---
|
||||
|
||||
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
|
||||
|
||||
{% include base.html %}
|
||||
|
||||
# FTP Upload Binding
|
||||
|
||||
This binding can be used to receive image files from FTP clients.
|
||||
The binding acts as a FTP server.
|
||||
Images stored on the FTP server are not saved to the file system, therefore the binding shouldn't cause any problems on flash based openHAB installations.
|
||||
|
||||
## Supported Things
|
||||
|
||||
This binding supports Things of type ```ftpupload```.
|
||||
Every Thing is identified by FTP user name.
|
||||
Therefore, every thing should use unique user name to login FTP server.
|
||||
|
||||
## Discovery
|
||||
|
||||
Automatic discovery is not supported.
|
||||
|
||||
## Binding Configuration
|
||||
|
||||
The binding has the following configuration options:
|
||||
|
||||
| Parameter | Name | Description | Required | Default value |
|
||||
|-------------|--------------|------------------------------------------------------------------------------------------------------------------------|----------|---------------|
|
||||
| port | TCP Port | TCP port of the FTP server | no | 2121 |
|
||||
| idleTimeout | Idle timeout | The number of seconds before an inactive client is disconnected. If this value is set to 0, the idle time is disabled. | no | 60 |
|
||||
|
||||
## Channels
|
||||
|
||||
This binding currently supports the following channels:
|
||||
|
||||
| Channel Type ID | Item Type | Description |
|
||||
|-----------------|--------------|----------------------------------------------------------------------------------------|
|
||||
| image | Image | Image file received via FTP. |
|
||||
|
||||
When an image file is uploaded to FTP server, the binding tries to find the channel whose filename matches the uploaded image filename.
|
||||
If no match is found, no channel is updated.
|
||||
The filename parameter supports regular expression patterns.
|
||||
See more details in the Things example.
|
||||
|
||||
Image channel supports following options:
|
||||
|
||||
| Parameter | Name | Description | Required | Default value |
|
||||
|-------------|--------------|--------------------------------------------------------------------------|----------|---------------|
|
||||
| filename | Filename | Filename to match received files. Supports regular expression patterns. | yes | .* |
|
||||
|
||||
|
||||
### Trigger Channels
|
||||
|
||||
| Channel Type ID | Options | Description |
|
||||
|-----------------|------------------------|-----------------------------------------------------|
|
||||
| image-received | IMAGE_RECEIVED | Triggered when image file received from FTP client. |
|
||||
|
||||
When an image file is uploaded to FTP server, the binding tries to find the trigger channel whose filename matches the upload image filename.
|
||||
If no match is found, no channel is updated.
|
||||
The filename parameter supports regular expression patterns.
|
||||
See more details in the Things example.
|
||||
|
||||
Trigger channels supports following options:
|
||||
|
||||
| Parameter | Name | Description | Required | Default value |
|
||||
|-------------|--------------|--------------------------------------------------------------------------|----------|---------------|
|
||||
| filename | Filename | Filename to match received files. Supports regular expression patterns. | yes | .* |
|
||||
|
||||
## Full Example
|
||||
|
||||
Things:
|
||||
|
||||
```
|
||||
Thing ftpupload:imagereceiver:images1 [ userName="test1", password="12345" ] {
|
||||
|
||||
Thing ftpupload:imagereceiver:images2 [ userName="test2", password="12345" ] {
|
||||
Channels:
|
||||
Type image-channel : my_image1 "My Image channel 1" [
|
||||
filename="test12[0-9]{2}.png" // match to filename test12xx.png, where xx can be numbers between 00-99
|
||||
]
|
||||
Type image-channel : my_image2 "My Image channel 2" [
|
||||
filename="test.jpg"
|
||||
]
|
||||
Trigger String : my_image_trigger1 [
|
||||
filename="test12[0-9]{2}.png"
|
||||
]
|
||||
Trigger String : my_image_trigger2 [
|
||||
filename="test.jpg"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Items:
|
||||
|
||||
```
|
||||
Image Image1 { channel="ftpupload:imagereceiver:images1:image" }
|
||||
Image Image2 { channel="ftpupload:imagereceiver:images2:my_image1" }
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
```
|
||||
rule "example trigger rule 1"
|
||||
when
|
||||
Channel 'ftpupload:imagereceiver:images1:image-received' triggered IMAGE_RECEIVED
|
||||
then
|
||||
logInfo("Test","Image received")
|
||||
end
|
||||
|
||||
rule "example trigger rule 2"
|
||||
when
|
||||
Channel 'ftpupload:imagereceiver:images2:my_image_trigger1' triggered IMAGE_RECEIVED
|
||||
then
|
||||
logInfo("Test","Image received")
|
||||
end
|
||||
|
||||
```
|
||||
|
||||
Sitemap:
|
||||
|
||||
```
|
||||
Frame label="FTP images" {
|
||||
Image item=Image1
|
||||
Image item=Image2
|
||||
}
|
||||
```
|
||||
|
||||
## Use case example
|
||||
|
||||
The binding can be used to receive images from network cameras that send images to a FTP server when motion or sound is detected.
|
||||
|
||||
Things:
|
||||
|
||||
```
|
||||
Thing ftpupload:imagereceiver:garagecamera [ userName="garage", password="12345" ]
|
||||
```
|
||||
|
||||
Items:
|
||||
|
||||
```
|
||||
Image Garage_NetworkCamera_Motion_Image { channel="ftpupload:imagereceiver:garagecamera:image" }
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
```
|
||||
rule "example trigger rule"
|
||||
when
|
||||
Channel 'ftpupload:imagereceiver:garagecamera:image-received' triggered IMAGE_RECEIVED
|
||||
then
|
||||
logInfo("Test","Garage motion detected")
|
||||
end
|
||||
```
|
||||
|
||||
Sitemap:
|
||||
|
||||
```
|
||||
Frame label="Garage network camera" icon="camera" {
|
||||
Image item=Garage_NetworkCamera_Motion_Image
|
||||
}
|
||||
```
|
||||
|
||||
## Logging and Problem Solving
|
||||
|
||||
For problem solving, if binding logging is not enough, Apache FTP server logging can also be enabled by the following command in the karaf console:
|
||||
|
||||
```
|
||||
log:set DEBUG org.apache.ftpserver
|
||||
```
|
||||
|
||||
and set back to default level:
|
||||
|
||||
```
|
||||
log:set DEFAULT org.apache.ftpserver
|
||||
```
|
||||
|
||||
If you meet any problems to receive images from the network cameras, you could test connection to binding with any FTP client.
|
||||
You can send image files via FTP client and thing channels should be updated accordingly.
|
||||
|
||||
|
|
@ -155,6 +155,9 @@ The port number of the CUxD daemon (default = 8701)
|
|||
- **installModeDuration**
|
||||
Time in seconds that the controller will be in install mode when a device discovery is initiated (default = 60)
|
||||
|
||||
- **unpairOnDeletion**
|
||||
If true, devices are automatically unpaired from a gateway when the corresponding thing is deleted (default = false)
|
||||
|
||||
The syntax for a bridge is:
|
||||
|
||||
```java
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
---
|
||||
id: logreader
|
||||
label: Log Reader
|
||||
title: Log Reader - Bindings
|
||||
type: binding
|
||||
description: "This binding reads and analyzes log files. Search patterns are fully configurable, therefore different kind of log files should be possible to monitor by this binding."
|
||||
since: 2x
|
||||
install: auto
|
||||
---
|
||||
|
||||
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
|
||||
|
||||
{% include base.html %}
|
||||
|
||||
# Log Reader Binding
|
||||
|
||||
This binding reads and analyzes log files. Search patterns are fully configurable, therefore different kind of log files should be possible to monitor by this binding.
|
||||
When certain log events is recognized, openHAB rules can be used to send notification about the event e.g by email for further analysis.
|
||||
|
||||
## Supported Things
|
||||
|
||||
This binding supports one ThingType: `reader`.
|
||||
A reader supports 3 separate channels; One for errors, one for warnings and one custom channel for other purposes.
|
||||
|
||||
## Thing Configuration
|
||||
|
||||
The `reader` Thing has the following configuration parameters:
|
||||
|
||||
| Parameter | Type | Required | Default if omitted | Description |
|
||||
| ------------------------------| ------- | -------- | -------------------------------- |-----------------------------------------------------------------------------------------|
|
||||
| `filePath` | String | yes | `${OPENHAB_LOGDIR}/openhab.log` | Path to log file. ${OPENHAB_LOGDIR} is automatically replaced by the correct directory. |
|
||||
| `refreshRate` | integer | no | `1000` | Time in milliseconds between individual log reads. |
|
||||
| `errorPatterns` | String | no | `ERROR+` | Search patterns separated by \| character for warning events. |
|
||||
| `errorBlacklistingPatterns` | String | no | | Search patterns for blacklisting unwanted error events separated by \| character. |
|
||||
| `warningPatterns` | String | no | `WARN+` | Search patterns separated by \| character for error events. |
|
||||
| `warningBlacklistingPatterns` | String | no | | Search patterns for blacklisting unwanted warning events separated by \| character. |
|
||||
| `customPatterns` | String | no | | Search patterns separated by \| character for custom events. |
|
||||
| `customBlacklistingPatterns` | String | no | | Search patterns for blacklisting unwanted custom events separated by \| character. |
|
||||
|
||||
Search patterns follows Java regular expression syntax. See https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html.
|
||||
|
||||
## Channels
|
||||
|
||||
List of channels
|
||||
|
||||
| Channel Type ID | Item Type | Description |
|
||||
| ------------------ | ------------ | -------------------------------------------------------------- |
|
||||
| `lastErrorEvent` | `String` | Displays contents of last [ERROR] event |
|
||||
| `lastWarningEvent` | `String` | Displays contents of last [WARN] event |
|
||||
| `lastCustomEvent` | `String` | Displays contents of last custom event |
|
||||
| `errorEvents` | `Number` | Displays number of [ERROR] lines matched to search pattern |
|
||||
| `warningEvents` | `Number` | Displays number of [WARN] lines matched to search pattern |
|
||||
| `customEvents` | `Number` | Displays number of custom lines matched to search pattern |
|
||||
| `logRotated` | `DateTime` | Last time when log rotated recognized |
|
||||
| `newErrorEvent` | - | Trigger channel for last [ERROR] line |
|
||||
| `newWarningEvent` | - | Trigger channel for last [ERROR] line |
|
||||
| `newCustomEvent` | - | Trigger channel for last [ERROR] line |
|
||||
|
||||
## Examples
|
||||
|
||||
### example.things
|
||||
|
||||
```xtend
|
||||
|
||||
logreader:reader:openhablog[ refreshRate=1000, errorPatterns="ERROR+", errorBlacklistingPatterns="annoying error which should ignored|Another annoying error which should ignored" ]
|
||||
|
||||
```
|
||||
|
||||
### example.items
|
||||
|
||||
```xtend
|
||||
|
||||
String logreaderLastError "Last error [%s]" { channel="logreader:reader:openhablog:lastErrorEvent" }
|
||||
String logreaderLastWarning "Last warning [%s]" { channel="logreader:reader:openhablog:lastWarningEvent" }
|
||||
Number logreaderErrors "Error events matched [%d]" { channel="logreader:reader:openhablog:errorEvents" }
|
||||
Number logreaderWarnings "Warning events matched [%d]" { channel="logreader:reader:openhablog:warningEvents" }
|
||||
DateTime logreaderLogRotated "Last Log Rotation [%1$tY.%1$tm.%1$te %1$tR]" { channel="logreader:reader:openhablog:logRotated" }
|
||||
|
||||
```
|
||||
|
||||
### example.sitemap
|
||||
|
||||
```xtend
|
||||
|
||||
sitemap logreader_example label="Example" {
|
||||
Frame label="LogReader" {
|
||||
Text item=logreaderLastError
|
||||
Text item=logreaderLastWarning
|
||||
Text item=logreaderErrors
|
||||
Text item=logreaderWarnings
|
||||
Text item=logreaderLogRotated
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### example.rules
|
||||
|
||||
```xtend
|
||||
rule "LogReader"
|
||||
when
|
||||
Channel "logreader:reader:openhablog:newErrorEvent" triggered
|
||||
then
|
||||
// do something
|
||||
end
|
||||
```
|
||||
|
||||
Be careful when sending e.g. email notifications.
|
||||
You could easily send thousand of *spam* emails in short period if e.g. one binding is in error loop.
|
||||
|
||||
### Thing status
|
||||
|
||||
Check thing status for errors.
|
||||
|
||||
### Verbose logging
|
||||
|
||||
Enable DEBUG logging in karaf console to see more precise error messages:
|
||||
|
||||
`log:set DEBUG org.openhab.binding.logreader`
|
||||
|
||||
See [openHAB2 logging docs](http://docs.openhab.org/administration/logging.html#defining-what-to-log) for more help.
|
||||
|
||||
|
|
@ -72,6 +72,10 @@ The account Thing Type does not have any channels.
|
|||
|
||||
### Camera Channels
|
||||
|
||||
**Camera group channels**
|
||||
|
||||
Information about the camera.
|
||||
|
||||
| Channel Type ID | Item Type | Description | Read Write |
|
||||
|-----------------------|-----------|---------------------------------------------------|:----------:|
|
||||
| app_url | String | The app URL to see the camera | R |
|
||||
|
@ -84,6 +88,24 @@ The account Thing Type does not have any channels.
|
|||
| video_history_enabled | Switch | If the video history is currently enabled | R |
|
||||
| web_url | String | The web URL to see the camera | R |
|
||||
|
||||
**Last event group channels**
|
||||
|
||||
Information about the last camera event (requires Nest Aware subscription).
|
||||
|
||||
| Channel Type ID | Item Type | Description | Read Write |
|
||||
|--------------------|-----------|------------------------------------------------------------------------------------|:----------:|
|
||||
| activity_zones | String | Identifiers for activity zones that detected the event (comma separated) | R |
|
||||
| animated_image_url | String | The URL showing an animated image for the camera event | R |
|
||||
| app_url | String | The app URL for the camera event, allows you to see the camera event in an app | R |
|
||||
| end_time | DateTime | Timestamp when the camera event ended | R |
|
||||
| has_motion | Switch | If motion was detected in the camera event | R |
|
||||
| has_person | Switch | If a person was detected in the camera event | R |
|
||||
| has_sound | Switch | If sound was detected in the camera event | R |
|
||||
| image_url | String | The URL showing an image for the camera event | R |
|
||||
| start_time | DateTime | Timestamp when the camera event started | R |
|
||||
| urls_expire_time | DateTime | Timestamp when the camera event URLs expire | R |
|
||||
| web_url | String | The web URL for the camera event, allows you to see the camera event in a web page | R |
|
||||
|
||||
### Smoke Detector Channels
|
||||
|
||||
| Channel Type ID | Item Type | Description | Read Write |
|
||||
|
@ -108,36 +130,39 @@ The account Thing Type does not have any channels.
|
|||
| peak_period_start_time | DateTime | Peak period start for the Rush Hour Rewards program | R |
|
||||
| postal_code | String | Postal code of the structure | R |
|
||||
| rush_hour_rewards_enrollment | Switch | If rush hour rewards system is enabled or not | R |
|
||||
| security_state | String | Security state of the structure (OK, DETER) | R |
|
||||
| smoke_alarm_state | String | Smoke alarm state (OK, EMERGENCY, WARNING) | R |
|
||||
| time_zone | String | The time zone for the structure ([IANA time zone format](http://www.iana.org/time-zones)) | R |
|
||||
|
||||
### Thermostat Channels
|
||||
|
||||
| Channel Type ID | Item Type | Description | Read Write |
|
||||
|-----------------------------|--------------------|---------------------------------------------------------------------------------------------|:----------:|
|
||||
| can_cool | Switch | If the thermostat can actually turn on cooling | R |
|
||||
| can_heat | Switch | If the thermostat can actually turn on heating | R |
|
||||
| fan_timer_active | Switch | If the fan timer is engaged | R/W |
|
||||
| fan_timer_duration | Number | Length of time (in minutes) that the fan is set to run (15, 30, 45, 60, 120, 240, 480, 960) | R/W |
|
||||
| fan_timer_timeout | DateTime | Timestamp when the fan stops running | R |
|
||||
| has_fan | Switch | If the thermostat can control the fan | R |
|
||||
| has_leaf | Switch | If the thermostat is currently in a leaf mode | R |
|
||||
| humidity | Number | Indicates the current relative humidity | R |
|
||||
| last_connection | DateTime | Timestamp of the last successful interaction with Nest | R |
|
||||
| locked | Switch | If the thermostat has the temperature locked to only be within a set range | R |
|
||||
| locked_max_set_point | Number:Temperature | The locked range max set point temperature | R/W |
|
||||
| locked_min_set_point | Number:Temperature | The locked range min set point temperature | R/W |
|
||||
| max_set_point | Number:Temperature | The max set point temperature | R/W |
|
||||
| min_set_point | Number:Temperature | The min set point temperature | R/W |
|
||||
| mode | String | Current mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R/W |
|
||||
| previous_mode | String | The previous mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R |
|
||||
| state | String | The active state of the Nest thermostat (HEATING, COOLING, OFF) | R |
|
||||
| temperature | Number:Temperature | Current temperature | R |
|
||||
| time_to_target_mins | Number | Time left to the target temperature (mins) approximately | R |
|
||||
| set_point | Number:Temperature | The set point temperature | R/W |
|
||||
| sunlight_correction_active | Switch | If sunlight correction is active | R |
|
||||
| sunlight_correction_enabled | Switch | If sunlight correction is enabled | R |
|
||||
| using_emergency_heat | Switch | If the system is currently using emergency heat | R |
|
||||
| Channel Type ID | Item Type | Description | Read Write |
|
||||
|-----------------------------|----------------------|----------------------------------------------------------------------------------------|:----------:|
|
||||
| can_cool | Switch | If the thermostat can actually turn on cooling | R |
|
||||
| can_heat | Switch | If the thermostat can actually turn on heating | R |
|
||||
| eco_max_set_point | Number:Temperature | The eco range max set point temperature | R |
|
||||
| eco_min_set_point | Number:Temperature | The eco range min set point temperature | R |
|
||||
| fan_timer_active | Switch | If the fan timer is engaged | R/W |
|
||||
| fan_timer_duration | Number:Time | Length of time that the fan is set to run (15, 30, 45, 60, 120, 240, 480, 960 minutes) | R/W |
|
||||
| fan_timer_timeout | DateTime | Timestamp when the fan stops running | R |
|
||||
| has_fan | Switch | If the thermostat can control the fan | R |
|
||||
| has_leaf | Switch | If the thermostat is currently in a leaf mode | R |
|
||||
| humidity | Number:Dimensionless | Indicates the current relative humidity | R |
|
||||
| last_connection | DateTime | Timestamp of the last successful interaction with Nest | R |
|
||||
| locked | Switch | If the thermostat has the temperature locked to only be within a set range | R |
|
||||
| locked_max_set_point | Number:Temperature | The locked range max set point temperature | R |
|
||||
| locked_min_set_point | Number:Temperature | The locked range min set point temperature | R |
|
||||
| max_set_point | Number:Temperature | The max set point temperature | R/W |
|
||||
| min_set_point | Number:Temperature | The min set point temperature | R/W |
|
||||
| mode | String | Current mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R/W |
|
||||
| previous_mode | String | The previous mode of the Nest thermostat (HEAT, COOL, HEAT_COOL, ECO, OFF) | R |
|
||||
| state | String | The active state of the Nest thermostat (HEATING, COOLING, OFF) | R |
|
||||
| temperature | Number:Temperature | Current temperature | R |
|
||||
| time_to_target | Number:Time | Time left to the target temperature approximately | R |
|
||||
| set_point | Number:Temperature | The set point temperature | R/W |
|
||||
| sunlight_correction_active | Switch | If sunlight correction is active | R |
|
||||
| sunlight_correction_enabled | Switch | If sunlight correction is enabled | R |
|
||||
| using_emergency_heat | Switch | If the system is currently using emergency heat | R |
|
||||
|
||||
Note that the Nest API rounds Thermostat values so they will differ from what shows up in the Nest App.
|
||||
The Nest API applies the following rounding:
|
||||
|
@ -169,15 +194,26 @@ Bridge nest:account:demo_account [ productId="8fdf9885-ca07-4252-1aa3-f3d5ca9589
|
|||
|
||||
```
|
||||
/* Camera */
|
||||
String Cam_App_URL "App URL [%s]" { channel="nest:camera:demo_account:fish_cam:app_url" }
|
||||
Switch Cam_Audio_Input_Enabled "Audio Input Enabled" { channel="nest:camera:demo_account:fish_cam:audio_input_enabled" }
|
||||
DateTime Cam_Last_Online_Change "Last Online Change [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:camera:demo_account:fish_cam:last_online_change" }
|
||||
String Cam_Snapshot_URL "Snapshot URL [%s]" { channel="nest:camera:demo_account:fish_cam:snapshot_url" }
|
||||
Switch Cam_Streaming "Streaming" { channel="nest:camera:demo_account:fish_cam:streaming" }
|
||||
Switch Cam_Public_Share_Enabled "Public Share Enabled" { channel="nest:camera:demo_account:fish_cam:public_share_enabled" }
|
||||
String Cam_Public_Share_URL "Public Share URL [%s]" { channel="nest:camera:demo_account:fish_cam:public_share_url" }
|
||||
Switch Cam_Video_History_Enabled "Video History Enabled" { channel="nest:camera:demo_account:fish_cam:video_history_enabled" }
|
||||
String Cam_Web_URL "Web URL [%s]" { channel="nest:camera:demo_account:fish_cam:web_url" }
|
||||
String Cam_App_URL "App URL [%s]" { channel="nest:camera:demo_account:fish_cam:camera#app_url" }
|
||||
Switch Cam_Audio_Input_Enabled "Audio Input Enabled" { channel="nest:camera:demo_account:fish_cam:camera#audio_input_enabled" }
|
||||
DateTime Cam_Last_Online_Change "Last Online Change [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:camera:demo_account:fish_cam:camera#last_online_change" }
|
||||
String Cam_Snapshot_URL "Snapshot URL [%s]" { channel="nest:camera:demo_account:fish_cam:camera#snapshot_url" }
|
||||
Switch Cam_Streaming "Streaming" { channel="nest:camera:demo_account:fish_cam:camera#streaming" }
|
||||
Switch Cam_Public_Share_Enabled "Public Share Enabled" { channel="nest:camera:demo_account:fish_cam:camera#public_share_enabled" }
|
||||
String Cam_Public_Share_URL "Public Share URL [%s]" { channel="nest:camera:demo_account:fish_cam:camera#public_share_url" }
|
||||
Switch Cam_Video_History_Enabled "Video History Enabled" { channel="nest:camera:demo_account:fish_cam:camera#video_history_enabled" }
|
||||
String Cam_Web_URL "Web URL [%s]" { channel="nest:camera:demo_account:fish_cam:camera#web_url" }
|
||||
String Cam_LE_Activity_Zones "Last Event Activity Zones [%s]" { channel="nest:camera:demo_account:fish_cam:last_event#activity_zones" }
|
||||
String Cam_LE_Animated_Image_URL "Last Event Animated Image URL [%s]" { channel="nest:camera:demo_account:fish_cam:last_event#animated_image_url" }
|
||||
String Cam_LE_App_URL "Last Event App URL [%s]" { channel="nest:camera:demo_account:fish_cam:last_event#app_url" }
|
||||
DateTime Cam_LE_End_Time "Last Event End Time [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:camera:demo_account:fish_cam:last_event#end_time" }
|
||||
Switch Cam_LE_Has_Motion "Last Event Has Motion" { channel="nest:camera:demo_account:fish_cam:last_event#has_motion" }
|
||||
Switch Cam_LE_Has_Person "Last Event Has Person" { channel="nest:camera:demo_account:fish_cam:last_event#has_person" }
|
||||
Switch Cam_LE_Has_Sound "Last Event Has Sound" { channel="nest:camera:demo_account:fish_cam:last_event#has_sound" }
|
||||
String Cam_LE_Image_URL "Last Event Image URL [%s]" { channel="nest:camera:demo_account:fish_cam:last_event#image_url" }
|
||||
DateTime Cam_LE_Start_Time "Last Event Start Time [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:camera:demo_account:fish_cam:last_event#start_time" }
|
||||
DateTime Cam_LE_URLs_Expire_Time "Last Event URLs Expire Time [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:camera:demo_account:fish_cam:last_event#urls_expire_time" }
|
||||
String Cam_LE_Web_URL "Last Event Web URL [%s]" { channel="nest:camera:demo_account:fish_cam:last_event#web_url" }
|
||||
|
||||
/* Smoke Detector */
|
||||
String Smoke_CO_Alarm "CO Alarm [%s]" { channel="nest:smoke_detector:demo_account:hallway_smoke:co_alarm_state" }
|
||||
|
@ -191,12 +227,14 @@ String Smoke_UI_Color "UI Color [%s]"
|
|||
/* Thermostat */
|
||||
Switch Thermostat_Can_Cool "Can Cool" { channel="nest:thermostat:demo_account:living_thermostat:can_cool" }
|
||||
Switch Thermostat_Can_Heat "Can Heat" { channel="nest:thermostat:demo_account:living_thermostat:can_heat" }
|
||||
Number:Temperature Therm_EMaxSP "Eco Max Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:eco_max_set_point" }
|
||||
Number:Temperature Therm_EMinSP "Eco Min Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:eco_min_set_point" }
|
||||
Switch Thermostat_FT_Active "Fan Timer Active" { channel="nest:thermostat:demo_account:living_thermostat:fan_timer_active" }
|
||||
Number Thermostat_FT_Duration "Fan Timer Duration" { channel="nest:thermostat:demo_account:living_thermostat:fan_timer_duration" }
|
||||
Number:Time Thermostat_FT_Duration "Fan Timer Duration [%d %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:fan_timer_duration" }
|
||||
DateTime Thermostat_FT_Timeout "Fan Timer Timeout [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:thermostat:demo_account:living_thermostat:fan_timer_timeout" }
|
||||
Switch Thermostat_Has_Fan "Has Fan" { channel="nest:thermostat:demo_account:living_thermostat:has_fan" }
|
||||
Switch Thermostat_Has_Leaf "Has Leaf" { channel="nest:thermostat:demo_account:living_thermostat:has_leaf" }
|
||||
Number Thermostat_Humidity "Humidity [%.1f %%]" { channel="nest:thermostat:demo_account:living_thermostat:humidity" }
|
||||
Number:Dimensionless Therm_Hum "Humidity [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:humidity" }
|
||||
DateTime Thermostat_Last_Conn "Last Connection [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:thermostat:demo_account:living_thermostat:last_connection" }
|
||||
Switch Thermostat_Locked "Locked" { channel="nest:thermostat:demo_account:living_thermostat:locked" }
|
||||
Number:Temperature Therm_LMaxSP "Locked Max Set Point [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:locked_max_set_point" }
|
||||
|
@ -210,7 +248,7 @@ Number:Temperature Thermostat_SP "Set Point [%.1f %unit%]"
|
|||
Switch Thermostat_Sunlight_CA "Sunlight Correction Active" { channel="nest:thermostat:demo_account:living_thermostat:sunlight_correction_active" }
|
||||
Switch Thermostat_Sunlight_CE "Sunlight Correction Enabled" { channel="nest:thermostat:demo_account:living_thermostat:sunlight_correction_enabled" }
|
||||
Number:Temperature Therm_Temp "Temperature [%.1f %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:temperature" }
|
||||
Number Thermostat_Time_To_Target "Time To Target [%s]" { channel="nest:thermostat:demo_account:living_thermostat:time_to_target_mins" }
|
||||
Number:Time Therm_Time_To_Target "Time To Target [%d %unit%]" { channel="nest:thermostat:demo_account:living_thermostat:time_to_target" }
|
||||
Switch Thermostat_Using_Em_Heat "Using Emergency Heat" { channel="nest:thermostat:demo_account:living_thermostat:using_emergency_heat" }
|
||||
|
||||
/* Structure */
|
||||
|
@ -222,6 +260,7 @@ DateTime Home_PP_End_Time "PP End Time [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%
|
|||
DateTime Home_PP_Start_Time "PP Start Time [%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS]" { channel="nest:structure:demo_account:home:peak_period_start_time" }
|
||||
String Home_Postal_Code "Postal Code [%s]" { channel="nest:structure:demo_account:home:postal_code" }
|
||||
Switch Home_Rush_Hour_Rewards "Rush Hour Rewards" { channel="nest:structure:demo_account:home:rush_hour_rewards_enrollment" }
|
||||
String Home_Security_State "Security State [%s]" { channel="nest:structure:demo_account:home:security_state" }
|
||||
String Home_Smoke_Alarm_State "Smoke Alarm State [%s]" { channel="nest:structure:demo_account:home:smoke_alarm_state" }
|
||||
String Home_Time_Zone "Time Zone [%s]" { channel="nest:structure:demo_account:home:time_zone" }
|
||||
```
|
||||
|
|
|
@ -100,6 +100,7 @@ String NestHome_time_zone "Time Zone [%s]" {nest="<[structures(Home).
|
|||
String NestHome_away "Away [%s]" {nest="=[structures(Home).away]"}
|
||||
String NestHome_structure_id "Structure Id [%s]" {nest="<[structures(Home).structure_id]"}
|
||||
Switch NestHome_rhr_enrollment "Rush Hour Rewards Enrollment [%s]" {nest="<[structures(Home).rhr_enrollment]"} // as of 1.9
|
||||
String NestHome_wwn_security_state "Structure security state [%s]" {nest="<[structures(Home).wwn_security_state]"} // "ok" or "deter"
|
||||
String NestHome_co_alarm_state "Home CO [%s]" {nest="<[structures(Home).co_alarm_state]"} // as of 1.9
|
||||
String NestHome_smoke_alarm_state "Home Smoke [%s]" {nest="<[structures(Home).smoke_alarm_state]"} // as of 1.9
|
||||
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
---
|
||||
id: solarlog
|
||||
label: Solar-Log
|
||||
title: Solar-Log - Bindings
|
||||
type: binding
|
||||
description: "The [Solar-Log Family](http://www.solar-log.com/en/home.html) of monitoring devices for PV installations provide a MODBUS (TCP) and JSON-based API to access a number of internal data related to power generation and consumption. This binding implements access to the data via the JSON API."
|
||||
since: 2x
|
||||
install: auto
|
||||
---
|
||||
|
||||
<!-- Attention authors: Do not edit directly. Please add your changes to the appropriate source repository -->
|
||||
|
||||
{% include base.html %}
|
||||
|
||||
# Solar-Log Binding
|
||||
|
||||
The [Solar-Log Family](http://www.solar-log.com/en/home.html) of monitoring devices for PV installations provide a MODBUS (TCP) and JSON-based API to access a number of internal data related to power generation and consumption. This binding implements access to the data via the JSON API.
|
||||
|
||||
## Use of the binding
|
||||
|
||||
The Solar-Log is exposed as one thing with a number of channels that can be used to read the values for different aspects of your Solar-Log installation.
|
||||
|
||||
## Setup of the binding
|
||||
|
||||
You can either configure the Thing via the openHAB UI or via a `*.things` file, according to the following example:
|
||||
|
||||
`Thing solarlog:meter:pv "Solar-Log 300" @ "Utility Room" [ url="http://solar-log" refreshInterval=15]`
|
||||
|
||||
The parameters to be used are simple:
|
||||
|
||||
* `url` denotes the URL of your Solar-Log. If you have not changed anything, this defaults to `http://solar-log`.
|
||||
* `refreshInterval` is the interval to fetch new data. Solar-Log updates its data every 15 - 60 seconds. `15` is the default value. Values lower than this will return the result from the last 15 seconds period. No value lower than this can be set in the UI.
|
||||
|
||||
Currently, the binding does not support authenticated access to the Solar-Log JSON API (which was introduced with newer firmwares). If must set the API access to `Open` in the Solar-Log configuration in order for the binding to work.
|
||||
|
||||
## Available channels
|
||||
|
||||
The following table is taken from the official manual and contains all available channels. If you want to manually define Items, this can for example be done as follows:
|
||||
|
||||
`Number solarlog_meter_pv_yieldday "Yield Day [% W]" (gSolarLog, gUtilityRoom) { channel="solarlog:meter:pv:yieldday" }`
|
||||
|
||||
Data point | Unit | Index Description
|
||||
------------------- | --------------------- | -----------------
|
||||
lastupdate | Time in the format dd.mm.yy; hh.minmin, secsec | 100 Time
|
||||
pac | W | 101 Total output PAC from all of the inverters and meters in inverter mode
|
||||
pdc | W | 102 Total output PAC from all of the inverters
|
||||
uac | V | 103 Average voltage UAC from the inverter
|
||||
udc | V | 104 Average voltage UDC from the inverter
|
||||
yieldday | Wh | 105 Total yield for the day from all of the inverters
|
||||
yieldyesterday | Wh | 106 Total yield for the previous day from all of the inverters
|
||||
yieldmonth | Wh | 107 Total yield for the month from all of the inverters
|
||||
yieldyear | Wh | 108 Total yield for the year from all of the inverters
|
||||
yieldtotal | Wh | 109 Total yield from all of the inverters
|
||||
conspac | W | 110 Current total consumption PAC from all of the consumption meters
|
||||
consyieldday | Wh | 111 Total consumption from all of the consumption meters
|
||||
consyieldyesterday | Wh | 112 Total consumption for the previous day; all of the consumption meters
|
||||
consyieldmonth | Wh | 113 Total consumption for the month; all of the consumption meters
|
||||
consyieldyear | Wh | 114 Total consumption for the year; all of the consumption meters
|
||||
consyieldtotal | Wh | 115 Accumulated total consumption, all Consumption meter
|
||||
totalPower | Wp | 116 Installed generator power
|
||||
|
||||
## More information
|
||||
|
||||
More information about the Solar-Log Data interfaces and the exact meaning of the various channels and the documentation of the JSON API can be found in the [Manual](https://www.solar-log.com/manuals/manuals/en_GB/SolarLog_Manual_3x_EN.pdf).
|
|
@ -27,18 +27,18 @@ Given a retrieved XML
|
|||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<PTZStatus version="2.0" >
|
||||
<AbsoluteHigh>
|
||||
<elevation>0</elevation>
|
||||
<azimuth>450</azimuth>
|
||||
<absoluteZoom>10</absoluteZoom>
|
||||
</AbsoluteHigh>
|
||||
<AbsoluteHigh>
|
||||
<elevation>0</elevation>
|
||||
<azimuth>450</azimuth>
|
||||
<absoluteZoom>10</absoluteZoom>
|
||||
</AbsoluteHigh>
|
||||
</PTZStatus>
|
||||
```
|
||||
|
||||
The XPath `/PTZStatus/AbsoluteHigh/azimuth/text()` returns the document
|
||||
|
||||
```
|
||||
<azimuth>450</azimuth>
|
||||
450
|
||||
```
|
||||
|
||||
## Advanced Example
|
||||
|
@ -50,11 +50,11 @@ Given a retrieved XML (e.g. from an HIK Vision device with the namespace `xmlns=
|
|||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<PTZStatus version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
|
||||
<AbsoluteHigh>
|
||||
<elevation>0</elevation>
|
||||
<azimuth>450</azimuth>
|
||||
<absoluteZoom>10</absoluteZoom>
|
||||
</AbsoluteHigh>
|
||||
<AbsoluteHigh>
|
||||
<elevation>0</elevation>
|
||||
<azimuth>450</azimuth>
|
||||
<absoluteZoom>10</absoluteZoom>
|
||||
</AbsoluteHigh>
|
||||
</PTZStatus>
|
||||
```
|
||||
|
||||
|
@ -79,7 +79,7 @@ returns
|
|||
**.items**
|
||||
|
||||
```csv
|
||||
String Temperature_xml "Temperature [JSONPATH([name()='PTZStatus']/*[name()='AbsoluteHigh']/*[name()='azimuth']/):%s °C]" {...}
|
||||
String Temperature_xml "Temperature [XPATH(/*[name()='PTZStatus']/*[name()='AbsoluteHigh']/*[name()='azimuth']/):%s °C]" {...}
|
||||
Number Temperature "Temperature [%.1f °C]"
|
||||
```
|
||||
|
||||
|
@ -89,24 +89,24 @@ Number Temperature "Temperature [%.1f °C]"
|
|||
rule "Convert XML to Item Type Number"
|
||||
when
|
||||
Item Temperature_xml changed
|
||||
then
|
||||
then
|
||||
// use the transformation service to retrieve the value
|
||||
// Simple
|
||||
val mytest = transform("XPATH", "/*[name()='PTZStatus']
|
||||
/*[name()='AbsoluteHigh']
|
||||
/*[name()='azimuth']
|
||||
/text()",
|
||||
Temperature_xml.state.toString )
|
||||
// Fully qualified
|
||||
val mytest = transform("XPATH", "/*[local-name()='PTZStatus' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
|
||||
/*[local-name()='AbsoluteHigh' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
|
||||
/*[local-name()='azimuth' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
|
||||
/text()",
|
||||
Temperature_xml.state.toString )
|
||||
|
||||
// Simple
|
||||
val mytest = transform("XPATH", "/*[name()='PTZStatus']
|
||||
/*[name()='AbsoluteHigh']
|
||||
/*[name()='azimuth']
|
||||
/text()",
|
||||
Temperature_xml.state.toString )
|
||||
// Fully qualified
|
||||
val mytest = transform("XPATH", "/*[local-name()='PTZStatus' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
|
||||
/*[local-name()='AbsoluteHigh' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
|
||||
/*[local-name()='azimuth' and namespace-uri()='http://www.hikvision.com/ver20/XMLSchema']
|
||||
/text()",
|
||||
Temperature_xml.state.toString )
|
||||
|
||||
// post the new value to the Number Item
|
||||
Temperature.postUpdate( newValue )
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
Now the resulting Number can also be used in the label to [change the color](https://docs.openhab.org/configuration/sitemaps.html#label-and-value-colors) or in a rule as value for comparison.
|
||||
|
|
|
@ -11,20 +11,21 @@ HVAC,"Air condition devices, Fans",
|
|||
Inverter,"Power inverter, such as solar inverters etc.",
|
||||
LawnMower,"Lawn mowing robots, etc.",lawnmower.png
|
||||
Lightbulb,"Devices that illuminate something, such as bulbs, etc.",lightbulb.png
|
||||
Lock,"Devices whose primary pupose is locking something",lock.png
|
||||
Lock,"Devices whose primary purpose is locking something",lock.png
|
||||
MotionDetector,"Motion sensors/detectors",
|
||||
NetworkAppliance,"Bridges/Gateway need to access other devices like used by Philips Hue for example, Routers, Switches",
|
||||
PowerOutlet,"Small devices to be plugged into a power socket in a wall which stick there",poweroutlet.png
|
||||
Projector,"Devices that project a picture somewhere",projector.png
|
||||
RadiatorControl,"Controls on radiators used to heat up rooms",
|
||||
Receiver,"Audio/Video receivers, i.e. radio receivers, satelite or cable receivers, recorders, etc.",receiver.png
|
||||
Receiver,"Audio/Video receivers, i.e. radio receivers, satellite or cable receivers, recorders, etc.",receiver.png
|
||||
RemoteControl,"Any portable or hand-held device that controls the status of something, e.g. remote control, keyfob etc."
|
||||
Screen,"Devices that are able to show a picture",screen.png
|
||||
Sensor,"Device used to measure something",
|
||||
Siren,"Siren used by Alarm systems",siren.png
|
||||
SmokeDetector,"Smoke detectors",
|
||||
Speaker,"Devices that are able to play sounds",
|
||||
WallSwitch,"Any device attached to the wall that controls the status of something, for ex. a light switch, dimmer",wallswitch.png
|
||||
Valve,"Valves used to control water or gas. e.g. a flow stop valve.",
|
||||
WallSwitch,"Any device attached to the wall that controls the status of something, e.g. a light switch, dimmer",wallswitch.png
|
||||
WebService,"Account with credentials for a website",
|
||||
Window,"Window",window.png
|
||||
WhiteGood,"Devices that look like Waschingmachines, Dishwashers, Dryers, Fridges, Ovens, etc.",whitegood.png
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 21.
|
Binary file not shown.
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Binary file not shown.
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 48 KiB |
Loading…
Reference in New Issue