Skip to content

Manual on does not respect manual watering time set #45

@schneemaier

Description

@schneemaier

Hi,

I am trying to turn on a zone manually to run it for the set manual watering time. I am able to push the manual watering time (10 minutes), but when I turn the zone on the second left value is 5+ hours.

This is the code I am using

#!/usr/bin/python

import asyncio
from time import sleep
from bleak import BleakScanner  # type: ignore - bleak has bad export types

from melnor_bluetooth.device import Device

ADDRESS = "XX:XX:XX:XX:XX:XX"  # fill with your device mac address

async def main():
    ble_device = await BleakScanner.find_device_by_address(ADDRESS)
    if ble_device is not None:
        device = Device(ble_device)
        await device.connect()
        await device.fetch_state()

        print(device)

        await device.zone1.set_manual_watering_minutes(10)
        await device.zone1.set_is_watering(True)
        await device.push_state()

        sleep(10)

        await device.fetch_state()

        print(device)

        await device.disconnect()

asyncio.run(main())

And here is the result:

Device(
    battery=96
    valves=(
      Valve(id=0|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=1|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=2|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=3|is_watering=False|manual_minutes=20|seconds_left=0)
    )
)
Device(
    battery=89
    valves=(
      Valve(id=0|is_watering=True|manual_minutes=10|seconds_left=1684886359)
      Valve(id=1|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=2|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=3|is_watering=False|manual_minutes=20|seconds_left=0)
    )
)
Disconnected from XX:XX:XX:XX:XX:XX

Not sure what I am doing wrong.

I wrote another script to test how the seconds_left field value changes if I start the timer from the melnor app. It seems that the value is "random" and does not change during the time of the timer.

Example this is what I get when the timer is set to 1 minute (reading is done every 1 second with await device.fetch_state()):

Device(
    battery=80
    valves=(
      Valve(id=0|is_watering=True|manual_minutes=1|seconds_left=1684868920)
      Valve(id=1|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=2|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=3|is_watering=False|manual_minutes=20|seconds_left=0)
    )
)
Device(
    battery=80
    valves=(
      Valve(id=0|is_watering=True|manual_minutes=1|seconds_left=1684868920)
      Valve(id=1|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=2|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=3|is_watering=False|manual_minutes=20|seconds_left=0)
    )
)
Device(
    battery=80
    valves=(
      Valve(id=0|is_watering=True|manual_minutes=1|seconds_left=1684868920)
      Valve(id=1|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=2|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=3|is_watering=False|manual_minutes=20|seconds_left=0)
    )
)
## Timer expired here ...
Device(
    battery=89
    valves=(
      Valve(id=0|is_watering=False|manual_minutes=1|seconds_left=0)
      Valve(id=1|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=2|is_watering=False|manual_minutes=20|seconds_left=0)
      Valve(id=3|is_watering=False|manual_minutes=20|seconds_left=0)
    )
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions