Lol, jetzt fällt mir erst die starke Namensähnlichkeit auf - Shelly Script und Shell Script. Nur ein y macht den Unterschied.
Vermutlich kennt die KI kein Shelly Script.
Lol, jetzt fällt mir erst die starke Namensähnlichkeit auf - Shelly Script und Shell Script. Nur ein y macht den Unterschied.
Vermutlich kennt die KI kein Shelly Script.
script in #12 kopiert und das alte ersetzt im 1pm mini - wieder keine ip-Ausgabe…?
Ok, ich schaue mal, woran das liegen mag. Das Skript sollte trotzdem funktionieren.
Ersetze erst einmal "null" durch die Mini IP Adresse!
Verwende also die beiden Ausgaben für den Motion und für den i4, wobei du "null" durch die IP Adresse des Mini ersetzen musst!!
Oh ja ... Moment. Ich habe das Skript in #12 ein wenig ergäzt.
Nun sollte die richtige IP Adresse ausgegeben werden. Du hast sie aber strukturell richtig eingebaut.
Diese Ausgabe ist für die Funktionalität unerheblich.
.../rpc/switch.toggle?id=0 geht ja selbstverständlich auch. Das hatte ich nicht im Blick.
Allerdings ist das Skript so nicht darauf eingestellt. Das ist zwar möglich, dafür müsste ich aber die Event Informationen genauer analysieren und verwenden.
Stelle also auf dem i4 unter ... Action den folgenden URL ein:
http://<IP Adresse des Mini>/rpc/script.eval?id=1&code="ToggleSwitch()"
Edit: Lösche das Protokoll !!! Einen key sollte man nicht veröffentlichen.
Das "Protokoll" ist wohl die Ausgabe auf einen RPC Aufruf wie Shelly.GetStatus.
Das ist ein Unix/Linux Shell Script und als Shelly Skript total ungeeignet.
So etwas wäre vielleicht auf einem Raspberry Pi nutzbar, wenn dieser den Rollladen-Shelly steuern soll, was nicht empfehlenswert ist.
Aber alle Achtung, das sieht für eine KI nicht schlecht aus.
Mal angenommen, ich würde diesen Weg gehen. Ich hätte trotzdem wieder eine Inter-Shelly-Kommunikation.
Die ließe sich (nach meinen naiven Annahmen) nur vermeiden, wenn ich eine Drahtverbindung zwischen Sensor und Add-On auf dem Shelly herstellen würde.
Die Kommunikation zwischen einem Nicht H&T Shelly und dem Schalt-Shelly funktionieren nach meinen Erfahrungen sehr zuverlässig.
Ich finde schlicht keine verständliche Ursache für das Nichtsenden des H&T im kurzen Zeitintervall.
Auch kann ich derzeit wegen Abwesenheit meinen einzigen Plus H&T dbzgl. nicht testen.
Die Nutzung der Cloud ist jedenfalls eingeschränkter als eine lokale Nutzung, bei welcher ausschließlich die beteiligten Shelly miteinander kommunizieren.
13:55-14:25 -> ob tatsächlich das T-Kriterium weggelassen wird, kann ich nicht sicherstellen, da ich im GUI für die Action zwingend eine Überprüfung der Temperatur drin haben muss,
Das sehe ich anders. Wenn der H&T alle 5 Minuten seine Temperatur per Aufruf der Skriptfunktion mitteilen kann, genügt das völlig. Ob dies auf einem H&T als Action konfiguriert werden kann, weiß ich derzeit nicht. Mit einem messenden Plus 1 gelänge dies per Skript leicht. Der Action URL müsste sinngemäß wie folgt lauten.
Selbstverständlich muss dann die Skriptfunktion einen Parameter importieren, bspw. so:
In einem Mess-Shelly Plus 1 mit AddOn werden die Temperaturen in ca. 1 minütigen Abständen (nicht ganz regelmäßig) erfasst und können bspw. per Skript an den Schalt-Shelly gesendet werden. Dies täte sicherer funktionieren als mit einem H&T, der nicht skriptfähig ist. Die Zeitintervalle können auf dem einen oder dem anderen Plus 1 in ein Skript konfiguriert werden. Auch Schedule Jobs könnten eingesetzt werden.
Die Actions sind für Leute, die per Klicks, Auswahlen und wenigen Eingaben etwas erreichen wollen - und möglichst keine Wunder erwarten sollten.
Mit einem Skript ist man erheblich flexibler und kann viel mehr erreichen als mit diesen Actions. Ich nehme auch eine Action, wenn dies bereits genügt, aber in vielen meiner Einsatzzwecke genügen solche Actions nicht.
Das angepasste Skript.
Es enthält zusätzlich die Funktion toggleSwitch() für einen entfernten Auftrag, bspw. von einem i4.
let on = null; // output status
let th = null; // timer handle
let src = null; // source of switching
function send_response(response, body) {
response.code = 200;
response.body = body;
response.send();
}
HTTPServer.registerEndpoint('on',
function (request, response) {
send_response(response, "OK");
if (on!==true) {
src = 'motion';
Shelly.call("Switch.set", {'id': 0, 'on': true});
if (request.query.length > 0) {
let dur = JSON.parse(request.query);
// print(dur);
if(!isNaN(dur) && dur>0) {
th = Timer.set(Math.floor(1000*dur), false,
function () {
Shelly.call("Switch.set", {id: 0, on: false});
}
);
}
}
}
}
);
Shelly.addEventHandler(function(e) {
on = e.info.state;
if (e.component==="input:0" || src!=='motion') {
Timer.clear(th);
}
});
// Für einen entfernten toggle Aufruf, bspw. von einem i4.
function toggleSwitch() {
Shelly.call("Switch.Toggle", {id:0},
function (result, errcode, errmsg) {
if(errcode!==0) print("error in toggleSwitch:", errcode, ", ", errmsg);
else src = 'remote';
}
}
//Do some user friendly printout
function messages() {
let ipAddress = Shelly.getComponentConfig("wifi").sta.ip;
let myId = Shelly.getCurrentScriptId();
print('Your motion url is: http://' + ipAddress + '/script/' + myId + '/on?<duration in seconds>');
print('When switching via remote command the url at the remote action is:');
print('http://' + ipAddress + '/rpc/script.eval?id=' + myId + '&code="toggleSwitch()"');
}
Timer.set(2000, false, messages);
Alles anzeigen
Ich kann es gegenwärtig nicht testen, könnte aber funktionieren. Das Skript reagiert nun sowohl auf einen Schalter am Eingang 0 als auch auf einen Fernaufruf vom i4.
Nach dem Skriptstart erhältst du im Protokollfenster zwei Ausgaben.
Teile bitte den Erfolg bzw. Nichterfolg mit!
Du kannst den Skriptinhalt (zwecks Kontrolle) in einen Code-Abschnitt (</>) statt als Abbildung einfügen. Dann ist er
Der mini ist zusätzlich mit einem Schalter verbunden, um das Licht manuell einschalten zu können.
So in #1
Tastendruck auf shellyi4 —> Befehl an 1pm mini —> Licht ein
Das widerspricht der Info in #1 und war mir bisher nicht bekannt.
Dafür muss das Skript ein wenig geändert werden.
Ich werde es mit der Änderung nachreichen.
Ups, hast du zwei Konten? Oder hast du dich später eingeklinkt?
Sorry horkatz , aber das versenden von Nachrichten über Internet ist in Notsituationen keine wirklich gute Idee.
Als optionale Ergänzung Ok.
Condition:
When: Temperature Change,
Nun, die Temperaturänderung bezieht sich womöglich auf die Schwelle von 0.5°C.
Das dürfte aber nicht das Ausbleiben der Aufrufe in einem kleineren Zeitintervall erklären.
Ich nutze keine Szenen bzw. Actions, die per Cloud ausgelöst werden und bevorzuge die lokale Implementation. Deshalb weiß ich nichts Genaueres darüber.
Alles anzeigenIch denke, das Skript im Plus1 müsste (Pseudocode) in etwa sowas tun:
Temperatur von HTPlus empfangen (wurde als Parameter ans Skript übergeben)
Aktuelle Zeit auslesen
Durch die Liste der konfigurierten Zeitintervalle iterieren.
Wenn passendes Intervall gefunden:
Temperaturbedingung überprüfen
Bedingung trifft zu:
Aktion ausführen (ShellyPlus1 Relais ein- bzw. ausschalten
Du kannst offensichtlich programmieren oder Software entwerfen.
Ja, so lässt sich ein Skript gestalten und sollte funktionieren.
Mir bleibt aber unklar, warum sich der H&T in dem kleineren Zeitintervall nicht mitteilt.
Letztlich halte ich die Funktionssicherheit mit einem Plus AddOn und Sensor eher gegeben als mit einem H&T.
Der Ort des ShellyPlus1 ist im Verteilerkasten der FBH, die Temperatur müsste aber in einem anderen Raum gemessen werden.
Verständlich. Du kannst auch einen zusätzlich Shelly mit AddOn statt des H&T dafür nutzen. Dies gelänge sogar mit einem Shelly 1, also der ersten Generation - nur falls dir ein solcher mit AddOn zur Verfügung stehen sollte. Was ist FBH?
Deine Anmerkungen zur Thematik Zeiten/Stromausfall/Zeitserver lassen bei mir den Entschluss reifen, doch einen permanenten Internetzugang zu nutzen.
Es täte genügen, wenn der Internetzugang ca. 2 Minuten lang nach Stromausfall verfügbar wäre. Dann hat sich zumindest der Plus 1 bereits synchronisiert.
Ich werde den Verdacht nicht los, dass der H&T ein Problem mit der Zeiterkennung hat.
Edit:
Vielleicht liegt es doch an der Bedingung "Temperature Change". Du solltest mal im kurzen Zeitinterval den H&T etwas wärmen (oder abkühlen), um zu sehen, ob er dann die Action ausführt.
Dabei muss die Temperaturänderung mehr als 0.5°C betragen.
Ist diese Bedingung zwingend oder kann sie weggelassen werden? Entferne sie, wenn möglich ...!
Which actions or script do you use?
Du musst das Skript starten, sonst kann es nichts bewirken.
Ich interpretiere, dass deine erste Abbildung deinen vorher eingetragenen URL zeigt und die zweite Abbildung den nun abgeänderten URL.
Die unteren Abbildungen mit dem Skriptinhalt durchsuche ich nicht.
Noch ein Hinweis:
Nenne das Skript bspw. terrasse oder terrassen_app! Intern werden Skripte ausschließlich per Id verwaltet, aber es erscheint zweckmäßig, für uns Menschen verständliche Namen zu vergeben.
Ich fand keinen logischen Fehler. Nach mehr kann ich nicht suchen.
Ich bin gespannt, ob alles so läuft, wie du es haben willst.
Genau so etwas habe ich implementiert, mit einem Shelly Plus 1 und einem Shelly Motion.
Das Skript:
let on = null; // output status
let th = null; // timer handle
function send_response(response, body) {
response.code = 200;
response.body = body;
response.send();
}
HTTPServer.registerEndpoint('on',
function (request, response) {
send_response(response, "OK");
if (on!==true) {
Shelly.call("Switch.set", {'id': 0, 'on': true});
if (request.query.length > 0) {
let dur = JSON.parse(request.query);
// print(dur);
if(!isNaN(dur) && dur>0) {
th = Timer.set(Math.floor(1000*dur), false,
function () {
Shelly.call("Switch.set", {id: 0, on: false});
}
);
}
}
}
}
);
Shelly.addEventHandler(function(e) {
on = e.info.state;
if (e.component==="input:0") {
Timer.clear(th);
}
});
//Do some user friendly printout
let url = 'http://' + Shelly.getComponentConfig("wifi").sta.ip + '/script/' + Shelly.getCurrentScriptId() + '/on?<duration in seconds>';
print('Your url is:', url);
Alles anzeigen
Der Motion muss dazu folgende Action ausführen:
Wenn auf dem Schalt-Shelly noch kein Skript liegt, hat dieses die Id 1. Angenommen die Einschaltdauer soll 5 Minuten sein. Dann ist der URL
Wenn per Schalter eingeschaltet wird, wird die Wirkung des Motion gesperrt, bis per Schalter ausgeschaltet wird.
Wenn die Leuchte per Motion eingeschaltet ist und nun per Schalter eingeschaltet wird, bleibt die Leuchte bis zum ausschalten per Schalter an.
Viel Freude damit
Ich nutze eine solche Kombination nicht. Der Plus H&T ist mir dafür zu träge.
Dein Anliegen ist aber klar und ok.
Ich nehme an, dass du die Schwelle der Temperaturänderungen auf den kleinsten Wert von 0.5°C gestellt hast. Wenn nicht, schaue einmal nach!
Zeiten können von einem Shelly nur dann genutzt werden, wenn er seine Zeit synchronisieren konnte. Solange er die Zeit einmal von einem Zeitserver erhielt, arbeitet sein Uhrtakt auch dann weiter, wenn keine Verbindung zu einem Zeitserver existiert.
Fällt aber die Stromversorgung aus und ein Shelly bootet danach, dann hat er keine Uhrzeit, solange er keinen Zeitserver erreichen kann. Die Shelly haben keine Batterie gepufferte Uhr.
Eine lokale Lösung gelingt ohne verfügbaren Zeitserver also nur, solange sich keine Unterbrechung der Stromversorgung ereignet. Nach dem Stromausfall braucht hierfür der Shelly einen kurzen Zugriff (ca. 1 Minute) auf einen Zeitserver, damit die gesuchte Lösung funktionieren kann. Dies gelingt aber nicht nachträglich, weil eine Action ausschließlich zu Zeitpunkten und nicht später (nachträglich) ausgelöst wird.
Zur Fehleranalyse
Ich weiß nicht, warum die von dir gemachten Angaben 22:00 bis 22:59 nicht wie gewünscht funktionieren. Meine Vermutung geht in Richtung, dass vom Plus H&T in dieser Zeitspanne keine Nachricht gesendet wurde. Vielleicht, weil die Temperaturänderung nicht groß genug war.
Um dies zu prüfen, kannst du ein sehr kurzes Skript einsetzen.
Im H&T fügst du zu deiner Bedingung eine Action hinzu, die diese Funktion aufruft.
Das Skript muss gestartet sein. Das Protokollieren per Web UI muss freigegeben/aktiviert sein, worauf dich die Skriptumgebung hinweisen sollte, sobald du das Skript startest.
Der URL der zusätzliche Action lautet:
Vermutlich liegen auf deinem Plus 1 noch keine Skripte. Dann ist die Id dieses kleinen Skripts die 1.
Andernfalls kannst du die Id per RPC Methode script.list herausfinden.
Du solltest die Web UI (nur direkt vom Plus 1, keine App oder Cloud) mit geöffnetem Skript laufen lassen.
Auch kannst du mit den Zeiten experimentieren, solange die Actions erhalten bleiben.
Immer dann, wenn der H&T die Actions ausführt, wird im Protokollfenster der Text "htText wurde aufgerufen." mit Uhrzeit (rechts) erscheinen.
So kannst du ablesen, wann der H&T dbzgl. aktiv wurde.
Das ist nur ein erster Schritt zur Fehleranalyse. Es gibt bessere Protokollmöglichkeiten, die aber erheblich aufwändiger sind.
Ich bin gespannt, was du herausfindest. Irgendwie werden wir dein Anliegen implementieren können, evtl. durch ein Plus AddOn.
Ich meinte, was ist am 10.03. und 11.09.?
Ich denke, du solltest den gesamten Thread einmal sorgfältig lesen. Dann kannst du hoffentlich erkennen, dass ich versuchte, das Prinzip zu klären, mit welchem der TE nicht komplette Monate in Zeitplänen unterbringen kann. #9 erhebt keinesfalls den Anspruch, alle Zeitpläne aufzulisten. Da ich noch immer nicht weiß, was der TE von März bis September genau erreichen will, habe ich nicht noch mehr investiert.
Außerdem halte ich wenig davon, komplette Lösungen so zu präsentieren, dass ein Fragender nicht mehr selbst denken muss.