This page is part of archived documentation for openHAB 4.0. Go to the current stable version
# 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 if files are uploaded to FTP server continuously (e.g. network camera images).
# 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 |
passivePorts | Passive Ports | A string of passive ports, can contain a single port (as an integer), multiple ports seperated by commas (e.g. 123,124,125) or ranges of ports, including open ended ranges (e.g. 123-125, 30000-, -1023). Combinations for single ports and ranges is also supported. Empty (default) allows all ports as passive ports. | no |
# Thing Configuration
The ftpupload
Thing has the following configuration parameters:
Parameter | Description | Required | Default value |
---|---|---|---|
userName | User name to login to the FTP server. User name is used to identify the Thing, so it should be unique per Thing. | yes | |
password | Password to login to the FTP server. | yes |
# Channels
This binding currently supports the following channels:
Channel | Channel Type Id | Item Type | Description |
---|---|---|---|
image | image-channel | Image | Image file received via FTP. |
Additionally user can introduce custom image-channel's to Thing (see examples). 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.