Aktywujemy ładowanie w cenie Nordpool!

Często klienci pytają nas, w jaki sposób możemy wdrożyć proste, ale inteligentne rozwiązanie, aby ładować samochód elektryczny tylko w najtańszej taryfie energii elektrycznej, korzystając z cen energii elektrycznej na giełdzie Nordpool.

Odpowiedź jest bardzo prosta. Rozwiązanie to może być wykorzystywane nie tylko do ładowania samochodów elektrycznych, ale także do ogrzewania wody lub innych potrzeb.

Zasada działania jest dość prosta. Inteligentny przekaźnik kontroluje styk, włącza/wyłącza zgodnie ze skryptem i musi kontrolować styk CP w stacji ładowania.

Skrypt

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);
    }
  });
});

Potrzebny będzie inteligentny przekaźnik, zalecamy inteligentny przekaźnik Shelly. Po połączeniu się bezpośrednio z przekaźnikiem, w sekcji Skrypty skopiuj sam skrypt i nie zapomnij go uruchomić po zapisaniu.