TapHome
Komunita Beta · neověřená Energie a měření

SpotLogic – battery optimisation over the spot market (HTTP API)

SpotLogic je cloudová služba, která plánuje, kdy se baterie fotovoltaické elektrárny nabíjí, pokrývá spotřebu domu nebo prodává do sítě podle spotových cen. Šablona přes HTTPS čte povel pro aktuální časový úsek (0–7), cílový stav nabití, následující povel a stáří plánu a každé 2 minuty odesílá telemetrii baterie. Časové řady výroby FV, spotřeby a cen musí dodat instalatér; střídač se řídí vlastními smart rules.

SpotLogicPacket Parser → HTTP6 zařízeníRevize 1.1 Poslední aktualizace: 10. listopadu 2026

Přidal Adam Pelikán

Import do aplikace TapHomeHardware › Packet Parser › Přidat ze šablony

Stáhnout šablonu
Na této stránce

Návod na integraci

SpotLogic je cloudová služba, která počítá plán nabíjení a vybíjení baterie fotovoltaické elektrárny podle spotového trhu s elektřinou. Je to výpočetní služba, ne zdroj dat: řídicí jednotka posílá telemetrii baterie spolu s predikcí solárních zisků, predikcí spotřeby domu a cenami za odběr a dodávku elektřiny a SpotLogic odpovídá povelem pro aktuální časový úsek. Tato šablona připojuje TapHome k SpotLogic API přes HTTPS (spotlogic.cz, port 443) pomocí modulu Packet Parser HTTP. Povel čte a telemetrii odesílá; střídač neovládá — povel se se střídačem propojí vlastními smart rules instalatéra.

Nic se nezapojuje. Zprovoznění služby znamená aktivovat SpotLogic pro danou instalaci, zjistit parametry baterie a sítě, zajistit řídicí jednotce odchozí přístup na internet a připravit časové řady predikcí a cen.

SpotLogic potřebuje v každém odeslání telemetrie časové řady predikcí a cen (predikce solárních zisků a spotřeby domu na dnešek a zítřek, ceny za odběr a dodávku). Tato šablona je sama vyplnit neumí — viz Časové řady predikcí a cen. Dokud nejsou vyplněné, SpotLogic telemetrii odmítá s HTTP 422, plán nepočítá a povel zůstává na No plan.

Konfigurace

1. Aktivujte SpotLogic a uschovejte přístupové údaje

SpotLogic při aktivaci zařízení pošle e-mailem PLC ID a přístupový token. Token je tajný, vázaný na právě jedno PLC ID a platný po dobu předplatného. Obě hodnoty se přenášejí jen v řetězci dotazu každého požadavku (?plc_id=…&token=…), jak to vyžaduje kontrakt SpotLogic — nikdy v těle požadavku.

Token nedávejte do sdílených dokumentů ani do veřejných repozitářů. Nesprávná dvojice PLC ID a tokenu, neplatný token i vypršelé předplatné končí stejně s HTTP 401 a SpotLogic záměrně neprozradí, o který ze tří případů šlo.

2. Zjistěte parametry baterie a sítě

SpotLogic plánuje jen s čísly, která dostane v telemetrii. Před importem je vyhledejte v dokumentaci střídače a baterie a ve smlouvě o připojení k distribuční soustavě:

HodnotaOdkud ji zjistitJednotka
Kapacita bateriekatalogový list baterie; musí být větší než 0kWh
Maximální výkon bateriejedna hodnota pro nabíjení i vybíjeníkW
Maximální výkon odběru ze sítěvelikost hlavního jističe; 0 znamená, že instalace nikdy neodebírá ze sítěkW
Maximální výkon dodávky do sítělimit dodávky podle připojení k síti; 0 znamená, že instalace nikdy nedodává do sítěkW
Pevné minimum baterienejnižší stav nabití povolený výrobcem střídače, výchozí 10%
Rezerva baterierezerva, ze které plán nikdy neprodává do sítě (například pro nepředvídatelnou spotřebu), výchozí 10%

V TapHome musí být dostupný i aktuální stav nabití baterie, obvykle z vlastní integrace střídače, aby ho bylo možné přes smart rule zapisovat do této šablony (viz níže Odesílání telemetrie).

