TapHome
Közösség Béta · nem ellenőrzött Energia és mérés

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

A SpotLogic felhőszolgáltatás, amely a spot árak alapján megtervezi, mikor töltődjön a napelemes akkumulátor, mikor lássa el a házat és mikor adjon el a hálózatba. A sablon HTTPS-en olvassa az aktuális időszelet parancsát (0–7), a cél töltöttségi szintet, a következő parancsot és a terv korát, és 2 percenként feltölti az akkumulátor telemetriáját. Az előrejelzési és ár-idősorokat a telepítőnek kell biztosítania; a napelem invertert saját smart rule-ok vezérlik.

SpotLogicPacket Parser → HTTP6 eszközRevízió 1.1 Utoljára frissítve: 2026. november 10.

Beküldő Adam Pelikán

Importálás a TapHome alkalmazásbaHardver › Packet Parser › Hozzáadás sablonból

Sablon letöltése
Ezen az oldalon

Integrációs útmutató

A SpotLogic felhőszolgáltatás, amely a spot villamosenergia-piac alapján kiszámítja egy napelemes akkumulátor töltési és kisütési tervét. Számítási szolgáltatás, nem adatforrás: a vezérlőegység elküldi az akkumulátor telemetriáját a napenergia-hozam előrejelzéssel, a ház fogyasztásának előrejelzésével, valamint a vételi és visszatáplálási árakkal együtt, a SpotLogic pedig az aktuális időszeletre vonatkozó paranccsal válaszol. Ez a sablon egy Packet Parser HTTP modullal köti össze a TapHome-ot a SpotLogic API-val HTTPS-en keresztül (spotlogic.cz, 443-as port). A parancsot olvassa, a telemetriát feltölti; a napelem invertert nem vezérli — a parancsot a telepítő saját smart rule-jai kötik össze a napelem inverterrel.

Nincs mit bekötni. A szolgáltatás beállítása annyit jelent, hogy aktiválod a SpotLogicot a helyszínre, összegyűjtöd az akkumulátor és a hálózati csatlakozás paramétereit, kimenő internet-hozzáférést adsz a vezérlőegységnek, és előkészíted az előrejelzési és ár-idősorokat.

A SpotLogicnak minden telemetria-feltöltésben szüksége van az előrejelzési és ár-idősorokra (napenergia-hozam és a ház fogyasztása mára és holnapra, vételi és visszatáplálási árak). Ez a sablon önmagában nem tudja kitölteni őket — lásd Előrejelzési és ár-idősorok. Amíg nincsenek kitöltve, a SpotLogic HTTP 422-vel elutasítja a telemetriát, nem számít tervet, és a parancs No plan értéken marad.

Konfiguráció

1. A SpotLogic aktiválása és a hozzáférési adatok megőrzése

Az eszköz aktiválásakor a SpotLogic e-mailben küldi el a PLC ID-t és a hozzáférési tokent (access token). A token titkos, pontosan egy PLC ID-hoz kötött, és az előfizetési időszakra érvényes. Mindkettő kizárólag az egyes kérések lekérdezési karakterláncában (query string) utazik (?plc_id=…&token=…), ahogy a SpotLogic szerződése előírja — soha nem a kérés törzsében.

Ne tedd a tokent megosztott dokumentumokba és nyilvános repozitóriumokba. A hibás PLC ID–token pár, az érvénytelen token és a lejárt előfizetés egyaránt HTTP 401-gyel végződik, és a SpotLogic szándékosan nem árulja el, hogy a három közül melyikről van szó.

2. Az akkumulátor és a hálózati csatlakozás paramétereinek összegyűjtése

A SpotLogic csak azokkal a számokkal tervez, amelyeket a telemetriában megkap. Az importálás előtt keresd ki őket a napelem inverter és az akkumulátor dokumentációjából, valamint a hálózati csatlakozási szerződésből:

ÉrtékHonnan származikMértékegység
Akkumulátor-kapacitásaz akkumulátor adatlapja; 0-nál nagyobbnak kell lenniekWh
Az akkumulátor maximális teljesítményeegyetlen érték a töltésre és a kisütésrekW
Maximális vételi teljesítmény a hálózatbóla főbiztosíték mérete; 0 azt jelenti, hogy a helyszín soha nem vételez a hálózatbólkW
Maximális visszatáplálási teljesítmény a hálózatbaa hálózati csatlakozás visszatáplálási korlátja; 0 azt jelenti, hogy a helyszín soha nem táplál visszakW
Az akkumulátor abszolút alsó határaa napelem inverter gyártója által megengedett legalacsonyabb töltöttségi szint, alapértelmezés 10%
Akkumulátor-tartaléktartalék, amelyből a terv soha nem ad el a hálózatba (például az előre nem látható fogyasztásra), alapértelmezés 10%

