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.
-
let t = 0;
let tlong = 120;
// Timer starten
let timer = Timer.set(1000, true, function () { // jede Sekunde
t++ ;
print(t + " Sec.");
if (t == 60) {
print("timer läuft noch: " + (tlong - t) + " Sckunden")
}
if (t >= tlong) { // Nach 2 Minuten Timer stoppen
Timer.clear(timer);
print("Timer gestoppt nach 2 Minuten.");
}
});
Alles anzeigen
-
Vielleicht würde das auch per: Shelly.addStatusHandler(function(event) {..} funktionieren.
Wenn der Shelly "On" geht, und das Script auf Autostart steht, sollte der Event gesendet werden.
Auf dem anderen Shelly per: HTTPServer.registerEndpoint('ichBinOn', function (req, res) {..}
die Nachricht empfangen. und per Trigger On / Off setzen.
Somit umgehst Du den Timer Loop.
-
Eine Alternative ist der Windmesser von Kaiser Nienhaus Grenzwertschalter Wind 336100.
https://www.idealo.de/preisvergleich…m_source=google
Habe ich im Einsatz. Der gibt ein Impuls pro Umdrehung ab. Mit Shelly Uni Plus am Counter Eingang eine feine Sache.
Man kann Windböen zuverlässig erfassen.
Habe ein Script geschrieben, das die Raffstores zuverlässig schützt vor Wind und Sturm.
Ab einer bestimmten Windstärke werden die Lamellen auf waagerecht gestellt. Dann läuft ein Zeitfenster ab
das schaut ob in dieser Zeit die Windstärke wieder überschritten wurde. Ist das der Fall, bleibt die waagerechte Lamellenstellung
und der Timer beginnt vom neuen zu laufen. Ist im Zeitfenster keine Böe mehr vorhanden -> Weiter Beschatten -> Lamellen zu.
Sturm hat eine Priorität höher. Wenn die Windböen so stark werden, das der max Wert für Sturm erreicht wird -> Raffstores hoch.
Dann wird wieder ein Timer gestartet, der sich wieder selbst verlängert, bis mein max Wert von Wind unterschritten wird. Dann wir die
Beschattung fortgesetzt.
So kann ich bei Gewitter den Raffstore schützen und habe danach wieder die Beschattung laufen. Auch ein ständiges hoch und runter
kann so vermieden werden.
-
Letzte Aktualisierung von Shelly ist der 24.10.23.
Hat einer von euch eine Alternative am laufen?
Copy - Paste funktioniert ja aus VSC.
Sonst werde ich es so machen.
-
Hat jemand Erfahrung mit Visual Studio Code und Shelly Scripting?
Habe den Shelly Script Editor installiert in VSC.
Konnte dann über die IP die Scripts laden.
Nur wenn auf dem Shelly sich ein größeres Script befindet, dann wird der Shelly mit der IP erst gar nicht geladen.
Der Shelly ist ein 2PM Gen3. Das Script hat ca. 800 Zeilen.
Gibt es eine Möglichkeit größere Scripts im Editor zu bearbeiten?
Habe ich bei der Einrichtung was übersehen?
Ich arbeite auf ein Mac mit M1.
Das Script ist direkt auf dem Shelly mit dem Script Editor problemlos editier und ausführbar.
Aber der Übersichtlichkeit würde ich gerne in VSC arbeiten.
-
Ja würde auch gehen aber ein Taster drücken nach dem auffüllen wäre das einfachste.
Habe das Script schon für den Counter reset von aktuellen Projekt.
-
Danke Erstmal an die vielen Tips von euch.
Mir ist beim grübeln noch etwas eingefallen. Da bei der Regeneration immer die gleiche Salzmenge verbraucht wird,
könnte man auch zählen, wieviel mal die Regeneration durchlaufen wurde, bis der Behälter leer ist.
Bei diesem Vorgang wird dem Behälter Wasser hinzugefügt. Dafür muss ja das verbaute Magnetventil schalten.
Einfache Rechnung: Z.B. 10x regenerieren = Behälter fast leer.
Der Shellly Uni Plus halt ja einen Impulseingang.
Der könnte einfach die Impulse Zählen wie oft das Magnetventil geschaltet wurde.
Auch wenn das bei der Regeneration mehrmals stattfindet, ist die Summer der Schaltvorgänge von voll bis leer immer gleich.
Noch ein kleinen Reset Taster einbauen -> Script schreiben -> fertig.

-
Ich habe bei meinem Beschattungs-Scripts über Homebridge mir in HomeKit Schalter erstellt die ich über das Shelly Script abfragen kann.
So kann man von "Außen" auf das Script einwirken. Vielleicht geht das auch bei HA.
-
Würde die von außen auch die Salztabletten messen können? Der Sole Pegel ist ja nicht ausschlaggebend.
Wenn regeneriert wird, wird dem Behälter Wasser hinzugefügt. Dann steigt der Pegel kurzzeitig.
Hat aber mit dem Verbrauch des Salzes nichts zu tun.
-
OK. Aber ich denke bevor die Sole ihre Leitfähigkeit verliert wäre ist es ja schon sehr leer der Behälter.
Ich habe noch etwas beim Recherchieren gefunden. Manche Hersteller messen wohl das Gewicht es Behälters. Auch eine Möglichkeit.
Wer Erfahrungen mit Ultraschall Sensoren die am Shelly Uni hat bitte mal Link oder was dazu schreiben. Digitale gehen wohl nicht.
-
Also die Leitfähigkeit in der Sole messen. Wenn alles Salz aufgebraucht ist und bei der Regenerierung neues Wasser hinzukommt,
aber kein Salz mehr gelöst wird, ist die Leitfähigkeit niedriger. Liege ich da richtig?
Das Befüllen mit Wasser von der Anlage würde aber Schwankungen in der Messung verursachen.
Aber das könnte man mit einem Script lösen. Wie gut das ich das kann.
Könnte funktionieren. Auch der Ultraschallmessung wäre eine Alternative.
-
Es ist eine Anlage von Aqmos. Da ich nicht viel verbrauche an Wasser hält die Befüllung relativ lange.
Ich habe hier >24 dH. Habe lange ohne Enthärtung gelebt. Aber der Verschleiß steht nicht mehr im Verhältnis.
Die Idee mit Ultraschall könnte funktionieren. Aber welches System benutzen denn die teuren Geräte. Z.B. Grünbeck.oder BWT?
Meine Anlage hat keine Anzeige. Dafür ist sie günstig und tut was sie soll. Das Wasser enthärten.
-
Hallo Michael.
Als ich mit dem Scripting auf dem Shelly angefangen habe, war ich auch auf Codebeispiele angewiesen.
Geben und nehmen, so sollte es sein.
Ich denke es hilft nicht nur dem einen, sondern der Community hier.
-
Ich gebe die von meine Aktuellen Projekt mal ein Test Script mit, das 24h in Schnelldurchlauf simuliert.
function TESTuhrzeit() {
// Erhöhe die Minuten um 10
TEST.minuten += 5;
// Überprüfe, ob die Minuten 60 oder mehr sind und erhöhe die Stunden entsprechend
if (TEST.minuten >= 60) {
TEST.minuten -= 60;
TEST.stunden += 1;
// Optional: Zurücksetzen der Stunden bei 24 (24-Stunden-Format)
if (TEST.stunden >= 24) {
TEST.stunden = 0;
}
}
}
function TESTformatTime(stunden, minuten) {
let hh = (TEST.stunden < 10 ? "0" : "") + TEST.stunden;
let mm = (TEST.minuten < 10 ? "0" : "") + TEST.minuten;
return hh + ":" + mm;
}
function readTime() {
/*
let now = new Date();
let hours = now.getHours();
let minutes = now.getMinutes();
// Aktuelle Uhrzeit im Format "HH:MM"
let currentTime = ("0" + hours).slice(-2) + ":" + ("0" + minutes).slice(-2);
let month = now.getMonth() + 1; // Aktueller Monat
*/
TESTuhrzeit(); // Erstelle Test Uhrzeit
let currentTime = TESTformatTime(); // TEST UHRZEIT RÜCKGABE
return currentTime
}
Timer.set(200, true, function () { // Call jede Sekunde
dayLoop(); // Call
});
function dayLoop() {
let isTime = readTime();
print (isTime)
}
Alles anzeigen
Im Day Loop könnte man nun anfangen erstmal die isTime Uhrzeit abzufragen um eine Verzweigung zu erstellen um nur die Gewünschte Uhrzeit zu benutzen.
Dann erstmal Funktionen erstellen die die Abfrage der beiden Temp. Werte ermitteln mit Rückgabe.
Wenn ein AddOn benutzt wird dann kann man das mit diesem Script abfragen: Shelly AddOn auf anderem Shelly auslesen
Eine Funktion erstellen die die Relais dann ansteuern.
TempWerte vergleichen: temp < min -> Relais an / temp > max -> Relais off
-
Hast du Script Erfahrung?
-
Shelly.addEventHandler(..) sollte alle 4 Imputs in der JSON bei einem touch auffangen.
Daraus eine switch case Anweisung verzweigen.
switch(event.info.id) {
case 0:
// Licht 1 an
lichtAn(012,68);
break;
case 1:
// Licht 2 an
lichtAn(123,69);
break;
case 2:
// Licht 3 an
lichtAn(456,70);
break;
case 3:
// Licht 4 an
lichtAn(789,71);
break;
default:
break;
}
...
function (id, group) {...}
Alles anzeigen
Ich würde die
Shelly.call(
"http.request", {..}
in einer neuen Funktion auslagern und dann die spezifischen Werte darüber zu übergeben.
-
Das wäre ein einfaches Bespiel um Daten in einem Array zu sichern:
let history = [];
function logTemperature() {
Shelly.call(
"HTTP.GET",
{ url: "http://192.168.178.200/rpc/Temperature.GetStatus?id=100" },
function (result, error_code, error_message) {
if (error_code === 0) {
let jsonData = JSON.parse(result.body);
let temperature = jsonData.tC;
let timestamp = Date();
history.push({ time: timestamp, temp: temperature });
// Wenn History 10 Einträge hat -> lösche History
if (history.length > 10) {
// Jetzt die Datenn per HTTP senden...
history = []; // dann löschen.
}
print("Temperature logged:", temperature, "at", timestamp);
} else {
print("Error reading temperature:", error_message);
}
}
);
print (history.length); // So viele Einträge hat die History jetzt.
}
// Timer: Testweise alle 2 Sekunden...
Timer.set(2000, true, logTemperature);
Alles anzeigen
Mann müsste probieren wieviel Daten man per Http dann übertragen kann.
Ich benutze immer nur kleine Datenmengen.
-
Ja, da gebe ich dir recht. Bei den End Positionen sollte Slat Pos nicht ausgeführt werden. Auch wenn Retrain Slat Position gesetzt ist. Wenn man das will könnte man immer noch Close 5% anwählen und dann sollte Retrain Slat Position greifen.
-
Die History wird nicht im Shelly selbst gespeichert sonder in der Shelly Cloud.
Entweder man programmiert sich ein Array das die Daten per Script darin Speichert und nach x Tagen zurückgesetzt wird,
oder man greift per Script auf die Cloud Daten zu.
-
Bitte benutze immer beim Einfügen von Code -> Code-Block einfügen.
Dann ist dein Code viel besser lesbar.