Jak napisać komponent niestandardowy? (Pierwsza własna integracja z it4wifi)

Witam jako że nie potrafię znaleźć gotowca rzucam się z motyką na księżyc i bardzo proszę o wyrozumiałość :wink:

Próbuję napisać integrację z bramą Nice za pomocą mostu it4wifi.
Wzoruję się na OpenHab MyNice binding -beta [3.2.0;3.4.0] - Bundles - openHAB Community.

Plik manifest.json zawiera podstawowe informacje o Twojej integracji:

{
  "domain": "twoja_integracja",
  "name": "Twoja Integracja",
  "version": "0.1",
  "documentation": "https://your-documentation-link",
  "requirements": [],
  "dependencies": [],
  "codeowners": []
}

Plik __init__.py jest używany do zainicjowania integracji:

"""The Twoja Integracja component."""
from homeassistant.core import HomeAssistant

DOMAIN = "twoja_integracja"

async def async_setup(hass: HomeAssistant, config: dict):
    """Set up the Twoja Integracja component."""
    # Perform initialization here
    return True

Plik sensor.py definiuje sensora:

"""Platform for sensor integration."""
from datetime import timedelta
import logging
import async_timeout
from homeassistant.helpers.entity import Entity

_LOGGER = logging.getLogger(__name__)

SCAN_INTERVAL = timedelta(seconds=30)

async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
    """Set up the sensor platform."""
    async_add_entities([TwojaIntegracjaSensor()])

class TwojaIntegracjaSensor(Entity):
    """Representation of a Sensor."""

    def __init__(self):
        """Initialize the sensor."""
        self._state = None

    @property
    def name(self):
        """Return the name of the sensor."""
        return 'Twoja Integracja Sensor'

    @property
    def state(self):
        """Return the state of the sensor."""
        return self._state

    async def async_update(self):
        """Fetch new state data for the sensor."""
        # Simulate an async data fetch from an API
        try:
            with async_timeout.timeout(10):
                # Example of setting state, replace with actual data fetching logic
                self._state = 'new_state'
        except Exception as e:
            _LOGGER.error("Error updating sensor: %s", e)

Plik translations/en.json zawiera tłumaczenia dla integracji:

{
  "title": "Twoja Integracja",
  "config": {
    "step": {
      "user": {
        "title": "Configure your integration",
        "description": "Description of how to configure your integration.",
        "data": {
          "example": "Example configuration entry"
        }
      }
    }
  }
}

Co robię źle (tylko nie mówcie że wszystko ;)) i jak to poprawić?

Nie ma działu dla programistów, więc przeniosłem temat w najlepsze miejsce dostosowując tytuł wątku.

Wydaje mi się, że tam znajdziesz przyzwoity samouczek

no a generalnie to chyba powinieneś najpierw się przekopać przez dokumentację dla deweloperów

PS Nie jestem programistą, więc poza nakierowaniem na jakikolwiek tor nie jestem w stanie pomóc konkretniej (ale ja tu nie widzę “kodu właściwego”), a jak dotąd jesteś chyba pierwszy na forum z tego typu pytaniem. Może się odezwie ktoś, kto ma jakiś dorobek programistyczny w tym kierunku.
Moje spojrzenie na ogół tego co pokazałeś - skoro to ma być dla sprzętu pod nazwą it4wifi to niech komponent się tak właśnie nazywa (a nie twoja_integracja).

1 polubienie

Witamy na forum.
Ja również nie jestem programistą więc mogę jedynie wskazywać kierunki i źródła wiedzy jakie znam.
Na innym forum powstał poradnik krok po kroku dla tworzenia własnej integracji (dla projektu bazującego na HA) z projektem AI-Speaker - Asystent Domowy. Napisał go autor całego pomysłu i biegły programista. Poradnik jest już pewnie w niektórych miejscach niekatulany ale dobrze tłumaczy cały proces. Należy też mieć na uwadze, że w przykładach tworzona jest integracja dla HA działającego pod Androidem (Termux), więc architektura i układ katalogów jest odmienny.

Link do lekcji 3/8

1 polubienie

Hej
pierwszy link znam, a przez drugi właśnie przechodzę.
Nazwa integracji nie jest dla mnie istotna na ten moment przynajmniej jak będę miał spawaną ramę integracji to będzie można dziecko ochrzcić :wink:

Co do skryptu to on ma tylko połączyć się z modułem użyć w tym celu tokena do parowania a potem tylko wysyłać polecenia i je odbierać (hehe tylko).

Dziękuję za przykład może coś się z tego urodzi…

Nie rób sobie bałaganu we własnym temacie :wink:
Staramy się nie pisać post pod własnym postem.

Szukałem rozwiązania problemu logowania przez skrypt Python’a a znalazłem

Wrzucam w HA podaje dane, przechodzę dalej podaje kod z naklejki (setup code) i mam ciągle błąd “Unknown error occurred”

Ma możliwość ktoś sprawdzić?

Kolejny, chyba (?) pomocny tutorial Write custom component for Home Assistant - DEV Community i dość obszerny kolejny tutorial Building a Home Assistant Custom Component Part 1: Project Structure and Basics - Automate The Things

@sza86 Mam ten sam problem, i miłym zrządzeniem losu wpadłem na twój wątek. Też mam IT4Wifi, i też staram się podłączyć je do HomeAssistant. Z zawodu programuję, więc jeśli chcesz współpracować nad stworzeniem nowej integracji (albo przerobieniem tej homeassistant_nicegate), daj znać.

Wiem że można łatwo osiągnąć podstawową funkcjonalność przez integrację HomeKit, ale wtedy są tylko komendy otwórz/zamknij. Ja próbuję zintegrować komendę stop i dostęp na żywo do statusu (otwarte / zamknięte / trwa otwieranie itp)

2 polubienia

Udało się coś popchnąć w tym temacie?
Akurat jestem nowym użytkownikiem napędu Nice i szukam rozwiązania ze sterowaniem bramą w HA.

Trochę przyspałem z tematem…
Znalazłem integrację która u mnie nie działa może autor miał inną wersje softu na it4wifi lub coś się pozmieniało w pytonie - nie wnikam ma działać u mnie :wink:
Dla zainteresowanych podłączam link homeassistant_nicegate

Obecnie testuję zmienioną integrację u siebie od paru dni i próbuję dodać dodatkowe funkcje.
Wygląd sterowani jak przy rolecie zamknij stop otwórz plus opis akcji.

Dodaje niestandardowe repozytorium, ale gdy próbuję pobrać to mam błąd,
a chętnie bym się dołączył do testowania :slight_smile:

Na repozytorium nie ma plików potrzebnych do współpracy z HACS.
Musisz pobrać sobie pliki ręcznie i wkopiować je na swoje miejsce.

Dokładnie, przysłowiowa minuta roboty i restart HA