3. Síť a hodiny řídicí jednotky

  • Řídicí jednotka potřebuje odchozí přístup na internet přes HTTPS na spotlogic.cz, port 443. SpotLogic se k řídicí jednotce zpětně nepřipojuje — časové řady predikcí a cen putují v těle odesílané telemetrie, takže není třeba otevírat žádný příchozí port.
  • Telemetrie nese čas odeslání z hodin řídicí jednotky a SpotLogic z něj sestavuje okno plánu. Odchylka několika minut nevadí; odchylka několika hodin posune celý plán do nesprávných časových úseků. Udržujte hodiny řídicí jednotky přesné.
  • Časové pásmo (název IANA, například Europe/Prague) určuje, kde končí „dnes“ a začíná „zítra“. Zadejte časové pásmo místa instalace.

4. Parametry importu

Šablona se importuje do rozhraní Packet Parser v aplikaci TapHome a při importu se vyplní tyto parametry:

ParametrVýznamJednotka
PLC ID, access tokenz aktivačního e-mailu—
Time zonenázev IANA, výchozí Europe/Prague; určuje hranice dnů plánu—
Battery capacitymusí být větší než 0kWh
Battery max powerjedna hodnota pro nabíjení i vybíjeníkW
Max grid import / export power0 znamená, že instalace nikdy neodebírá / nikdy nedodávákW
Max state of chargeSpotLogic ho jen zaznamenává, současný plánovač ho nevynucuje%
Hard battery floorminimum od výrobce střídače, výchozí 10%

Čísla se píší s desetinnou tečkou (čárka se převede). PLC ID a token se uloží do proměnných modulu PlcId a Token. Všechny hodnoty lze později upravit jako proměnné modulu.

5. Ověření přístupových údajů

Interaktivní dokumentace API služby SpotLogic (na spotlogic.cz pod /docs) má dialog Authorize pro zadání PLC ID a tokenu a její příklad telemetrie pro TapHome je úplný: s platnými přístupovými údaji ho SpotLogic přijme s HTTP 202. Nejprve v něm aktualizujte čas odeslání (TimeStampUnix) na aktuální čas. Přijatá vzorová data se pro plán ukládají stejně jako skutečná telemetrie, proto toto ověření patří před propojení povelu se střídačem.

Odpověď HTTP 422 o neúplném horizontu predikce také dokazuje, že PLC ID a token jsou správné — nesprávný token vrátí HTTP 401.

Možnosti zařízení

Čtení povelu (každých 20 s)

Modul každých 20 sekund volá GET /api/v1/dispatch a zařízení odpověď zpracují:

  • SpotLogic command — povel pro probíhající časový úsek (action_id):
HodnotaHodnota v TapHomeNázev v SpotLogicVýznam
0No planno_planŽádný použitelný plán — nechte střídač v jeho vlastním bezpečném režimu
1Self-useself_useVlastní spotřeba: nabíjení z přebytku FV, vybíjení na pokrytí spotřeby domu
2Force chargeforce_chargeNabíjení baterie maximálním výkonem
3Force discharge to gridforce_dischargeVybíjení baterie do sítě maximálním výkonem
4Self-use, no dischargingself_use_ChargeOnlyVlastní spotřeba, nabíjení povoleno, vybíjení zakázáno
5Self-use, no chargingself_use_DischargeOnlyVlastní spotřeba, vybíjení povoleno, nabíjení zakázáno
6Stop PV (reserved)stopPVRezervováno — současný plánovač ho nevydává
7Grid charge without PV (reserved)ChargeMaxNoPVRezervováno — současný plánovač ho nevydává

