Hi, is there anyone that knows if it is possible to bind Ventus plant sensor to Openhab? They are way cheaper then the koubachi sensors, so then it is possible to get several of them.
They uses 433MHz RF signals, what dongle do I need to fetch the signals?
I only spent the briefest of time looking but my first impression would be no, you cannot interface these senors with OH without a whole lot of work on your part. This vendor is not listed as supported by the RFXCOM binding which appears to be the binding for these sorts of devices.
Getting a USB dongle to send/receive on 433MHz only gives you half of the solution. You also need to know what messages to send and receive and in what formats. From what I could tell in my brief looking these sensors do not have a published messaging API so you will have to reverse engineer the messages. This is not a small effort.
Assuming that you did manage to reverse engineer the message protocol you would then either use the Serial binding to communicate with a USB 433MHz transceiver, update the RFXCOM binding, or have to write a new binding to support the new protocol.
But I didnāt spend much time searching on this. Someone more knowledgeable might prove me wrong.
Another option is to use the electronics directly but put in an esp8266 as the brain.
This one is cheaper then koubachi but still 4x the ventus oneā¦
So finally I got a round to work on my plant project:)
So a while back I backed WIO Link on kickstarter. So I took this shield hooked up a pump true a groove relay a groove moisture sensor and got it up running with ifttt.
So thats all fine, however I would like to add it to openhab. I can do this in various way, ifttt,https, curl . I think https is the easiest and best right?
So I start with defining a number for the moisture level:
Number plant1Moisture "Moisture [%1I]" <moisture> (groupPlant) { http="<[https://iot.seeed.cc/v1/node/GroveMoistureA0/moisture?access_token=30f76b7aac3eb14a6993c1f9dbadd0d1]" }
the call returns : {āmoistureā: 720} where number is any value between 0 and 1023
So my questions are:
How do I get the number correctly in to the numberItem.
How often will the number be updated?
How can i display the number in my sitemap as:To wet, Moist and dry ?
and then I need to create rule if the moisture level is to low then send
https://iot.seeed.cc/v1/node/GroveRelayD0/onoff/[on]?access_token=30f76b7aac3eb14a6993c1f9dbadd0 to start the pump. Leave the pump on for 5s then switch it off and check the moisture level again after 15min or so, when the water has spread in the soil.
Any help will be highly appreciated.
The value returned is JSON. If it is always just the one value you can probably get away with just using a regular expression:
REGEX(.*\"moisture\"\:[\s]+([\d]+).*)
which will extract one or more digits which follow 'āmoistureā: '.
If the returned values can be more complex JSON it might be worth setting up a rule to parse the JSON and extract the value and/or extract multiple values and populate a bunch of Items based on one request.
You can also do a JSON parse and extraction using the JavaScript Transform as documented on the HTTP bindingās wiki page.
Per the HTTP binding wiki page:
By default, the binding checks once every second (1000 milliseconds) to see if any bound items should be retrieved.
The easiest would probably be a proxy Item and a rule to convert a range of values into the indicated String.
val DateTime pumpOn = null
rule "Turn on pump"
when
Item plant1Moisture changed
then
if((plant1Moisture.state as DecimalType) < 50 && (pumpOn == null || pumpOn.isBefore(now.minusMinutes(15)) {
sendHttpGetRequest("https://iot.seeed.cc/v1/node/GroveRelayD0/onoff/[on]?access_token=30f76b7aac3eb14a6993c1f9dbadd0")
Thread::sleep(5000)
sendHttpGetRequest("https://iot.seeed.cc/v1/node/GroveRelayD0/onoff/[off]?access_token=30f76b7aac3eb14a6993c1f9dbadd0")
pumpOn = now
}
end
Theory of operation:
The rule triggers when the moisture level changes. If the reading is too low and it has been at least 15 minutes since we last turned on the pump, turn it on, wait five seconds, then turn is off.
Thanks, I am working on it now.
my plant.items file now looki like this:
Number Plant_Moisture "Moisture" <humidity> (Group_Plant) {http="<[https://iot.seeed.cc/v1/node/GroveMoistureA0/moisture?access_token=30f76b7aac3eb14a6993c1f9dbadd0d1:60000:REGEX(.*\"moisture\"\:[\s]+([\d]+).*)]" }
However the file will not load into the designer:
Any idea what I can do to be able to use the designer?
hmm
My log file spits out:
18:20:02.370 [INFO ] [c.internal.ModelRepositoryImpl:98 ] - Refreshing model 'plant.items'
18:20:02.379 [DEBUG] [i.internal.GenericItemProvider:154 ] - Processing binding configs for items from model 'plant.items'
18:20:02.381 [WARN ] [h.i.HttpGenericBindingProvider:105 ] - bindingConfig is NULL (item=Plant_Moisture (Type=NumberItem, State=Uninitialized)) -> process bindingConfig aborted!
18:20:02.383 [DEBUG] [i.internal.GenericItemProvider:419 ] - Couldn't find ItemFactory for item 'null' of type 's'
18:20:02.385 [DEBUG] [i.internal.GenericItemProvider:419 ] - Couldn't find ItemFactory for item 'null' of type 'd'
I did install the http binding and added to my sitemap as follow:
Frame label="Plants" {
Text item=Plant_Moisture icon="humidity"
}
Where the plant Item is:
Number Plant_Moisture "Moisture [%d %%]" <humidity> (Group_Plant) {http="<[https://iot.seeed.cc/v1/node/GroveMoistureA0/moisture?access_token=30f76b7aac3eb14a6993c1f9dbadd0d1:1000:REGEX(.*\"moisture\"\:[\s]+([\d]+).*)]" }
It looks like there might be a syntax error of some sort in that Items file. There is nothing obvious in your pasted in code but that is the first thing I would check.
Try commenting the Item out and gradually adding in parts until the error reappears.
after rebooting a few times the plant.items file finally got loaded into the designer⦠So the regex you provided has some error mistakes in it. So I figured out i rather start to try get the whole string out.
To do so i have a few question.
can I just define a string item like this:
String Plant_Moisture "Moisture" <humidity> (Group_Plant) {http="<[https://iot.seeed.cc/v1/node/GroveMoistureA0/moisture?access_token=30f76b7aac3eb14a6993c1f9dbadd0d1]"}
How can I add it to my sitemap, or preferably how can I debug it? Like
Serial.println(Plant?Moisture);
When I did so I get these error messages:
Binding configuration of type 'http' of item āPlant_Moistureā could not be parsed correctly.
org.openhab.model.item.binding.BindingConfigParseException: bindingConfig 'https://iot.seeed.cc/v1/node/GroveMoistureA0/moisture?access_token=30f76b7aac3eb14a6993c1f9dbadd0d1' doesn't represent a valid in-binding-configuration. A valid configuration is matched by the RegExp '(.*?)(\{.*\})?:(?!//)(\d*):(.*)'
at org.openhab.binding.http.internal.HttpGenericBindingProvider.parseInBindingConfig(HttpGenericBindingProvider.java:171) ~[na:na]
at org.openhab.binding.http.internal.HttpGenericBindingProvider.parseBindingConfig(HttpGenericBindingProvider.java:136) ~[na:na]
at org.openhab.binding.http.internal.HttpGenericBindingProvider.processBindingConfiguration(HttpGenericBindingProvider.java:101) ~[na:na]
at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:348) [org.openhab.model.item_1.8.0.jar:na]
at org.openhab.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:324) [org.openhab.model.item_1.8.0.jar:na]
at org.openhab.model.item.internal.GenericItemProvider.processBindingConfigsFromModel(GenericItemProvider.java:171) [org.openhab.model.item_1.8.0.jar:na]
at org.openhab.model.item.internal.GenericItemProvider.modelChanged(GenericItemProvider.java:390) [org.openhab.model.item_1.8.0.jar:na]
at org.openhab.model.core.internal.ModelRepositoryImpl.notifyListeners(ModelRepositoryImpl.java:159) [org.openhab.model.core_1.8.0.jar:na]
at org.openhab.model.core.internal.ModelRepositoryImpl.addOrRefreshModel(ModelRepositoryImpl.java:100) [org.openhab.model.core_1.8.0.jar:na]
at org.openhab.model.core.internal.folder.FolderObserver.checkFolder(FolderObserver.java:142) [org.openhab.model.core_1.8.0.jar:na]
at org.openhab.model.core.internal.folder.FolderObserver.run(FolderObserver.java:99) [org.openhab.model.core_1.8.0.jar:na]
Today I came across a better looking device then my homemade sensor:
http://www.gearbest.com/other-garden-supplies/pp_373947.html
So I will keep you guys posted on this sensor as soon as I get it.
Iāve gotten a couple of these working.
My setup is the following:
- Rpi1 with Raspian Jessie and Bluetooth dongle
- I run a script every hour to check the status
- I send data to Openhab using mqtt
I use this script for firmware 2.6.6 to be able to read values:
Running the supplied demo I will get this output:
pi@colibri:~/miflora $ python3 demo.py
Getting data from Mi Flora
FW: 2.6.6
Name: Flower care
Temperature: 21.8
Moisture: 56
Light: 73
Conductivity: 2822
Battery: 100
I will order more sensor right away, seems to me you get quite much for 11$.
I will use my Rpi1 with bluetooth dongle to detect presence as well see @rlkoshak post about presence.
Regards, S
Sweet, Mine still hasnāt arrived!! Its been 22days now, where did you order yours?
Hi!
Ordered them in the 27th of october and they were delivered to Sweden on November 14.
https://m.aliexpress.com/item/32695192704.html
Regards s
I just ordered another 3, from your link. Hopefully I can monitor my Christmas tree:) Can you also show your items and rules files? Maybe we can make a binding out of it.
Iāve not come that far yet.
I only have 2 plants hooked up at the moment.
PlantBenji (Benjamin Ficus) and PlantPiff (Helix)
Items
Group Plants
Group PlantTemperature
Group PlantMoisture
Group PlantLight
Group PlantConductivity
Group PlantBattery
Group PlantBenji "Plant Benji" <plant> (Plants)
Number PlantBenjiTemperature "Benji [%.2f °C]" <temperature> (Temperature, PlantTemperature, gHistory, PlantBenji) { mqtt="<[mosquitto:plants/benji/temp:state:default]" }
Number PlantBenjiMoisture "Benji [%d %%]" <moisture> (PlantMoisture, gHistory, PlantBenji) { mqtt="<[mosquitto:plants/benji/moist:state:default]" }
Number PlantBenjiLight "Benji [%d Lux]" <sun> (PlantLight, gHistory, PlantBenji) { mqtt="<[mosquitto:plants/benji/light:state:default]" }
Number PlantBenjiConductivity "Benji [%d uS/cm]" <conductivity> (PlantConductivity, gHistory, PlantBenji) { mqtt="<[mosquitto:plants/benji/fert:state:default]" }
Number PlantBenjiBattery "Benji [%d %%]" <battery> (PlantBattery, Battery, PlantBenji) { mqtt="<[mosquitto:plants/benji/battery:state:default]" }
DateTime PlantBenjiLastUpdate "[%1$tm/%1$td %1$tH:%1$tM]" <clock> (PlantLastUpdate, PlantBenji)
Group PlantPiff "Plant Piff" <plant> (Plants)
Number PlantPiffTemperature "Piff [%.2f °C]" <temperature> (Temperature, PlantTemperature, gHistory, PlantPiff) { mqtt="<[mosquitto:plants/piff/temp:state:default]" }
Number PlantPiffMoisture "Piff [%d %%]" <moisture> (PlantMoisture, gHistory, PlantPiff) { mqtt="<[mosquitto:plants/piff/moist:state:default]" }
Number PlantPiffLight "Piff [%d Lux]" <sun> (PlantLight, gHistory, PlantPiff) { mqtt="<[mosquitto:plants/piff/light:state:default]" }
Number PlantPiffConductivity "Piff [%d uS/cm]" <conductivity> (PlantConductivity, gHistory, PlantPiff) { mqtt="<[mosquitto:plants/piff/fert:state:default]" }
Number PlantPiffBattery "Piff [%d %%]" <battery> (PlantBattery, Battery, PlantPiff) { mqtt="<[mosquitto:plants/piff/battery:state:default]" }
DateTime PlantPiffLastUpdate "[%1$tm/%1$td %1$tH:%1$tM]" <clock> (PlantLastUpdate, PlantPiff)
Rules:
import java.util.Date
val String LOG_BENJI = "PlantBenji"
val String LOG_PIFF = "PlantPiff"
rule "UpdateTimestampBenji"
when
Item PlantBenji received update
then
logInfo(LOG_BENJI, "Updating timestamp for PlantBenji")
PlantBenjiLastUpdate.postUpdate(new Date())
end
rule "UpdateTimestampPiff"
when
Item PlantPiff received update
then
logInfo(LOG_PIFF, "Updating timestamp for PlantPiff")
PlantPiffLastUpdate.postUpdate(new Date())
end
I plan on adding notifications when they need to be watered etc. Would have to set up intervals for acceptable values etc.
Regards, S
Hi, now my bluetooth dongle arrived as well as my sensors:)
@Seaside How do I install and run this: open-homeautomation/miflora from the git? Do you have some commands to pull it from git and put into the script folder and the you set up a cronjob with exec binding that runs demo.py every hour?
I have never used script like this before so I am a bit lost:)
Hi!
Check this thread out:
Regards, S
Basically you do
git clone GitHub - basnijholt/miflora: āļøš”š¼š„š” Mi Flora Plant sensor Python package
and call build.sh
You would have to install some dependencies though. Look at the thread, hopefully I can answer questions if you have any.
Regards, S