eModul.pl – jak odczytać dane z kotła i zintegrować system z automatyką domu?

Feliks Nitkowski
10 min czytania

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/

Udostępnij ten artykuł
Brak komentarzy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *