Aktyvuojame įkrovimą pagal Nordpool kainą!

Dažnas mūsų Klientas klausia kaip galima būtų įsirengti paprastą sprendimą, bet tuo pačiu ir išmanų, kad elektromobilio įkrovimas vyktų tik pagal pigiausią elektros tarifą, pasitelkiant Nordpool elektros biržos kainas.

Atsakymas yra labai paprastas. Šį sprendimą galite pritaikyti ne tik elektromobiliams krauti, bet ir vandeniui pašildyti ar kitiems poreikiams.

Veikimo principas gana paprastas. Išmanioji rėlė valdo kontaktą, įsijungia/išsijungia pagal scriptą, įkrovimo stotelėje turi valdyti CP kontaktą.

Scriptas

let CONFIG = {
  api_endpoint: "https://dashboard.elering.ee/api/nps/price/lt/current",
  switchId: 0,             // Jūsų rėlės ID. Jeigu vieno kontakto, bus 0. Jeigu kelių, pagal numerį
  price_limit: 200,        // EUR/MWh. Svarbu, kaina be PVM.
  update_time: 60000,      // 1 minutė. Kas kiek laiko tikrinsime kainas ?
  reverse_switching: false // Įjungia rėlę, jeigu atitinka Jūsų kainą, jeigu ne, išjungia.
};

let current_price = null;
let last_hour = null;
let last_price = null;
let state = null;

function getCurrentPrice() {
  Shelly.call(
    "http.get",
    {
      url: CONFIG.api_endpoint,
    },
    function (response, error_code, error_message) {
      if (error_code !== 0) {
        print(error_message);
        return;
      }
      current_price = JSON.parse(response.body).data[0]["price"];
      print("Updated current price!");
    }
  );
}

function changeSwitchState(state) {
  let state = state;

  if(state === false) {
    print("Switching off!");
  } else if(state === true) {
    print("Switching on!");
  } else {
    print("Unknown state");
  }

  Shelly.call(
    "Switch.Set",
    {
      id: CONFIG.switchId,
      on: state,
    },
    function (response, error_code, error_message) {
      if (error_code !== 0) {
        print(error_message);
        return;
      }
    }
  );
}

Timer.set(CONFIG.update_time, true, function (userdata) {
  Shelly.call("Sys.GetStatus", {}, function (resp, error_code, error_message) {
    if (error_code !== 0) {
      print(error_message);
      return;
    } else {
      let hour = resp.time[0] + resp.time[1];
      //atnaujiname kainas
      if (last_hour !== hour) {
        print("update hour");
        last_hour = hour;
        getCurrentPrice();
      }

      //Tinkriname ar nustatyta kaina
      if (current_price !== null) {

        //Standartinis ijungimas. Išjungiame, jeigu virisijame limita
        if(CONFIG.reverse_switching === false) {
          if (current_price >= CONFIG.price_limit) {
            //isjungiame, jeigu virs limito
            changeSwitchState(false);
          } else {
            //ijungiame, jeigu tenkina salygas limito
            changeSwitchState(true);
          }
        }

        //reversinis variantas.
        if(CONFIG.reverse_switching === true) {
          if (current_price >= CONFIG.price_limit) {
            //ijungiame, jeigu netenkina limito salygos
            changeSwitchState(true);
          } else {
            //isjungiame, jeigu tenkina limito salygas
            changeSwitchState(false);
          }
        }

      } else {
        print("Current price is null. Waiting for price update!");
      }
      

      print(current_price);
    }
  });
});

Jums reikės išmanios relės, rekomenduojame naudoji Shelly išmanią relę. Prisijungus tiesiai prie relės, skiltyje Scripts įkopijuokite patį scriptą, išsaugojus, nepamirškite paleisti skripto.