Nur zur Ergänzung, es funktioniert auch mit der aktuellen Firmware im Accesspoint-Modus des Shelly, soeben ausprobiert...
Beiträge von horkatz
-
-
Code
Alles anzeigen/** * 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: "xx:xx:xx:xx:xx:xx", //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=toggle" ], doublePush: [ //urls that will be executed at doublePush event from the blu button1 "http://192.168.2.66/relay/0?turn=toggle" ], triplePush: [ //urls that will be executed at triplePush event from the blu button1 "http://192.168.2.47/relay/0?turn=on" ], 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();Hier noch schnell das Script aus meinem Shelly mit verfremdeter MAC des Blu...
-
auf die Shellys kann ich immer mit “Username:Password@IP…“ steuern.
Mit Homematic kenne ich mich nicht aus, aber, soweit ich weiß, lassen sich die GEN2 Geräte generell nicht mit dieser Syntax aufrufen. Mein letzter Kenntnisstand ist, dass an der Authentifzierung gearbeitet wird, aber erschlagt mich nicht, wenn das nicht stimmt...
Letztlich tut das aber nichts zur Sache, du willst den Shelly ja außerhalb des WLAN mit seinem AP betreiben. Dort solltest du auf jeden Fall ein Passwort vergeben, sonst kann jeder, der die SSID des Shelly sieht, sich verbinden und ihn steuern.
Wie ich aber gestern schon schrieb, mein Shelly lässt sich auch mit gesetztem Passwort über den BluButton im AP Modus schalten. Vielleicht probiere ich es später nochmal aus, ich habe ja seit gestern die neuste Firmware drauf, ich gehe aber davon aus, dass es nach wie vor funktionieren wird. Muss aber jetzt mal weg...
-
OK, die habe ich auch. Die Versuche über den Accesspoint habe ich aber noch mit der Vorgängerversion 20230308-091529/0.14.1-g22a4cb7 gemacht. Danach habe ich den Shelly wieder in meinem WLAN angemeldet und das Update gemacht (das aktuelle Updates für die GEN2 Geräte kommt so nach und nach, nicht bei allen Geräten gleichzeitig). Nach dem Update habe ich die Funktion des Scripts erneut getestet, allerdings nur im WLAN des Hauses. Funktioniert aber nach wie vor einwandfrei.
Womit hast du denn das Script in den Shelly kopiert? Ich habe gerade mein Mobiltelefon über VPN verbunden, mein Bildschirm sieht etwas anders aus, ich habe keine Leerzeilen nach jeder Anweisung. Evtl. stimmt mit deinem Script was nicht...
Bisher hat es auch noch nicht in deinem WLAN funktioniert, oder?
Meine Pause ist jetzt vorbei, kann später zu Hause noch mal schauen, da habe ich das Script auch gespeichert, bzw. ich kann es aus dem Shelly kopieren...Auf dem Firmenlaptop kann ich kein privates VPN nutzen...
-
Ebenfalls einen Plus1. Welche Firmware hat dein Shelly?
-
Ja.
Bist du sicher, dass das Script bei dir läuft? Ist der Schalter rechts aktiviert, so dass das Script nach dem Booten wieder startet?
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Kannst du den Shelly über seine IP aufrufen, dann
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. anklicken, anschließend das Script öffnen. Im oberen Teil des Bildschirms siehst du jetzt das Script, unten erscheint die Console. Tut sich dort etwas, wenn du den BluButton betätigst? Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Evtl. auch mal das Häkchen setzen bei "FULL LOG" -
Kleiner Nachtrag, habe es bei mir ausprobiert und den Shelly mit dem BluButton auschließlich über den Accesspointmodus angesprochen (aus dem WLAN abgemeldet), es funktioniert, auch mit AP-Passwort. Natürlich schaltet er dann nur sein eigenes Relais, die anderen Actions funktionieren dann nicht mehr.
-
Hast du Bluetooth im Shelly aktiviert und den Shelly danach neu gestartet?
Wurde das Script gestartet?
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. -
Hallo AndrewLukas,
zunächst ein paar Fragen: Du schreibst, die Garage hat kein Internet. Gibt es denn dort einen Router, oder wie kommt der Shelly an die Adresse "192.168.171.157"?
Wenn die Adresse stimmen sollte, da du ja den Shelly schalten willst, wo das Script läuft, musst du die URL durch folgende ersetzen "http://127.0.0.1/relay/0?turn=toggle".
Noch besser ist der Befehl "...?turn=on", du musst dann nur im Shelly einen Timer einstellen, Auto off nach z.B. einer Sekunde.
Wenn du keinen Router vor Ort hast, dann bleibt dir nur der Accesspointmodus des Shelly, diesen solltest du aber mit einem Passwort absichern!
Ob das dann mit dem Script und Bluetooth funktioniert, weiß ich nicht, habe ich noch nie ausprobiert. Das kannst du aber dann vorab auch zu Hause testen, wenn du den Shelly nicht in dein WLAN einbindest und nur den AP nutzt.
Du hast bei allen 3 Aktionen den gleichen Befehl stehen, wenn du nur eine nutzen willst, dann kannst du die anderen beiden auch weglassen.
-
Auf dem unscharfen Bild, welches bald "crystal clear" sein wird, sieht es so aus, als wäre das (schon lange angekündigte) Display ebenfalls dabei. Ich bin gespannt

-
-
Die Stromwandler werden auf einer Wickelmaschine hergestellt, die nicht jedes Teil mit der gleichen Anzahl Windungen bestückt
Das sehe ich etwas anders, die Anzahl der Wicklungen lässt sich (bei automatisierter Fertigung) ganz exakt einhalten. Wenn es aber dort tatsächlich Abweichungen geben sollte, dann bewirkt eine Windung mehr oder weniger einen Unterschied von 1/3 Promille (bei 3000 Windungen), das fällt kaum ins Gewicht.
Entscheidender sind meiner Meinung nach die Punkte a bis c.
thgoebel: Du hast doch schon mal ausführliche Messungen mit Fremdwandlern gemacht. Hast du zufällig auch mal getestet, wie sich die Ergebnisse ändern, wenn du verschiedene Originalwandler am jeweils gleichen Kanal des Shelly betreibst? Ergeben sich wirklich messbare Unterschiede? Ich kann es mir nicht vorstellen...
-
Hallo Krauskopp,
bist du dir sicher, dass der Shelly ab Werk auf die Wandler kalibriert wurde? Ich kann es mir nicht vorstellen, denn bei den Wandlern handelt es sich doch nicht um Hallsensoren, sondern um Spulen, diese lassen sich doch ohne Toleranzen fertigen. Die Anpassungen sind meiner Meinung nach nötig, um die Fertigungstoleranzen bei den Bauteilen des Shelly auszugleichen...
-
Noch ein kleiner Nachtrag zu meinem letzten Post, das 2. Netzwerk (Gemeindehaus) verfügt nicht über eine öffentliche IP, mit der Cloud funktioniert es trotzdem. VPN wäre auch möglich, weil meine private Fritzbox eine öffentliche IP hat...
-
Ich habe Shellys in unterschiedlichen Häusern / Wohnungen. WLAN ist in jeder Wohnung unterschiedlich.
Das ist kein Problem, ich nutze auch Shellys in einem komplett anderen Netzwerk/Gebäude, sie sind in der App steuerbar...
Da es nur 2 Shellys sind, habe ich sie in einen eigenen "Raum" verfrachtet... -
Hallo ostfriese,
gestern habe ich die bestellten Teile aus China bekommen. Heute mal kurz getestet. Reichweite im freien Feld etwa 200m, ohne dass ich etwas modifiziert habe, habe lediglich die Empfängerantenne etwas auseinandergezogen (war zu einer kleinen Spule gewickelt).
Im Anhang ein paar Fotos der Komponenten, ich habe den Sender mal aufgeschraubt. Die Platine ist recht klein und sollte in den Griff der Fahne passen. Versorgt wird mit einer CR2016 Lithium Batterie (3V, könnte daher auch mit 2 Stück 1,5V Batterien betrieben werden.
Meiner Meinung nach müsste die Reichweite für einen Fußballplatz ausreichen, man kann aber sicher noch optimieren, indem man z.B. dem Sender einen zusätzlichen Draht als Antenne verpasst und/oder die Empfängerantenne im richtigen Verhältnis verlängert. Welche Längen passen findet man z.B. hier: Rechner für Antennenlänge
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. -
Hallo Crazy,
Ich programmiere zwar nichts mit Blockly, für mich sieht es aber so aus, dass du die unteren Bedingungen mit "und" verknüpfen musst. Dann sollte es funktionieren.
-
-
Die Schalter selbst sind sicher in Ordnung, wenn ich die Drähte an S1 und S2 tausche funktioniert eben dann der andere....
Was genau passiert nach dem Tauschen? Funktioniert es dann mit dem jeweils anderen Taster, aber die Richtung des Rolladens bleibt, oder fährt der Rolladen dann ausschließlich nur in die andere Richtung?
-
It would still be nice to know if there is a way to change the default IP address of the AP?
I don't think it's possible, I have never heard of this...
Using Bluetooth for your purposes: Not possible.
Hide the SSID from the shelly AP: Not possible.
So what are your options:If you equip each room with a pair of Shellys, then you will then have a lot of similar SSIDs, maintaining the devices is very cumbersome because you have to connect to each network individually, central administration is not possible. Your guests will see many of these SSIDs when searching for WiFi networks.
In my opinion, the better option is to set up a separate WIFI just for the Shellys, you can hide its SSID and you should protect it with a strong password.Then you can manage all Shellys from a central location.
If you give them names like "Room123", then you can reach them from inside of the special network by typing the following in your browser's address bar:
"http://Room123".