SpotLogic to usługa w chmurze, która oblicza plan ładowania i rozładowania baterii fotowoltaicznej według cen na rynku spot energii elektrycznej. Jest to usługa obliczeniowa, a nie źródło danych: jednostka sterująca wysyła telemetrię baterii razem z prognozą produkcji PV, prognozą zużycia domu oraz cenami zakupu i sprzedaży energii, a SpotLogic odpowiada poleceniem dla bieżącego przedziału czasowego. Ten szablon łączy TapHome z SpotLogic API przez HTTPS (spotlogic.cz, port 443) za pomocą modułu HTTP Packet Parser. Odczytuje polecenie i wysyła telemetrię; nie steruje falownikiem solarnym — polecenie łączy się z falownikiem solarnym za pomocą własnych smart rules instalatora.
Nie trzeba niczego okablować. Uruchomienie usługi obejmuje aktywację SpotLogic dla obiektu, zebranie parametrów baterii i sieci, zapewnienie jednostce sterującej wychodzącego dostępu do internetu oraz przygotowanie serii prognoz i cen.
SpotLogic wymaga serii prognoz i cen w każdym wysłaniu telemetrii (produkcja PV i zużycie domu na dziś i jutro, ceny zakupu i sprzedaży). Ten szablon nie potrafi wypełnić ich sam — zobacz Serie prognoz i cen. Dopóki nie są wypełnione, SpotLogic odrzuca telemetrię z HTTP 422, nie oblicza planu, a polecenie pozostaje na No plan.
Konfiguracja
1. Aktywuj SpotLogic i zachowaj dane dostępowe
SpotLogic wysyła PLC ID i token dostępu e-mailem przy aktywacji urządzenia. Token jest tajny, przypisany do dokładnie jednego PLC ID i ważny przez okres subskrypcji. Oba są przesyłane wyłącznie w query string każdego żądania (?plc_id=…&token=…), tak jak wymaga tego kontrakt SpotLogic — nigdy w treści żądania.
Nie umieszczaj tokena we współdzielonych dokumentach ani w publicznych repozytoriach. Błędna para PLC ID i token, nieważny token lub wygasła subskrypcja kończą się zawsze HTTP 401, a SpotLogic celowo nie informuje, który z tych trzech przypadków wystąpił.
2. Zbierz parametry baterii i sieci
SpotLogic planuje wyłącznie na podstawie liczb otrzymanych w telemetrii. Przed importem sprawdź je w dokumentacji falownika solarnego i baterii oraz w umowie przyłączeniowej:
| Wartość | Skąd pochodzi | Jednostka |
|---|---|---|
| Pojemność baterii | karta katalogowa baterii; musi być większa od 0 | kWh |
| Maksymalna moc baterii | jedna wartość dla ładowania i rozładowania | kW |
| Maksymalna moc poboru z sieci | wielkość zabezpieczenia głównego; 0 oznacza, że obiekt nigdy nie pobiera z sieci | kW |
| Maksymalna moc oddawania do sieci | limit oddawania energii przyłącza; 0 oznacza, że obiekt nigdy nie oddaje do sieci | kW |
| Twarda dolna granica baterii | najniższy stan naładowania dopuszczony przez producenta falownika solarnego, domyślnie 10 | % |
| Rezerwa baterii | rezerwa, z której plan nigdy nie sprzedaje do sieci (na przykład na nieprzewidywalne zużycie), domyślnie 10 | % |
W TapHome musi być dostępny także bieżący stan naładowania baterii, zwykle z własnej integracji falownika solarnego, aby smart rule mogła zapisać go do tego szablonu (zobacz Wysyłanie telemetrii poniżej).
3. Sieć i zegar jednostki sterującej
- Jednostka sterująca potrzebuje wychodzącego dostępu do internetu przez HTTPS do
spotlogic.czna porcie 443. SpotLogic nie łączy się zwrotnie z jednostką sterującą — serie prognoz i cen są przesyłane w treści wysłania telemetrii, więc nie trzeba otwierać żadnego portu przychodzącego. - Telemetria zawiera czas wysłania z zegara jednostki sterującej, a SpotLogic buduje na jego podstawie okno planu. Kilka minut odchyłki nie szkodzi; odchyłka rzędu godzin przesuwa cały plan na niewłaściwe przedziały czasowe. Dbaj o poprawny zegar jednostki sterującej.
- Strefa czasowa (nazwa IANA, na przykład
Europe/Prague) decyduje, gdzie kończy się „dziś”, a zaczyna „jutro”. Wpisz strefę czasową obiektu.
4. Parametry importu
Szablon importuje się w interfejsie Packet Parser aplikacji TapHome, a przy imporcie wypełnia się następujące parametry:
| Parametr | Znaczenie | Jednostka |
|---|---|---|
| PLC ID, token dostępu | z e-maila aktywacyjnego | — |
| Strefa czasowa | nazwa IANA, domyślnie Europe/Prague; wynikają z niej granice dni planu | — |
| Pojemność baterii | musi być większa od 0 | kWh |
| Maksymalna moc baterii | jedna wartość dla ładowania i rozładowania | kW |
| Maksymalna moc poboru / oddawania do sieci | 0 oznacza, że obiekt nigdy nie pobiera / nigdy nie oddaje do sieci | kW |
| Maksymalny stan naładowania | SpotLogic tylko go zapisuje, obecny planer go nie egzekwuje | % |
| Twarda dolna granica baterii | granica od producenta falownika solarnego, domyślnie 10 | % |
Liczby zapisuje się z kropką dziesiętną (przecinek jest zamieniany). PLC ID i token są przechowywane w zmiennych modułu PlcId i Token. Wszystkie wartości można potem dalej edytować jako zmienne modułu.
5. Sprawdzenie danych dostępowych
Interaktywna dokumentacja API SpotLogic (na spotlogic.cz pod /docs) ma okno Authorize dla PLC ID i tokena, a jej przykład telemetrii TapHome jest kompletny: przy poprawnych danych dostępowych SpotLogic przyjmuje go z HTTP 202. Najpierw zaktualizuj w nim czas wysłania (TimeStampUnix) na bieżący. Przyjęte dane przykładowe są buforowane do planu tak jak prawdziwa telemetria, dlatego to sprawdzenie należy wykonać przed połączeniem polecenia z falownikiem solarnym.
Odpowiedź HTTP 422 o niepełnym horyzoncie prognozy także dowodzi, że PLC ID i token są poprawne — błędny token daje HTTP 401.
Funkcje urządzenia
Odczyt polecenia (co 20 s)
Moduł odpytuje GET /api/v1/dispatch co 20 sekund, a urządzenia przetwarzają odpowiedź:
- SpotLogic command — polecenie dla trwającego przedziału czasowego (
action_id):
| Wartość | Wartość w TapHome | Nazwa w SpotLogic | Znaczenie |
|---|---|---|---|
| 0 | No plan | no_plan | Brak użytecznego planu — pozostaw falownik solarny w jego własnym trybie bezpiecznym |
| 1 | Self-use | self_use | Autokonsumpcja: ładowanie z nadwyżki PV, rozładowanie na pokrycie zużycia domu |
| 2 | Force charge | force_charge | Ładowanie baterii z maksymalną mocą |
| 3 | Force discharge to grid | force_discharge | Rozładowanie baterii do sieci z maksymalną mocą |
| 4 | Self-use, no discharging | self_use_ChargeOnly | Autokonsumpcja, ładowanie dozwolone, rozładowanie zabronione |
| 5 | Self-use, no charging | self_use_DischargeOnly | Autokonsumpcja, rozładowanie dozwolone, ładowanie zabronione |
| 6 | Stop PV (reserved) | stopPV | Zarezerwowane — obecny planer go nie wydaje |
| 7 | Grid charge without PV (reserved) | ChargeMaxNoPV | Zarezerwowane — obecny planer go nie wydaje |
Atrybuty serwisowe pokazują nazwę polecenia i czas jego zakończenia (czas lokalny).
- SpotLogic target state of charge — stan naładowania (%), którego plan oczekuje na końcu przedziału czasowego. Zakończ wymuszone ładowanie lub rozładowanie, gdy bateria go osiągnie; przy autokonsumpcji nie ładuj powyżej niego. SpotLogic dodaje, że przy
self_use_DischargeOnlybateria nie powinna być rozładowywana poniżej niego. Wartość jest wynikiem planu, a nie wartością zadaną, którą trzeba wymusić, i może przejściowo być niższa niż rezerwa baterii, gdy dom zużył rezerwę. - SpotLogic next command — polecenie następnego przedziału czasowego, z czasem jego rozpoczęcia jako atrybutem serwisowym.
- SpotLogic plan age — wiek udostępnionego planu w sekundach. Może sterować awaryjną smart rule: gdy rośnie wyraźnie powyżej interwału ponownego przeliczania, plan nie jest przeliczany.
Odpowiedź HTTP 404 no_plan nie jest błędem: polecenie ma wartość 0, a urządzenie pokazuje komunikat informacyjny. SpotLogic prosi, aby w tym stanie przełączyć falownik solarny na jego własny tryb bezpieczny i nigdy nie powtarzać ostatniego znanego polecenia z pamięci. HTTP 401 (błędny PLC ID lub token, wygasła subskrypcja) ustawia błąd na urządzeniach i na module; SpotLogic prosi, aby nie powtarzać takich wywołań, więc popraw dane dostępowe.
Wysyłanie telemetrii (mniej więcej co 2 minuty)
Moduł wysyła POST /api/v1/optimize z PLCtype: "taphome" najwyżej co 2 minuty. Wysyła czas wysłania, strefę czasową, parametry baterii i sieci oraz dwie wartości z urządzeń:
- Battery state of charge (input) — zapisz do niego bieżący stan naładowania 0–100 % z falownika solarnego za pomocą smart rule (gdy szablon falownika solarnego podaje 0–1, pomnóż przez 100). Wartość jest zaokrąglana do pełnego procenta, ponieważ SpotLogic odrzuca wartości ułamkowe. Dopóki nie ma wartości, nic nie jest wysyłane, a moduł pokazuje ostrzeżenie.
- Battery reserve for SpotLogic — rezerwa
SOCmin, domyślnie 10 %: poziom, z którego plan nigdy nie sprzedaje do sieci.
Atrybuty serwisowe modułu pokazują wynik ostatniego wysłania, interwał ponownego przeliczania zgłoszony przez SpotLogic (domyślnie 900 s), czas obliczenia planu, przebieg planu i wersję API. Odrzucone wysłanie (HTTP 422) to błąd modułu z komunikatem zwróconym przez SpotLogic. Odpowiedź na wysłanie nigdy nie zawiera planu — SpotLogic oblicza go w tle, a moduł pobiera go przy następnym odczycie polecenia.
Serie prognoz i cen
SpotLogic oczekuje w treści sześciu serii, każdej jako par [unix_ts, value]:
| Zmienna modułu | Zawartość | Kontrakt |
|---|---|---|
PvForecastTod, PvForecastTom | produkcja PV dziś / jutro, kWh na godzinę | godzinowo, bez luk, od bieżącej godziny do końca jutra |
LoadForecastTod, LoadForecastTom | zużycie domu dziś / jutro, kWh na godzinę | tak samo |
PriceImp, PriceExp | cena zakupu / sprzedaży, CZK/kWh | stały krok (godzinowo lub 15 minut), wystarczy dzień dzisiejszy, ceny ujemne dozwolone |
Zmienne przechowują serie jako tekst JSON, na przykład [[1788645600,0.0],[1788649200,0.42]], i są wstawiane do treści bez zmian; wartość domyślna [] to pusta seria. Sama integracja działa; potrzebuje tylko danych. TapHome nie potrafi jeszcze współdzielić jednego tekstu JSON między skryptami, a skrypt smart rule nie może wysyłać żądań HTTP. Sześć serii — łącznie około 500 wartości — trzeba więc zebrać z innych skryptów (na przykład z szablonu prognozy lub cen spot) i przekazać do tego modułu przez setki urządzeń pomocniczych albo zbudować bezpośrednio w skrypcie odczytu modułu. Integracja stanie się naprawdę praktyczna, gdy TapHome doda zmienną tekstową współdzieloną między skryptami — zobacz pomysł Zmienna tekstowa i HTTP ze skryptów smart rules. Do tego czasu wypełnij sześć zmiennych, a szablon zadziała bez zmian. Skrypt wyjaśnia to w komentarzu na początku oraz w miejscu, w którym serie są wstawiane.
Skąd pochodzą dane, decyduje instalator; SpotLogic wymienia te typowe źródła:
- Produkcja PV — usługa predykcji zysków solarnych zasilana lokalizacją, orientacją i nachyleniem paneli oraz mocą zainstalowaną, albo chmura producenta falownika solarnego.
- Zużycie domu — własna historia obiektu: na początek wystarczy godzinowe zużycie uśrednione według godziny dnia i rodzaju dnia (dzień roboczy, weekend, święto).
- Ceny — cena spot przeliczona według umowy na dostawę energii (zakup, na przykład spot plus marża) i według umowy na sprzedaż nadwyżek energii (sprzedaż).
Dzień ze zmianą czasu ma 23 lub 25 godzin, więc kompletna seria PV lub zużycia ma 47, 48 lub 49 wartości. Próbki starsze niż godzina przed bieżącą godziną są obcinane, podobnie jak próbki po końcu jutra; seria kończąca się przed końcem jutra jest odrzucana.
Rozwiązywanie problemów
| Objaw | Przyczyna i rozwiązanie |
|---|---|
| Polecenie pozostaje na No plan | Plan nie został jeszcze obliczony albo telemetria jest odrzucana. Sprawdź błąd modułu i atrybut serwisowy Last telemetry upload. Plan starszy niż 60 minut również nie jest udostępniany. Po pierwszym przyjętym wysłaniu obliczenie planu może chwilę potrwać — co najmniej jeden interwał ponownego przeliczania. |
| Błąd modułu HTTP 422 | Telemetria narusza kontrakt danych SpotLogic; komunikat mówi, którą część. Najczęściej brakuje serii prognoz lub cen albo nie pokrywają one okresu do końca jutra. |
| Błąd HTTP 401 | PLC ID i token nie pasują do siebie albo subskrypcja wygasła. Popraw zmienne modułu PlcId i Token. |
| Ostrzeżenie „Telemetry not sent” | Stan naładowania nie został jeszcze zapisany albo jakiś parametr baterii lub sieci jest pusty. |
| Wiek planu stale rośnie | Nowa telemetria nie dociera do SpotLogic albo zawodzą jego źródła danych; ostatni ważny plan obowiązuje, dopóki nie osiągnie 60 minut. |
| Błąd HTTP 500 lub 502 | Błąd serwera lub awaria źródła danych po stronie SpotLogic; ostatni ważny plan nadal obowiązuje. SpotLogic zaleca powtarzanie obu z rosnącymi odstępami; moduł po prostu powtarza oba żądania przy następnym odpytaniu. |
| Plan steruje niewłaściwymi godzinami | Zegar jednostki sterującej lub strefa czasowa są błędne — okno planu jest budowane z czasu wysłania i zadeklarowanej strefy czasowej. |