Ich habe in der App alle Shellys als Rolladen eingestellt.
Nach deinem Post #14 sieht das nicht so aus:
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 habe in der App alle Shellys als Rolladen eingestellt.
Nach deinem Post #14 sieht das nicht so aus:
Ich nutze 7 Shelly 2 PM Pus zu Rolladensteuerung.
Alle sind gleich konfiguriert.
6 davon arbeiten auch genau wie Sie sollen.
Hier gibt es schon ein paar Ungereimtheiten. Wenn alle gleich konfiguriert sind, warum dann als Switch? Du sprichst doch von Rollladen. Oder sind es Rollladen mit Steuereingängen? Selbst dann macht es Sinn, den Shelly im Rollladenmodus zu betreiben, nur eine Kalibrierung ist dann nicht möglich. Wie auch schon angemerkt wurde, deine Firmware ist uralt, bitte dringend mal aktualisieren.
Man kann Zeitpläne aktivieren, deaktivieren:
http://192.168.x.x/rpc/Schedule.Update?id=1&enable=true
IP-Adresse und ID des Zeitplans anpassen, true oder false am Ende.
Eingang auf "detached" stellen:
http://192.168.2.47/rpc/Switch.SetConfig?id=0&config=%7B
IP und ID des Eingangs anpassen.
Mögliche Werte: momentary, follow, flip, detached, cycle (falls zutreffend), activate (falls zutreffend).
Szenen lassen sich auch über URL aktivieren, deaktivieren, da müsste ich aber auch noch mal suchen...
Mammut Du könntest auch messen, ob die Ausgangsklemmen R- und L-, oder R+ und L+ miteinander verbunden sind. Dann kannst du mit einer Leitung ein ganzes Paar schalten. Ist zwar nicht die feine englische Art, funktioniert aber...
Ja, auch das sieht man. Folgendes mit dem Browser aufrufen:
http://192.168.x.x/rpc/shelly.getstatus
IP Adresse anpassen. Hinter "source" steht die Quelle des letzten Befehls, hinter "uptime" die Sekunden seit dem letzten Neustart.
Unter
https://github.com/shelly-tools/s…_consumption.js
findest du ein Script, welches z.B. zur Überwachung einer Waschmaschine geeignet ist. Im Original erhältst du eine Telegram-Nachricht, man kann es aber auch abändern, um z.B. eine Szenenbenachrichtigung zu erhalten.
Ich selber nutze es in abgeänderter Form, meine Benachrichtigung kommt über Signal (mit Nutzung von callmebot.com), außerdem blinken die Wohnzimmerschränke 20 Sekunden lang grün und ein Plug in der Küche schaltet sich ein und der Farbring wechselt auf grün.
Das Script überwacht permanent den Verbrauch, nach Überschreitung eines Schwellwerts muss ein weiterer Schwellwert für eine bestimmte Zeit unterschritten werden, erst dann erfolgt die Benachrichtigung. Es kommt also keine Nachricht, wenn du nur den WR einschaltest, die Kaffeemaschine muss auch kurz an gewesen sein...
WIe macht das eigentlich hörmann bei den Garagentoren?
Wie schon geschrieben, die meisten Tore erkennen, wenn während der Bewegung zu viel Strom fließt (bedeutet dann meist Kollision mit einem Hindernis). Im Anschluss wird kurz umgesteuert und dann gestoppt. Lichtschranken oder Schutzleisten sind oft als Zubehör erhältlich und anschließbar, haben aber die Wenigsten.
Was das Tor von TimPeu.83 angeht, ich weiß nicht, wie er zu dem Teil gekommen ist und wie es bisher gesteuert wurde. Natürlich wäre es besser, es gäbe eine richtige Steuerung. Man kann versuchen, die Hinderniserkennung des Shelly zu nutzen, wenn diese gut eingestellt ist, dann besteht zumindest ein ähnlicher Schutz, wie ihn richtige Torsteuerungen bieten.
Zum Thema unbeaufsichtigte Steuerung: Das eine sind die Vorschriften und die Theorie, das andere ist die gängige Praxis. Mein Tor hat auch nur die oben beschriebene Hinderniserkennung, bei mir darf es auch schon mal unbeaufsichtigt fahren, die Schließkraft ist so eingestellt, dass man es mit der Hand anhalten kann...
Damit kann ich gut leben.
Lichtschranken haben von Haus aus die wenigsten Antriebe. Meistens gibt es eine Hinderniserkennung (durch den erhöhten Strom) mit kurzem Ansteuern der Gegenrichtung.
Durch die Reichweite des BluButton ist eine unbeaufsichtigte Bedienung ja schon fast ausgeschlossen...
Normalerweise gehört zu einem Rolltor auch eine Steuerung. Du hast nur den Motor. Der Shelly kann den zwar steuern, es gibt aber dann keine Sicherheitseinrichtungen. Unbeaufsichtigt würde ich es dann nicht betreiben...
Du musst den Shelly dann tatsächlich im Rollladenmodus betreiben, nach der Kalibrierung kannst du dich um das Script kümmern. Die HTTP-requests findest du im Lexikon. Ich würde den Single Push für das Öffnen nutzen, Double oder Longpush zum Schließen (wird nicht so gerne versehentlich betätigt).
Ich habe ein einfaches Rolltor wie einen Rolladen
Nochmal die Frage, hat das Tor keine Steuerung? Der Anschluss des Shelly direkt am Motor ist falsch. Die Wahl des Shelly (2PM) ist ziemlich sicher auch falsch, du brauchst einen Shelly mit potentialfreiem Kontakt. Davon abgesehen, was ist an dem Script kompliziert? Du musst nur die Adresse anpassen (die Adresse des BluButton findest du z.b. mit der Shelly BLE Debug App heraus) und die passenden Aktionen eintragen...
ich achte immer darauf, dass die Bestätigung der Übernahme auch erfolgt, wie auch diesmal geschehen.
Am besten Bluetooth erst deaktivieren, wenn die Einbindung geklappt hat.
Gibt es keine Steuerung? Die Funktion ist bei Weitem nicht die gleiche!
Neben den oben beschriebenen Klebepads gibt es auch andere, wo ein Kabelbinder durchgezogen wird. Gemeinsam haben sie eins, einen guten Kleber. Dieser lässt sich, je nach Untergrund, später nicht rückstandsfrei entfernen. Auf glatten Fliesen sollte es aber kein Problem sein, mit Schaber und Aceton dürfte es gehen.
Ich nutze schon länger dieses Script:
/**
* This script lets you use your Gen2 device as a gateway between Shelly BLU button1 and other Shelly devices (no matter Gen1 or Gen2)
* by sending local requests by their local IP APIs.
*
* What you should change before using it:
* > bluButtonAddress -> You should put the mac address of your blu button here.
* This script will help you find the mac address: https://github.com/ALLTERCO/shelly-script-examples/blob/main/ble-shelly-scanner.js
*
* > actions -> You should put the urls here to be executed at the specified event. Urls that shoudl be called on single/short push
* of the button, must be placed in the singlePush object. This applies to the double and triple push as well. Example below.
*
* Limitations:
* > At the moment there is a limit of 5 RPC calls at the same time and because of this, the script will execute every 3 urls with a 1 second delay.
* Limitations can be check here: https://shelly-api-docs.shelly.cloud/gen2/Scripts/ShellyScriptLanguageFeatures#resource-limits
*
* > The order of the execution of the urls can't be guaranteed
*/
/** =============================== CHANGE HERE =============================== */
let CONFIG = {
bluButtonAddress: "1a:b2:c3:d4:55:ab", //the mac address of shelly blu button1 that will trigger the actions
actions: { //urls to be called on a event
//when adding urls you must separate them with commas and put them in quotation marks
singlePush: [ //urls that will be executed at singlePush event from the blu button1
"http://127.0.0.1/relay/0?turn=on"
],
doublePush: [ //urls that will be executed at doublePush event from the blu button1
],
triplePush: [ //urls that will be executed at triplePush event from the blu button1
],
longPush: [ //urls that will be executed at longPush event from the blu button1
}
};
/** =============================== STOP CHANGING HERE =============================== */
let urlsPerCall = 3;
let urlsQueue = [];
let callsCounter = 0;
let ALLTERCO_MFD_ID_STR = "0ba9";
let BTHOME_SVC_ID_STR = "fcd2";
let uint8 = 0;
let int8 = 1;
let uint16 = 2;
let int16 = 3;
let uint24 = 4;
let int24 = 5;
let BTH = {};
BTH[0x00] = { n: "pid", t: uint8 };
BTH[0x01] = { n: "Battery", t: uint8, u: "%" };
BTH[0x05] = { n: "Illuminance", t: uint24, f: 0.01 };
BTH[0x1a] = { n: "Door", t: uint8 };
BTH[0x20] = { n: "Moisture", t: uint8 };
BTH[0x2d] = { n: "Window", t: uint8 };
BTH[0x3a] = { n: "Button", t: uint8 };
function getByteSize(type) {
if (type === uint8 || type === int8) return 1;
if (type === uint16 || type === int16) return 2;
if (type === uint24 || type === int24) return 3;
//impossible as advertisements are much smaller;
return 255;
}
let BTHomeDecoder = {
utoi: function (num, bitsz) {
let mask = 1 << (bitsz - 1);
return num & mask ? num - (1 << bitsz) : num;
},
getUInt8: function (buffer) {
return buffer.at(0);
},
getInt8: function (buffer) {
return this.utoi(this.getUInt8(buffer), 8);
},
getUInt16LE: function (buffer) {
return 0xffff & ((buffer.at(1) << 8) | buffer.at(0));
},
getInt16LE: function (buffer) {
return this.utoi(this.getUInt16LE(buffer), 16);
},
getUInt24LE: function (buffer) {
return (
0x00ffffff & ((buffer.at(2) << 16) | (buffer.at(1) << 8) | buffer.at(0))
);
},
getInt24LE: function (buffer) {
return this.utoi(this.getUInt24LE(buffer), 24);
},
getBufValue: function (type, buffer) {
if (buffer.length < getByteSize(type)) return null;
let res = null;
if (type === uint8) res = this.getUInt8(buffer);
if (type === int8) res = this.getInt8(buffer);
if (type === uint16) res = this.getUInt16LE(buffer);
if (type === int16) res = this.getInt16LE(buffer);
if (type === uint24) res = this.getUInt24LE(buffer);
if (type === int24) res = this.getInt24LE(buffer);
return res;
},
unpack: function (buffer) {
//beacons might not provide BTH service data
if (typeof buffer !== "string" || buffer.length === 0) return null;
let result = {};
let _dib = buffer.at(0);
result["encryption"] = _dib & 0x1 ? true : false;
result["BTHome_version"] = _dib >> 5;
if (result["BTHome_version"] !== 2) return null;
//can not handle encrypted data
if (result["encryption"]) return result;
buffer = buffer.slice(1);
let _bth;
let _value;
while (buffer.length > 0) {
_bth = BTH[buffer.at(0)];
if (typeof _bth === "undefined") {
console.log("BTH: unknown type");
break;
}
buffer = buffer.slice(1);
_value = this.getBufValue(_bth.t, buffer);
if (_value === null) break;
if (typeof _bth.f !== "undefined") _value = _value * _bth.f;
result[_bth.n] = _value;
buffer = buffer.slice(getByteSize(_bth.t));
}
return result;
},
};
function callQueue() {
if(callsCounter < 6 - urlsPerCall) {
for(let i = 0; i < urlsPerCall && i < urlsQueue.length; i++) {
let url = urlsQueue.splice(0, 1)[0];
callsCounter++;
Shelly.call("HTTP.GET", {
url: url,
timeout: 5
},
function(_, error_code, _, data) {
if(error_code !== 0) {
console.log("Calling", data.url, "failed");
}
else {
console.log("Calling", data.url, "successed");
}
callsCounter--;
},
{ url: url }
);
}
}
//if there are more urls in the queue
if(urlsQueue.length > 0) {
Timer.set(
1000, //the delay
false,
function() {
callQueue();
}
);
}
}
let lastPacketId = 0x100;
function bleScanCallback(event, result) {
//exit if the call is not for a received result
if (event !== BLE.Scanner.SCAN_RESULT) {
return;
}
//exit if the data is not coming from a Shelly Blu button1 and if the mac address doesn't match
if ( typeof result.local_name === "undefined" ||
typeof result.addr === "undefined" ||
result.local_name.indexOf("SBBT") !== 0 ||
result.addr !== CONFIG.bluButtonAddress
) {
return;
}
let servData = result.service_data;
//exit if service data is null/device is encrypted
if(servData === null || typeof servData === "undefined" || typeof servData[BTHOME_SVC_ID_STR] === "undefined") {
console.log("Can't handle encrypted devices");
return;
}
let receivedData = BTHomeDecoder.unpack(servData[BTHOME_SVC_ID_STR]);
//exit if unpacked data is null or the device is encrypted
if(receivedData === null || typeof receivedData === "undefined" || receivedData["encryption"]) {
console.log("Can't handle encrypted devices");
return;
}
//exit if the event is duplicated
if (lastPacketId === receivedData.pid) {
return;
}
lastPacketId = receivedData["pid"];
//getting and execuing the action
let actionType = ["", "singlePush", "doublePush", "triplePush", "longPush"][receivedData["Button"]];
let actionUrls = CONFIG.actions[actionType];
//exit if the event doesn't exist in the config
if(typeof actionType === "undefined") {
console.log("Unknown event type in the config");
return;
}
//save all urls into the queue for the current event
for(let i in actionUrls) {
urlsQueue.push(actionUrls[i]);
}
callQueue();
}
function bleScan() {
//check whether the bluethooth is enabled
let bleConfig = Shelly.getComponentConfig("ble");
//exit if the bluetooth is not enabled
if(bleConfig.enable === false) {
console.log("BLE is not enabled");
return;
}
//start the scanner
let bleScanner = BLE.Scanner.Start({
duration_ms: BLE.Scanner.INFINITE_SCAN,
active: true
});
//exist if the scanner can not be started
if(bleScanner === false) {
console.log("Error when starting the BLE scanner");
return;
}
BLE.Scanner.Subscribe(bleScanCallback);
console.log("BLE is successfully started");
}
function init() {
//exit if there isn't a config
if(typeof CONFIG === "undefined") {
console.log("Can't read the config");
return;
}
//exit if there isn't a blu button address
if(typeof CONFIG.bluButtonAddress !== "string") {
console.log("Error with the Shelly BLU button1's address");
return;
}
//exit if there isn't action object
if(typeof CONFIG.actions === "undefined") {
console.log("Can't find the actions object in the config");
return;
}
//start the ble scan
bleScan();
}
//init the script
init();
Alles anzeigen
Ich habe es jetzt etwas modifiziert, MAC-Adresse frei erfunden, und nur den Singlepush übrig gelassen. Du müsstest die MAC-Adresse an deinen Button anpassen (wie oben mit Kleinbuchstaben).
Wenn der Shelly wirklich im Rollladenmodus betrieben wird, dann gelten andere http-requests, findest du aber auch hier im Forum. Scheint mir aber ein merkwürdiges Tor zu sein, oder hast du den Shelly am Motor des Tors angeklemmt? Das hatten wir vor ein paar Tagen schon mal, ist völlig falsch!
Das Script läuft auch mit der aktuellen Firmware.
Wichtig war es früher, dass im Shelly das Bluetooth - Gateway nicht aktiviert ist, ob das mit der aktuellen Firmware noch so ist, weiß ich nicht.
Welche Komponenten hast du denn genau? Ab Gen3 brauchst du kein Script mehr, wie schon geschrieben wurde. Du kannst den Shelly direkt als BLE-Observer einrichten und mit dem Button über Aktionen steuern.
Dafür braucht man kein Script. Ein AutoTimerOff mit 5s reicht.
Wäre bei mir schwieriger, habe offene Holztreppen. Als Verbindungsleitung würde ich mal nach 7-adriger Fahrzeugleitung suchen, ist relativ günstig, die Adern sind bunt, für den gemeinsamen Plus kannst du auch mehrere Leitungen parallel klemmen.
OT: Danke Thomas, da gibt es nichts zu verzeihen, ich freue mich, dass du es schon gezeichnet hast. Spart mir die Arbeit
. Da ich 12 Jahre jünger bin als du, muss ich noch etwas arbeiten, bis ich auch zum vielbeschäftigten Rentner werde
. Ich hoffe natürlich, dass die Gesundheit mitspielt und ich dann auch noch fit bin...
In diesem speziellen Fall hier (Lüfter soll 24/7 laufen) reicht auch ein Relais mit 2 Wechslern. Die beiden Wechsler werden so angeschlossen, wie der Stufenschalter, allerdings gibt es keine 0-Stellung. Dann würde ein Shelly mit einem Relais reichen...
Kann nachher was zeichnen, wenn gewünscht, gerade endet die Mittagspause
.