Integracja z Home Assistant

  • 15 Odpowiedzi
  • 12342 Wyświetleń

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

*

Offline DaM

  • * 15
  • 0
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

  • * 16
  • 0
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

  • * 12
  • 0
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

  • * 15
  • 0
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

  • * 8
  • 0
  • 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

  • * 15
  • 0
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.
Odp: Integracja z Home Assistant
« Odpowiedź #7 dnia: Maj 17, 2019, 09:16:06 am »
Ciesze się że w końcu się ktoś zainteresował integracja bleboxa z Hassio. Mam problem z dodaniem componentu do konfiguracji. Niestety pojawia się komunikat "Platform not found: light.blebox_dimmerbox"


Skrypt jest w config/custom_components/light/blebox_dimmerbox.py
Dodałem także do configuration.yaml

light:
  - platform: blebox_dimmerbox
    host: 192.168.0.117

« Ostatnia zmiana: Maj 17, 2019, 09:39:54 am wysłana przez darkkatarsis »
*

Offline DaM

  • * 15
  • 0
Odp: Integracja z Home Assistant
« Odpowiedź #8 dnia: Maj 17, 2019, 10:00:58 am »
W którejś z ostatnich aktualizacji HA była reorganizacja katalogów dla custom components.
Zmień sobie nazwę katalogu light na blebox_dimmerbox, a nazwę pliku blebox_dimmerbox.py na light.py i powinno działać.

W wolnej chwili wrzucę poprawkę na githuba.
Odp: Integracja z Home Assistant
« Odpowiedź #9 dnia: Maj 17, 2019, 10:29:50 am »
Tak to zalatwilo sprawe! Dziekuje
*

Offline piterw

  • * 6
  • 0
Odp: Integracja z Home Assistant
« Odpowiedź #10 dnia: Maj 28, 2019, 09:05:26 pm »
Coś mi nie gra, nie wiem w czym rzecz. Możecie zerknąć co jest nie tak?

skrypt jest w config\custom_components\blebox_dimmerbox\light.py

configuration.yaml:
light:
  - platform: blebox_dimmerbox
    host: 192.168.0.155
  - platform: blebox_dimmerbox
    host: 192.168.0.156

a ciągle mam:
Integration blebox_dimmerbox not found when trying to verify its light platform.

Ogarnąłem kuwetę. Dla potomnych, chodzi o dodatkowe pliki których nie ma w repo:

__init__.py - (opis: https://developers.home-assistant.io/docs/en/creating_integration_file_structure.html)

manifest.json(przykład, opis: https://developers.home-assistant.io/docs/en/creating_integration_manifest.html):
{
  "domain": "blebox_dimmerbox",
  "name": "Light",
  "documentation": "https://www.example.com",
  "dependencies": [],
  "codeowners": [],
  "requirements": []
}
« Ostatnia zmiana: Maj 28, 2019, 09:52:58 pm wysłana przez piterw »
*

Offline DaM

  • * 15
  • 0
Odp: Integracja z Home Assistant
« Odpowiedź #11 dnia: Maj 28, 2019, 10:03:20 pm »
Tak tak wiem, zaktualizowałem w końcu repo ;)
Plik manifest.json nie jest wymagany dla custom components, sam pusty __init__.py wystarczy.
*

Offline piterw

  • * 6
  • 0
Odp: Integracja z Home Assistant
« Odpowiedź #12 dnia: Maj 28, 2019, 10:03:52 pm »
Zauważyłem że pojawiła się aktualizacja w repo  ;)

Jest jakaś szansa na integrację pod shutterBox'a? Wiem że działa bezpośrednio z asystentem ale złożone reguły raczej robi się na HA albo openHab czy innym Domoticzu.
*

Offline DaM

  • * 15
  • 0
Odp: Integracja z Home Assistant
« Odpowiedź #13 dnia: Maj 28, 2019, 10:20:03 pm »
Póki co raczej marne szanse.
Z czasem słabo, a nie mam u siebie żadnego shutterBoxa, żeby testować i sprawnie to ogarnąć.
*

Offline piterw

  • * 6
  • 0
Odp: Integracja z Home Assistant
« Odpowiedź #14 dnia: Czerwiec 17, 2019, 11:30:35 am »
Masz drobny błąd w kodzie dla lightBox'a:

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

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

device_state = json.loads(text)
device = device_info['device']