Az akkumulátor aktuális töltöttségi szintjének is elérhetőnek kell lennie a TapHome-ban, jellemzően a napelem inverter saját integrációjából, hogy egy smart rule beírhassa ebbe a sablonba (lásd lent a Telemetria feltöltése részt).

3. A vezérlőegység hálózata és órája

  • A vezérlőegységnek kimenő internet-hozzáférésre van szüksége HTTPS-en a spotlogic.cz címre, a 443-as porton. A SpotLogic nem kapcsolódik vissza a vezérlőegységhez — az előrejelzési és ár-idősorok a telemetria-feltöltés törzsében utaznak, így egyetlen bejövő portot sem kell megnyitni.
  • A telemetria a vezérlőegység órája szerinti küldési időt tartalmazza, és a SpotLogic ebből építi fel a terv időablakát. Néhány perc eltérés ártalmatlan; több órás eltérés az egész tervet rossz időszeletekre tolja. Tartsd pontosan a vezérlőegység óráját.
  • Az időzóna (IANA-név, például Europe/Prague) határozza meg, hol ér véget a „ma” és hol kezdődik a „holnap”. Add meg a helyszín időzónáját.

4. Importálási paraméterek

A sablont a TapHome alkalmazás Packet Parser interfészébe kell importálni, és importáláskor a következő paramétereket kell kitölteni:

ParaméterJelentésMértékegység
PLC ID, access tokenaz aktiváló e-mailből—
Time zoneIANA-név, alapértelmezés Europe/Prague; ebből adódnak a terv napjainak határai—
Battery capacity0-nál nagyobbnak kell lenniekWh
Battery max poweregyetlen érték a töltésre és a kisütésrekW
Max grid import / export power0 azt jelenti, hogy a helyszín soha nem vételez / soha nem táplál visszakW
Max state of chargecsak a SpotLogic rögzíti, a jelenlegi tervező nem érvényesíti%
Hard battery floora napelem inverter gyártójától származó alsó határ, alapértelmezés 10%

A számokat tizedesponttal írd (a vessző átalakításra kerül). A PLC ID és a token a PlcId és Token modulváltozókban tárolódik. Minden érték utólag is szerkeszthető marad modulváltozóként.

5. A hozzáférési adatok ellenőrzése

A SpotLogic interaktív API-dokumentációjában (a spotlogic.cz oldalon, a /docs alatt) található egy Authorize párbeszédablak a PLC ID-hoz és a tokenhez, a benne lévő TapHome-telemetria példa pedig teljes: érvényes hozzáférési adatokkal a SpotLogic HTTP 202-vel elfogadja. Előtte frissítsd a küldési idejét (TimeStampUnix) az aktuális időre. Az elfogadott példaadatokat a SpotLogic a valódi telemetriához hasonlóan eltárolja a tervhez, ezért ez az ellenőrzés még azelőtt esedékes, hogy a parancsot összekötnéd a napelem inverterrel.

A hiányos előrejelzési horizontról szóló HTTP 422-es válasz is bizonyítja, hogy a PLC ID és a token helyes — hibás token esetén HTTP 401 érkezik.

Eszközfunkciók

A parancs olvasása (20 másodpercenként)

A modul 20 másodpercenként lekérdezi a GET /api/v1/dispatch végpontot, és az eszközök feldolgozzák a választ:

  • SpotLogic command — a folyamatban lévő időszelet parancsa (action_id):
ÉrtékTapHome-értékSpotLogic-névJelentés
0No planno_planNincs használható terv — tartsd a napelem invertert a saját biztonságos üzemmódjában
1Self-useself_useSaját fogyasztás: töltés a napelemes többletből, kisütés a ház ellátására
2Force chargeforce_chargeAz akkumulátor töltése maximális teljesítménnyel
3Force discharge to gridforce_dischargeAz akkumulátor kisütése a hálózatba maximális teljesítménnyel
4Self-use, no dischargingself_use_ChargeOnlySaját fogyasztás, a töltés engedélyezett, a kisütés tiltott
5Self-use, no chargingself_use_DischargeOnlySaját fogyasztás, a kisütés engedélyezett, a töltés tiltott
6Stop PV (reserved)stopPVFenntartva — a jelenlegi tervező nem adja ki
7Grid charge without PV (reserved)ChargeMaxNoPVFenntartva — a jelenlegi tervező nem adja ki

A szervizattribútumok a parancs nevét és a parancs végének időpontját mutatják (helyi idő szerint).

  • SpotLogic target state of charge — az a töltöttségi szint (%), amelyet a terv az időszelet végére vár. Állítsd le a kényszerített töltést vagy kisütést, amikor az akkumulátor eléri; saját fogyasztásnál ne tölts fölé. A SpotLogic hozzáteszi, hogy self_use_DischargeOnly esetén az akkumulátort nem szabad ez alá kisütni. Az érték a terv eredménye, nem kikényszerítendő alapjel, és átmenetileg alacsonyabb is lehet az akkumulátor-tartaléknál, miután a ház elfogyasztotta a tartalékot.
  • SpotLogic next command — a következő időszelet parancsa, a kezdési időpontjával szervizattribútumként.
  • SpotLogic plan age — a kiszolgált terv kora másodpercben. Egy tartalék smart rule-t vezérelhet: ha jóval az újraszámítási intervallum fölé nő, a tervet nem számítják újra.

A HTTP 404 no_plan válasz nem hiba: a parancs 0, és az eszköz tájékoztató üzenetet jelenít meg. A SpotLogic ilyenkor azt kéri, hogy válts a napelem inverter saját biztonságos üzemmódjára, és soha ne ismételd meg emlékezetből az utolsó ismert parancsot. A HTTP 401 (hibás PLC ID vagy token, lejárt előfizetés) hibát állít be az eszközökön és a modulon; a SpotLogic azt kéri, hogy az ilyen hívásokat ne ismételd, ezért javítsd ki a hozzáférési adatokat.

Telemetria feltöltése (kb. 2 percenként)

A modul legfeljebb 2 percenként elküldi a POST /api/v1/optimize kérést PLCtype: "taphome" értékkel. Elküldi a küldési időt, az időzónát, az akkumulátor és a hálózati csatlakozás paramétereit, valamint két értéket eszközökből:

  • Battery state of charge (input) — egy smart rule-lal írd be a napelem inverterből az aktuális töltöttségi szintet 0–100 % tartományban (ha a napelem inverter sablonja 0–1 értéket ad, szorozd meg 100-zal). Egész százalékra kerekítődik, mert a SpotLogic elutasítja a törtértékeket. Amíg nincs értéke, semmi sem kerül elküldésre, és a modul figyelmeztetést jelenít meg.
  • Battery reserve for SpotLogic — a SOCmin tartalék, alapértelmezés 10 %: az a szint, amelyből a terv soha nem ad el a hálózatba.

A modul szervizattribútumai mutatják az utolsó feltöltés eredményét, a SpotLogic által jelzett újraszámítási intervallumot (alapértelmezés 900 s), a terv kiszámításának időpontját, a tervfuttatást és az API verzióját. Az elutasított feltöltés (HTTP 422) modulhiba, a SpotLogic által visszaadott üzenettel. A feltöltésre adott válasz soha nem tartalmazza a tervet — a SpotLogic a háttérben számítja ki, és a modul a parancs következő olvasásakor veszi át.

Előrejelzési és ár-idősorok

A SpotLogic hat idősort vár a törzsben, mindegyiket [unix_ts, value] párok formájában:

ModulváltozóTartalomSzerződés
PvForecastTod, PvForecastTomnapenergia-hozam ma / holnap, kWh óránkéntóránként, hézagok nélkül, az aktuális órától holnap végéig
LoadForecastTod, LoadForecastToma ház fogyasztása ma / holnap, kWh óránkéntugyanaz
PriceImp, PriceExpvételi / visszatáplálási ár, CZK/kWhállandó lépésköz (óránként vagy 15 percenként), elég a mai nap, negatív árak megengedettek

A változók JSON-szövegként tárolják az idősorokat, például [[1788645600,0.0],[1788649200,0.42]], és változatlanul kerülnek a törzsbe; az alapértelmezett [] üres idősor. Maga az integráció működik; amire szüksége van, az az adat. A TapHome egyelőre nem tud egy JSON-szöveget megosztani a szkriptek között, és a smart rule szkriptje nem tud HTTP-kéréseket küldeni. A hat idősort — összesen körülbelül 500 értéket — ezért más szkriptekből (például előrejelző vagy spot áras sablonból) kell összegyűjteni, és több száz segédeszközön keresztül átadni ennek a modulnak, vagy magában a modul olvasó szkriptjében kell felépíteni. Az integráció akkor válik igazán praktikussá, amikor a TapHome bevezeti a szkriptek között megosztott szöveges változót — lásd az ötletet: Szöveges változó és HTTP a smart rule-ok szkriptjeiből. Addig töltsd ki a hat változót, és a sablon változtatás nélkül működik. A szkript ezt megjegyzésben elmagyarázza a tetején és azon a helyen, ahol az idősorok beillesztésre kerülnek.

Hogy az adatok honnan származnak, az a telepítőn múlik; a SpotLogic ezeket a jellemző forrásokat nevezi meg:

  • Napenergia-hozam — napenergia-hozam előrejelző szolgáltatás, amely megkapja a helyszínt, a panelek tájolását és dőlésszögét, valamint a beépített teljesítményt, vagy a napelem inverter gyártójának felhője.
  • A ház fogyasztása — a helyszín saját előzményei: kezdésnek elegendő az órás fogyasztás, átlagolva a nap órája és a nap típusa (munkanap, hétvége, ünnepnap) szerint.
  • Árak — a spot ár, átszámítva az ellátási szerződés szerint (vétel, például spot ár plusz árrés) és a többletenergia eladására szóló szerződés szerint (visszatáplálás).

