TapHome
Zajednica Beta · neprovjereno Energija i mjerenje

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

SpotLogic je usluga u oblaku koja prema spot cijenama planira kada se baterija fotonaponskog sustava puni, pokriva potrošnju kuće ili prodaje u mrežu. Predložak preko HTTPS-a čita naredbu za trenutačni interval (0–7), ciljno stanje napunjenosti, sljedeću naredbu i starost plana te svake 2 minute šalje telemetriju baterije. Serije proizvodnje solarne elektrane, potrošnje i cijena mora osigurati instalater; izmjenjivačem upravljaju vlastiti smart rules.

SpotLogicPacket Parser → HTTP6 uređajaRevizija 1.1 Posljednje ažuriranje: 10. studenoga 2026.

Autor Adam Pelikán

Uvoz u aplikaciju TapHomeHardver › Packet Parser › Dodaj iz predloška

Preuzmite predložak
Na ovoj stranici

Upute za integraciju

SpotLogic je usluga u oblaku koja izračunava plan punjenja i pražnjenja baterije fotonaponskog sustava prema spot tržištu električne energije. To je usluga izračuna, a ne izvor podataka: centralna jedinica šalje telemetriju baterije zajedno s predviđanjem proizvodnje solarne elektrane, predviđanjem potrošnje kuće te cijenama preuzimanja iz mreže i predaje u mrežu, a SpotLogic odgovara naredbom za trenutačni vremenski interval. Ovaj predložak povezuje TapHome s API-jem usluge SpotLogic preko HTTPS-a (spotlogic.cz, port 443) pomoću Packet Parser HTTP modula. Predložak naredbu čita, a telemetriju šalje; solarnim izmjenjivačem (inverterom) ne upravlja, nego se naredba s izmjenjivačem povezuje vlastitim smart rules instalatera.

Ništa se ne spaja kabelima. Puštanje usluge u rad znači aktivirati SpotLogic za lokaciju, prikupiti parametre baterije i mreže, centralnoj jedinici omogućiti odlazni pristup internetu i pripremiti serije prognoza i cijena.

SpotLogic u svakom slanju telemetrije traži serije prognoza i cijena (proizvodnja solarne elektrane i potrošnja kuće za danas i sutra, cijene preuzimanja i predaje). Ovaj predložak ih ne može sam popuniti, vidi Serije prognoza i cijena. Dok nisu popunjene, SpotLogic odbija telemetriju s HTTP 422, ne izračunava plan, a naredba ostaje na No plan.

Konfiguracija

1. Aktivirajte SpotLogic i sačuvajte pristupne podatke

SpotLogic pri aktivaciji uređaja e-poštom šalje PLC ID i pristupni token. Token je tajan, vezan uz točno jedan PLC ID i vrijedi tijekom razdoblja pretplate. Oba se prenose samo u nizu upita (query string) svakog zahtjeva (?plc_id=…&token=…), kako propisuje ugovor sučelja SpotLogic, a nikad u tijelu zahtjeva.

Token ne stavljajte u zajedničke dokumente ni u javne repozitorije. Pogrešan par PLC ID i token, nevažeći token i istekla pretplata završavaju s HTTP 401, a SpotLogic namjerno ne kaže o kojem se od tri slučaja radi.

2. Prikupite parametre baterije i mreže

SpotLogic planira samo s brojevima koje primi u telemetriji. Prije uvoza potražite ih u dokumentaciji izmjenjivača i baterije te u ugovoru o priključenju na mrežu:

VrijednostOdakle dolaziJedinica
Kapacitet baterijetehnički list baterije; mora biti veći od 0kWh
Najveća snaga baterijejedna vrijednost za punjenje i pražnjenjekW
Najveća snaga preuzimanja iz mreževeličina glavnog prekidača; 0 znači da lokacija nikad ne preuzima iz mrežekW
Najveća snaga predaje u mrežuograničenje predaje priključka na mrežu; 0 znači da lokacija nikad ne predaje u mrežukW
Tvrda donja granica baterijenajniže stanje napunjenosti koje dopušta proizvođač izmjenjivača, zadano 10%
Rezerva baterijerezerva iz koje plan nikad ne prodaje u mrežu (na primjer za nepredvidivu potrošnju), zadano 10%

U sustavu TapHome mora biti dostupno i trenutačno stanje napunjenosti baterije, obično iz vlastite integracije izmjenjivača, kako bi ga smart rule mogao upisati u ovaj predložak (vidi Slanje telemetrije niže).

