Shelly Scripting
Vor wenigen Stunden hat Allterco Robotics (das Unternehmen hinter der Marke Shelly) das neue Script-Feature freigegeben. In diesem Video schauen wir uns gemeinsam an, was man damit anstellen kann. Durch den sehr viel leistungsfähigeren ESP32 in den Pro- und Plus-Komponenten, bleiben freie Ressourcen für eigene Logik übrig. Diese kann mit mJs (einem Subset von JavaScript) umgesetzt werden.
Über dieses Feature kann man zum Beispiel die Geräte über HTTP miteinander vernetzen und so zum Beispiel mit einem Shelly Pro 4 PM einen “einfachen” Shelly 2.5 ansteuern. Das gleiche gilt natürlich auch für andere Shelly-Geräte. Mehr dazu im Video!
Video
Links
Code-Beispiele
let greeting = "Hello world!";
print(greeting);
let CONFIG = {
accuWeatherAPIKEY: "...",
weatherForecastEndpoint: "http://dataservice.accuweather.com/forecasts/v1/daily/1day/",
weatherCurrentEndpoint: "http://dataservice.accuweather.com/currentconditions/v1/",
location: 170358,
coverControlTimer: 15 * 60 * 1000,
coverControlDevice: "http://192.168.205.244/"
};
function getWeatherURLForLocation(location) {
return CONFIG.weatherCurrentEndpoint +
JSON.stringify(CONFIG.location) +
"?apikey=" +
CONFIG.accuWeatherAPIKEY +
"&details=true";
}
function cover(position) {
print("Cover will ", position);
/*
Shelly.call(
"http.get",
{ url: CONFIG.coverControlDevice + "roller/0?go=" + position },
function (response, error_code, error_message, ud) {
print(JSON.stringify(response));
},
null
);
*/
}
function CoverControlLocation() {
Shelly.call(
"http.get",
{ url: getWeatherURLForLocation() },
function (response, error_code, error_message) {
let weatherData = JSON.parse(response.body);
if (weatherData[0].CloudCover > 60) {
cover("open");
}
if (weatherData[0].CloudCover < 40) {
cover("close");
}
print("Wolken: ", weatherData[0].CloudCover, "%");
}
);
}
Timer.set(
CONFIG.coverControlTimer,
true,
function (ud) {
CoverControlLocation();
},
null
);
Shelly.addEventHandler(
function (event, ud) {
print(JSON.stringify(event));
},
null
);
let switch0Timer = null;
function swOff(idx) {
print('switching off ', idx);
Shelly.call(
'switch.set',
{ id: idx, on: false },
function (result, error_code, error_message, ud) {
print('switched off ', idx);
}
);
}
Shelly.addEventHandler(
function (event, ud) {
if (typeof event.component !== 'undefined' && typeof event.info.output !== 'undefined') {
if (event.component === 'switch:0') {
if (switch0Timer) {
print('clearing timeout');
Timer.clear(switch0Timer);
}
if (event.info.output) { // Just start if ouput is 'true'
print('starting timeout');
switch0Timer = Timer.set(5 * 1000, // Switch off after 5 Seconds
false,
swOff,
0
);
}
}
}
},
null
);
Transparenz-Hinweis (Level 2)
Für diesen Beitrag wurden mir Produkte kostenfrei zur Verfügung gestellt! Es wurden keinerlei Bedingungen, Richtlinien oder Vorgaben bezüglich der Inhalte, welche ich in meiner Bewertung äußern darf, auferlegt.
Darüber hinaus habe ich keine zusätzliche Vergütung erhalten.