Integracja z Home Assistant

  • 6 Odpowiedzi
  • 997 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline DaM

  • * 12
  • 0
    • Zobacz profil
Integracja z Home Assistant
« dnia: Maj 13, 2018, 08:14:40 pm »
Witam.

Chciałem się z wami podzielić komponentami do Home Assistant, które napisałem integrującymi switchBox(D) i wLightBox.
Wszystko opisałem dokładnie tutaj.

Jeśli ktoś używa hass i posiada pojedynczego switchBoxa, prosiłbym o przetestowanie. Mam u siebie tylko switchBoxD, niby API jest spójne dla obydwu wersji, ale nie mam pewności czy działa.
« Ostatnia zmiana: Maj 13, 2018, 08:17:58 pm wysłana przez DaM »
*

Offline spaw17

  • * 15
  • 0
    • Zobacz profil
Odp: Integracja z Home Assistant
« Odpowiedź #1 dnia: Czerwiec 12, 2018, 10:17:05 pm »
Nieśmiało sugeruję, że przydał by mi się jeszcze dimmerbox..
Odp: Integracja z Home Assistant
« Odpowiedź #2 dnia: Lipiec 17, 2018, 07:16:17 am »
Czy możesz pokrótce napisać co takiego oferuje Home Assistant, że zdecydowałeś się go używać zamiast softu dostarczonego z blebox?
*

Offline abial

  • * 5
  • 0
    • Zobacz profil
Odp: Integracja z Home Assistant
« Odpowiedź #3 dnia: Lipiec 18, 2018, 02:43:47 pm »
Nie ja byłem wywołany do tablicy ale odpowiem jak jest u mnie ... :)

Używam HA do wielu rzeczy, których wBox nie obsługuje - mam parę sensorów DYI, kamery ONVIF, bramkę do sterowania oknami Velux, Ikea Tradfri, i system podlewania na OpenSprinkler. Totalny mix standardów, spowodowany względami historycznymi, i HA daje sobie z tym radę, lepiej lub gorzej.

Nie sądzę, żeby wBox kiedykolwiek był w stanie to obsłużyć, i dobrze - lepiej żeby robił jedną rzecz a dobrze. Dla mnie najważniejsza jest dobra integracja kostek przez API, i to jest zrobione w Blebox bardzo dobrze (no może z wyjątkiem zabezpieczeń, mam nadzieję że kiedyś wszystkie kostki będą wspierać przynajmniej user/password).
*

Offline DaM

  • * 12
  • 0
    • Zobacz profil
Odp: Integracja z Home Assistant
« Odpowiedź #4 dnia: Sierpień 09, 2018, 06:13:29 pm »
Nieśmiało sugeruję, że przydał by mi się jeszcze dimmerbox..

Chwilę to trwało, ale dopiero na urlopie mam chwilę, żeby się pobawić i wrzuciłem na githuba nowy komponent dla dimmerBox'a.

Czy możesz pokrótce napisać co takiego oferuje Home Assistant, że zdecydowałeś się go używać zamiast softu dostarczonego z blebox?

Podobnie jak kolega @abial, oprócz blebox'ów mam trochę swoich zabawek np. na esp8622.
*

Offline weblabs

  • * 3
  • 0
    • Zobacz profil
  • Nazwa i wersja ID: weblabs
Odp: Integracja z Home Assistant
« Odpowiedź #5 dnia: Sierpień 17, 2018, 10:57:07 am »
Twoja integracja nie działa z pojedynczym switchBoxem.
Poniżej wersja działająca:
import logging
import voluptuous as vol
import json
import asyncio
import async_timeout
import numpy as np

from homeassistant.components.switch import (SwitchDevice, PLATFORM_SCHEMA)
from homeassistant.const import (CONF_NAME, CONF_HOST, CONF_TIMEOUT, STATE_OFF, STATE_ON)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.aiohttp_client import async_get_clientsession