Servisní atributy zobrazují název povelu a čas, kdy povel končí (místní čas).

  • SpotLogic target state of charge — stav nabití (%), který plán očekává na konci časového úseku. Když ho baterie dosáhne, ukončete vynucené nabíjení nebo vybíjení; při vlastní spotřebě nad něj nenabíjejte. SpotLogic dodává, že při self_use_DischargeOnly se baterie nemá vybít pod tuto hodnotu. Hodnota je výsledkem plánu, ne žádaná hodnota, kterou je třeba vynutit, a poté, co dům spotřeboval rezervu, může být dočasně nižší než rezerva baterie.
  • SpotLogic next command — povel následujícího časového úseku, čas jeho začátku je v servisním atributu.
  • SpotLogic plan age — stáří poskytnutého plánu v sekundách. Může spouštět záložní smart rule: když výrazně přeroste interval přepočtu, plán se nepřepočítává.

Odpověď HTTP 404 no_plan není chyba: povel je 0 a zařízení zobrazí informační zprávu. SpotLogic v tomto stavu žádá přepnout střídač do jeho vlastního bezpečného režimu a nikdy neopakovat poslední známý povel z paměti. HTTP 401 (nesprávné PLC ID nebo token, vypršelé předplatné) nastaví chybu na zařízeních i na modulu; SpotLogic žádá taková volání neopakovat, proto opravte přístupové údaje.

Odesílání telemetrie (přibližně každé 2 minuty)

Modul posílá POST /api/v1/optimize s PLCtype: "taphome" nejvýše jednou za 2 minuty. Posílá čas odeslání, časové pásmo, parametry baterie a sítě a dvě hodnoty ze zařízení:

  • Battery state of charge (input) — zapisujte do něj přes smart rule aktuální stav nabití 0–100 % ze střídače (když šablona střídače dává 0–1, vynásobte hodnotu 100). Zaokrouhluje se na celé procento, protože SpotLogic odmítá desetinné hodnoty. Dokud nemá hodnotu, nic se neposílá a modul zobrazuje varování.
  • Battery reserve for SpotLogic — rezerva SOCmin, výchozí 10 %: úroveň, ze které plán nikdy neprodává do sítě.

Servisní atributy modulu zobrazují výsledek posledního odeslání, interval přepočtu hlášený službou SpotLogic (výchozí 900 s), čas výpočtu plánu, běh plánu a verzi API. Odmítnuté odeslání (HTTP 422) je chyba modulu se zprávou, kterou vrátil SpotLogic. Odpověď na odeslání nikdy neobsahuje plán — SpotLogic ho počítá na pozadí a modul si ho vyzvedne při dalším čtení povelu.

Časové řady predikcí a cen

SpotLogic očekává v těle šest časových řad, každou jako dvojice [unix_ts, value]:

Proměnná moduluObsahKontrakt
PvForecastTod, PvForecastTomvýroba FV dnes / zítra, kWh za hodinuhodinová, bez mezer, od aktuální hodiny do konce zítřka
LoadForecastTod, LoadForecastTomspotřeba domu dnes / zítra, kWh za hodinustejně
PriceImp, PriceExpcena za odběr / dodávku, CZK/kWhkonstantní krok (hodinový nebo 15 minut), stačí dnešek, záporné ceny jsou povolené

Proměnné drží časové řady jako text JSON, například [[1788645600,0.0],[1788649200,0.42]], a vkládají se do těla beze změny; výchozí hodnota [] je prázdná řada. Samotná integrace funguje, potřebuje jen data. TapHome zatím neumí sdílet jeden text JSON mezi skripty a skript smart rule neumí posílat požadavky HTTP. Šest časových řad — dohromady asi 500 hodnot — proto musí být posbírané z jiných skriptů (například ze šablony predikce nebo spotových cen) a předané tomuto modulu přes stovky pomocných zařízení, nebo sestavené přímo ve čtecím skriptu modulu. Integrace bude opravdu praktická, až TapHome přidá textovou proměnnou sdílenou mezi skripty — viz nápad Textová proměnná a HTTP ze skriptů smart rules. Do té doby vyplňte šest proměnných a šablona funguje bez dalších úprav. Skript to vysvětluje v komentáři na svém začátku a v místě, kde se časové řady vkládají.

