TapHome
Komunita Beta · neoverená Energia a meranie

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

SpotLogic je cloudová služba, ktorá plánuje, kedy sa batéria fotovoltického systému nabíja, pokrýva spotrebu domu alebo predáva do siete podľa spotových cien. Šablóna cez HTTPS číta povel pre aktuálny časový úsek (0–7), cieľový stav nabitia, nasledujúci povel a vek plánu a každé 2 minúty odosiela telemetriu batérie. Časové rady výroby FV, spotreby a cien musí dodať inštalatér; solárny invertor sa riadi vlastnými smart rules.

SpotLogicPacket Parser → HTTP6 zariadeníRevízia 1.1 Posledná aktualizácia: 10. novembra 2026

Pridal Adam Pelikán

Import do aplikácie TapHomeHardvér › Packet Parser › Pridať zo šablóny

Stiahnuť šablónu
Na tejto stránke

Návod na integráciu

SpotLogic je cloudová služba, ktorá počíta plán nabíjania a vybíjania batérie fotovoltického systému podľa spotového trhu s elektrinou. Je to výpočtová služba, nie zdroj dát: riadiaca jednotka posiela telemetriu batérie spolu s predikciou solárnych ziskov, predikciou spotreby domu a cenami za odber a dodávku elektriny a SpotLogic odpovedá povelom pre aktuálny časový úsek. Táto šablóna pripája TapHome k SpotLogic API cez HTTPS (spotlogic.cz, port 443) pomocou modulu Packet Parser HTTP. Povel číta a telemetriu odosiela; solárny invertor neovláda — povel sa so solárnym invertorom prepojí vlastnými smart rules inštalatéra.

Nič sa nezapája. Sprevádzkovanie služby znamená aktivovať SpotLogic pre danú inštaláciu, zistiť parametre batérie a siete, zabezpečiť riadiacej jednotke odchádzajúci prístup na internet a pripraviť časové rady predikcií a cien.

SpotLogic potrebuje v každom odoslaní telemetrie časové rady predikcií a cien (predikcia solárnych ziskov a spotreby domu na dnes a zajtra, ceny za odber a dodávku). Táto šablóna ich sama vyplniť nevie — pozrite Časové rady predikcií a cien. Kým nie sú vyplnené, SpotLogic telemetriu odmieta s HTTP 422, plán nepočíta a povel ostáva na No plan.

Konfigurácia

1. Aktivujte SpotLogic a uschovajte prístupové údaje

SpotLogic pri aktivácii zariadenia pošle e-mailom PLC ID a prístupový token. Token je tajný, viazaný na práve jedno PLC ID a platný počas obdobia predplatného. Obe hodnoty sa prenášajú len v reťazci dopytu každej požiadavky (?plc_id=…&token=…), ako to vyžaduje kontrakt SpotLogic — nikdy v tele požiadavky.

Token nedávajte do zdieľaných dokumentov ani do verejných repozitárov. Nesprávna dvojica PLC ID a tokenu, neplatný token aj vypršané predplatné končia rovnako s HTTP 401 a SpotLogic zámerne neprezradí, o ktorý z troch prípadov išlo.

2. Zistite parametre batérie a siete

SpotLogic plánuje len s číslami, ktoré dostane v telemetrii. Pred importom ich vyhľadajte v dokumentácii solárneho invertora a batérie a v zmluve o pripojení k distribučnej sústave:

HodnotaOdkiaľ ju zistiťJednotka
Kapacita batériekatalógový list batérie; musí byť väčšia ako 0kWh
Maximálny výkon batériejedna hodnota pre nabíjanie aj vybíjaniekW
Maximálny výkon odberu zo sieteveľkosť hlavného ističa; 0 znamená, že inštalácia nikdy neodoberá zo sietekW
Maximálny výkon dodávky do sietelimit dodávky podľa pripojenia k sieti; 0 znamená, že inštalácia nikdy nedodáva do sietekW
Pevné minimum batérienajnižší stav nabitia povolený výrobcom solárneho invertora, predvolene 10%
Rezerva batérierezerva, z ktorej plán nikdy nepredáva do siete (napríklad pre nepredvídateľnú spotrebu), predvolene 10%

V TapHome musí byť dostupný aj aktuálny stav nabitia batérie, zvyčajne z vlastnej integrácie solárneho invertora, aby ho bolo možné cez smart rule zapisovať do tejto šablóny (pozrite nižšie Odosielanie telemetrie).

3. Sieť a hodiny riadiacej jednotky

  • Riadiaca jednotka potrebuje odchádzajúci prístup na internet cez HTTPS na spotlogic.cz, port 443. SpotLogic sa k riadiacej jednotke spätne nepripája — časové rady predikcií a cien putujú v tele odosielanej telemetrie, takže netreba otvárať žiadny prichádzajúci port.
  • Telemetria nesie čas odoslania z hodín riadiacej jednotky a SpotLogic z neho zostavuje okno plánu. Odchýlka niekoľkých minút neškodí; odchýlka niekoľkých hodín posunie celý plán do nesprávnych časových úsekov. Udržiavajte hodiny riadiacej jednotky presné.
  • Časové pásmo (názov IANA, napríklad Europe/Prague) určuje, kde končí „dnes“ a začína „zajtra“. Zadajte časové pásmo miesta inštalácie.

4. Parametre importu

Šablóna sa importuje do rozhrania Packet Parser v aplikácii TapHome a pri importe sa vyplnia tieto parametre:

ParameterVýznamJednotka
PLC ID, access tokenz aktivačného e-mailu—
Time zonenázov IANA, predvolene Europe/Prague; určuje hranice dní plánu—
Battery capacitymusí byť väčšia ako 0kWh
Battery max powerjedna hodnota pre nabíjanie aj vybíjaniekW
Max grid import / export power0 znamená, že inštalácia nikdy neodoberá / nikdy nedodávakW
Max state of chargeSpotLogic ho len zaznamenáva, súčasný plánovač ho nevynucuje%
Hard battery floorminimum od výrobcu solárneho invertora, predvolene 10%

Čísla sa píšu s desatinnou bodkou (čiarka sa prevedie). PLC ID a token sa uložia do premenných modulu PlcId a Token. Všetky hodnoty sa dajú neskôr upraviť ako premenné modulu.

5. Overenie prístupových údajov

Interaktívna dokumentácia API služby SpotLogic (na spotlogic.cz pod /docs) má dialóg Authorize na zadanie PLC ID a tokenu a jej príklad telemetrie pre TapHome je úplný: s platnými prístupovými údajmi ho SpotLogic prijme s HTTP 202. Najprv v ňom aktualizujte čas odoslania (TimeStampUnix) na aktuálny čas. Prijaté vzorové dáta sa pre plán ukladajú rovnako ako skutočná telemetria, preto toto overenie patrí pred prepojenie povelu so solárnym invertorom.

Odpoveď HTTP 422 o neúplnom horizonte predikcie tiež dokazuje, že PLC ID a token sú správne — nesprávny token vráti HTTP 401.

Možnosti zariadenia

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

Modul každých 20 sekúnd volá GET /api/v1/dispatch a zariadenia odpoveď spracujú:

  • SpotLogic command — povel pre prebiehajúci časový úsek (action_id):
HodnotaHodnota v TapHomeNázov v SpotLogicVýznam
0No planno_planŽiadny použiteľný plán — nechajte solárny invertor v jeho vlastnom bezpečnom režime
1Self-useself_useVlastná spotreba: nabíjanie z prebytku FV, vybíjanie na pokrytie spotreby domu
2Force chargeforce_chargeNabíjanie batérie maximálnym výkonom
3Force discharge to gridforce_dischargeVybíjanie batérie do siete maximálnym výkonom
4Self-use, no dischargingself_use_ChargeOnlyVlastná spotreba, nabíjanie povolené, vybíjanie zakázané
5Self-use, no chargingself_use_DischargeOnlyVlastná spotreba, vybíjanie povolené, nabíjanie zakázané
6Stop PV (reserved)stopPVRezervované — súčasný plánovač ho nevydáva
7Grid charge without PV (reserved)ChargeMaxNoPVRezervované — súčasný plánovač ho nevydáva

Servisné atribúty zobrazujú názov povelu a čas, kedy povel končí (miestny čas).

  • SpotLogic target state of charge — stav nabitia (%), ktorý plán očakáva na konci časového úseku. Keď ho batéria dosiahne, ukončite vynútené nabíjanie alebo vybíjanie; pri vlastnej spotrebe nad neho nenabíjajte. SpotLogic dopĺňa, že pri self_use_DischargeOnly sa batéria nemá vybiť pod túto hodnotu. Hodnota je výsledkom plánu, nie žiadaná hodnota, ktorú treba vynútiť, a potom, čo dom spotreboval rezervu, môže byť dočasne nižšia ako rezerva batérie.
  • SpotLogic next command — povel nasledujúceho časového úseku, čas jeho začiatku je v servisnom atribúte.
  • SpotLogic plan age — vek poskytnutého plánu v sekundách. Môže spúšťať záložný smart rule: keď výrazne prerastie interval prepočtu, plán sa neprepočítava.

Odpoveď HTTP 404 no_plan nie je chyba: povel je 0 a zariadenie zobrazí informačnú správu. SpotLogic v tomto stave žiada prepnúť solárny invertor do jeho vlastného bezpečného režimu a nikdy neopakovať posledný známy povel z pamäte. HTTP 401 (nesprávne PLC ID alebo token, vypršané predplatné) nastaví chybu na zariadeniach aj na module; SpotLogic žiada také volania neopakovať, preto opravte prístupové údaje.

Odosielanie telemetrie (približne každé 2 minúty)

Modul posiela POST /api/v1/optimize s PLCtype: "taphome" najviac raz za 2 minúty. Posiela čas odoslania, časové pásmo, parametre batérie a siete a dve hodnoty zo zariadení:

  • Battery state of charge (input) — zapisujte doň cez smart rule aktuálny stav nabitia 0–100 % zo solárneho invertora (keď šablóna solárneho invertora dáva 0–1, vynásobte hodnotu 100). Zaokrúhľuje sa na celé percento, pretože SpotLogic odmieta desatinné hodnoty. Kým nemá hodnotu, nič sa neposiela a modul zobrazuje varovanie.
  • Battery reserve for SpotLogic — rezerva SOCmin, predvolene 10 %: úroveň, z ktorej plán nikdy nepredáva do siete.

Servisné atribúty modulu zobrazujú výsledok posledného odoslania, interval prepočtu hlásený službou SpotLogic (predvolene 900 s), čas výpočtu plánu, beh plánu a verziu API. Odmietnuté odoslanie (HTTP 422) je chyba modulu so správou, ktorú vrátil SpotLogic. Odpoveď na odoslanie nikdy neobsahuje plán — SpotLogic ho počíta na pozadí a modul si ho vyzdvihne pri ďalšom čítaní povelu.

Časové rady predikcií a cien

SpotLogic očakáva v tele šesť časových radov, každý ako dvojice [unix_ts, value]:

Premenná moduluObsahKontrakt
PvForecastTod, PvForecastTomvýroba FV dnes / zajtra, kWh za hodinuhodinový, bez medzier, od aktuálnej hodiny do konca zajtrajška
LoadForecastTod, LoadForecastTomspotreba domu dnes / zajtra, kWh za hodinurovnako
PriceImp, PriceExpcena za odber / dodávku, CZK/kWhkonštantný krok (hodinový alebo 15 minút), stačí dnešok, záporné ceny sú povolené

Premenné držia časové rady ako text JSON, napríklad [[1788645600,0.0],[1788649200,0.42]], a vkladajú sa do tela bez zmeny; predvolená hodnota [] je prázdny rad. Samotná integrácia funguje, potrebuje len dáta. TapHome zatiaľ nevie zdieľať jeden text JSON medzi skriptami a skript smart rule nevie posielať požiadavky HTTP. Šesť časových radov — spolu asi 500 hodnôt — preto treba zozbierať z iných skriptov (napríklad zo šablóny predikcie alebo spotových cien) a odovzdať tomuto modulu cez stovky pomocných zariadení, alebo ich zostaviť priamo v skripte na čítanie modulu. Integrácia bude naozaj praktická, keď TapHome pridá textovú premennú zdieľanú medzi skriptami — pozrite nápad Textová premenná a HTTP zo skriptov smart rules. Dovtedy vyplňte šesť premenných a šablóna funguje bez ďalších úprav. Skript to vysvetľuje v komentári na svojom začiatku a na mieste, kde sa časové rady vkladajú.

Odkiaľ dáta pochádzajú, je na inštalatérovi; SpotLogic uvádza tieto typické zdroje:

  • Výroba FV — služba predikcie solárnych ziskov, do ktorej sa zadá poloha, orientácia a sklon panelov a inštalovaný výkon, alebo cloud výrobcu solárneho invertora.
  • Spotreba domu — vlastná história inštalácie: na začiatok stačí hodinová spotreba spriemerovaná podľa hodiny dňa a typu dňa (pracovný deň, víkend, sviatok).
  • Ceny — spotová cena prepočítaná podľa zmluvy o dodávke (odber, napríklad spot plus marža) a podľa zmluvy o výkupe prebytkov (dodávka).

