The actual station is the Ambient Weather WS-1551-IP Smart Wireless Weather Station. It has been rock solid for 5 years.
The hub (or signal receiver) that came with it is called IPObserver. Home Assistant did not have an integration for it without having to depend on the cloud, so after some research, I purchased an Ecowitt GW1200 Wi-Fi gateway, which is integrated directly with HA.
The soil probes are ECOWITT WH51 Soil Moisture Sensors. It all integrates beautifully with HA and allows me to track, temperature, humidity, rain, wind, UV, solar radiation, soil moisture, etc.
If all you want is soil probes to manage your irrigation, you could start with Ecowitt GW1200 (~$29 USD) and Ecowitt WH51 probes (~$19).
Available from Amazon or Aliexpress at lower price.
I would say that it all paid for itself in less than a year, given the high cost of municipal water in my area. My vegetable garden, plants and landscaping only get water when they absolutely need it.
How are you doing your HA-to-valve connections?
I have an Ecowitt as well with a couple of freezer sensors, so lots of room to add others…but how do you connect to your Orbits (and which valves are you using…I have 24634 - 4 valve and 24632 - 2 valve AND an Orbit hub). AFAIK the only way to manage them is via Orbit’s sw and their hub.
Thank you for this card, this is quite nice . I was able to get it set up to what i believe to be correct, my card looks mostly like your example. One thing that is different is that my roman numerals do not toggle from white to blue like your example…any idea on why that could be? My Friday roman numeral does toggle and today is friday, so i think that has something to do with it… At this point I’m not sure if i have it set up correctly or i just don’t understand how it works.
Could you provide a general synapse of of how each entity works/interacts?
The b-hyve app is really confusing and i basically just want to be able to turn the hose on for a period of time and have it automatically shut off (I believe the duration entity will do this, but please confirm) …but the scheduling would be nice too, i just need to better understand how it works.
Here is what my card looks like as compared to your example.
my card code:
entities:
- entity: switch.zone_3
name: Front House Hose Box zone
secondary_info: last-changed
- entity: binary_sensor.zone_3_day_active
icon: mdi:sprinkler-variant
- type: divider
- entities:
- input_number.zone_3_runtime
entity: sensor.zone_3_time_remaining
icon: mdi:clock
name: Duration
secondary_info: last-changed
state_color: true
state_header: Remaining
type: custom:multiple-entity-row
- entities:
- entity: input_datetime.zone_3_am_on_time
name: On Time
- entity: automation.bhyve_zone_3_am_sprinkler_activate
name: Active
entity: automation.bhyve_zone_3_am_sprinkler_activate
name: AM
state_color: true
toggle: true
type: custom:multiple-entity-row
- entities:
- entity: input_datetime.zone_3_pm_on_time
name: On Time
- entity: automation.b_hyve_zone_3_pm_sprinkler_activate
name: Active
entity: automation.b_hyve_zone_3_pm_sprinkler_activate
name: PM
state_color: true
toggle: true
type: custom:multiple-entity-row
- entities:
- color: var(--primary-color)
color_type: icon
entity: input_boolean.zone_3_mon
icon: mdi:roman-numeral-1
name: Mon
tap_action:
action: toggle
type: custom:button-card
- color: var(--primary-color)
color_type: icon
entity: input_boolean.zone_3_tues
icon: mdi:roman-numeral-2
name: Tue
state:
- spin: false
value: 'on'
width: 35px
tap_action:
action: toggle
type: custom:button-card
- color: var(--primary-color)
color_type: icon
entity: input_boolean.zone_3_wed
icon: mdi:roman-numeral-3
name: Wed
tap_action:
action: toggle
type: custom:button-card
- color: var(--primary-color)
color_type: icon
entity: input_boolean.zone_3_thurs
icon: mdi:roman-numeral-4
name: Thu
tap_action:
action: toggle
type: custom:button-card
- color: var(--primary-color)
color_type: icon
entity: input_boolean.zone_3_fri
icon: mdi:roman-numeral-5
name: Fri
tap_action:
action: toggle
type: custom:button-card
- color: var(--primary-color)
color_type: icon
entity: input_boolean.zone_3_sat
icon: mdi:roman-numeral-6
name: Sat
tap_action:
action: toggle
type: custom:button-card
- color: var(--primary-color)
color_type: icon
entity: input_boolean.zone_3_sun
icon: mdi:roman-numeral-7
name: Sun
tap_action:
action: toggle
type: custom:button-card
entity: binary_sensor.zone_3_day_active
icon: mdi:calendar-week
name: Days
state_header: Active
type: custom:multiple-entity-row
show_header_toggle: false
style: |
ha-card {
border: solid 2px var(--primary-color);
border-radius: 70px;
box-shadow: none;
}
title: Zone 3
type: entities
I would appreciate some help getting this B-Hyve Gen 2 Sprinkler Timer (with WiFi hub) doing what I want. I think this is possible, but it’s not playing well for me: I would like this valve to solely turn off if it uses more than, say 100-gallons in a 60-minute window otherwise keep running when turned on with the physical button.
I have it all running properly in HA, but I could use some help writing the HA script. I am also fighting the Android app which implements a 4-hour time limit in manual water mode or only 10-minutes if I activate it with the button on the physical device. Is this something I can configure as part of the script or there a way to override these defaults in the b-hyve app?
My use case: I have a bicycle mister arch (pic below) set up that uses ~2.5-gallons per hour (GPH), and I would like to set up a program to shut it off if it springs a leak; e.g. if it uses more than, say, 50-gallons within an hour. Otherwise I would like it to run continuously for potentially 7-hours or more. I am only interested in activating it via the physical button on the valve at this point.
Thank you!
Hi.
I’m currently running:
- Core: 2024.7.1
- Supervisor: 2024.06.2
- Operating System12.4
- Frontend: 20240705.0
And I cant seem to install the integration. I dont see it in the add-ons nor the integrations. I tried going through adding the repo but it said it wasnt valid.
How do I go about installing it?
Thank you.
I just installed HACS but its not showing up on the side panel.
Click on HACS from the side panel, Select “Integrations”, on the lower right select “Explore & Download Repositories”, in the search box type “Orbit”, Select “Orbit BHyve”. read the instructions, in the lower right select “Download”, Restart HomeAssistant, then Settings, “Devices & Services”, Select “+ Add Integration”, Search for Orbit B-hyve, Enter your BHYVE login info.
Unfortunately after I installed HACS I do not see it in the side panel. I have restarted HA services and even rebooted.
OK I figured it out. Once I ran the script to install HACS I needed to go back into integrations and add it. I thought by running the script and restarting that it would show up on the side panel. So I have successfully installed HACS and B-Hyve.
Thanks!
Not sure if anyone answered any of your questions, but I had some similar issues and can share what I did to overcome them, some of which overlap with your issues:
As far as turning off after a specific amount of water usage, I have found that the consumption does not update in real time, or even a few minutes after use. So I kind of abandoned that part and don’t have much to offer here. One thing you could do is to use the calibration procedure you ran in the B-Hyve app for your sprinkler to determine your normal flow rate, and then calculate your expected water use based on runtime. The test is 30 seconds, and the app outputs the flow it saw over that time. You could use that to determine your system’s flow in volume/min and then calculate your usage based on runtime.
Regarding the manual limit imposed by the b-hyve app when you try to run it in HA, there is a way to overcome this. If you go into developer tools and search for the entity you want to control, you will see there is an attribute in there called “manual_preset_runtime”. This is the override for the time limit. Here is mine as an example:
device_name: Sprinkler - Backyard LeftFront
device_id: my_device_id
zone_name: Sprinkler - Backyard LeftFront
station: 1
smart_watering_enabled: false
manual_preset_runtime: 600
device_class: switch
icon: mdi:water-pump
friendly_name: Sprinkler - Backyard LeftFront zone
You could theoretically include changing this attribute in your script to whatever preset run-time you want. If you change this preset runtime to a really high limit, and then use a script in HA to turn them on and off based on a delay, you can achieve whatever delay you want. I have 5 gen 2’s that water my yard, and made a script to overlap the runtime of sprinklers that are connected to the same spigot to reduce water hammer effect (PSA: Get a water hammer arrestor as well! These things hit hard when they close!).
alias: Watering Sequence New
sequence:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.inp_sprinkler_off_error
data: {}
- service: switch.turn_on
target:
entity_id: switch.sprinkler_front_yard_zone
data: {}
- delay:
hours: 0
minutes: 5
seconds: 30
milliseconds: 0
- service: switch.turn_on
target:
entity_id: switch.sprinkler_backyard_right_zone
data: {}
- delay:
hours: 0
minutes: 0
seconds: 15
milliseconds: 0
- service: switch.turn_off
target:
entity_id: switch.sprinkler_front_yard_zone
data: {}
- repeat:
count: 15
sequence:
- delay: 1
- condition: template
value_template: "{{ is_state('switch.sprinkler_front_yard_zone', 'off') }}"
- choose:
- conditions:
- condition: template
value_template: "{{ not is_state('switch.sprinkler_front_yard_zone', 'off') }}"
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.inp_sprinkler_off_error
data: {}
- delay:
hours: 0
minutes: 5
seconds: 5
milliseconds: 0
- service: switch.turn_on
target:
entity_id: switch.sprinkler_backyard_left_zone
data: {}
- delay:
hours: 0
minutes: 0
seconds: 15
milliseconds: 0
- service: switch.turn_off
target:
entity_id: switch.sprinkler_backyard_right_zone
data: {}
- repeat:
count: 15
sequence:
- delay: 1
- condition: template
value_template: "{{ is_state('switch.sprinkler_backyard_right_zone', 'off') }}"
- choose:
- conditions:
- condition: template
value_template: "{{ not is_state('switch.sprinkler_backyard_right_zone', 'off') }}"
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.inp_sprinkler_off_error
data: {}
- delay:
hours: 0
minutes: 5
seconds: 5
milliseconds: 0
- service: switch.turn_on
target:
entity_id: switch.sprinkler_backyard_leftrear_zone
data: {}
- delay:
hours: 0
minutes: 0
seconds: 15
milliseconds: 0
- service: switch.turn_off
target:
entity_id: switch.sprinkler_backyard_left_zone
data: {}
- repeat:
count: 15
sequence:
- delay: 1
- condition: template
value_template: "{{ is_state('switch.sprinkler_backyard_left_zone', 'off') }}"
- choose:
- conditions:
- condition: template
value_template: "{{ not is_state('switch.sprinkler_backyard_left_zone', 'off') }}"
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.inp_sprinkler_off_error
data: {}
- delay:
hours: 0
minutes: 5
seconds: 5
milliseconds: 0
- service: switch.turn_on
target:
entity_id: switch.sprinkler_backyard_main_zone
data: {}
- delay:
hours: 0
minutes: 0
seconds: 15
milliseconds: 0
- service: switch.turn_off
target:
entity_id: switch.sprinkler_backyard_leftrear_zone
data: {}
- repeat:
count: 15
sequence:
- delay: 1
- condition: template
value_template: "{{ is_state('switch.sprinkler_backyard_leftrear_zone', 'off') }}"
- choose:
- conditions:
- condition: template
value_template: >-
{{ not is_state('switch.sprinkler_backyard_leftrear_zone', 'off')
}}
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.inp_sprinkler_off_error
data: {}
- delay:
hours: 0
minutes: 10
seconds: 5
milliseconds: 0
- service: switch.turn_off
target:
entity_id: switch.sprinkler_backyard_main_zone
data: {}
- repeat:
count: 15
sequence:
- delay: 1
- condition: template
value_template: "{{ is_state('switch.sprinkler_backyard_main_zone', 'off') }}"
- choose:
- conditions:
- condition: template
value_template: "{{ not is_state('switch.sprinkler_backyard_main_zone', 'off') }}"
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.inp_sprinkler_off_error
data: {}
mode: single
icon: mdi:water
description: ""
In this script I do the overlap like I mentioned above, but I also check for the sprinkler I just turned off to ensure it actually did turn off. One time I used the script without a sprinkler state check, and one sprinkler didn’t turn off and I didn’t know. Fortunately the manual limit did turn it off, but it spooked me about too much water use so I created a notification driven by the input_boolean.inp_sprinkler_off_error so HA would let me know if something went wrong with them.
I tied all of my stuff to a button that I fire manually when I want to water my property. Lovelace code for that below:
type: custom:button-card
entity: script.watering_sequence_new
name: Water Entire Property
show_state: true
show_name: true
show_entity_picture: true
entity_picture: |
[[[
if (states['script.watering_sequence_new'].state == 'on')
return "/local/droplet_animation.svg";
else return "/local/mdi--water.svg";
]]]
size: 17%
state_display: |
[[[
return entity.state === 'on' ? 'In Process' : 'Click to Start';
]]]
styles:
card:
- width: 335px
- height: 100px
- background: |
[[[
return entity.state === 'on' ? 'purple' : 'white';
]]]
name:
- font-size: 17px
- color: |
[[[
return entity.state === 'on' ? 'lightgreen' : 'black';
]]]
- position: absolute
- top: 5px
- left: 50%
- transform: translateX(-50%)
state:
- font-size: 17px
- color: |
[[[
return entity.state === 'on' ? 'lightgreen' : 'black';
]]]
- position: absolute
- top: 40px
- left: 83%
- transform: translateX(-50%)
custom_fields:
consumption_label:
- font-size: 17px
- color: |
[[[
return entity.state === 'on' ? 'lightgreen' : 'black';
]]]
- position: absolute
- top: 72px
- left: 25%
- transform: translateX(-50%)
consumption:
- font-size: 17px
- color: |
[[[
return entity.state === 'on' ? 'lightgreen' : 'black';
]]]
- position: absolute
- top: 73px
- left: 84%
- transform: translateX(-50%)
sprinkler_icon:
- position: absolute
- top: 30px
- left: 65px
- width: 35px
- height: 35px
- color: green
- animation: |
[[[
return states['input_boolean.inp_sprinkler_off_error'].state === 'on'
? 'blink 1s infinite'
: 'none';
]]]
custom_fields:
consumption_label: |
[[[
return 'Total Consumption';
]]]
consumption: |
[[[
return `${states['input_number.sprinklers_total_consumption'].state} liters`
]]]
sprinkler_icon: |
[[[
return `<ha-icon icon="mdi:sprinkler" style="color: ${states['input_boolean.inp_sprinkler_off_error'].state === 'on' ? 'red; animation: blink 1s infinite;' : 'green;'}"></ha-icon>`;
]]]
style: |
@keyframes blink {
0% { color: red; }
50% { color: yellow; }
100% { color: red; }
}
And it looks like this:
The little sprinkler icon turns red if one of the sprinklers fails the “off state” check. I also run separate automations that totalize the consumption, but I had to set up ways to offset the old values and only look at newer values to totalize flow. And like I mentioned before, consumption doesn’t update sometimes for hours, so my automations run every hour and look at value changes to make the total work properly. There are also animations I made on the card to show the water droplet running. All of it works well but this took a while to set it all up and debug everything.
In your use case, you could set up an automation to monitor the state of your sprinkler, so if it was activated using the manual button, you could use some of the above things I mentioned to monitor the on state and then turn it off after a period of time that correlated to your usage or time limits.
I hope this helps you!
I bought the product Orbit 21004 B-hyve Smart Hose Watering Timer with Wi-Fi Hub
Can he pass locally? Or only with the help of the internet?
Internet only.
I created a custom lovelace card to go with this integration. See this thread for more information on that card: Lovelace: Orbit B-Hyve card
I just wanted to thank you. I am now setup with b-Hyve valves and ecowitt sensors and it’s working just fine. I learned a ton of stuff about my garden plants. Like the soil humidity curve from the cucumbers is totlly different from the one from the tomatoes. So, when I had my cucumbers on the same line as the tomatoes, the cucumbers were struggling. Now they have their own line and they’re really happy.
Hoping someone can help. Running this integration with HA but have HA dump it into HomeKit. However, I can’t get the Homekit status to update without restarting Home Assistant. This only happens when orbit starts to run a program (schedule). If I go to orbit app and start manual watering, it updates in HK.
My programming and rain delays are all handled by Orbits native app. Just use HA and HL to check status and run a manual event if I need to.
As a side note, I used HA helper to change the device from a switch to a valve so it shows in HK as an irrigation system and not a switch.
I was hoping to display the “next_start_time” for each zone, but it doesn’t seem to work. For example, today is Oct 9, the Bhyve app says the next watering is Oct 11, but the switch.my_xone_name next_start_time says “2024-10-07T16:00:00+08:00” - ie 2 days ago??
Anyone have any ideas ?
I’m trying to do the same thing (Display “Next Start Time”) but can’t figure it out as well. Hopefully someone can help us.
It happens to be correct when I look today - for the first time ever. When I look at switch.“zone name” in Developer Tools, I can see an array of start times, but my JavaScript skills are not good-enough for me to extract it in a Function Node and display it as “day of week” & time - but I’ll start doing tutorials
Same here. No idea why but at least something to work with now. I don’t know how to convert it from UTC time and to time/day of week either but it’s a little challenge to work on.