3. Mreža i sat centralne jedinice

  • Centralnoj jedinici potreban je odlazni pristup internetu preko HTTPS-a prema spotlogic.cz na portu 443. SpotLogic se ne spaja natrag na centralnu jedinicu: serije prognoza i cijena putuju u tijelu slanja telemetrije, pa nije potrebno otvarati nijedan dolazni port.
  • Telemetrija nosi vrijeme slanja prema satu centralne jedinice, a SpotLogic iz njega gradi vremenski prozor plana. Odstupanje od nekoliko minuta ne smeta; odstupanje od nekoliko sati pomiče cijeli plan u pogrešne intervale. Održavajte točan sat centralne jedinice.
  • Vremenska zona (IANA naziv, na primjer Europe/Prague) određuje gdje završava „danas” i počinje „sutra”. Unesite zonu lokacije.

4. Parametri uvoza

Predložak se uvozi u sučelje Packet Parser u aplikaciji TapHome, a pri uvozu se popunjavaju sljedeći parametri:

ParametarZnačenjeJedinica
PLC ID, access tokeniz e-pošte o aktivaciji—
Time zoneIANA naziv, zadano Europe/Prague; iz nje proizlaze granice dana u planu—
Battery capacitymora biti veći od 0kWh
Battery max powerjedna vrijednost za punjenje i pražnjenjekW
Max grid import / export power0 znači da lokacija nikad ne preuzima iz mreže / nikad ne predaje u mrežukW
Max state of chargeSpotLogic ga samo bilježi, trenutačni planer ga ne provodi%
Hard battery floordonja granica od proizvođača izmjenjivača, zadano 10%

Brojevi se upisuju s decimalnom točkom (zarez se pretvara). PLC ID i token spremaju se u varijable modula PlcId i Token. Sve vrijednosti i nakon uvoza ostaju promjenjive kao varijable modula.

5. Provjera pristupnih podataka

Interaktivna API dokumentacija usluge SpotLogic (na spotlogic.cz pod /docs) ima dijalog Authorize za PLC ID i token, a njezin primjer telemetrije za TapHome je potpun: s važećim pristupnim podacima SpotLogic ga prihvaća s HTTP 202. Prije toga vrijeme slanja (TimeStampUnix) postavite na trenutačno vrijeme. Prihvaćeni primjeri podataka spremaju se za plan jednako kao stvarna telemetrija, pa ova provjera dolazi prije nego što se naredba poveže s izmjenjivačem.

Odgovor HTTP 422 o nepotpunom horizontu prognoze također dokazuje da su PLC ID i token ispravni; pogrešan token daje HTTP 401.

Mogućnosti uređaja

Čitanje naredbe (svakih 20 s)

Modul svakih 20 sekundi šalje upit GET /api/v1/dispatch, a uređaji raščlanjuju odgovor:

  • SpotLogic command — naredba za interval koji je u tijeku (action_id):
VrijednostVrijednost u TapHomeNaziv u SpotLogicZnačenje
0No planno_planNema upotrebljivog plana: izmjenjivač držite u njegovom vlastitom sigurnom načinu rada
1Self-useself_useVlastita potrošnja: punjenje iz viška proizvodnje solarne elektrane, pražnjenje za pokrivanje potrošnje kuće
2Force chargeforce_chargePunjenje baterije najvećom snagom
3Force discharge to gridforce_dischargePražnjenje baterije u mrežu najvećom snagom
4Self-use, no dischargingself_use_ChargeOnlyVlastita potrošnja, punjenje dopušteno, pražnjenje zabranjeno
5Self-use, no chargingself_use_DischargeOnlyVlastita potrošnja, pražnjenje dopušteno, punjenje zabranjeno
6Stop PV (reserved)stopPVRezervirano: trenutačni planer ovu naredbu ne izdaje
7Grid charge without PV (reserved)ChargeMaxNoPVRezervirano: trenutačni planer ovu naredbu ne izdaje

Servisni atributi prikazuju naziv naredbe i kada naredba završava (lokalno vrijeme).

  • SpotLogic target state of charge — stanje napunjenosti (%) koje plan očekuje na kraju intervala. Prisilno punjenje ili pražnjenje zaustavite kad ga baterija dosegne; u načinu vlastite potrošnje ne punite iznad njega. SpotLogic dodaje da se kod self_use_DischargeOnly baterija ne bi smjela prazniti ispod njega. Vrijednost je rezultat plana, a ne zadana vrijednost koju treba prisilno postići, i nakon što je kuća potrošila rezervu privremeno može biti niža od rezerve baterije.
  • SpotLogic next command — naredba sljedećeg intervala, s vremenom početka kao servisnim atributom.
  • SpotLogic plan age — starost posluženog plana u sekundama. Može pokretati rezervni smart rule: kad znatno nadmaši interval ponovnog izračuna, plan se više ne izračunava ponovno.

