Beiträge von eiche

    Da hier die Konfiguration manipuliert wird, ist kein toggeln vorgesehen.

    Wenn du das Sperren/Freigeben eines Eingangs toggeln willst, gelingt dies afaik ausschließlich mit einem kleinen Skript. Dann wäre per Methode "Script.Eval" die entsprechende Skriptfunktion aufzurufen, bspw. toggleInpEn(id). Diese Funktion liest dann die Konfiguration ein und stellt den Wert von "enable" invertiert ein.

    Dies ist allerdings ohne Rückmeldung fehlerträchtig, eil man dann den Status nicht erkennen kann. Vielleicht kannst du dafür eine LED geeignet ansteuern. Alternativ ließe eine Nachricht an/über ein übergeordnetes System eine Signalisierung auf ein Smartphone zu (zumindest via MQTT, auch bei Nutzung eines öffentlichen MQTT Brokers).

    Ok, guter Hinweis. Ich kritisiere nur die Stringsuche, weil diese nicht sicher ist. Ein Keywert kann auch an anderer Stelle (in einem Valuewert) auftauchen. Dann liefert eine einfache Stringsuche kein verlässliches Resultat.

    Für einen relativ überschaubaren Einsatz mag die Stringsuche noch vertretbar sein.

    joma0815

    Es freut mich, wenn ich nicht der einzige Anwender bin.

    wenn callmebot aufgrund zu vieler Meldungen aufhört Nachrichten zu übermitteln.

    Es bleibt zu prüfen, was ggf. callmebot dann rückmeldet. Bisher habe ich ausschließlich auf Nichterreichbarkeit und Nichtauflösbarkeit Name -> IP Adresse getestet und beide Fehlercodes berücksichtigt (-104 und -114). Vielleicht ist die Abfrage auf diese Codes noch ein wenig zu erweitern. Das wird die Nutzung zeigen.

    Wenn du viele Skripte auf diese Weise überwachen willst, vielleicht scriptcheck.js nur auf wenigen (ein oder zwei) Geräten nutzend, dann kannst du bspw. bis zu vier Methoden calls je Schedule Job mit jeweiligem Zeitversatz konfigurieren. Da auf einem Gerät viele Schedule Jobs aktiv sein können, bietet sich eine hohe Anzahl an potentiellen Überwachungszielen. Zwei Shelly mit scriptcheck.js können sich zusätzlich gegenseitig überwachen. Das sollte genügend Redundanz ergeben.

    Das sollte mit folgenden URL gelingen.

    Code
    // deaktivate input:0
    http://<IP address>/rpc/input.setconfig?id=0&config={"enable":false}
    // activate input:0
    http://<IP address>/rpc/input.setconfig?id=0&config={"enable":true}

    Für input:1 entsprechend mit ...?id=1&...

    Dies kannst du zunächst via Browser testen.

    Zunächst die Abfrage:

    Code
    http://<IP address>/rpc/input.getconfig?id=0

    Dies liefert die Konfiguration des input:0. Die Antwort wird etwa so aussehen:

    Code
    {"id":0,"name":null,"type":"button","enable":true,"invert":false}

    Nun gibst du den URL zum deaktivieren ein (s.o.). Anschließend die Abfrage mit ...input.getconfig?id=0.

    Nun sollte die Antwort etwa so lauten:

    Code
    {"id":0,"name":null,"type":"button","enable":false,"invert":false}

    Bei erfolgreichen Tests sind diese URL als Actions im Button einzutragen-

    Quelle: https://shelly-api-docs.shelly.cloud/gen2/Component…s/Input#methods

    Ja, das meine ich. Sieht richtig, geeignet aus, solange die IP Adresse passt.

    Dann kann ich nur noch empfehlen, diese IP Adresse(n) auf Richtigkeit und/oder die Verkabelung an den Shelly auf festen Sitz zu prüfen.

    Btw, diese Actions sollten auch im WebUI sichtbar sein! Es schadet nicht, dies zu überprüfen -> Browser mit IP Adresse des jeweiligen Shelly unter "Actions" nachsehen.

    dann einfach mittels Szene die Benachrichtigung auslösen lassen.

    Meines Wissens erfordert solches einen kostenpflichtigen Cloud Account.

    ElCapital

    Selbstverständlich ist es deine Entscheidung.

    Via Skript ist dies

    1. ohne zusätzliche Kosten möglich und
    2. ohne Cloud möglich, die nach meiner bisherigen Erfahrung weniger ausfallsicher ist als bspw. callmebot.com.

    Ich empfehle aus beiden Gründen die Skriptlösung und kann bei Bedarf auch dabei helfen. In beiden Lösungen ist eh Internetkonnektivität erforderlich.

    Mit Push Nachrichten habe ich keine Erfahrung.

    Coburn

    Hm, ich verwende statische IP Adressen und sehe keinen Grund, dynamische Adressen fest zu vergeben, aber wie dem auch sei ...

    Mitunter habe ich auch Erreichbarkeitsprobleme, aber recht selten. Vermutlich versuchen Störspannungen im Stromnetz solche Aussetzer.

    Deine Anwendung ist klar. Zeige bitte mal deine Actions (deren URL), über die die Shelly miteinander kommunizieren - der Vollständigkeit wegen!

    So, es liegt die vorläufig letzte Version des Skripts "scriptcheck.js" vor.

    Zur Erinnerung: Dieses Skript dient keiner Anwendung sondern soll den Anwender via Nachricht informieren, wenn eines oder mehrere notwendigerweise laufende (remote) Skripte gestoppt sind. So ist das Problem relativ zügig erkennbar und kann angegangen werden. Es ist grundsätzlich nicht möglich, dass ein Skript wegen eines Fehlers nicht gestoppt werden kann. Mit "try ... catch" lassen sich einige Fehler auffangen, aber nicht alle.

    Diese Version speichert die Nachricht in einer nicht ausführbaren Skriptdatei anhängend, wenn das Senden via callmebot.com aus technischen Gründen fehlschlägt. Diese nicht ausführbare Skriptdatei muss der Anwender anlegen und deren Id in scriptcheck.js hinter LogId eintragen. Ich habe bewusst darauf verzichtet, beim Start des Skripts nach der Id eines "Skript" namens "log" suchen zu lassen. Die Nutzung meines Skripts ist nicht für DAUs gedacht. Die Protokolldatei kann als Skript geöffnet und gelesen werden. Nach einer hinreichenden Analyse des Inhalts sollte sie bis auf ein einzelnes Zeichen am Anfang geleert werden. Das Anfangszeichen ist erforderlich, weil ein komplettes Leeren nicht gelingt. Statt eines Zeichens, kann auch gerne eine komplette Zeile am Anfang stehen, wie "logfile of scriptcheck.js". Solange das Versenden via callmebot gelingt, wird nichts in diese Datei geschrieben.

    Das Skript "scriptcheck.js"

    Die Werte für Phone und APIKey sind anwenderbezogen (nach Erhalt des callmebot Accounts) einzutragen! Wer dieses Skript testen will, kann es auch mit den x-en (ohne gültige Account Daten) tun. Dann landen die Nachrichten im script:<LogId>, also der Protokolldatei für Notfälle.

    Wenn ein Fehler im zu sendenden Text - bspw. ein Leerzeichen - vorliegt, sendet callmebot diesen Text nicht. Dann liegt ein (aktuell nicht vorhandener) Fehler in der Textzusammensetzung des Skripts vor, was kein Grund ist, diesen irgendwo zu speichern, weil dies keinen technischen Grund hat. Dann ist derjenige gefordert, den Fehler zu beheben, der ihn verursacht hat.

    Bei Fragen dazu werde ich gerne versuchen darauf einzugehen.

    bp4willi

    Auch ich habe auf meinem Wall Display gelegentlich (selten) eine Mitteilung über niedrigen Batteriestand (bspw. 40%). Zugleich läuft auf einem anderen Shelly ein Skript mit Webseitengenerierung, über das ich diese Daten mit Uhrzeit (bei eingetroffener BTHome Nachricht) sehr aktuell sehen kann. Während das WD diese Falschmeldung nicht wiederholend anzeigt, zeigen die Daten mit Uhrzeit keine solche Merkwürdigkeit.

    Wenn auf dem WD kein Softwarefehler vorliegen sollte, dann wird offenbar unterschiedlich empfangen.

    Das WD meldet Batteriestand von 40%, meine skriptgenerierte Webseite 88% mit sehr aktueller Zeit. Ich vertraue dabei mehr über die skriptgenerierte Webseite, welche (testweise) bis zu 15 BTHome Werte anzeigt. Dabei hat mich überrascht, dass auch Nachrichten von Shelly BLU Geräten recht verlässlich empfangen werden, die ca. 15m entfernt liegen und 3 Altbauwände sowie eine Wohnmobil Außenwand dazwischen liegen.

    Somit tippe ich in meinem Fall auf einen gelegentlich (selten) auftretenden Fehler im Wall Display. Der betreffende BLU H&T Sensor liegt nur 4m (zum WD) bzw. 8m (Pille) ohne Zwischenwand entfernt.

    newby1

    Ich habe so etwas bisher noch nicht umgesetzt. Zu deinem Screenshot:

    Die Übersetzungen ins Deutsche sind nicht immer gelungen. Aktive Zeit - "Aus" bzw. "Zu" erscheint schwer verständlich. Dies nutzt du aber nicht.

    Zum entscheidenden Rest:

    Ereignis "Zustandsänderung" des Motion = der Motion sendet eine Nachricht "Bewegung erkannt" oder "Keine Bewegung mehr erkannt".

    Zusätzliche Bedingung "New state is true" = Bewegung erkannt (bei false statt true wäre die Nachricht "keine Bewegung mehr erkannt" entscheidend).

    Ohne diese zusätzliche Bedingung würde die auszuführende Aktion mit jeder Änderungsnachricht ausgelöst, was hier nicht zweckmäßig wäre.

    Zu "Dann tun Sie" (doofe Übersetzung):

    Der Ausgang wird für 10 Minuten eingeschaltet.

    Das ist offensichtlich genau das, was du erreichen willst - also alles gut.

    Diese Form der Konfiguration ist für solche Nutzer, die sich nicht mit den Remote Procedure Calls (RPC) Grundlagen befassen wollen oder, wie in deinem Anwendungsfall, nicht befassen müssen. ;)

    Dazu beispielhaft zwei getestete Schedule Jobs

    Im Einsatz:

    1. Eine Pille by Shelly mit Name "Die Pille" (kurz Pille)
    2. Ein Shelly Plus 1, den ich "SHT-Wintergarten" (kurz SHT) nenne - SHT von Shelly Humidity Temperature, weil als Sensor ein DHT22 genutzt wird

    Der SHT regelt die Temperatur via Skript und ist zu überwachen - hier vorläufig von der Pille. Auf beiden läuft obiges Skript "scriptcheck.js".

    Die Pille prüft derzeit ausschließlich das Regelungsskript auf dem SHT, der SHT prüft sein Regelungsskript und scriptcheck.js auf der Pille. Diese Anwendung ist somit redundant ausgelegt.

    Der Schedule Job auf der Pille

    Alle 30 Minuten wird remote das Skript Id 1 (=Regelungsskript) auf dem SHT mit IP Adresse 172.16.3.23 geprüft. Das Skript "scriptcheck.js" hat die Id 4.

    Der Schedule Job auf dem SHT

    Hier hat scriptcheck.js die Id 3. Alle 30 Minuten wird auf dem SHT zweimal die Funktion checkScripts() aufgerufen.

    • mit lokaler Prüfung seines Regelungsskripts mit der Id 1 ohne Zeitversatz ,
    • mit ferner Prüfung des Skripts scriptcheck.js (Id 4) auf der Pille mit IP Adresse 172.16.8.2 mit Zeitversatz von 5s.

    Beide Prüfungen werden somit gleichzeitig initiiert, die ferne Prüfung aber um 5s verschoben. Diese Verschiebung dient dazu, eine Häufung von gleichzeitig laufenden RPC zu vermeiden, was zu Skriptstopps führen kann. Da auf dem SHT bis zu 8 Zeitpläne für die Heizung vorgesehen sind, werde ich wohl in beiden Aufrufen zwei unterschiedliche Zeitversatze einbauen.

    Wozu dieser Aufwand?

    Auf diese Weise prüft der Geprüfte (SHT) seinen fernen Prüfer (Pille). Fällt einer von beiden oder das entscheidende Regelungsskript aus, erhalte ich eine aussagekräftige Nachricht, sofern dazu Internetzugang verfügbar ist. Fehlt dieser Zugang, soll zukünftig die zu sendende Nachricht lokal im nichtflüchtigen Speicher abgelegt werden. Daran werde ich noch arbeiten.

    Auch ich will mal off topic schreiben :D - Thomas wird es mir hoffentlich verzeihen.

    Man mag es dimmen nennen, wenn man will. Tatsächlich kann Schrauberhoermi wohl eine Schwingungspaketsteuerung brauchen. Dazu ist ein Shelly Dimmer ungeeignet. Wenn es ein (powered by) Shelly sein soll, dann vielleicht ein Ogemray 25A. Allerdings ist hierfür ein Solid State Nulldurchgangsschalter (man verzeihe mir diese Bezeichnung) eher geeignet als ein Spulenrelais.

    Gesteuert könnte eine solcher Nulldurchgangsschalter von einem Shelly durchaus, nur imho gerade nicht von einem Dimmer. Auch relativ hochfrequente PM Signale sind hier fehl am Platze, da ein Heizstab das Medium nur recht träge aufheizen dürfte. Ob Schwingungspakete eine Nulleinspeisung überhaupt hinreichend unterstützen könnte, weiß ich derzeit auch nicht.

    Bekanntermaßen bieten Shelly Skripte erheblich mehr Einsatzmöglichkeiten, als es Standardkonfigurationen erlauben. Soviel zum entscheidenden Vorteil.

    Der Nachteil von Skripten besteht in einer mitunter mangelhaften Ausfallsicherheit, soll heißen: Ein Skript kann, aus welchen Gründen auch immer, inaktiv sein - also ruhen. Wenn ein Skript nicht ruhen darf, es aber tut, dann ist es hilfreich, automatisiert darüber informiert zu werden. Dafür habe ich ein Skript geschrieben, welches bei Bedarf über Nichtaktivitäten von Skripten via callmebot.com informiert. Ich nutze dafür den Messengerdienst Signal, es können aber afaik auch andere Messenger genutzt werden.

    Das Skript bietet insbesondere eine Funktion checkScripts() , welche praktikabel per Zeitpläne (schedule jobs) aufgerufen werden sollte - bspw. alle 30 Minuten. Diese Funktion kann je nach Parameter lokal oder remote (besonders zweckmäßig) bestimmte Skripte auf Inaktivität prüfen. Falls der remote Host nicht erreichbar ist oder mindestens eines der zu prüfenden Skripte inaktiv ist, wird eine Messenger Nachricht via callmebot.com gesendet.

    Dies habe ich bisher auf einer Shelly Pille entwickelt und getestet.

    Optionales Vorhaben: Falls Internet nicht verfügbar, können solche Meldungen im nichtflüchtigen Speicher protokolliert und zeitversetzt bei Bedarf angeschaut werden.

    Beispiel einer solchen Nachricht

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Erstellen eines geeigneten Schedule Jobs via tools.eichelsdoerfer.net

    Da mit Shelly Bordmitteln ein benötigter Job nicht erstellbar ist, habe ich dafür eine Website zusammengestellt, welche das Anlegen oder ändern nützlicher Jobs unterstützt.
    https://tools.eichelsdoerfer.net/schedjob.html

    Beispiel eines hier geeigneten Jobs

    Dieser Screenshot zeigt das Anlegen bzw. Ändern eines Zeitplans zum regelmäßigen Aufruf der Skriptfunktion checkScripts().

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Mein noch folgendes Skript hat die Skript Id 4. Der Job ruft die Funktion checkScripts() alle 5 Minuten auf. Diese relativ hohe Abfragefrequenz ist ausschließlich dem Testen geschuldet. Niemand dürfte daran interessiert sein, alle 5 Minuten eine Nachricht zu erhalten, welche denselben Ausfall mittteilt. Der timespec Wert kann gerne auch völlig anders gestaltet werden. Dieser ist auch via Shelly WebUI leicht abänderbar. Nur der Aufruf von checkScripts() kann nicht via WebUI eingebaut werden.

    Die Parameter des Funktionsaufrufs - am Beispiel erläutert

    1. IP Adresse des remote Skripthosts - wichtig(!) in Hochkommata gesetzt
      Wird hier 'local' oder 'localhost' oder '127.0.0.1' eingesetzt, fragt das Skript unmittelbar lokal ab, andernfalls per HTTP.Get. Im Beispiel hat der Host die IP Adresse 172.16.3.23.
    2. Die Id des zu prüfenden (remote) Skripts. Hier ist nur eine Id (1) verwendet. Stattdessen kann auch eine Liste (Array) genutzt werden, bspw. [1,3,4] womit die Skripts mit den Ids 1, 3 und 4 auf Inaktivität geprüft werden.
      Welche Skripte zu prüfen sind, kann nur der Anwender entscheiden.
    3. Optionaler Zeitversatz in Sekunden, hier 10s. Er bietet die Möglichkeit, zur selben Zeit mehrere Aufrufe von checkScripts() zu nutzen, welche das tatsächliche Prüfen unterschiedlich zeitversetzt durchführen. Dies kann in mehreren Jobs oder auch in einem Job mit mehreren calls erfolgen. Bei geeigneter Planung kann dieser optionale Zeitversatz den Abbruch meines Skripts wegen zu vieler gleichzeitiger RPC Aufrufe verhindern. Hier sollten wenige Sekunden völlig ausreichen. Fehlt dieser Parameter, wird die Prüfung sofort abgearbeitet.
      Bsp: checkScripts('172.16.3.23', 1)

    Das Skript (zum Prüfen von Skripts ;))

    Man benötigt einen kostenfreien Account auf callmebot.com. Damit muss der Wert von HttpCode für eigene Zwecke angepasst werden.

    Das Skript gibt im Console Fenster wenige Informationen aus, was leicht abgestellt werden kann.

    Hinweis zu den via callmebot.com übertragenen Texten

    Darin darf kein Leerzeichen stehen. Stattdessen muss jeweils ein Pluszeichen vorhanden sein.

    Anlass

    In unserem alten, kleinen Wintergarten hängt ein Heizkörper, der normalerweise verlässlich via Shelly Plus 1 und Skript vor dem Einfrieren - Zieltemperatur 5°C - geschützt wird. Dieser Shelly verlor in letzter Zeit wiederholt die WLAN Verbindung, trotz guter Feldstärke - vermutlich ein Hardwaredefekt. Der Ersatz Shelly Plus 1 tut bisher verlässlich seine Dienste. Ich möchte aber darüber informiert werden, wenn hier ein Problem vorliegen sollte. Solches erledigt obiges Skript in Kombination eines Schedule Jobs - derzeit auf einer Shelly Pille.

    Nebenbemerkung: Die alten, üblichen, mechanischen Thermostate sind wenig geeignet, da sie nicht für solch niedrige Zieltemperaturen gebaut sind. Dies verursachte früher leider oftmals einen zu warmen Heizkörper, also verschwendete Energie. Ein dort montierter TRV fiel aus. Dies veranlasste mich dazu, eine verlässlichere Implementation via Skript zu entwickeln, die standalone nutzbar ist.

    Edit:

    Das Skript kann auch ohne bereits vorhandenen callmebot.com Account getestet werden. Die Ausgaben im Console Fenster zeigen, ob ein inaktives Skript gefunden wurde. Steht hinter der Ausgabe "... Inaktive+Skripte:" nichts, wurden keine der zu prüfenden Skripte als inaktiv gefunden und bei einer remote Prüfung wurde kein Problem festgestellt.

    Btw, falls ein zu prüfendes Skript (dessen Id) nicht vorhanden ist, wird die Meldung "missing script:<Id>" ausgegeben und gesendet.

    newby1

    Meine Empfehlung: Befasse dich mal mit dem WebUI des/der betreffenden Shelly!

    Browser: http://<IP Adresse des Shelly>

    Dort ist vieles zu finden und meiner Erfahrung nach die fehlerärmste Variante zum kennenlernen der Shelly und auch zum konfigurieren.

    Hier sind BLU Geräte hinzufügbar und mit Actions recht weitgehend nutzbar. Mit grundlegenden Kennnissen der Remote Procedure Calls (RPC) können auch andere Shelly hinzugezogen werden. Informationen sind auf englisch sehr weitgehend verfügbar. Du musst ja nicht alles kennen. Bei Bedarf und möglichst konkreten Anliegen kann dir hier zumeist weitergeholfen werden, bestenfalls mit Hilfe zur Selbsthilfe.

    newby1

    Hm, wenn du eine Szene verwendest, gelingt das Vorhaben ausschließlich über das Internet. Warum so etwas?

    Das Ganze gelingt auch lokal (ohne Erfordernis einer Internet-Kommunikation). Dazu brauchst du einen Shelly ab Generation 3, auf welchem du den BLU Motion einbindest. Dazu erstellst du eine Action, welche entweder das Licht lokal schaltet oder via http den schaltenden Shelly beauftragt. Das ist alles.

    Wenn du unbedingt eine (Cloud basierte) Szene nutzen willst, müssen andere darauf eingehen. Ich mache einen solchen Blödsinn nicht, weshalb ich mich nicht damit auskenne(n will).