LOGGING = logging.getLogger(__name__)
CONF_RELAY = 'relay'
DEFAULT_NAME = 'Blebox switchBox'
DEFAULT_RELAY = 0
DEFAULT_TIMEOUT = 10

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_HOST): cv.string,
    vol.Optional(CONF_NAME): cv.string,
    vol.Optional(CONF_RELAY, default=DEFAULT_RELAY): cv.positive_int,
    vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int,
})

@asyncio.coroutine
def async_setup_platform(hass, config, async_add_devices, discovery_info=None):
    name = config.get(CONF_NAME)
    host = config.get(CONF_HOST)
    relay = config.get(CONF_RELAY)
    timeout = config.get(CONF_TIMEOUT)

    switch = BleboxSwitchBoxSwitch(name, host, relay, timeout)
    yield from switch.async_relay_init(hass)
    async_add_devices([switch])

class BleboxSwitchBoxSwitch(SwitchDevice):

    def __init__(self, name, host, relay, timeout):
        self._name = name
        self._state = 0
        self._host = host
        self._relay = relay
        self._timeout = timeout
        self._available = False

    @property
    def available(self):
        return self._available

    @property
    def name(self):
        return self._name

    @property
    def state(self):
        return self._state

    @state.setter
    def state(self, state):
        self._state = STATE_ON if state else STATE_OFF

    @property
    def is_on(self):
        return self._state == STATE_ON

    @asyncio.coroutine
    def async_turn_on(self, **kwargs):
        yield from self.set_relay_state(1)

    @asyncio.coroutine
    def async_turn_off(self, **kwargs):
        yield from self.set_relay_state(0)

    @asyncio.coroutine
    def async_relay_init(self, hass):
        relay_info = yield from self.async_update_relay_info(hass)

        if not self._name:
            self._name = DEFAULT_NAME #//relay_info['name'] if relay_info else DEFAULT_NAME

        return relay_info

    @asyncio.coroutine
    def async_update_relay_info(self, hass):
        relay_info = yield from self.get_relay_info(hass)

        if relay_info:
            self.state = relay_info['state']
            self._available = True
        else:
            self.state = 0
            self._available = False

        return relay_info

    @asyncio.coroutine
    def async_update(self):
        yield from self.async_update_relay_info(self.hass)

    @asyncio.coroutine
    def set_relay_state(self, state):
        websession = async_get_clientsession(self.hass)
        resource = 'http://%s/s/%s' % ( self._host, state )

        try:
            with async_timeout.timeout(self._timeout, loop=self.hass.loop):
                req = yield from websession.get(resource)
                text = yield from req.text()
                relay_info = json.loads(text)
                return relay_info[0]
        except:
            return None

    @asyncio.coroutine
    def get_relay_info(self, hass):
        websession = async_get_clientsession(hass)
        resource = 'http://%s/api/relay/state' % self._host

        try:
            with async_timeout.timeout(self._timeout, loop=hass.loop):
                req = yield from websession.get(resource)
                text = yield from req.text()
                relay_info = json.loads(text)
                return relay_info[0]
        except Exception as e:
            return None
*

Offline DaM

  • * 12
  • 0
    • Zobacz profil
Odp: Integracja z Home Assistant
« Odpowiedź #6 dnia: Wrzesień 10, 2018, 11:13:10 pm »
Wrzuciłem na github poprawkę, dzięki której pojedynczy switchBox również działa.
Typ urządzenia jest wykrywany automatycznie, ewentualnie można go ustawić na stałe w konfiguracji, np.:  - platform: blebox_switchbox
    type: switchBox
lub   - platform: blebox_switchbox
    type: switchBoxD

Jeśli podczas startu nie uda się połączyć ze switchboxem to nie zostanie on dodany, aż do następnego restartu HAss kiedy uda się połaczyć z bleboxem.
Ten problem rozwiązuje właśnie dodanie na stałe typu do konfiguracji.