Odkud data pocházejí, je na instalatérovi; SpotLogic uvádí tyto typické zdroje:

  • Výroba FV — služba predikce solárních zisků, do které se zadá poloha, orientace a sklon panelů a instalovaný výkon, nebo cloud výrobce střídače.
  • Spotřeba domu — vlastní historie instalace: pro začátek stačí hodinová spotřeba zprůměrovaná podle hodiny dne a typu dne (pracovní den, víkend, svátek).
  • Ceny — spotová cena přepočtená podle smlouvy o dodávce (odběr, například spot plus marže) a podle smlouvy o výkupu přebytků (dodávka).

Den se změnou letního času má 23 nebo 25 hodin, takže úplná řada výroby FV nebo spotřeby má 47, 48 nebo 49 hodnot. Vzorky starší než jedna hodina před aktuální hodinou se oříznou, stejně jako vzorky za koncem zítřka; řada, která končí před koncem zítřka, se odmítne.

Řešení problémů

PříznakPříčina a řešení
Povel zůstává na No planPlán ještě nebyl vypočítán nebo je telemetrie odmítána. Zkontrolujte chybu modulu a servisní atribut Last telemetry upload. Plán starší než 60 minut se také neposkytuje. Po prvním přijatém odeslání může výpočet plánu chvíli trvat — nejméně jeden interval přepočtu.
Chyba modulu HTTP 422Telemetrie porušuje datový kontrakt SpotLogic; zpráva uvádí, kterou část. Nejčastěji chybí časové řady predikcí nebo cen, nebo nepokrývají období do konce zítřka.
Chyba HTTP 401PLC ID a token k sobě nepatří nebo vypršelo předplatné. Opravte proměnné modulu PlcId a Token.
Varování “Telemetry not sent”Stav nabití ještě nebyl zapsán nebo je prázdný některý parametr baterie či sítě.
Stáří plánu stále rosteNová telemetrie se do SpotLogic nedostává nebo selhávají jeho zdroje dat; poslední platný plán zůstává v platnosti, dokud nemá 60 minut.
Chyba HTTP 500 nebo 502Chyba serveru nebo selhávající zdroj dat na straně SpotLogic; poslední platný plán zůstává v platnosti. SpotLogic doporučuje oba opakovat s rostoucím odstupem; modul jednoduše zopakuje oba požadavky při dalším dotazu.
Plán řídí nesprávné hodinyHodiny řídicí jednotky nebo časové pásmo jsou nesprávné — okno plánu se sestavuje z času odeslání a deklarovaného pásma.

Dostupná zařízení 6

Tato zařízení se po importu zobrazí v TapHome.

SpotLogic Modul
Servisní atributy
Last telemetry upload
Plan recompute interval
Plan computed at
Plan run
API version
Vlastní proměnné
PlcId (string)
Token (string)
TimeZone (string)
BatCapacity (string)
BatPmax (string)
GridImportPmax (string)
GridExportPmax (string)
SocMax (string)
SocHardMin (string)
SocNow (numeric) = -1
SocMin (numeric) = 10
PvForecastTod (string) = []
PvForecastTom (string) = []
LoadForecastTod (string) = []
LoadForecastTom (string) = []
PriceImp (string) = []
PriceExp (string) = []
DispatchJson (string)
DispatchCode (numeric)
OptimizeJson (string)
OptimizeCode (numeric)
OptimizeAt (string)
LastOptimizeUnix (numeric)

SpotLogic

Čtení (modul)
# =============================================================================
#  STATUS: WORKING, BUT THE DATA MUST BE BROUGHT IN BY HAND
# =============================================================================
#  The integration itself works - dispatch reading, action_id -> inverter mode
#  mapping, next command, plan diagnostics and error reporting are finished.
#  What it needs is the data: six series (PV forecast, load forecast, import and
#  export spot price; ~500 values, hourly or 15-minute, horizon now -> end of
#  tomorrow) as JSON text [[unix_ts, value], ...] in the module variables
#  PvForecastTod ... PriceExp (see below).
#  Until TapHome ships a shared variable between scripts, those series must be
#  collected from other scripts and handed over through hundreds of helper
#  devices - that is why the integration is only really practical once that
#  feature lands.
#  Tracking: https://taphome.com/cs/ideas/script-data-http/  (TapHome idea FR-003)
#  In the meantime: fill the six variables below and the template works as is.
# =============================================================================

# 1) GET /api/v1/dispatch - the command for the slot in progress (module poll ~20 s).
#    plc_id and token travel ONLY in the query string (SpotLogic contract).
VAR r := SENDHTTPREQUEST("/api/v1/dispatch?plc_id=" + PlcId + "&token=" + Token);
DispatchCode := r.StatusCode;
DispatchJson := r.Content;
IF r.StatusCode = 401
    ADDERROR(1, "SpotLogic rejected the PLC ID or the token (HTTP 401) - check the module variables PlcId and Token; the subscription may have expired. Not retried by SpotLogic rules, fix the credentials.");
ELSEIF r.StatusCode != 200 AND r.StatusCode != 404
    VAR dmsg := PARSEJSON(r.Content, "$.message", true);
    ADDERROR(2, "SpotLogic dispatch failed: HTTP " + r.StatusCode + IF(ISNULL(dmsg), "", " " + dmsg));
END

# 2) POST /api/v1/optimize - telemetry, at most every ~2 min (SpotLogic asks for no more often).
datetime now := NOW();
VAR nowUnix := now.UNIXTIME;
IF nowUnix - LastOptimizeUnix >= 115
    LastOptimizeUnix := nowUnix;
    VAR cap := TODOUBLE(REPLACE(BatCapacity, ",", "."));
    VAR bp := TODOUBLE(REPLACE(BatPmax, ",", "."));
    VAR gi := TODOUBLE(REPLACE(GridImportPmax, ",", "."));
    VAR ge := TODOUBLE(REPLACE(GridExportPmax, ",", "."));
    VAR smax := TODOUBLE(SocMax);
    VAR shard := TODOUBLE(SocHardMin);
    IF SocNow < 0 OR SocNow > 100
        OptimizeCode := -1;
    ELSEIF ISNAN(cap) OR ISNAN(bp) OR ISNAN(gi) OR ISNAN(ge) OR ISNAN(smax) OR ISNAN(shard) OR LENGTH(PlcId) = 0 OR LENGTH(Token) = 0
        OptimizeCode := -2;
    ELSE
        # Forecast and price series: module variables PvForecastTod, PvForecastTom,
        # LoadForecastTod, LoadForecastTom, PriceImp, PriceExp hold JSON text
        # [[unix_ts, value], ...]. The template does NOT fill them - see the banner
        # at the top of this script. Until they are filled, SpotLogic answers 422.
        VAR body := "{\"PLCtype\":\"taphome\"";
        body := body + ",\"TimeZone\":\"" + TimeZone + "\"";
        body := body + ",\"TimeStampUnix\":" + TOSTRING(nowUnix, "F0");
        body := body + ",\"BatCapacity\":" + TOSTRING(cap, "F2");
        body := body + ",\"BatPmax\":" + TOSTRING(bp, "F2");
        body := body + ",\"GridImportPmax\":" + TOSTRING(gi, "F2");
        body := body + ",\"GridExportPmax\":" + TOSTRING(ge, "F2");
        body := body + ",\"SOCnow\":" + TOSTRING(SocNow, "F0");
        body := body + ",\"SOCmin\":" + TOSTRING(SocMin, "F0");
        body := body + ",\"SOCmax\":" + TOSTRING(smax, "F0");
        body := body + ",\"SOChardmin\":" + TOSTRING(shard, "F0");
        body := body + ",\"PvForecastTod\":" + PvForecastTod;
        body := body + ",\"PvForecastTom\":" + PvForecastTom;
        body := body + ",\"LoadForecastTod\":" + LoadForecastTod;
        body := body + ",\"LoadForecastTom\":" + LoadForecastTom;
        body := body + ",\"PriceImp\":" + PriceImp;
        body := body + ",\"PriceExp\":" + PriceExp + "}";
        VAR o := SENDHTTPREQUEST("/api/v1/optimize?plc_id=" + PlcId + "&token=" + Token, "POST", body, "Content-Type: application/json");
        OptimizeCode := o.StatusCode;
        OptimizeJson := o.Content;
        OptimizeAt := TOSTRING(now, "yyyy-MM-dd HH:mm:ss");
    END
END

