Beiträge von eiche

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.

    Ich überflog mal das Skript aus #2.

    Eine simple arithmetische Mittelwertbildung gelingt leicht ohne History Speicherung Man kann diesen Wert auch gleitenden Mittelwert nennen.

    xm = (Sunme aller x)/n mit xm = laufender Mittelwert, n = Anzahl an Werten

    Somit ist kein Datenfeld aus Messwerten erforderlich und die Kapazität der Mittelwertbildung kann über lange Zeitspannen erfolgen (viele Jahre, wenn man will und die Summenwerte die größtmögliche Zahlendarstellung nicht überschreitet). Es muss nur die laufende Summe in einer Variablen und die Anzahl an erfassten Werten in einer weiteren Variablen gehalten werden, notfalls auch temporär in einem nichtflüchtigen Speicher. Somit ist dieser Teil der Skript Implementation suboptimal.

    readInput() nutzt die Methode "http.get" mit "localhost". Dies ist allenfalls dann zweckmäßig, wenn das Skript remote Werte erfassen will. Hier genügt ein Shelly.call("input.getstatus". {id:1}, ...). Ich werde nun nicht auf die Schnelle ein optimiertes Skript liefern. Ich zeige nur auf, dass das Skript leicht optimierbar ist hinsichtlich der im Skript eingebauten und überflüssigen Schranken. Und etwas schneller wird es dann auch als Nebeneffekt.

    helmi55

    Meiner Messung nach zieht eine Pille ohne angeschlossene Sensoren ca. 70mA. Die Sensoren dürften eine vernachlässigbare Last sein. Ich täte insgesamt je Pille und Sensoren mit maximal 100mA kalkulieren. Das bedeutet, dass obiges Netzteil deutlich überdimensioniert wäre, wenn du ausschließlich die Pillen + Sensoren damit betreiben wolltest. Übliche Restbestände an Handy Netzteilen genügen bei weitem. Ich nutze dafür gerne Steckdosen mit integrierten USB Ladeteilen.

    Merkwürdig erscheint mir, dass wenige meiner Shelly 1.7.4 als "stable" anzeigen, während die Mehrheit 1.7.4 als beta zeigt. Dies leuchtet mir nicht ein.

    Wie auch immer, Ich neige eh nicht dazu, sehr früh ungetestet ein OS/Firmware upgrade zu nutzen. Die Ersten Upgrader erleben nicht selten auch die neuen Fehler eines Upgrades ungeschützt/unerfahren. Damit habe ich somit kein Problem. Es erscheint mir geradezu leichtsinnig, möglichst alle Geräte annähernd zugleich zu upgraden. Solches tut man am besten zunächst mit sehr wenigen Geräten, welche in unkritischem Einsatz sind.

    Wenn anderer vor mir ein Gerät bzw. eine Firmware erleben und dann (hoffentlich) berichten, dann nehme ich das gerne an, weil meine Ressourcen recht begrenzt sind. 8o

    Mechanoid1

    Zu deiner Zeitsteuerung. Ja, man kann das so implementieren, es ist aber so, als wenn du von A nach B wolltest und dazu dir ein Pferd kostspielig nehmen tätest, wo es bereits eine preiswerte und schnellere Buslinie dorthin gibt. ;)

    Wie bereits ausgeführt. Dafür sind die Zeitpläne (= schedule jobs) am besten geeignet und auch sehr flexibel in den Zeiten anpassbar. Hätten die Shelly Entwickler im WebUI unter Schedules/Actions die Zeile editierbar gemacht, dann ließen sich dort die Methoden auch manuell eingeben. Aber hier wird den Kunden so etwas wohl nicht zugetraut.

    Edit:

    Und einem KI generierten Skript traue ich per se nicht. 8)

    Nicht wirklich. Per plan kann ich den eingang eben nicht deaktivieren. deshalb das Script.

    Mit WebUI/App gelingt so etwas nicht, aber auf anderem Wege. In Schedule Jobs ist jegliche Shelly Methode nutzbar. Dafür habe ich eine Webseite zusammengestellt.

    https://tools.eichelsdoerfer.net/schedjob_methods.html

    Diese unterstützt das Anlegen solcher Jobs.

    Als Methode ist einzutragen - unter 4. (neu) oder 6. (ändern)
    unter Methode: Input.SetConfig
    unter Parameter: {"id":0,"config":{"enable":false}} zum sperren bzw. true zum freigeben von input:0. Anführungszeichen beachten!

    Der so angelegte/geänderte Schedule Job kann nachträglich in der Zeit via WebUI/App geändert werden. Nur das Eintragen solcher Methoden ist im WebUI/in der App nicht vorgesehen, funktioniert aber bestens.

    Wenn du meine Webseite nutzen solltest, findest du nach dem anklicken von "2. Zeitpläne auflisten" im nächsten Tab als Antwort bspw.:

    Sollte ein Eingabefehler vorliegen, erhält man eine Rückmeldung, welche den timespec Eintrag bemängelt, was zumeist nicht der Fall ist. Am leichtesten macht man einen Fehler im Eintrag Parameter.

    Ebenfalls laufen darauf zwei Scripte, welche den Eingang zu bestimmten Zeiten deaktiven und aktivieren.

    Ich habe noch einmal den Anfangsbeitrag gelesen. Wozu Skripte für diesen Zweck? Dafür sind die Schedule Jobs prädestiniert.

    Wenn die Zeitsteuerung keine Push Nachricht zur Folge haben soll, kann man bspw. das zugehörige Skript (s.o.) mit denselben beiden Jobs stoppen/starten. Besser noch mit zwei zusätzlichen Jobs arbeiten. Kurz vor dem Deaktivieren des Eingangs das Skript stoppen und kurz nach dem Aktivieren das Skript starten. Eine andere Variante kann via Skriptfunktion "sceneEnable(false|true)" und "Script.Eval" das Problem ohne Skript zu stoppen lösen.

    Mal schnell eingebaut:

    Via Methode "Script.Eval" und code="sceneEnable(true|false)" kann der Szenenaufruf freigegeben bzw. gesperrt werden - ohne schreiben in den nichtflüchtigen Speicher.

    Kann ich die Solltemperatur ändern.

    Ich nehme mal die Frage wörtlich, weil der TE an anderer Stelle schreibt

    .... das sind Lösungen aber nicht die Antwort auf meine Frage....

    Meine Antwort auf die Eingangsfrage:

    Vermutlich nicht, sonst hättest du nicht gefragt. Andere können es, wie die Reaktionen zeigen. Wenn du dich mit dem Gerät genauer befassen tätest, könntest du es vermutlich. :D

    Gibt's hierzu Ideen?

    Für solche Zwecke nutze ich einen Raspberry Pi mit installiertem Node-RED, InfluxDB und Grafana. Diese Kombination ist der Cloud haushoch überlegen. Allerdings muss man zur Automatisierung Arbeit investieren. Einen Pro 3EM nutze ich bisher nicht, ich weiß aber, dass alles, was man will mit dieser Kombination aufgezeichnet werden kann. Und Influx/Grafana kann auch bestens Mittelwerte bilden.

    Mechanoid1 und ggf. andere

    Danke an joma0815 für die Vorlage zum Nachrichten pushen.

    Das folgende Skript beinhaltet zwei Teile.

    1. Die Funktion toggleInpEn(id) schaltet zwischen Freigabe und Sperre des Eingangs input:id um - wie bereits in #5 dargelegt.
    2. Ein Eventhandler reagiert auf die Konfigurationsänderung von input:x.
      Er triggert zwei verschiedene Szenen, welche vom Anwender in der Cloud anzulegen sind. Ich habe zwei manuell startbare Szenen dafür getestet, die jeweils eine Push Nachricht senden, wie "Eingang gesperrt" bzw. "Eingang freigegeben". Hier kann der Anwender die Nachrichtentexte verwenden, die ihm zusagen.

    Der Eventhandler hat den Vorteil, dass immer auf eine Änderung der input:x Konfiguration reagiert wird, unabhängig von der Quelle dieser Änderung.

    Der von mir erstellte Eventhandler hat folgende Einschränkung, welche vermutlich zumeist nicht als störend empfunden werden.

    Es wird auf jede Konfigurationsänderung jedes Eingangs reagiert - auch auf nicht enable Änderungen (name, type, invert). Eine selektive Verarbeitung sowohl des Eingangs als auch der geänderten Eigenschaft ist prinzipiell möglich, letzteres muss aber programmiert werden, weil die Antwort seitens der Firmware hierzu keine Information liefert. Diese Programmierung muss das KVS verwenden und die Änderung im Detail ermitteln. Diesen Aufwand wollte ich nun nicht treiben.

    Falls auf Konfigurationsänderungen zweier Eingänge reagiert werden soll, sind b.a.w. vier Nachrichtenszenen zu erstellen. Falls es möglich ist, die Nachricht einer Szene via Skript zu ändern, so erscheint dies zumindest nicht zweckmäßig und ggf. leicht fehlerträchtig.

    Das komplettierte Skript

    Nachdem die Anpassungen in den Cloud Einträgen vorgenommen wurden und zwei Nachrichtenszenen in der Cloud erstellt wurden, müssen die Id der Szenen in der Konstanten Scene eingetragen/geändert werden. Danach sollte alles funktionieren. Was bitte? ...

    Mechanoid1 drückt seinen Button1 lang -> die Freigabe von Eingang x wird geändert und auf das Smartphone mit der App "Shelly Smart Control" die passende Push Nachricht gesendet. Somit kann er erkennen, ob seine smarte Klingel freigegeben oder gesperrt ist. 8)

    Edit:

    Diese Lösung ist alles andere als autark und verbraucht relativ viel Energie. Das sollte wenigstens bekannt sein.

    Eine autarke Lösung, welche erheblich weniger Energie verbraucht, wäre das Schalten einer LED (evtl. rot/grün) vor Ort als Rückmeldung. Nachteil: Anwender muss dort sein, wo die LED sichtbar ist, wenn er eine Rückmeldung haben will.

    Die obige energieaufwändigere Lösung ist immerhin remote (als Dienstleistung) möglich, also bspw. auch, wenn jemand keine Klingel hören will, dies aber nicht selbst einrichten kann.

    Aber vlt kannst du mir noch einmal helfen. Ist über das Script auch eine push Benachrichtigung möglich?

    Ich nutze dafür bei Bedarf den Dienst callmebot.com, welcher mir eine Messenger Nachricht (bei mir Signal) sendet. Solches habe ich per Skript realisiert. In einem Austausch darüber erfuhr ich, dass callmebot bis zu 8 Nachrichten innerhalb 4h unmittelbar sendet. Sind es mehr, werden die Nachrichten in einer Warteschlange mit anderen zwischengespeichert und bei nächster Gelegenheit versendet, was in meinen Anwendungen genügt.

    Meine kürzlichen Experimente mit Push Nachrichten via Cloud waren leider erfolglos. Es war auch nur ein Experiment. Ich brauche so etwas nicht.

    Falls du Interesse an einem Skript zur callmebot Nutzung hast, melde dich bitte! S.a. Skripte (remote) auf Inaktivität testen

    Aha. Das bedeutet bspw. 1 Nachricht in 30 Minuten. Für meine Zwecke genügt das. Meine Schedule Jobs rufen checkScripts() alle 30 Minuten auf und ich lasse derzeit ausschließlich Meldungen über inaktive Skripte senden.

    Man könnte den HTML body auf Vorhandensein von "Too many requests" prüfen und ggf. etwas zielführendes implementieren.

    Dabei denke ich an das Schreiben in eine Skript interne Warteschlange (queue) und die Darstellungen aller Meldungen auf einer vom Skript generierten Webseite. Sofern ich als Anwender eine Nachricht via callmebot erhielte, täte ich dann die vom Shelly erzeugte Webseite abrufen, um auf weitere Nachrichten zu prüfen, ggf. über VPN. Entscheidend wäre dann ein oder mehrere "Weckrufe" via callmebot. Irgendwelche Messwerte oder Zustände ließe ich allenfalls bei Notsituationen mit callmebot übertragen, jedenfalls nicht regulär. Das täte mich auch nerven.

    Meine Lösung zum schreiben in eine nicht ausführbare Skriptdatei täte es aber bereits mit geringem Implementationsaufwand. Diese Datei kann via WebUI des Shelly betrachtet werden. Ich denke, dass dies zunächst die naheliegendste Lösung wäre.

    Ich nutze keine Szenen, kann dazu somit wenig beitragen.

    Als response.body liefert callmebot die Information zurück, wenn bereits zu viele Meldungen in zu kurzer Zeit gesendet wurden.

    Wie lautet die Nachricht von callmebot in diesem Fall genau?

    Das Skript könnte dann vielleicht die Texte speichern und zeitversetzt nacheinander senden lassen.

    In meinem Anwendungsfall ist das nicht vorgesehen, weil selbst bei 30 überwachten Skripten ein gutes Zeitmanagement (Schedule Jobs mit Zeitversatzparameter) alles locker aufteilen kann.

    Mechanoid1

    Das folgende Skript tut, was du wünschst.

    Die Funktion beinhaltet zwei Ausgaben via print, welche ausschließlich dem testen dienen.

    Um die Eingangsfreigabe zu toggeln, ist die Skriptfunktion toggleInpEn mit der Eingangs-Id als Parameter aufzurufen. Das gelingt folgendermaßen, bspw. auf deinem Button.

    Code
    http://<IP address uni>/rpc/Script.Eval?id=1&code="toggleInpEn(0)"

    id=1 ist die Id des Skripts und abzuändern, wenn die Funktion in einem anderen Skript liegt. Statt von Eingang 0 lässt sich selbstverständlich auch die Freigabe von Eingang 1 ... umschalten.

    Btw, diese Funktion "toggleInpEn(id)" kann selbstverständlich auch einem bereits vorhandenen Skript hinzugefügt werden.