Shelly Wiki

Guider

Skript på Gen2+

Gen2+-enheter kan köra egen JavaScript lokalt, utan moln och utan appens scener. Det här är för dig som vill mer än vad scener klarar.

Scener i appen täcker det mesta. Men de har ett tak: villkorslogik, egna beräkningar, anrop till tjänster utanför Shellys ekosystem — sådant klarar en scen inte. Där tar skript vid.

Vad ett skript är

Gen2+-enheter (Plus, Pro, Gen3 och Gen4) kan köra JavaScript direkt på enheten. Inte i molnet, inte i appen — koden ligger och körs i själva strömbrytaren eller reläet. Enligt Shellys officiella dokumentation körs skripten på en modifierad, inbäddningsanpassad version av Espruino: ett JavaScript-liknande språk, men inte en fullständig implementation av standarden.

Gen1 kan inte köra skript. Har du en Shelly 1, Shelly 2.5 eller annan Gen1-enhet slutar den här guiden vara relevant för dig — se Vilken generation har du? om du är osäker på vad du har.

Varför köra skript i stället för en scen

Den stora vinsten är att skriptet fortsätter fungera även om internet eller Shellys moln ligger nere — logiken finns lokalt på enheten. Utöver det kan skript göra saker scener inte kan:

  • Egna villkor och beräkningar (inte bara "om A då B", utan riktig logik)
  • HTTP-anrop till andra system, och egna HTTP-endpoints som andra system kan anropa
  • MQTT-publicering
  • Skapa och styra virtuella komponenter (virtuella switchar, sensorer)
  • Läsa och tolka data från Bluetooth-enheter (till exempel BLU-produkter) och trigga åtgärder utifrån dem

Var du skriver dem

I enhetens eget webbgränssnitt, inte i appen. Gå till enhetens lokala adress → Scripts i sidomenyn → Create script. Där skriver du koden, sparar, och trycker Start för att köra den. Vill du att skriptet ska starta automatiskt varje gång enheten startar om, slår du på det separat i skriptlistan.

Ett minimalt exempel, bara för att visa formen:

let info = Shelly.getDeviceInfo();
console.log("Firmware:", info.ver);

Begränsningar värda att känna till

Det här är inte fullständig Node.js i miniatyr. Enligt den officiella dokumentationen gäller bland annat:

  • Max 5 timers, 5 händelseprenumerationer, 5 statusprenumerationer och 5 RPC-anrop per skript
  • Inga ES6-klasser, inga Promise eller async/await
  • Strängar hanteras som bytesekvenser, inte fullt Unicode — käll­koden ska vara UTF-8, men \uHHHH-escape stöds inte
  • Skriptet delar processortid med resten av firmware och får inte blockera länge — en oändlig loop kan få enheten att krascha

Var ärlig med vad det här är

Det här kapitlet räcker för att förstå vad skript är och komma igång. Det ersätter inte referensdokumentationen. Ska du skriva något mer än ett par rader, gå till shelly-api-docs.shelly.cloud för fullständig API-referens och språkbeskrivning.

Skript är riktade till avancerade användare. Har du inte skrivit JavaScript förut, eller nöjer du dig med det scener kan göra, finns det sällan skäl att börja här.

Rapportera fel på sidan

Beskriv kort vad som verkar fel — vi läser varje rapport.