Deň so zmenou letného času má 23 alebo 25 hodín, takže úplný rad výroby FV alebo spotreby má 47, 48 alebo 49 hodnôt. Vzorky staršie ako jedna hodina pred aktuálnou hodinou sa orežú, rovnako ako vzorky za koncom zajtrajška; rad, ktorý končí pred koncom zajtrajška, sa odmietne.

Riešenie problémov

PríznakPríčina a riešenie
Povel ostáva na No planPlán ešte nebol vypočítaný alebo je telemetria odmietaná. Skontrolujte chybu modulu a servisný atribút Last telemetry upload. Plán starší ako 60 minút sa tiež neposkytuje. Po prvom prijatom odoslaní môže výpočet plánu chvíľu trvať — najmenej jeden interval prepočtu.
Chyba modulu HTTP 422Telemetria porušuje dátový kontrakt SpotLogic; správa uvádza, ktorú časť. Najčastejšie chýbajú časové rady predikcií alebo cien, alebo nepokrývajú obdobie do konca zajtrajška.
Chyba HTTP 401PLC ID a token k sebe nepatria alebo vypršalo predplatné. Opravte premenné modulu PlcId a Token.
Varovanie “Telemetry not sent”Stav nabitia ešte nebol zapísaný alebo je prázdny niektorý parameter batérie či siete.
Vek plánu stále rastieNová telemetria sa do SpotLogic nedostáva alebo zlyhávajú jeho zdroje dát; posledný platný plán zostáva v platnosti, kým nemá 60 minút.
Chyba HTTP 500 alebo 502Chyba servera alebo zlyhávajúci zdroj dát na strane SpotLogic; posledný platný plán zostáva v platnosti. SpotLogic odporúča obe opakovať s narastajúcim odstupom; modul jednoducho zopakuje obe požiadavky pri ďalšom dopyte.
Plán riadi nesprávne hodinyHodiny riadiacej jednotky alebo časové pásmo sú nesprávne — okno plánu sa zostavuje z času odoslania a deklarovaného pásma.

Dostupné zariadenia 6

Tieto zariadenia sa po importe zobrazia v TapHome.

SpotLogic Modul
Servisné atribúty
Last telemetry upload
Plan recompute interval
Plan computed at
Plan run
API version
Vlastné premenné
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

Čítanie (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é atribúty
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 Viacstavový prepí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

Čítanie stavu prepínača
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é atribúty
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 Premenná

SpotLogic target state of charge

Čítanie
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 Viacstavový prepí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

Čítanie stavu prepínača
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é atribúty
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 Premenná

SpotLogic plan age

Čítanie
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) Premenná

Battery state of charge (input)

Čítanie
IF(SocNow < 0, NaN, SocNow)
Zápis
SocNow := Va;
Battery reserve for SpotLogic Premenná

Battery reserve for SpotLogic

Čítanie
RETURN(SocMin);
Zápis
SocMin := Va;
Pripojenie: Packet Parser → HTTP

Parametre importu

Tieto hodnoty zadáte pri importe XML.

Pýta sa v aplikáciiPredvolené
SpotLogic PLC ID (from the activation e-mail)Zadáte pri importe
SpotLogic access token (from the activation e-mail, secret)Zadáte pri importe
Time zone (IANA name)Europe/Prague
Battery capacity [kWh]Zadáte pri importe
Battery max charge and discharge power [kW]Zadáte pri importe
Max grid import power [kW] (0 = never import)Zadáte pri importe
Max grid export power [kW] (0 = never export)Zadáte pri importe
Max state of charge [%] (recorded only)100
Hard battery floor from the inverter manufacturer [%]10

Našli ste problém s touto šablónou zariadenia?

Napíšte nám, čo nefunguje, čo chýba, alebo ako by sa mala šablóna správať. Vaša spätná väzba nám pomáha udržiavať katalóg presný.

Šablóna · portál TapHome SpotLogic – battery optimisation over the spot market (HTTP API) Otvorte túto šablónu v Customer Portali a aplikujte ju na svoj domov, alebo navrhnite zmenu a odošlite ju späť do katalógu. Packet Parser → HTTP Zobraziť v portáli TapHome