Po miesiącu od ostatniej aktualizacji wypuszczam wersję 0.2.0 pluginu homebridge-airly2. To największa aktualizacja od lat, skupiona na bezpieczeństwie, jakości kodu i stabilności.

Co nowego w v0.2.0?

Bezpieczeństwo i walidacja

Poprzednia wersja ufała danym z konfiguracji bez ich weryfikacji. Teraz wszystkie parametry są dokładnie sprawdzane:

Walidacja współrzędnych geograficznych:

// Szerokość: -90 do 90
// Długość: -180 do 180
if (latitude < -90 || latitude > 90) {
    throw new Error('Invalid latitude');
}

Walidacja maxDistance:

  • Wartości <= 0 lub nieprawidłowe → domyślnie 3 km
  • Wartości > 50 km → automatycznie ograniczone do 50 km z ostrzeżeniem w logu

Bezpieczne budowanie URL:

// Przed (podatne na injection):
const url = `...?lat=${latitude}&lng=${longitude}`;

// Teraz (bezpieczne):
const params = new URLSearchParams({
    lat: String(latitude),
    lng: String(longitude)
});

Timeout HTTP: Dodany 30-sekundowy timeout dla żądań do API Airly. Zapobiega “wiszącym” połączeniom, które mogły blokować Homebridge.

Nowe funkcje

Konfigurowalny interwał odświeżania:

Airly pozwala na 100 zapytań dziennie. Domyślny interwał 15 minut (~96 zapytań/dzień) respektuje ten limit, ale teraz możesz go dostosować:

{
    "refreshinterval": 30
}

Unikalny numer seryjny:

Każda instancja pluginu generuje teraz unikalny numer seryjny na podstawie współrzędnych. Ułatwia to identyfikację wielu czujników w HomeKit:

AIR2-A1B2C3D4

Logowanie błędów:

Błędy pollingu są teraz logowane (w trybie debug), co ułatwia diagnozowanie problemów z połączeniem.

Testy jednostkowe

To dla mnie najważniejsza zmiana. Plugin ma teraz 53 testy jednostkowe z pokryciem kodu na poziomie 88%.

npm test

PASS ./index.test.js
  ✓ transformAQI (6 tests)
  ✓ validateCoordinates (7 tests)
  ✓ validateMaxDistance (4 tests)
  ✓ normalizeMeasurement (5 tests)
  ✓ getSensorValue (4 tests)
  ...

Tests: 53 passed

Testy używają Jest i mockują zarówno Homebridge API, jak i moduł https. Dzięki temu mogę bezpiecznie wprowadzać zmiany bez ryzyka regresji.

Dokumentacja

  • CHANGELOG.md - pełna historia zmian
  • TESTS.md - instrukcja testowania lokalnego krok po kroku
  • README.md - zaktualizowana dokumentacja z sekcją Development

Dlaczego te zmiany?

Plugin homebridge-airly2 jest używany przez użytkowników na całym świecie. Jako jedyny maintainer czuję odpowiedzialność za:

  1. Stabilność - plugin musi działać niezawodnie 24/7
  2. Bezpieczeństwo - kod działa w sieci domowej, blisko IoT
  3. Jakość - testy pozwalają na bezpieczny rozwój

Jak zaktualizować?

npm update -g homebridge-airly2

Lub przez Homebridge Config UI X → Plugins → Update.

Kompatybilność

Wersja 0.2.0 wymaga:

  • Homebridge 1.6+ lub 2.0-beta+
  • Node.js 20.7+

Konfiguracja pozostaje wstecznie kompatybilna.

Co dalej?

Planuję:

  • Obsługę powiadomień o przekroczeniu progów zanieczyszczeń
  • Lepszą integrację z automatyzacjami HomeKit
  • Może wsparcie dla innych API jakości powietrza

Kod źródłowy: github.com/ximot/homebridge-airly2

Masz pytania lub sugestie? Otwórz issue na GitHubie lub napisz do mnie!