This page is part of archived documentation for openHAB 2.5. Go to the current stable version
# Koubachi Binding v1
The Koubachi (opens new window) Services help everybody without a green thumb to be a perfect gardener. All plants can be registered on their really nice website (or through iPhone/iPad App) to tell you when and how to care for your plants. Furthermore they offer a dedicated hardware, the WIFI Plant Sensor. This wireless device measures vital parameters and determines the vitality of your plants.
Koubachis' slogan "give your plants a voice" becomes reality with this binding. It queries all relevant data through Koubachi's webservice (opens new window) and pushes it into openHAB.
# Prerequisites
Before using the Koubachi services one has to register free of charge at Koubachi-Labs (opens new window) website for API access. Once the account is created the credentials and personal appKey can be obtained from the portal.
# Binding Configuration
This binding can be configured in the file services/koubachi.cfg
.
Property | Default | Required | Description |
---|---|---|---|
refresh | 900000 | No | The refresh interval in milliseconds. Default is 900000, the same as 15 minutes. |
deviceurl | https://api.koubachi.com/v2/user/smart_devices?user_credentials=%1$s&app_key=%2$s | The Koubachi API URL of the device list. | |
planturl | https://api.koubachi.com/v2/plants?user_credentials=%1$s&app_key=%2$s | The Koubachi API URL of the plant list. | |
credentials | Yes | The single access token configured obtained from http://labs.koubachi.com (see Prerequisites) | |
appkey | Yes | The personal appKey obtained from http://labs.koubachi.com (see Prerequisites) |
# Example services/koubachi.cfg
appkey=KLABPLQP365CNQRIG0HY2DEX
credentials=fMWNa6uR-KJtoidLe11k
# Item Configuration
In order to bind an item to a Koubachi resource query you need to provide configuration settings. The easiest way to do this is to add some binding information in your item file (in the folder configurations/items`). The syntax for the Koubachi binding configuration string is as follows:
koubachi="<device | plant>:<resourceId>:<propertyName>"
You can also bind to the action types in the Koubachi API using the keyword "action" and then the action type.
koubachi="plant:<resourceId>:action:<actionType>"
What actions can actually be performed on a specific plant depends on the type of Koubachi device used.
Here are some examples for valid item configuration strings:
device:00066680190e:virtualBatteryLevel
device:00066680190e:nextTransmission
plant:129892:vdmMistLevel
plant:129892:vdmWaterInstruction
plant:129892:action:mist.performed
# Property Names
# for Device Resource type
- virtualBatteryLevel (Number)
- ssid (String)
- hardwareProductType (String)
- lastTransmission (!DateTime)
- nextTransmission (!DateTime)
- associatedSince (!DateTime)
- recentSoilmoistureReadingValue (String)
- recentSoilmoistureReadingTime (!DateTime)
- recentSoilmoistureReadingSiValue (Number) (available since 1.9)
- recentTemperatureReadingValue (String)
- recentTemperatureReadingTime (!DateTime)
- recentTemperatureReadingSiValue (Number) (available since 1.9)
- recentLightReadingValue (String)
- recentLightReadingTime (!DateTime)
- recentLightReadingSiValue (Number) (available since 1.9)
- recentSoiltemperatureReadingValu (String) (available since 1.9)
- recentSoiltemperatureReadingTime (!DateTime) (available since 1.9)
- recentSoiltemperatureReadingSiValue (Number) (available since 1.9)
- soiltemperaturePollingInterval (Number) (available since 1.9)
- recentIrlightReadingValue (String) (available since 1.9)
- recentIrlightReadingTime (DateTime) (available since 1.9)
- recentIrlightReadingSiValue (Number) (available since 1.9)
- hardwareProductGeneration (String) (available since 1.9)
- hardwareProductName (String) (available since 1.9)
# for Plant Resource type
- name (String)
- location (String)
- lastFertilizerAt (!DateTime)
- nextFertilizerAt (!DateTime)
- lastMistAt (!DateTime)
- nextMistAt (!DateTime)
- lastWaterAt (!DateTime)
- nextWaterAt (!DateTime)
- vdmWaterInstruction (String)
- vdmWaterLevel (Number)
- vdmMistInstruction (String)
- vdmMistLevel (Number)
- vdmFertilizerInstruction (String)
- vdmFertilizerLevel (Number)
- vdmTemperatureHint (String)
- vdmTemperatureInstruction (String)
- vdmTemperatureLevel (Number)
- vdmLightHint (String)
- vdmLightInstruction (String)
- vdmLightLevel (Number)
# Plant actions
- calibration.watered (Switch)
- calibration.is_dry (Switch)
- calibration.is_not_dry (Switch)
- calibration.restarted (Switch)
- water.performed (Switch)
- mist.skipped (Switch)
- mist.performed (Switch)
- fertilize.skipped (Switch)
- fertilize.performed (Switch)
- put_into_light.performed (Switch)
- put_into_shade.performed (Switch)
- heat_plant.performed (Switch)
- cool_plant.performed (Switch)
As a result, your lines in the items file might look like as follows:
DateTime Device_00066680190e_AssociatedSince "Assoc. since [%1$td.%1$tm.%1$tY %1$tT]" <grass> (Device_00066680190e) { koubachi="device:00066680190e:associatedSince" }
String Device_00066680190e_Soilmoisture "Soilmoisture [%s]" <grass> (Device_00066680190e) { koubachi="device:00066680190e:recentSoilmoistureReadingValue" }
String Device_00066680190e_Temperature "Temperature [%s]" <grass> (Device_00066680190e) { koubachi="device:00066680190e:recentTemperatureReadingValue" }
String Hortensie_Name "Name [%s]" <grass> (Hortensie) { koubachi="plant:129892:name" }
Number Hortensie_Mist_Level "Mist Level [%.2f]" <grass> (Hortensie) { koubachi="plant:129892:vdmMistLevel" }
Number Hortensie_Water_Level "Water Level [%.2f]" <grass> (Hortensie) { koubachi="plant:129892:vdmWaterLevel" }
Switch Hortensie_Fertilized "Fertilization done" <grass> (Hortensie) { koubachi="plant:129892:action:fertilize.performed" }
# Example
To remind you to give your plant water use the following rule. First need the water level Item and some block Item to don't spam your self.
# Items
String plant1_Water_Level "Water Level [%s]" <grass> (gPL) { koubachi="device:00066672ef98:recentSoilmoistureReadingValue" }
Switch plantbswitch90 (gPL)
Switch plantbswitch80 (gPL)
Switch plantbswitch70 (gPL)
Switch plantbswitch60 (gPL)
Switch plantbswitch50 (gPL)
Switch plantbswitch40 (gPL)
Switch plantbswitch30 (gPL)
# Rules
rule "water level"
when
Item plant1_Water_Level received update
then
var level = plant1_Water_Level.state
if (plant1_Water_Level.state.toString.matches("9. %") && plantbswitch90.state == OFF) {
sendMail("[email protected]", "Zamioculcas_zamiifolia", "I am well!My water level is " + level, "http://192.168.177.138/flower1.jpg")
plantbswitch90.sendCommand(ON)
plantbswitch80.sendCommand(OFF)
plantbswitch70.sendCommand(OFF)
plantbswitch60.sendCommand(OFF)
plantbswitch50.sendCommand(OFF)
plantbswitch40.sendCommand(OFF)
plantbswitch30.sendCommand(OFF)
}
if (plant1_Water_Level.state.toString.matches("8. %") && plantbswitch80.state == OFF ){
sendMail("[email protected]", "Zamioculcas_zamiifolia", "I am still well! My water level is " + level ,"http://192.168.177.138/flower1.jpg")
plantbswitch80.sendCommand(ON)
plantbswitch90.sendCommand(OFF)
}
if (plant1_Water_Level.state.toString.matches("7. %") && plantbswitch70.state == OFF ){
sendMail("[email protected]", "Zamioculcas_zamiifolia", "I am still well! My water level is " + level ,"http://192.168.177.138/flower1.jpg")
plantbswitch70.sendCommand(ON)
}
if (plant1_Water_Level.state.toString.matches("6. %") && plantbswitch60.state == OFF ){
sendMail("[email protected]", "Zamioculcas_zamiifolia", "I am still well! My water level is " + level ,"http://192.168.177.138/flower1.jpg")
plantbswitch60.sendCommand(ON)
}
if (plant1_Water_Level.state.toString.matches("5. %") && plantbswitch50.state == OFF ){
sendMail("[email protected]", "Zamioculcas_zamiifolia", "Next I need water! My water level is " + level ,"http://192.168.177.138/flower1.jpg")
plantbswitch50.sendCommand(ON)
}
if (plant1_Water_Level.state.toString.matches("4. %") && plantbswitch40.state == OFF ){
sendMail("[email protected]", "Zamioculcas_zamiifolia", "I need water! Please give me water. My water level is" + level ,"http://192.168.177.138/flower1.jpg")
plantbswitch40.sendCommand(ON)
}
if (plant1_Water_Level.state.toString.matches("3. %") && plantbswitch30.state == OFF) {
sendMail("[email protected]", "Zamioculcas_zamiifolia", "I realy need water! Please give me water ore i will di. My water level is " + level ,"http://192.168.177.138/flower1.jpg")
plantbswitch30.sendCommand(ON)
}
end
rule "set switch to off at start"
when
System started
then
plantbswitch90.sendCommand(OFF)
plantbswitch80.sendCommand(OFF)
plantbswitch70.sendCommand(OFF)
plantbswitch60.sendCommand(OFF)
plantbswitch50.sendCommand(OFF)
plantbswitch40.sendCommand(OFF)
plantbswitch30.sendCommand(OFF)
end
← Kostal Inverter KVV →