Hallo zusammen,
kann ich Info's zu den verbundenen AP_Clients per Shelly.getComponentStatus abfragen ?
Oder geht das nur über Shelly.call("WiFi.ListAPClients" ?
Danke.
Patrick
Hallo zusammen,
kann ich Info's zu den verbundenen AP_Clients per Shelly.getComponentStatus abfragen ?
Oder geht das nur über Shelly.call("WiFi.ListAPClients" ?
Danke.
Patrick
Hallo zusammen,
in den Szenen gibt es ja die "Alexa Benachrichtigungen".
Kann ich das auch über ein Skript tun ?
Per Skript eine Alexa Routine/Sprachausgabe starten, etc. ?
Danke.
Patrick
Hallo zusammen,
hier ein Skript für das Blinken.
Ansteuerung per Cloud "SHC" bzw. der Alexa per Routine mit (EIN, PSST, AUS).
Nach dem AUS übernimmt das Skript das Blinken.
Die Lampe nimmt den Zustand vor dem Blinken wieder am Ende ein.
Das Blinken kann am Schalter gestoppt werden und die Lampe bleibt im eingestellten Modus "flash_stop_LAMP_ON"
Im Skript könnt Ihr folgendes noch einstellen:
flashCycles: 5, // amount of flash cycles
tms_time: 1000, // ON=OFF each in millisec
flash_stop_Lamp_ON: false // Lamp status when the flashing cycle is manually interrupted
- flashCycles 5 = 5x AN und 5x AUS bzw. 5x AUS und 5x AN (hängt davon ab, ob die Lampe an bzw. aus ist)
- tms_time ist die Einschalt- bzw. Ausschaltdauer der Lampe (Lampe_AN=Lampe_AUS)
- flash_stop_Lam_ON gibt an, falls das Blinken per Schalter unterbrochen wird, ob die Lampe AN (=true) oder AUS (=false) sein soll
Bestimmt kann man das Skript verbessern, jedoch irgendwie hat jeder sein eigenen Stil
Grüße
Patrick
// Flash_Lamp_v1.0
// PatrickR
// 20.05.2024
let debug_ = 1;
let CONFIG_USR = {
flashCycles: 5, // amount of flash cycles
tms_time: 1000, // ON=OFF each in millisec
flash_stop_Lamp_ON: false // Lamp status when the flashing cycle is manually interrupted
};
let CONFIG = {
inputId_0: 0,
inputName_0: "input:0",
switchId_0: 0,
switchName_0: "switch:0"
};
function fkt_debug(to_print) {
if (debug_ > 0) {
print(to_print);
}
};
function fkt_flash() {
fkt_debug("fkt_flash: cntFlash=" + cntFlash);
if (cntFlash > 0) {
cntFlash = cntFlash - 1;
fkt_debug(SHC_ON);
if (SHC_ON === false) {
if (Toggle_Activ === true) {
fkt_debug("Toggle");
Shelly.call("Switch.Toggle", { "id": CONFIG.switchId_0 });
}
CONFIG.TimerHandler = Timer.set(CONFIG_USR.tms_time, false, fkt_flash);
Toggle_Activ = true;
}
}
else {
fkt_reset_value();
}
};
function fkt_flash_stop() {
if (Toggle_Activ === true) {
fkt_reset_value();
Shelly.call("Switch.Set", { "id": CONFIG.switchId_0, "on": CONFIG_USR.flash_stop_Lamp_ON });
}
};
Shelly.addStatusHandler(function (e) {
fkt_debug("JSON-Status: " + JSON.stringify(e));
if (e.component === CONFIG.switchName_0) {
if ((e.delta.output === true) || (e.delta.output === false)) {
fkt_debug("\n\r'" + CONFIG.switchName_0 + "' :: Output: " + e.delta.output);
switch (e.delta.source) {
case "SHC":
fkt_debug("'SHC': per Shelly Cloud ::: OUTPUT: " + e.delta.output);
if (e.delta.output === true) {
SHC_ON = true;
} else if (e.delta.output === false) {
SHC_ON = false;
}
fkt_flash();
break;
case "button":
fkt_debug("'button': per button");
fkt_flash_stop();
break;
case "switch":
fkt_debug("'switch': per switch");
fkt_flash_stop();
break;
default:
fkt_debug("'?source': per '?' " + e.delta.source);
break;
}
}
}
});
function fkt_reset_value() {
SHC_ON = false;
cntFlash = CONFIG_USR.flashCycles*2;
TimerHandler = null;
Toggle_Activ = false;
Timer.clear(CONFIG.TimerHandler);
};
print("start 'Flash_Lamp_v1.0' :: debug_: " + debug_);
let SHC_ON = false;
let cntFlash = CONFIG_USR.flashCycles * 2;
let TimerHandler = null;
let Toggle_Activ = false;
Alles anzeigen
Hallo zusammen,
ich hab die Shellys meines Sohnes geteilt und in meiner App in einem Raum eingebunden
- Shelly Plus 2 PM
- Shelly 1 PM mini Gen.3
Schau ich nun die einzelnen Shellys an wird die Leistung angezeigt,
jedoch nicht als Leistungsanzeige des Raumes.
Mach ich was falsch, oder geht das einfach nicht ?
Danke.
Patrick
Nachtrag:
Ich kann in meinem Konto die Einstellungen der Shellys meines Sohnes nicht deaktivieren.
- Vom Gesamtraumverbrauch des Raumes ausschließen
- Vom Gesamtverbrauch des Kontos ausschließen
Ich leg die Daten lokal über Shelly.Call auf meinem Zentralen Shelly an.
Lese diese bzw. überschreibe diese dann per remote.
Hat der "De kat" damals hier als Vorlage abgespeichert.
Gruß
Patrick
.. du kannst ja bis zu 5 endpoints pro script erstellen.
Macht Sinn, aber vermutlich nur, wenn die Daten zwischengespeichert werden (aber denke schon).
Gruß Patrick
Hallo @De kat,
danke für Deine Antwort.
Weißt Du ob die HTTP Endpoints einen Interrupt auslösen, und es ggf. Sinn macht, die gesendeten Daten zu speichern, den Request mit 200 zu beantworten und dann die Liste abarbeiten ?
Ich hatte den Verdacht, dass beim mir die Abarbeitung zu lange dauert bzw. zu viele Requests nahezu gleichzeitig gesendet werden.
Zwischenzeitlich konnte ich die Anzahl der gesendeten R. merklich reduzieren.
Jetzt tritt mein Problem nicht mehr auf.
Danke für Deine vielen Antworten.
Grüße
Patrick
Wenn ein Gen2 Shelly mit nem anderen Gen2 kommuniziert, könnte man von Aktions zur reinen Skript Lösung übergehen und somit auch diese Limitierung umgehen.
Der Workaround dafür wäre wohl, bei ner Antwort 503 einfach mit ner Sekunde Delay die Anfrage erneut zu stellen.
Noch besser wäre es, wenn alle Shellys, unabhängig davon ob es sich um Gen1 oder Gen2 handelt, das 'Drei-Versuche-und-du-bist-raus' Prinzip bei Aktionen anwenden würden.
Also, wenn als Antwort nicht OK(Code 200) zurückkommt, sollte der Aktion Call einfach erneut versendet werden. Das Ganze dann bis zu 3 Versuchen, bevor das Vorhaben aufgegeben wird.
Hallo @De kat,
danke für Deine Antwort.
Noch ein paar Fragen zum http beim Shelly.
Wann wird 503 gesendet, wenn der Shelly nicht erreichbar ist, und nicht, wenn nicht in einer bestimmten Zeit keine 200 gesendet wird ?
Das 'Drei-Versuche-und-du-bist-raus' Prinzip müßte programmiert werden ?
Die Möglichkeit entfällt ja leider beim Shelly-Uni
Hat der Shelly-Uni irgendwelche Automatismen hierzu integriert, oder 1x versendet (per Aktion) und das war es ?
Wie wird der HTTP Endpoint abgearbeitet, per Interrupt und ggf. Stapelspeicherung, oder werden empfangene HTTP Requests, falls diese nicht abgearbeitet werden, überschrieben ?
Grüße
Patrick
Hab's nun wie folgt gelöst.
Ggf. geht es auch besser.
Wenn der Status des Webhook 'Test_Input' sich ändert, wird dieser angezeigt.
let CONFIG = {
HooksName: "Test_Input"
};
Shelly.addStatusHandler(function (e) {
if (e.delta.webhook_rev !== 'undefined') {
// print("JSON-Status: " + JSON.stringify(e));
Shelly.call(
"http.get",
{ url: "http://127.0.0.1/rpc/Webhook.List" },
function (response, error_code, error_message, ud) {
let jsonDataHooks = JSON.parse(response.body).hooks;
for (let i = 0; i < jsonDataHooks.length; i++) {
// print("webhook-list (" + i + "): " + JSON.stringify(jsonDataHooks[i]));
if (jsonDataHooks[i].name === CONFIG.HooksName) {
print("Hooks.name: " + jsonDataHooks[i].name);
print("Hooks.enable: " + jsonDataHooks[i].enable);
}
}
},
null
);
}
});
// Log:
// Hooks.name: Test_Input
// Hooks.enable: true
Alles anzeigen
Hallo zusammen,
ich hab z.B. zwei Actions (Beispiele) und möchte gezielt nach den Daten eines der Actions suchen bzw. filtern.
Letztendlich, ob der Action "Test_Input" ein- bzw. ausgeschalten ist.
Hab schon verschiedenes versucht, aber weiter als bis hooks komme ich nicht.
"name":"Test_Input"
"enable": ????
Vielen Dank.
Patrick
Log ist als Kommentar am Code-Ende
Shelly.addStatusHandler(function (e) {
if (e.delta.webhook_rev !== 'undefined') {
print("JSON-Status: " + JSON.stringify(e));
Shelly.call(
"http.get",
{ url: "http://127.0.0.1/rpc/Webhook.List" },
function (response, error_code, error_message, ud) {
let jsonDataHooks = JSON.parse(response.body).hooks;
print("webhook-list: " + JSON.stringify(jsonDataHooks));
},
null
);
}
});
// Log:
// JSON-Status: {"component":"script:4","name":"script","id":4,"delta":{"id":4,"running":true}}
// webhook-list: [{"id":2,"cid":0,"enable":true,"event":"input.button_push","name":"Test_Input","ssl_ca":"ca.pem","urls":["http://127.0.0.1/rpc/switch.set?a2=1&on=true&id=0"],"active_between":["00:00","23:59"],"condition":null,"repeat_period":0},{"id":1,"cid":0,"enable":true,"event":"input.button_longpush","name":"Test_Input_long","ssl_ca":"ca.pem","urls":["http://127.0.0.1/rpc/switch.set?a2=1&on=true&id=0"],"condition":null,"repeat_period":0}]
Alles anzeigen
??? Die Aussage ist falsch. Per Zeitplan kann man auch nach Sonnenstand schalten.
Danke, was dazu gelernt
Könnte per Skript aber gelöst werden.
Aber stimmt, soll der Schalter das Licht vorzeitig ausschalten ?
Muss auch berücksichtigt werden.
Patrick
Hallo nofear3005,
wenn Du zum Sonnenuntergang AUTOMATISCH unter Berücksichtigung der Jahreszeit, schalten möchtest, geht das über ein Skript, was die Zeiten für den Sonnenuntergang aus dem Internet holt.
Oder ohne Skript per Zeitplan (fixe Uhrzeit, welche Du dann nach und nach anpassen mußt).
Dann kommt noch die Frage vom horkatz hinzu, was soll passieren, wenn der Schalter vor Ende der 2-3h eingeschaltet wird.
1) Soll dennoch das Licht ausgehen oder was ich eher denke
2) die Ausschaltung erfolgt nicht, da manuell das Außenlicht eingeschaltet wurde.
Das Skript kenne ich selber nicht, aber zumindest mal ein Ansatz bzgl. der Sonnenuntergangszeit (im Skript war es der Sonnenaufgang)
Link: Rolladen morgens hochfahren 15 Minuten vor Sonnenaufgang aber nicht vor 6 Uhr
Das Skript macht definitiv mehr als Du benötigst.
Überleg, das mit dem Schalter.
Beides geht.
Patrick
Hallo SebMai,
vielen Dank für den Hinweis.
War auch mein Ansatz statemachine.
Hab es letztendlich etwas anders gemacht als ich es zunächst vor hatte.
Nach Ablauf des Timers auto OFF, blinkt es 2x und nach Ablauf einer weiteren Minute noch 1x.
bevor dann das Licht ganz ausschaltet wird bzw. zuvor nach einem Tastendruck während der 2Min, der Timer neu gestartet wird.
Gruß
Patrick
Hallo @De kat,
danke nochmals.
Ich verwende den Shelly_1, da ich eh noch einen über hatte, und die Versorgung etc. alles integriert ist.
Verwenden tue ich nur das SENDMAIL und das läuft sehr stabil.
Ich hatte zuvor nichts mit Tasmota gemacht, ist daher Neuland für mich.
Mit den Info's und der Unterstützung in den verschiedenen Foren etc. hab ich es angepaßt und kompiliert bekommen
Den Shelly_1 (Tasmota) habe ich zusammen mit einem Shelly_Plus_1_Mini_Gen3 (als zentraler Shelly) in ein altes, leeres Develo Powerline Gehäuse untergebracht.
Praktisch - rechteckig - gut
Der "zentrale" übernimmt zunächst die Aufgabe des SENDMAIL-Aufrufes (inkl. Timestamp und Logik) für einen Shelly Uni.
Daher mein Interesse für Endpoints in einem anderem Beitrag.
Nachtrag: Und die KVS-Daten für die verschiedenen Shellys bzgl. des SENDMAIL-Betreffs.
Grüße
Patrick
Hallo @De kat,
vielen Dank für Deine Antworten.
Super, das war was ich brauche.
Damit kann ich arbeiten
Es geht mir nur um die Beispiele für das KVS und deren Anwendung.
Die Informationen zu SENDMAIL und Tasmota sollte nur erklären, wofür ich es verwenden möchte.
Emailsenden funktioniert bereits sehr gut, und zuverlässiger als die Cloud-Emailbenachrichtigung.
Also nochmals vielen Dank.
Gruß
Patrick
Falls es interessiert, die Email-Daten werden wie folgt an den Shelly-Tasmota gesendet:
Hallo @De kat,
danke für Deine Antwort.
Etwas zu erwarten wäre frech von mir.
Eher von Deinem Wissen zu profitieren
Ich lerne/verstehe leichter, wenn ich sehe wie es angewandt wird.
Darauf kann ich dann aufsetzen und selber herumprobieren.
Die Technische Beschreibung reicht mir da manchmal nicht.
Generell geht es mir bei diesem Thema darum,
dass Daten (begrenzte Menge) zentral gespeichert sind,
und andere Shellys diese Daten lesen und ggf. ändern können.
Und in meinem Anwendungsfall konkret,
senden Shellys per http unterschiedliche Daten (Email-Betreff) an den Shelly-Tasmota,
der wiederum, sendet diese dann per SENDMAIL und IMAP an meinen GMX Account.
Der Betreff setzt sich aus einem fixen Teil und dem Timestamp zusammen.
Der Shelly-Tasmota versendet die Daten nur.
Diesen fixen Teil -habe ich mir überlegt- wäre ggf. toll zentral zu verwalten anstatt auf jedem Shelly in unterschiedlichen Scripts.
So ein NiceToHave (zentral) zeigt mir und anderen Foren-Migliedern was per Shelly-Script noch weiteres möglich ist.
Und ich profitieren von Eurem Wissen und erweitere meines
Grüße
Patrick
Hallo @De kat,
ich versende Emails über einen Shelly_1 mit Tasmota-FW (angepaßt).
Die Email-Subject (als preFix), verwalte ich in den jeweiligen Scripts, welche eine Email zum versenden haben.
Da ich noch an dem preFix herumprobiere, wollte ich diese zentral auf einem Shelly_Zentral verwalten und beim Start der Shelly_XY,
soll der/die Wert/e vom Shelly_Zentral gelesen werden und die Defaultwert/e im Shelly_XY überschrieben werden.
Und wer weiß, später kommen noch andere Anwendungen hinzu.
Ggf. auch die Werte auf dem Shelly_Zentral überschreiben.
Das einfache, verständliche Beispiel würde ich dann noch anpassen/einbinden in meine Skripte.
Gruß
Patrick
Hallo @De kat,
vielen Dank.
Patrick