Odgovor HTTP 404 no_plan nije pogreška: naredba je 0, a uređaj prikazuje informativnu poruku. SpotLogic traži da se u tom stanju prijeđe na vlastiti sigurni način rada izmjenjivača i da se posljednja poznata naredba nikad ne ponavlja iz memorije. HTTP 401 (pogrešan PLC ID ili token, istekla pretplata) postavlja pogrešku na uređajima i na modulu; SpotLogic traži da se takvi pozivi ne ponavljaju, pa ispravite pristupne podatke.

Slanje telemetrije (otprilike svake 2 minute)

Modul šalje POST /api/v1/optimize s PLCtype: "taphome" najviše svake 2 minute. Šalje vrijeme slanja, vremensku zonu, parametre baterije i mreže te dvije vrijednosti iz uređaja:

  • Battery state of charge (input) — pomoću smart rule upišite trenutačno stanje napunjenosti 0–100 % iz izmjenjivača (kad predložak izmjenjivača daje 0–1, pomnožite sa 100). Vrijednost se zaokružuje na cijeli postotak jer SpotLogic odbija decimalne vrijednosti. Dok uređaj nema vrijednost, ništa se ne šalje, a modul prikazuje upozorenje.
  • Battery reserve for SpotLogic — rezerva SOCmin, zadano 10 %: razina iz koje plan nikad ne prodaje u mrežu.

Servisni atributi modula prikazuju rezultat posljednjeg slanja, interval ponovnog izračuna koji javlja SpotLogic (zadano 900 s), kada je plan izračunat, izvođenje plana i verziju API-ja. Odbijeno slanje (HTTP 422) je pogreška modula s porukom koju je vratio SpotLogic. Odgovor na slanje nikad ne sadrži plan: SpotLogic ga izračunava u pozadini, a modul ga preuzima pri sljedećem čitanju naredbe.

Serije prognoza i cijena

SpotLogic u tijelu očekuje šest serija, svaku kao parove [unix_ts, value]:

Varijabla modulaSadržajUgovor sučelja
PvForecastTod, PvForecastTomproizvodnja solarne elektrane danas / sutra, kWh po satupo satu, bez praznina, od trenutačnog sata do kraja sutrašnjeg dana
LoadForecastTod, LoadForecastTompotrošnja kuće danas / sutra, kWh po satuisto
PriceImp, PriceExpcijena preuzimanja / predaje, CZK/kWhstalan korak (po satu ili 15 minuta), dovoljan je današnji dan, negativne cijene su dopuštene

Varijable drže serije kao JSON tekst, na primjer [[1788645600,0.0],[1788649200,0.42]], i umeću se u tijelo nepromijenjene; zadana vrijednost [] je prazna serija. Integracija sama po sebi radi; ono što joj treba su podaci. TapHome zasad ne može dijeliti jedan JSON tekst između skripti, a skripta u smart rule ne može slati HTTP zahtjeve. Šest serija, zajedno oko 500 vrijednosti, zato se mora prikupiti iz drugih skripti (na primjer iz predloška prognoze ili spot cijena) i predati ovom modulu preko stotina pomoćnih uređaja ili izraditi u samoj skripti za čitanje modula. Integracija postaje stvarno praktična tek kad TapHome doda tekstualnu varijablu zajedničku svim skriptama (pogledajte ideju Tekstualna varijabla i HTTP iz skripti smart rules). Do tada popunite šest varijabli i predložak radi bez izmjena. Skripta to objašnjava u komentaru na svom početku i na mjestu gdje se serije umeću.

Odakle dolaze podaci, odlučuje instalater; SpotLogic navodi ove tipične izvore:

  • Proizvodnja solarne elektrane — usluga predviđanja proizvodnje solarne elektrane kojoj se zadaju lokacija, orijentacija i nagib panela te instalirana snaga, ili oblak proizvođača izmjenjivača.
  • Potrošnja kuće — vlastita povijest lokacije: za početak je dovoljna satna potrošnja uprosječena po satu u danu i vrsti dana (radni dan, vikend, praznik).
  • Cijene — spot cijena preračunata prema ugovoru o opskrbi (preuzimanje, na primjer spot plus marža) i prema ugovoru o otkupu viška energije (predaja).