# The outcome of the last telemetry upload is reported on every run, not only on the upload run.
VAR omsg := "";
IF LENGTH(OptimizeJson) > 0
    omsg := PARSEJSON(OptimizeJson, "$.message", true);
    IF ISNULL(omsg)
        omsg := "";
    END
END
IF OptimizeCode = -1
    ADDWARNING(3, "Telemetry not sent: the device Battery state of charge (input) has no value 0-100 yet - write it from the inverter with a smart rule.");
ELSEIF OptimizeCode = -2
    ADDWARNING(7, "Telemetry not sent: fill the module variables PlcId, Token, BatCapacity, BatPmax, GridImportPmax, GridExportPmax, SocMax and SocHardMin (numbers with a decimal point).");
ELSEIF OptimizeCode = 401
    ADDERROR(4, "SpotLogic rejected the telemetry: PLC ID or token invalid (HTTP 401).");
ELSEIF OptimizeCode = 422
    ADDERROR(5, "SpotLogic rejected the telemetry (HTTP 422): " + omsg + " - the forecast and price series (module variables PvForecastTod ... PriceExp) must be filled, see the template description.");
ELSEIF OptimizeCode != 0 AND OptimizeCode != 202
    ADDERROR(6, "SpotLogic telemetry upload failed: HTTP " + OptimizeCode + " " + omsg);
END
Servisní atributy
Last telemetry upload
IF(OptimizeCode = 0, "not sent yet", IF(OptimizeCode < 0, "waiting for inputs", "HTTP " + OptimizeCode + " at " + OptimizeAt))
Plan recompute interval
VAR v := PARSEJSON(OptimizeJson, "$.data.recompute_interval_sec", true);
IF ISNULL(v)
    RETURN("-");
END
RETURN(TOSTRING(v, "F0") + " s");
Plan computed at
VAR s := PARSEJSON(DispatchJson, "$.meta.plan_created_at", true);
IF ISNULL(s)
    RETURN("-");
END
datetime t := DATETIME(s);
VAR l := t.LOCALDATETIME;
RETURN(TOSTRING(l, "yyyy-MM-dd HH:mm"));
Plan run
VAR v := PARSEJSON(DispatchJson, "$.meta.run_id", true);
RETURN(IF(ISNULL(v), "-", v));
API version
VAR v := PARSEJSON(DispatchJson, "$.meta.version.api", true);
RETURN(IF(ISNULL(v), "-", v));
SpotLogic command Vícestavový přepínač
Hodnoty / Stavy: No plan · Self-use · Force charge · Force discharge to grid · Self-use, no discharging · Self-use, no charging · Stop PV (reserved) · Grid charge without PV (reserved)

SpotLogic command

Čtení stavu přepínače
IF DispatchCode = 0
    RETURN(NaN);
END
IF DispatchCode = 401
    ADDERROR(1, "SpotLogic rejected the PLC ID or the token (HTTP 401) - check the module variables PlcId and Token.");
    RETURN(NaN);
END
IF DispatchCode = 404
    ADDINFO(2, "No usable plan yet (no_plan) - keep the inverter in its own safe mode.");
    RETURN(0);
END
IF DispatchCode != 200
    ADDERROR(3, "Command not available: HTTP " + DispatchCode);
    RETURN(NaN);
END
VAR id := PARSEJSON(DispatchJson, "$.data.command.action_id", true);
IF ISNULL(id)
    ADDERROR(4, "Unexpected SpotLogic answer: data.command.action_id is missing.");
    RETURN(NaN);
END
RETURN(id);
Servisní atributy
Command name
VAR v := PARSEJSON(DispatchJson, "$.data.command.action_name", true);
IF ISNULL(v)
    v := PARSEJSON(DispatchJson, "$.data.action_name", true);
END
RETURN(IF(ISNULL(v), "-", v));
Command valid until
VAR s := PARSEJSON(DispatchJson, "$.data.command.valid_until", true);
IF ISNULL(s)
    RETURN("-");
END
datetime t := DATETIME(s);
VAR l := t.LOCALDATETIME;
RETURN(TOSTRING(l, "yyyy-MM-dd HH:mm"));
SpotLogic target state of charge Proměnná