Az óraátállítás napja 23 vagy 25 órás, így egy teljes napenergia-hozam- vagy fogyasztási idősor 47, 48 vagy 49 értéket tartalmaz. Az aktuális óra előtti egy óránál régebbi mintákat a SpotLogic levágja, ahogy a holnap végén túli mintákat is; a holnap vége előtt végződő idősort elutasítja.

Hibaelhárítás

TünetOk és megoldás
A parancs No plan értéken maradMég nem készült terv, vagy a telemetriát a SpotLogic elutasítja. Ellenőrizd a modul hibáját és a Last telemetry upload szervizattribútumot. A 60 percnél régebbi tervet sem szolgálja ki. Az első elfogadott feltöltés után a terv elkészülése eltarthat egy ideig — legalább egy újraszámítási intervallumig.
HTTP 422 modulhibaA telemetria megsérti a SpotLogic adatszerződését; az üzenet megmondja, melyik részét. Leggyakrabban hiányoznak az előrejelzési vagy ár-idősorok, vagy nem fedik le az időszakot holnap végéig.
HTTP 401 hibaA PLC ID és a token nem egyezik, vagy lejárt az előfizetés. Javítsd a PlcId és Token modulváltozókat.
„Telemetry not sent” figyelmeztetésA töltöttségi szint még nincs beírva, vagy az akkumulátor vagy a hálózati csatlakozás valamelyik paramétere üres.
A terv kora folyamatosan nőAz új telemetria nem jut el a SpotLogichoz, vagy a SpotLogic adatforrásai hibáznak; az utolsó érvényes terv addig marad érvényben, amíg el nem éri a 60 perces kort.
HTTP 500 vagy 502 hibaSzerverhiba vagy hibás adatforrás a SpotLogic oldalán; az utolsó érvényes terv érvényben marad. A SpotLogic mindkét kérés növekvő késleltetésű ismétlését javasolja; a modul egyszerűen megismétli mindkét kérést a következő lekérdezéskor.
A terv rossz órákat vezérelHibás a vezérlőegység órája vagy az időzóna — a terv időablaka a küldési időből és a megadott időzónából épül fel.

Elérhető eszközök 6

Ezek az eszközök az importálás után jelennek meg a TapHome-ban.

SpotLogic Modul
Szerviz attribútumok
Last telemetry upload
Plan recompute interval
Plan computed at
Plan run
API version
Egyéni változók
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

Olvasás (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
Szerviz attribútumok
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 Többértékű kapcsoló
Értékek / Állapotok: 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

Kapcsoló állapot olvasása
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);
Szerviz attribútumok
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 Változó

SpotLogic target state of charge

Olvasás
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 Többértékű kapcsoló
Értékek / Állapotok: 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

Kapcsoló állapot olvasása
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);
Szerviz attribútumok
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 Változó

SpotLogic plan age

Olvasás
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) Változó

Battery state of charge (input)

Olvasás
IF(SocNow < 0, NaN, SocNow)
Írás
SocNow := Va;
Battery reserve for SpotLogic Változó

Battery reserve for SpotLogic

Olvasás
RETURN(SocMin);
Írás
SocMin := Va;
Kapcsolat: Packet Parser → HTTP

Importálási paraméterek

Ezeket az értékeket az XML importálásakor adja meg.

Az alkalmazás kériAlapérték
SpotLogic PLC ID (from the activation e-mail)Importáláskor adja meg
SpotLogic access token (from the activation e-mail, secret)Importáláskor adja meg
Time zone (IANA name)Europe/Prague
Battery capacity [kWh]Importáláskor adja meg
Battery max charge and discharge power [kW]Importáláskor adja meg
Max grid import power [kW] (0 = never import)Importáláskor adja meg
Max grid export power [kW] (0 = never export)Importáláskor adja meg
Max state of charge [%] (recorded only)100
Hard battery floor from the inverter manufacturer [%]10

Talált problémát ezzel az eszközsablonnal?

Írja meg, mi nem működik, mi hiányzik, vagy hogyan kellene a sablonnak viselkednie. Visszajelzése segít, hogy a katalógus pontos maradjon.

Sablon · TapHome portál SpotLogic – battery optimisation over the spot market (HTTP API) Nyisd meg ezt a sablont az ügyfélportálon, hogy alkalmazd az otthonaid egyikére, vagy készíts egy módosítást és küldd vissza a katalógusba. Packet Parser → HTTP Megnyitás a TapHome portálon