Die Beispiel Script Function ließt nur vom aktuellen Tag den Sonnenauf- und Sonnenuntergang über die API Schnittstelle von open-meteo.com.
Mehr nicht.
Ich benutze auch diese Function bei meinen Beschattung Scripts.
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
Die Beispiel Script Function ließt nur vom aktuellen Tag den Sonnenauf- und Sonnenuntergang über die API Schnittstelle von open-meteo.com.
Mehr nicht.
Ich benutze auch diese Function bei meinen Beschattung Scripts.
function openMetroRead() {
Shelly.call(
"HTTP.GET",
{
url: "https://api.open-meteo.com/v1/forecast?latitude=50.110891&longitude=8.669930&daily=sunrise,sunset,temperature_2m_max&timezone=Europe%2FBerlin&forecast_days=1"
},
function (result, error_code, error_message) {
if (error_code !== 0) {
console.log('Fehler:', error_message);
} else {
let response = JSON.parse(result.body);
let sunrise = response.daily.sunrise[0].split("T")[1];
let sunset = response.daily.sunset[0].split("T")[1];
print("Sunrise: " + sunrise + " / Sunset: " + sunset);
}
}
);
}
openMetroRead();
Alles anzeigen
Standort:
latitude=50.110891&longitude=8.669930
Kann unter: https://www.koordinaten-umrechner.de/decimal/50.110…reetMap&zoom=12
berechnet werden.
Für alle die es nicht verstanden haben was eiche gemeint hat:
Obwohl die Schreibweise anders ist, bewirken beide Bedingungen exakt das Gleiche.
Das liegt daran, dass die De-Morgan’schen Gesetze in der Logik folgendes sagen:
Nicht (A und B) ist dasselbe wie (Nicht A oder Nicht B).
Mathematisch:
!(A && B) == (!A || !B)
Deshalb sind diese beiden Bedingungen funktional identisch und führen zum gleichen Ergebnis.
Aber man kann doch keinen Timer in der Action starten, bevor ein Relais geschaltet wird. Oder habe ich da was übersehen?
Ich habe damals auch versucht per Actions ein DelayON zu erstellen. Das ist mir leider nicht gelungen. Vielleicht kann man so etwas mit Schedule machen.
Aber da kenne ich mich nicht aus.
Alles Quatsch. Wenn Jemand denkt (war auch mein Gedanke), das der " In 1 oder 2" vom Uni etwas mit dem Switch in der Aktion zu tun hat, dann ist das ein Irrtum.
Genau deswegen kann man, wenn man die IN / Out in der App trennt, nicht einfach per push Button in der App das Script testen.
Man würde einfach nur das Relais bzw. den Switch auf dem Uni An oder Aus schalten.
hätte da noch eine Verbesserung. Kann diese aber wie gesagt nicht testen.
Wenn der EventHandler öfters "ON" meldet könnte das den timer mehrfach starten.
Hier eine Version die das verhindern sollte.
let delayTimeIn = 5; // 5 Sekunden Verzögerung Ein
let delayTimeOut = 5; // 5 Sekunden Verzögerung Aus
let relayURL = "http://localhost/rpc/Switch.Set?id=0"; // Relais 1 auf Shelly Plus Uni
var saveCondition = null;
function onInputChange(state) {
if (state) {
// Eingang 2 ist auf ON -> Relais nach 5 Sekunden einschalten
Timer.set(delayTimeIn * 1000, false, function () {
Shelly.call("http.get", { url: relayURL + "&on=true" });
print("Relais 1 AN nach 5s Verzögerung");
});
} else {
// Eingang 2 ist auf OFF -> Relais noch 5 Sekunden AN lassen, dann ausschalten
Timer.set(delayTimeOut * 1000, false, function () {
Shelly.call("http.get", { url: relayURL + "&on=false" });
print("Relais 1 AUS nach 5s Verzögerung");
});
}
}
// Event-Listener für Eingang 1
Shelly.addEventHandler(function (event) {
print (event.info);
if (saveCondition == event.info.state) {return};
if (event.info.component == "input:0") {
onInputChange(event.info.state);
saveCondition = event.info.state;
}
});
Alles anzeigen
let delayTimeIn = 5; // 5 Sekunden Verzögerung Ein
let delayTimeOut = 5; // 5 Sekunden Verzögerung Aus
let relayURL = "http://localhost/rpc/Switch.Set?id=0"; // Relais 1 auf Shelly Plus Uni
function onInputChange(state) {
if (state) {
// Eingang 2 ist auf ON -> Relais nach 5 Sekunden einschalten
Timer.set(delayTimeIn * 1000, false, function () {
Shelly.call("http.get", { url: relayURL + "&on=true" });
print("Relais 1 AN nach 5s Verzögerung");
});
} else {
// Eingang 2 ist auf OFF -> Relais noch 5 Sekunden AN lassen, dann ausschalten
Timer.set(delayTimeOut * 1000, false, function () {
Shelly.call("http.get", { url: relayURL + "&on=false" });
print("Relais 1 AUS nach 5s Verzögerung");
});
}
}
// Event-Listener für Eingang 1
Shelly.addEventHandler(function (event) {
print (event.info);
if (event.info.component == "input:0") {
onInputChange(event.info.state);
}
});
Alles anzeigen
probiere das mal...
Um dir ein Script zu erstellen benötige ich den "EventHandler" der mir sagt wann du den Input 0 auf ON und auf Off schaltest.
Dieser wird automatisch aufgerufen und gibt mir die Informationen zurück, was passiert ist.
Das Script muss wissen wann der timer gestartet werden soll.
(event.info) schränkt die Ausgabe der JSON Datei, also die Console Ausgabe ein.
Eingang einmal EIN und dann wieder AUS. Nicht in der Shelly App den Button betätigen. Das ist das Relais.
Der Eingang ist wichtig. Der muss physisch geschaltet werden.
Ja, die Console unter den Scripts meinte ich.
Ich rufe mir die Wetterdaten von:
https://open-meteo.com/en/docs
ab. Man kann dort viele Daten per Script abrufen. Z.B. drei verschiedene Wolkenschichten.
Ich benutze sie zum beschatten, aber für Sonne ist ein Sensor Pflicht.
Rookimike Alles Gut. Hier im Forum ist geben und nehmen die Prämisse.
Und Hilfe bei Shellys kann man immer gebrauchen..
Sicherheitsfrage: Lichtschranke oder sonstige Sicherheitseinrichtung vorhanden?
funkenwerner Mal ein Vorschlag. Um die Konversation nicht immer wieder auf dieses Thema zu leiten, das ohne Frage Wichtig ist, wäre es nicht von Vorteil wenn man eine geschlossenen Threat hätte der alles wichtige Zusammenfast, wie Strom, Betreiber Verordnung bei Kraftbetätigten Türen und Toren.
Auf diesen könnte man dann immer einmal verweisen und sich bestätigen lassen das es gelesen wurde.