SpotLogic target state of charge

Čtení
IF DispatchCode = 0
    RETURN(NaN);
END
IF DispatchCode = 401
    ADDERROR(1, "SpotLogic rejected the PLC ID or the token (HTTP 401) - check the module variables PlcId and Token.");
    RETURN(NaN);
END
IF DispatchCode != 200
    RETURN(NaN);
END
VAR v := PARSEJSON(DispatchJson, "$.data.command.target_soc_percent", true);
IF ISNULL(v)
    RETURN(NaN);
END
RETURN(v);
SpotLogic next command Vícestavový přepínač
Hodnoty / Stavy: No plan · Self-use · Force charge · Force discharge to grid · Self-use, no discharging · Self-use, no charging · Stop PV (reserved) · Grid charge without PV (reserved)

SpotLogic next command

Čtení stavu přepínače
IF DispatchCode = 0
    RETURN(NaN);
END
IF DispatchCode = 401
    ADDERROR(1, "SpotLogic rejected the PLC ID or the token (HTTP 401) - check the module variables PlcId and Token.");
    RETURN(NaN);
END
IF DispatchCode = 404
    RETURN(0);
END
IF DispatchCode != 200
    ADDERROR(3, "Next command not available: HTTP " + DispatchCode);
    RETURN(NaN);
END
VAR id := PARSEJSON(DispatchJson, "$.data.context.next_action_id", true);
IF ISNULL(id)
    RETURN(NaN);
END
RETURN(id);
Servisní atributy
Next command name
VAR v := PARSEJSON(DispatchJson, "$.data.context.next_action_name", true);
RETURN(IF(ISNULL(v), "-", v));
Next command starts
VAR s := PARSEJSON(DispatchJson, "$.data.context.next_action_time", true);
IF ISNULL(s)
    RETURN("-");
END
datetime t := DATETIME(s);
VAR l := t.LOCALDATETIME;
RETURN(TOSTRING(l, "yyyy-MM-dd HH:mm"));
SpotLogic plan age Proměnná

SpotLogic plan age

Čtení
IF DispatchCode = 0
    RETURN(NaN);
END
IF DispatchCode = 401
    ADDERROR(1, "SpotLogic rejected the PLC ID or the token (HTTP 401) - check the module variables PlcId and Token.");
    RETURN(NaN);
END
IF DispatchCode != 200
    RETURN(NaN);
END
VAR v := PARSEJSON(DispatchJson, "$.meta.plan_age_sec", true);
IF ISNULL(v)
    RETURN(NaN);
END
RETURN(v);
Battery state of charge (input) Proměnná

Battery state of charge (input)

Čtení
IF(SocNow < 0, NaN, SocNow)
Zápis
SocNow := Va;
Battery reserve for SpotLogic Proměnná

Battery reserve for SpotLogic

Čtení
RETURN(SocMin);
Zápis
SocMin := Va;
Připojení: Packet Parser → HTTP

Parametry importu

Tyto hodnoty zadáte při importu XML.

Ptá se v aplikaciVýchozí
SpotLogic PLC ID (from the activation e-mail)Zadáte při importu
SpotLogic access token (from the activation e-mail, secret)Zadáte při importu
Time zone (IANA name)Europe/Prague
Battery capacity [kWh]Zadáte při importu
Battery max charge and discharge power [kW]Zadáte při importu
Max grid import power [kW] (0 = never import)Zadáte při importu
Max grid export power [kW] (0 = never export)Zadáte při importu
Max state of charge [%] (recorded only)100
Hard battery floor from the inverter manufacturer [%]10

Našli jste problém s touto šablonou zařízení?

Napište nám, co nefunguje, co chybí, nebo jak by se měla šablona chovat. Vaše zpětná vazba nám pomáhá udržet katalog přesný.

Šablona · portál TapHome SpotLogic – battery optimisation over the spot market (HTTP API) Otevřete tuto šablonu v zákaznickém portálu a použijte ji ve svém domově, nebo navrhněte úpravu a odešlete ji zpět do katalogu. Packet Parser → HTTP Zobrazit v portálu TapHome