Dan s promjenom ljetnog računanja vremena ima 23 ili 25 sati, pa potpuna serija proizvodnje ili potrošnje ima 47, 48 ili 49 vrijednosti. Uzorci stariji od jednog sata prije trenutačnog sata odrezuju se, kao i uzorci nakon kraja sutrašnjeg dana; serija koja završava prije kraja sutrašnjeg dana se odbija.

Rješavanje problema

SimptomUzrok i rješenje
Naredba ostaje na No planPlan još nije izračunat ili se telemetrija odbija. Provjerite pogrešku modula i servisni atribut Last telemetry upload. Ni plan stariji od 60 minuta se ne poslužuje. Nakon prvog prihvaćenog slanja plan može potrajati, najmanje jedan interval ponovnog izračuna.
Pogreška modula HTTP 422Telemetrija krši podatkovni ugovor usluge SpotLogic; poruka kaže koji dio. Najčešće nedostaju serije prognoza ili cijena ili ne pokrivaju razdoblje do kraja sutrašnjeg dana.
Pogreška HTTP 401PLC ID i token se ne podudaraju ili je pretplata istekla. Ispravite varijable modula PlcId i Token.
Upozorenje „Telemetry not sent”Stanje napunjenosti još nije upisano ili je neki parametar baterije ili mreže prazan.
Starost plana stalno rasteNova telemetrija ne stiže do usluge SpotLogic ili njezini izvori podataka ne rade; posljednji važeći plan ostaje na snazi dok ne bude star 60 minuta.
Pogreška HTTP 500 ili 502Pogreška poslužitelja ili izvora podataka na strani usluge SpotLogic; posljednji važeći plan ostaje na snazi. SpotLogic preporučuje ponavljanje obaju zahtjeva sa sve duljim razmacima; modul jednostavno ponavlja oba zahtjeva pri sljedećem upitu.
Plan upravlja u pogrešnim satimaSat centralne jedinice ili vremenska zona nisu ispravni: prozor plana gradi se iz vremena slanja i deklarirane zone.

Dostupni uređaji 6

Ovi se uređaji pojavljuju u TapHomeu nakon uvoza.

SpotLogic Modul
Servisni atributi
Last telemetry upload
Plan recompute interval
Plan computed at
Plan run
API version
Prilagođene varijable
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

Čitanje (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
Servisni atributi
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 Prekidač s više vrijednosti
Vrijednosti / stanja: 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

Čitanje stanja sklopke
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);
Servisni atributi
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 Varijabla

SpotLogic target state of charge

Čitanje
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 Prekidač s više vrijednosti
Vrijednosti / stanja: 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

Čitanje stanja sklopke
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);
Servisni atributi
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 Varijabla

SpotLogic plan age

Čitanje
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) Varijabla

Battery state of charge (input)

Čitanje
IF(SocNow < 0, NaN, SocNow)
Zapis
SocNow := Va;
Battery reserve for SpotLogic Varijabla

Battery reserve for SpotLogic

Čitanje
RETURN(SocMin);
Zapis
SocMin := Va;
Povezivanje: Packet Parser → HTTP

Parametri uvoza

Ove vrijednosti unosite pri uvozu XML-a.

Pitanje u aplikacijiZadano
SpotLogic PLC ID (from the activation e-mail)Unosi se pri uvozu
SpotLogic access token (from the activation e-mail, secret)Unosi se pri uvozu
Time zone (IANA name)Europe/Prague
Battery capacity [kWh]Unosi se pri uvozu
Battery max charge and discharge power [kW]Unosi se pri uvozu
Max grid import power [kW] (0 = never import)Unosi se pri uvozu
Max grid export power [kW] (0 = never export)Unosi se pri uvozu
Max state of charge [%] (recorded only)100
Hard battery floor from the inverter manufacturer [%]10

Pronašli ste problem s ovim predloškom uređaja?

Recite nam što ne radi, što nedostaje ili kako bi se predložak trebao ponašati. Vaše povratne informacije pomažu nam da katalog bude točan.

Predložak · TapHome portal SpotLogic – battery optimisation over the spot market (HTTP API) Otvorite ovaj predložak na portalu Customer Portal kako biste ga primijenili na jedan od svojih domova ili predložili poboljšanje i poslali ga natrag u katalog. Packet Parser → HTTP Pogledaj u TapHome portalu