Autor: Ekspert Smart Home | Data publikacji: maj 2026
W erze inteligentnych domów, gdzie wszystko – od oświetlenia po klimatyzację – sterujemy smartfonem, kontrola nad systemem grzewczym nie może pozostać w tyle. Jeśli posiadasz sterownik kotła CO (np. na ekogroszek, pellet czy pompę ciepła) firmy Tech-Sterowniki.pl z modułem eModul.pl, masz już solidną podstawę do zdalnego monitoringu. Integracja z systemami automatyki domowej (openHAB, Home Assistant, Domoticz) pozwala na pełną automatyzację – od alarmów o zbyt niskiej temperaturze po synchronizację z pogodą i sensorami.
W tym kompletnym, krok-po-kroku poradniku dowiesz się, jak skutecznie zacząć integrację i uniknąć typowych pułapek:
- logowanie do API eModul – pobieranie surowych danych z kotła (temperatury, stany pomp, poziom paliwa);
- identyfikatory – odnajdywanie unikalnych ID modułów i parametrów (tiles, params);
- integracja – włączenie danych do openHAB 3/4, Home Assistant i innych platform;
- automatyzacje – tworzenie reguł (alarmy, optymalizacja zużycia, scenariusze pogodowe);
- bezpieczeństwo i debug – rozwiązywanie problemów i zabezpieczenie integracji.
Poradnik bazuje na rzeczywistych przykładach z forów (smartnydom.pl, ai-speaker.discourse.group) i dokumentacji API (emodul.eu/api). Znajdziesz tu gotowe fragmenty kodu w Pythonie, Rules DSL (openHAB) i YAML (Home Assistant). Czas czytania: 15 min | Poziom: średniozaawansowany.
1. Czym jest eModul.pl i dlaczego warto go zintegrować?
eModul.pl to chmurowa platforma Tech-Sterowniki.pl do zdalnego sterowania kotłami CO/CWU, pompami ciepła i wentylacją. Działa m.in. z modułami STI-505 i rodziną ST-xxx. Oto kluczowe zalety, które ułatwiają integrację:
- pełny podgląd 1:1 – widok menu sterownika w przeglądarce i aplikacji mobilnej;
- dane w czasie rzeczywistym – temperatury (kocioł, CWU, pomieszczenia), stany pomp i zaworów, poziom zasobnika paliwa;
- statystyki i wykresy – przegląd danych godzinowych, dziennych i tygodniowych;
- API REST – punkt wyjścia do integracji: https://emodul.eu/api/.
Jeśli zastanawiasz się, po co integrować eModul ze smart home, rozważ trzy najczęstsze scenariusze:
- automatyzacja – wyłącz pompę przy braku paliwa, alarmuj o przegrzaniu, synchronizuj tryby pracy z obecnością domowników;
- ekonomia – dostosuj pracę kotła do prognozy pogody (np. OpenWeatherMap) i taryf energii;
- komfort – raporty głosowe przez Google Home/Alexa (np. „Jaka jest temperatura w kotłowni?”).
Konto testowe do szybkich prób jest dostępne pod adresem: https://emodul.eu/login (wybierz „Konto pokazowe”, ostatni piec na pellet).
2. Wymagania przed startem
Przygotuj poniższe elementy, aby płynnie przejść przez integrację:
- konto eModul – aktywny login i hasło do serwisu;
- serwer automatyki – openHAB (zalecany), Home Assistant lub Node-RED;
- narzędzia testowe – Python 3+ (do testów API) lub wbudowane HTTP w openHAB;
- bezpieczeństwo – używaj tokenów, nie udostępniaj haseł; endpoint API: https://emodul.eu/api/v1/.
Jeśli chcesz szybko przetestować API w konsoli, zainstaluj biblioteki Pythona polecane do tego poradnika:
pip install requests python-dotenv
3. Krok 1 – odkryj API: logowanie i pobranie danych
API eModul opiera się na REST z autoryzacją Bearer Token. Najpierw uzyskaj token logowania, potem pobierz listę modułów przypisanych do użytkownika, a na końcu dane wybranego modułu (tiles).
Test w Pythonie (szybki start)
Utwórz plik emodul_test.py z poniższą zawartością i wypełnij dane logowania poprzez zmienne środowiskowe:
import requests
import os
from dotenv import load_dotenv
load_dotenv()
USERNAME = os.getenv("USERNAME")
PASSWORD = os.getenv("PASSWORD")
# 1) Logowanie
login_url = "https://emodul.eu/api/v1/authentication"
login_data = {"username": USERNAME, "password": PASSWORD}
login_resp = requests.post(login_url, json=login_data, timeout=10)
login_resp.raise_for_status()
auth = login_resp.json()
token = auth["token"]
user_id = auth["user_id"]
headers = {"Authorization": f"Bearer {token}"}
print(f"✅ Token: {token[:12]}... | User ID: {user_id}")
# 2) Lista modułów
modules_url = f"https://emodul.eu/api/v1/users/{user_id}/modules"
modules_resp = requests.get(modules_url, headers=headers, timeout=10)
modules_resp.raise_for_status()
modules = modules_resp.json()
for m in modules:
print(f"ID: {m.get('id')} | Nazwa: {m.get('name')} | Typ: {m.get('type')}")
# 3) Dane z wybranego modułu
module_id = modules[0]["id"] # lub wstaw ręcznie znane ID
tiles_url = f"https://emodul.eu/api/v1/modules/{module_id}/tiles"
tiles_resp = requests.get(tiles_url, headers=headers, timeout=10)
tiles_resp.raise_for_status()
tiles = tiles_resp.json()
print("\n🔥 DANE Z KOTŁA (przykładowe):")
for t in tiles:
print(f"Tile ID: {t.get('id')} | Nazwa: {t.get('name')} | Params: {t.get('params')}")
Aby uruchomić skrypt, wpisz w terminalu:
python emodul_test.py
Po poprawnym logowaniu uzyskasz token, ID użytkownika oraz listę modułów (np. 4062); końcowy krok zwróci listę tiles z parametrami (np. openingPercentage dla zaworu).
Dla wygody przechowaj dane logowania w pliku .env (nie commituj go do repozytorium):
USERNAME=twoj_login
PASSWORD=twoje_haslo
4. Integracja z openHAB 3/4
W openHAB skorzystasz z wbudowanych akcji HTTP oraz transformacji JSONPath. Najpierw zdefiniuj Items, następnie utwórz regułę pobierającą i aktualizującą wartości.
Items (pliki: items/emodul.items)
Dodaj podstawowe kanały danych, które będziesz aktualizować z reguły:
Number Emodul_Temp_Kociol "Temperatura kotła [%.1f °C]"
Number Emodul_Poziom_Paliwa "Poziom paliwa [%d %%]"
Switch Emodul_Pompa_CWU "Pompa CWU"
Rule DSL (pliki: rules/emodul.rules)
Poniższa reguła co 5 minut loguje się do API, pobiera tiles, a następnie aktualizuje Items. Zainstaluj dodatek JSONPath Transformation w openHAB i dopasuj ścieżki JSON do struktury Twoich danych:
rule "eModul - Pobierz Dane"
when
Time cron "0 */5 * * * ?"
then
val username = "your_username"
val password = "your_password"
val loginUrl = "https://emodul.eu/api/v1/authentication"
val loginData = '{"username":"' + username + '","password":"' + password + '"}'
// Logowanie
val loginResponse = sendHttpPostRequest(loginUrl, "application/json", loginData)
if (loginResponse === null) {
logError("eModul", "Brak odpowiedzi z logowania")
return;
}
val token = transform("JSONPATH", "$.token", loginResponse)
// Pobieranie tiles
val moduleId = "4062" // wstaw ID swojego modułu
val dataUrl = "https://emodul.eu/api/v1/modules/" + moduleId + "/tiles"
val headers = newHashMap("Authorization" -> ("Bearer " + token))
val dataResponse = sendHttpGetRequest(dataUrl, headers, 10000)
if (dataResponse === null) {
logError("eModul", "Brak danych tiles")
return;
}
// Przykładowe JSONPath (dopasuj do swojej struktury; top-level może być tablicą)
val tempKociol = transform("JSONPATH", "$.[?(@.name=='Temperatura kotła')].params.value", dataResponse)
val poziomPaliwa = transform("JSONPATH", "$.[?(@.name=='Zasobnik')].params.level", dataResponse)
if (tempKociol !== null && tempKociol != "") Emodul_Temp_Kociol.postUpdate(tempKociol)
if (poziomPaliwa !== null && poziomPaliwa != "") Emodul_Poziom_Paliwa.postUpdate(poziomPaliwa)
logInfo("eModul", "Aktualizacja: kocioł={}°C, paliwo={}%", tempKociol, poziomPaliwa)
end
Automatyzacja przykładowa
Aby uniknąć fałszywych wyzwalaczy, lepiej sprawdzać warunek w treści reguły niż w nagłówku:
rule "Alarm Przegrzania"
when
Item Emodul_Temp_Kociol received update
then
if ((Emodul_Temp_Kociol.state as Number) > 90) {
sendBroadcastNotification("ALARM: Kocioł przegrzany! " + Emodul_Temp_Kociol.state.toString + " °C")
}
end
5. Integracja z Home Assistant
W Home Assistant najszybciej skorzystasz z czujników REST. Jeden sensor pobiera token, drugi zasysa tiles i udostępnia je jako atrybuty; dalej tworzysz sensory szablonowe.
configuration.yaml (przykład)
Najpierw skonfiguruj czujnik REST pobierający token (użyj secrets.yaml dla poświadczeń):
sensor:
- platform: rest
name: eModul Token
resource: https://emodul.eu/api/v1/authentication
method: POST
headers:
Content-Type: application/json
payload: '{"username":"!secret emodul_user","password":"!secret emodul_pass"}'
value_template: "{{ value_json.token }}"
scan_interval: 3300 # token co ~55 min
- platform: rest
name: eModul Tiles
resource_template: "https://emodul.eu/api/v1/modules/4062/tiles"
headers:
Authorization: "Bearer {{ states('sensor.emodul_token') }}"
json_attributes:
- tiles
value_template: "{{ value_json is defined }}"
scan_interval: 300
template:
- sensor:
- name: Temperatura kotła
unit_of_measurement: "°C"
state: >
{% set tiles = state_attr('sensor.emodul_tiles','tiles') %}
{% if tiles %}
{{ (tiles | selectattr('name','equalto','Temperatura kotła') | map(attribute='params') | map(attribute='value') | list | first) }}
{% endif %}
- name: Poziom paliwa
unit_of_measurement: "%"
state: >
{% set tiles = state_attr('sensor.emodul_tiles','tiles') %}
{% if tiles %}
{{ (tiles | selectattr('name','search','Zasobnik') | map(attribute='params') | map(attribute='level') | list | first) }}
{% endif %}
Automatyzacja (przykład)
Poniżej prosta automatyzacja wysyłająca powiadomienie, gdy paliwo spadnie poniżej 20%:
automation:
- alias: Alarm Niskie Paliwo
trigger:
- platform: numeric_state
entity_id: sensor.poziom_paliwa
below: 20
action:
- service: notify.mobile_app
data:
message: "Niskie paliwo w zasobniku: {{ states('sensor.poziom_paliwa') }}%"
6. Rozwiązywanie problemów i bezpieczeństwo
Najczęstsze problemy i szybkie rozwiązania znajdziesz w poniższej tabeli:
| Problem | Rozwiązanie |
|---|---|
| 401 Unauthorized | Zweryfikuj login/hasło i endpoint: używaj domeny emodul.eu, nie emodul.pl. |
| Brak tiles | Najpierw pobierz listę modułów: /users/{user_id}/modules, potem dane modułu: /modules/{id}/tiles. |
| JSONPath nie zwraca danych | Przetestuj zapytania na jsonpath.com; dopasuj ścieżkę do struktury (np. $.[?(@.id=='XYZ')].params.openingPercentage). |
| Timeout | Zwiększ limit czasu (np. timeout: 10000) lub zmniejsz częstotliwość odpytywania. |
| Bezpieczeństwo | NIGDY nie commituj loginów/hasła ani tokenów. Używaj secrets.yaml lub zmiennych środowiskowych. Włącz 2FA w eModul (jeśli dostępne). |
Dbaj o monitoring – dodaj logi oraz webhooki do Telegram/Discord, aby szybko reagować na alarmy i błędy.
7. Zaawansowane – pełna automatyzacja i analiza
Gdy podstawowa integracja działa poprawnie, rozważ poniższe rozszerzenia:
- prognoza pogody – integracja z OpenWeatherMap; przy dodatnich temperaturach ograniczaj grzanie lub obniżaj zadane wartości;
- AI-Speaker/Jolka – dodaj komendy głosowe: „Podaj temperaturę kotła”, „Jaki jest poziom paliwa?”;
- historia i wizualizacja – zapis danych w InfluxDB i wykresy w Grafana dla analizy zużycia;
- Node-RED – alternatywa wizualna dla reguł: węzły HTTP Request → JSON → Dashboard.
Poradnik aktualizowany na maj 2026. API może się zmieniać – regularnie sprawdzaj changelogi i przykłady na: https://emodul.eu/api/