Beiträge von Lapu-Lapu
-
-
Ich hatte zu den Beacon Problemen immer noch ein Ticket beim Shelly Support offen. Heute kam eine Antwort...
Hallo Shelly Kunde,
Das von Ihnen gemeldete Problem wurde durch ein Firmware Update behoben. Bitte aktualisieren Sie Ihren Shelly Blu auf Firmware 1.0.20!
Wir werden den Fall nun abschließen.
Ihre Zufriedenheit ist uns sehr wichtig. Bitte nehmen Sie sich einen Moment Zeit, um unseren Support und die Shelly Produkte zu bewerten, wenn Sie die Umfrage nach Abschluss des Falls erhalten.
Sollten Sie weitere Unterstützung benötigen, zögern Sie nicht, uns zu kontaktieren!
Mit freundlichen Grüßen,
Shelly Support-TeamAbgesehen davon, dass es noch keine Release Notes zu diesem Update zu geben scheint, werde ich das erst einmal nicht auf meine BLU Geräte spielen. Es wäre nicht das erste Mal, dass Shelly eine Firmware verschlimmbessert und darauf habe ich keine Lust. Mein Workaround funktioniert ja soweit... und downgraden geht bei den BLU Geräten meines Wissens nicht.
Aber falls jemand Lust auf Abenteuer hat, nur zu... 😜
-
-
Sucht ihr nicht einfach nach Fehlern
Optimierung würde ich es nennen.
Da ich mich nicht gern mit Mittelmäßigkeit zufrieden gebe, neige ich dazu zu optimieren. Dabei gebe ich gern zu, dass das Pareto Prinzip oftmals besser ist, wenn man die Sache wirtschaftlich betrachtet. Aber Hobby ist ja genau deshalb schön, weil es sich nicht rentieren muss... zumindest bei mir.
-
Jetzt habe ich auf 120/40 gewechslt und das läuft jetzt schon eine Weile ganz ordentlich...
Ich lass es mal eine Weile so laufen und schau mal...
Seit 10h nahezu ohne Aussetzer. Sowohl die Beacons der BLU H&T als auch der BLU Motion werden erkannt.
dewaldo vielleicht magst Du das bei Dir mal verifizieren.
-
-
Ich hab jetzt doch mal einen BLU H&T und einen BLU Motion mit einem Shelly Plus Plug S als BLE Scanner Gateway an den Start gebracht. Mit Scanner Settings 200/50 hatte ich nach ca. 1h für 10 Minuten keine Beacons vom BLU Motion. Also versuche ich mal, das Intervall zu verkleinern. Jetzt habe ich auf 120/40 gewechslt und das läuft jetzt schon eine Weile ganz ordentlich. Das Scanner Fenster darf laut Shelly Spezifikation nicht mehr als 1/3 vom Intervall sein und 150/50 könnte ungünstig sein, wenn die Pulse mit genau 150ms Abstand gefeuert werden. Wenn es dumm läuft, hat der Scanner immer gerade das Ohr zu, wenn die Pulse kommen.
Ich lass es mal eine Weile so laufen und schau mal...
-
Nachdem dewaldo den Beacon Mode der anderen BLE Geräte aufgebracht hat, hab ich mal nachgemessen.
In der Tat gibt es einen kleinen Unterschied zwischen den BLU H&T auf der einen Seite und den BLU Motion bzw. BLU Button auf der anderen Seite. Die ca. 150ms zwischen den Pulsen hab ich in jedem Fall gemessen. Aber der BLU Motion sendet alle 30s 4 Pulse mit 150ms Abstand und der BLU Button alle 8s 4 Pulse mit 150ms Abstand. Beim BLU H&T sind es alle 60s 5 Pulse mit 150ms Abstand (6 Pulse hab ich nach einem Firmware Update nicht mehr gesehen), also alles jeweils mit der neusten Firmware.
Das spricht dafür, dass die Scanner Settings verschiedene Optima für diese Geräte haben.
Bei allen ist identisch, dass ein Trigger (Bewegung, Tastendruck) ca. 35..40 Pulse mit 20ms Abstand feuert und vom Scanner de facto nicht "überhört" werden kann.
Wer will, kann jetzt gern ein Optimum für den Beacon Mode dieser anderen beiden Geräte ausrechnen oder "MUPpen" (MUP = Methode unbekümmerten Probieren). Da ich beide nicht im Beacon Modus nutze, mag ich die Zeit dafür im Moment nicht aufbringen.
-
Bei meinen sind die Tasten grau...
-
Meine beiden TRV funktionieren ebenfalls ohne Zicken. Ich steuere sie per OpenHAB/Shelly Binding und schicke die gemessene Raumtemperatur per MQTT an die TRV.
Einzig die Tatsache, dass bei einem die Akkuspannung doppelt so schnell sinkt als bei dem anderen, macht mich stutzig. Die Möglichkeit, dass die Qualität der verwendeten Panasonic Lithium Ionen Zellen unterschiedlich ist, muss man eigentlich in Erwägung ziehen, wenn sich per Firmware scheinbar nichts stabilisieren lässt.
-
Was willst du wissen?
Ob es mit der 2.2.4 verschlimmbessert wurde?
Ich habe nur zwei im Einsatz. Der eine tut, was er soll und der Akku ist nach ca. 3 Monaten bei 60%, dann lade ich ihn. Der zweite ist direkt daneben und wird doppelt so schnell entladen.
Die Bedingungen (RSSI) sind identisch, sie hängen direkt nebeneinander an zwei Heizkörpern.
-
Gibt es Rückmeldungen zur 2.2.4 ?
Der letzte Eintrag hier ist schon ein paar Tage her...
-
Oder bin ich da geistig fehlgeleitet.
Nein, bist Du nicht. 😉 Ich hab mich zu Beginn auch enttäuscht aufgeregt darüber. Aber letztendlich muss ich akzeptieren, was ich nicht ändern kann. Dann wurde mein Ehrgeiz geweckt, eine mögliche Lösung zu finden und der ist noch nicht wieder eingeschlafen.
Zumindest bei mir ist das ganze Smarthome Gedöns vor allem Spielzeug für den Mann im fortgeschrittenen Alter und es wäre verdammt langweilig, wenn alles auf Anhieb funktioniert. Ja, die Grenze zur wütenden Verzweiflung ist nie weit weg. Aber wenn dann mal wieder was funktioniert, ist es auch schön. Meine Frau sagt: "Mach nur, dann bist Du weg von der Straße" 😜 Da ist was dran...
-
Hier wird nur etwa jedes 3. bis 4. Telegramm registriert.
Wenn das Timing der Beacon Signale beim BluMotion anders ist als beim Blu H&T, könnte das passieren. Man müsste mal versuchen zu sniffen, was da genau gesendet wird. Möglicherweise muss man das Gateway für BluMotion im Beacon Modus mit anderen Scanner Einstellungen starten, um ein optimales Ergebnis zu bekommen.
So, als ob das Gateway dann für eine kurze Zeit keine weiteren Geräte verarbeiten könnte.
Ich nutze unterschiedliche Gateways für Blu H&T (modifiziertes Scanner Timing) und andere BLU Shelly (BluMotion und BluButton ohne Beacon Mode) mit Default Scanner Timing. Da kollidiert scheinbar nichts. Allerdings empfangen ganz sicher alle Gateways alles, was da kommt aufgrund der geringen Entfernung untereinander. Ich filtere über die Blacklist des MQTT Scripts, damit jeweils nur eine MQTT Nachricht pro Blu Gerät erzeugt wird. Das funktioniert im Moment tadellos.
-
welche Werte sind seitens der Methode erlaubt ?
Shelly schreibt dazu in seinen Script Definitionen:
Scan options allow tuning for scan timings, but some restrictions apply:
- scan window cannot be longer than 1/3 of scan interval
- the maximum scan window is 50 ms, but 30 ms seems to be optimal
- duration must be at least 3 scan intervals long
If these conditions are not met scanning will not start. In the future, some of these options may not be tunable or the device may choose to modify them for performance and compatibility with other firmware features. It is best to use defaults.
In diesem Rahmen muss man also sein Optimum finden. Für die BLU H&T scheint 200/50 dieses zu sein. Bei mir laufen jetzt 9 Stück wie ein Uhrwerk an beliebigen Shelly als Gateway mit dem Script und liefern zuverlässig Daten per MQTT.
Im Abgesang lese ich zwischen den Zeilen "keine neue Firmware aufspielen, wenn es funktioniert", weil sie die Freiheit eventuell weiter einschränken. Dass man am besten die Standard Werte nutzt, ist aber schon mal widerlegt. Mit "default" sind die BLU H&T nicht nutzbar.
-
Wer kann mir hier helfen bzw. das Script anpassen?
Ich habe diese Buttons nicht im Einsatz bzw. gekauft und kann mir folglich nicht anschauen, was die senden. Der ursprüngliche Schöpfer des Scripts ist leider nicht mehr im Forum aktiv. Die Anpassung ist aber keine Raketenwissenschaft. Wenn Du Dir vom Gateway die Debug Logs anschaust, kriegst Du es möglicherweise selbst hin.
-
vom GW wird ein Neustart dafür gefordert.
Wenn man die GW Funktion aktiviert/deaktiviert, will der Shelly immer durchgestartet werden, weil diese Änderung nur dann ausgeführt wird. Nimm den GW Haken raus und klick nach dem Speichern auf Reboot. Danach kannst Du das Script starten und der BLE Scanner läuft mit den Script Settings. Setz das Script auf Auto Start, dann läuft es nach einem Reboot automatisch.
-
Das hier läuft bei mir...
Code
Alles anzeigen//========= Blu_to_MQTT v1.4 ======== //_Config_Blu_to_MQT_ var mqtt_Lite= false, //Send only one event/rpc Topic, true/false mqttID= "BLU", //MQTT Topic ID, (behind topic_Prefix), old default "shellyBLU" split= "-", //Split char, will be between different parts of your topic. topic_Prefix= "", //Here you can set your own mqtt Topic Prefix, defult is an empty String shelly_Adapter= false, //Send data "Shelly Adapter" friendly, true/false, srcBLE mac will adapt to mainTopic mqttID_with_DType= true, //Adds a device type to the MQTT topic ID, true/false custom_Names= { //Optional, set custom names for specific Blu Mac addresses "xx:xx:xx:yy:yy:yy": "Blu-Button", }, //No "/" or space allowed inside custom names!!! mqttQOS= 1, //MQTT QOS Setting, can be --> 0 - at most once, 1 - at least once, 2 - exactly once debug= false, //Show debug msg in log, true/false, setting this to 'true' will delay reaktion speed a lot! uFixer= true, //Automatically, try to fix a Shelly FW MQTT connection Bug, true/false get_All= false, //Get all data available and ship it, default false, should only be used when eco mode is off send_pid= true, //Send pid counter, useful to check for missing messages blacklist = [ //'xx:xx:xx:yy:yy:yy', ]; //List of Mac Adresses to be ignored //_Config_Blu_Events_ var battery_Fix= true, //Drop, 0% battery BTHome packages on Reboot Event, true/false interval_ms= 200, //Scan interval window_ms= 50, //Scan window activeScan= false; //Active or Passiv Bluetooth Scan, only used when BT Gateway false! var tH1= 0; //Global Timer function FixMQTT() { //Restart Shelly if MQTT connection is false for over 11 min. print('Debug: MQTT connection Status is _[', MQTT.isConnected(), ']_'); if(!MQTT.isConnected()){print('Debug: Trying to Fix MQTT Connection with Reboot'); Shelly.call('Shelly.Reboot');} } function SendMQTTmsg(obj){ try{ if(!obj || !obj.info || !obj.info.data || obj.info.data.gen !== 'GBLE') return; //Exit if useless data var ts= obj.info.ts, ev= obj.info.event; //Get stuff outside of data obj= obj.info.data; obj.ts= ts; obj.event= ev; ev= undefined; //Put obj back together if(MQTT.isConnected()){ //Create MainTopic and input ID var mainTopic= "", dID= 'Error_no_ID', edID= Str(obj.device_type_id)||Str(obj.window)||Str(obj.motion), ex= {}; if(mqttID.length > 0) mainTopic= mqttID+split; if(edID) dID= 'd'+ edID; if(Str(obj.button)) dID= Str(obj.button); if(Str(obj.humidity)) dID= 'd1'; //Clear uFixer Timer if(tH1) Timer.clear(tH1); tH1= 0; //Custom name logic var cNames= Object.keys(custom_Names), cName= undefined; if(cNames.length) cNames.forEach(function(mac){if(obj.mac === mac) cName= custom_Names[mac];}); cNames= null; //Clear usless data //Add stuff to MainTopic, Prefix, MQTTid, custom Name if(mqttID_with_DType && obj.device_type) mainTopic+= obj.device_type+split; cName ? mainTopic+= cName+'/': mainTopic+= obj.mac+'/'; if(topic_Prefix.length > 0) mainTopic= topic_Prefix+'/'+mainTopic; obj.gateway= info.id; //Get gateway id if(obj.firmware_version) obj.last_alive= new Date().toString(); //Get date if(debug) print('\nDebug: MQTT Publishing_Topic: ',mainTopic); //Shelly Adapter logic if(shelly_Adapter){ mainTopic= mainTopic.slice(0,mainTopic.length-1); MQTT.publish(shelly_Prefix+'/events/ble', Str( { scriptVersion: '0.1', src: shelly_Prefix, srcBle: {type: obj.device_type, mac: mainTopic}, payload: obj }), mqttQOS); if(debug) print('Debug: 1 MQTT message have been sent.'); return; } //MQTT lite logic if(mqtt_Lite){ MQTT.publish(mainTopic + 'events/rpc', Str(obj), mqttQOS); if(debug) print('Debug: 1 MQTT message have been sent.'); return; } if(get_All) ex= {e_id: dID, e_ts: obj.ts, e_ev: obj.event, e_g: obj.gen}; //Create some old eXtra var topicMap= { //Map of known MQTT Topics inputKey: 'status/input:'+dID, 'info/custom_Name': cName, 'info/battery': obj.battery, 'info/battery_string': obj.battery_string, 'info/rssi': obj.rssi, 'info/encryption': obj.encryption, 'info/interval': obj.interval, 'info/bthome_version': obj.bthome_version, 'info/lastTimeStamp': ex.e_ts, 'info/lastAktion': ex.e_ev, 'info/lastAktionID': ex.e_id, 'info/gen': ex.e_g, 'info/mac': obj.mac, 'info/device': obj.device_name, 'info/deviceType': obj.device_type, 'info/gateway': obj.gateway, 'info/last_alive': obj.last_alive, 'info/device_type_id': obj.device_type_id, 'info/firmware_version': obj.firmware_version, 'info/pid': obj.pid, 'info/new_BTH_HexID': obj.new_BTH_HexID, 'info/new_data': obj.new_Data, 'info/info': obj.info, 'info/extra_data': obj.extra_data, 'status/deviceState': obj.device_state, 'status/illuminance': obj.illuminance, 'status/temperature': obj.temperature, 'status/distance': obj.distance, 'status/humidity': obj.humidity, 'status/rotationLvl': obj.rotation,}; obj= undefined; //Clear useless Data //Send MQTT Msg/topics, publish all msgs var oldLength= Object.keys(topicMap).length; for(key of Object.keys(topicMap)){ if(topicMap[key] !== undefined){ if(key === 'inputKey'){ key= topicMap[key]; delete topicMap.inputKey; topicMap[key]= ts; ts= undefined; } if(debug) print('Debug: sending------>',key,'--->',topicMap[key]); let topic= mainTopic+key, value= ''+topicMap[key]; MQTT.publish(topic, value, mqttQOS); //MQTT.publish(mainTopic+key, Str(topicMap[key]), mqttQOS) delete topicMap[key]; //Delete useless Data } } if(debug) print('Debug:',oldLength-Object.keys(topicMap).length,'out of',oldLength,'possible MQTT topics have been sent.'); }else{ print('Error: MQTT is still not ready, cant send msg'); if (uFixer && !tH1) { print('Debug: Trying to Fix MQTT Connection Bug.'); tH1 = Timer.set(12 * 60 * 1000, false, FixMQTT); } } }catch(e){ErrorMsg(e,'SendMQTTmsg()');} } //========= Blu_Events v2.4 ========= let activeScan= false; //Active or Passiv Bluetooth Scan, only used when BT Gateway false! //notUsed-->let _cid = "0ba9"; //Allterco, Company ID(MFD) let devID1= "SBBT"; //Blu Button1, deviceID, --> SBBT-002C let devID2= "SBDW"; //Blu Door/Window, deviceID --> SBDW-002C let devID3= "SBMO"; //Blu Motion, deviceID, --> SBMO-003Z let devID4= "SBHT"; //Blu HT, deviceID, --> SBHT-003C let uuid= "fcd2"; //BTHome, Service ID --> UUID(16bit) let bluMap= {//Device Parameter, you can find the full BTH Device List at 'https://bthome.io/format' //bthObjectID:[Property,Datatype,Factor/Unit], '0xf0':['device_type_id','uint8','split2'], //All Blu Devices, special case [default --> uint16] '0xf1':['firmware_version','uint8','split4'], //All Blu Devices, special case [default--> uint32] '0xf2':['extra_data','uint8','split3'], //All Blu Devices, special case [default--> uint24] --> maybe FW version? '0x00':['pid','uint8'], //All Blu Devices '0x01':['battery','uint8','%'], //All Blu Devices '0x3a':['button','uint8'], //All Blu Devices '0x05':['illuminance','uint24',0.01], //Blu Motion & D/W '0x45':['temperature','sint16',0.1], //Blu Motion & H&T //notUsed-->'0x1a':['door','uint8'], //Blu D/W //notUsed-->'0x20':['moisture','uint8'], //Unknown '0x41':['distance','uint16',0.1], //BLU Sonic '0x2e':['humidity','uint8'], //BLU H&T '0x2d':['window','uint8'], //Blu D/W '0x3f':['rotation','int16',0.1], //Blu D/W '0x21':['motion','uint8'], //Blu Motion }; function CreateEvent(obj){ //Create Blu data and send Blu Events try{ //Somehow filter for device_type, with out local names obj.gen= 'GBLE'; obj.device_type= 'Unknown-Type'; if(typeof obj.button === 'number' && !obj.illuminance || obj.device_type_id === '2.1') obj.device_type= 'Button'; if(typeof obj.illuminance === 'number' && !obj.motion || obj.device_type_id === '2.2') obj.device_type= 'Door-Window'; if(typeof obj.motion === 'number' || obj.device_type_id === '2.5') obj.device_type= 'Motion'; if(typeof obj.humidity === 'number' || obj.device_type_id === '2.3') obj.device_type= 'HT'; //notUsed-->obj.device_type || obj.device_type_id ? obj.gen= 'GBLE': obj.device_type= 'Unknown-Type'; //Create device_states switch(obj.device_type){ case 'Button': obj.device_state= obj.input; break; case 'Door-Window': obj.window === 0 ? obj.device_state= obj.input||'closed': obj.device_state= obj.input||'open'; break; case 'Motion': obj.motion === 0 ? obj.device_state= obj.button_input||'no_motion': obj.device_state= obj.input||'motion_detected'; break; case 'HT': obj.device_state= obj.input; break; default: obj.device_state= 'unknown_state'; } if(obj.input) delete obj.input; if(obj.firmware_version){ obj.device_state= 'alive'; if(battery_Fix && obj.battery === 0) delete obj.battery; //Workaround a Blu FW_Update Battery Bug if(battery_Fix && get_All && obj.battery_string) delete obj.battery_string; //Workaround a Blu FW_Update Battery Bug } if(debug) print('\nDebug: Blu_data:\n',obj); Shelly.emitEvent(''+obj.device_state, obj); //Sending Event if(debug) print('Debug: sending Event __[',obj.device_state,']__'); }catch(e){ErrorMsg(e,'SendEvent()',debug);} } function CheckInput(bI){ //Check for Blu Button Events try{ if(typeof bI !== 'number') return null; let buttonMap= ['wake_up', 'single_push', 'double_push', 'triple_push', 'long_push', 'pairing_push', 'default_reset_push']; if(bI > 6 && bI !== 254) bI= 'unknown_push'; if(bI < 7) bI= buttonMap[bI]; if(bI === 254) bI= 'hold_push'; return bI; }catch(e){ErrorMsg(e,'CheckInput()',debug);} } function DeviceName(name){ //Check for locale Device Name try{ if(!name) return 'Hidden-Device'; if(Cut(name,devID1)) return 'Blu-Button1'; if(Cut(name,devID2)) return 'Blu-Door-Window'; if(Cut(name,devID3)) return 'Blu-Motion'; if(Cut(name,devID4)) return 'Blu-HT'; return 'Unknown-Device--> '+ name; }catch(e){ErrorMsg(e,'DeviceName()',debug);} } function Unpack(d,m,r,l){ //Create BTHome obj and Unpack BTHome data try{ //Setup declaring variabel and functions if(typeof d !== "string" || d.length < 3) return null; var obj= {mac: m, rssi: r, device_name: DeviceName(l)}, spC= 0, tmp= []; //Add extra data function Int_To_uInt(int, bytes){ let mask= 1 << (bytes - 1); if(int & mask) return int-(1 << bytes); return int; } //Unpack Info BTHome Byte byte= d.at(0); //Getting first Byte as dezimal if(byte & 0x01) obj.encryption= true; //Getting encryption; if(obj.encryption) throw new Error('BThome Service Data encripted, encription is not supported!'); if(get_All){ obj.bthome_version= byte >> 5; //Getting BTHome Version (byte & 0x02) ? obj.interval= 'irregular': obj.interval= 'regular'; //Get transmission interval if(obj.bthome_version !== 2) throw new Error('Wrong BThome Version: found v.'+obj.bthome_version+' only v.2 supported!'); }else{delete obj.encryption; if(obj.device_name === "Hidden-Device") delete obj.device_name;} //Reduce data d= d.slice(1); //Delete useless Info byte //Unpack BThome Values for(let value of d){ //Search for matching BTHome hex ID if(d.length < 1) break; if(!spC) byte= btoh(d[0]); //Getting BTHome object ID let bluData= bluMap['0x'+byte]; //Getting blu Data if(bluData === undefined){ //Debug handling print('Error: Unknown BThome Data--> HexID: 0x',byte,', you can add more id from the full objID list--> https://bthome.io/format'); obj.new_BTH_HexID= byte; obj.new_Data= btoa(d); obj.info= 'Please send the newBTH_HexID and newData to this script developer so that they can integrate it.'; break; } if(!spC) d= d.slice(1); //Delete usless bth ID byte // Merge value bytes let max= Number(Cut(bluData[1],'int','int'))/8; //Getting max Bytes out of dataType if(d.length < max) throw new Error('Wrong DataType, '+d.length+' Bytes, payload to big for DataType: '+bluData[1]+' max->'+max); if(max === 1) value= d.at(0); else if(max === 2) value= (d.at(1) << 8) | d.at(0); else if(max === 3) value= (d.at(2) << 16) | (d.at(1) << 8) | d.at(0); //notUsed-->else if(max === 4) value= (d.at(3) << 24) | (d.at(2) << 16) | (d.at(1) << 8) | d.at(0); d= d.slice(max); //Delete useless value Bytes if(!Cut(bluData[1],'u','u')) value= Int_To_uInt(value,max*8); //Convert int to uint if(value === undefined) break; //Exit value loop //Adding String/Unit to value let is_Str= typeof bluData[2] === 'string'; if (typeof bluData[2] === 'number') value= value*bluData[2]; //Adding factor if(is_Str && !spC && Cut(bluData[2],'split')) spC= Number(Cut(bluData[2],'split','split'))+1; //Get split counter if(spC){ tmp.push(value); //Saving value for special case spC--; //reduce split counter }else{ obj[bluData[0]]= value; //Saving value } if(is_Str && !spC && get_All) value= ''+value+bluData[2]; //Adding unit if(is_Str && !spC && get_All) obj[bluData[0]+'_string']= value; //Saving String Value if(spC === 1){ value= []; for(let i in tmp){ value[(tmp.length-1)-i]= tmp[i]; //Reverse Array } tmp= []; //Clear useless data obj[bluData[0]]= value.join('.'); //Join FW version into String spC= 0; //Exit special case } } return obj; }catch(e){ErrorMsg(e,'Unpack()',debug);} } function includes(arr, value) { for (let i = 0; i < arr.length; i++) { if (arr[i] === value) return true; } return false; } var old_pid= [-1,-1,-1,-1], old_mac= [-1,-1,-1,-1], iX= 0; function ScanCB(e,r) { //BT Scan Loop try{ if(e !== 2 || !r) return; //Exit if empty scan if(!r.service_data || !r.service_data[uuid]) return; //Exit if not BTHome data let obj= Unpack(r.service_data[uuid],r.addr,r.rssi,r.local_name); //Create BTHome Obj & Unpack BTHome Data if (includes(blacklist, obj.mac)) return; // Ignorieren, wenn Adresse in der Blacklist enthalten ist if(!obj) throw new Error('Failed to unpack service_data --> _[ '+btoa(r.service_data[uuid])+' ]_'); //Anti Double msg Logic if((obj.pid === old_pid[0] && obj.mac === old_mac[0])||(obj.pid === old_pid[1] && obj.mac === old_mac[1])|| (obj.pid === old_pid[2] && obj.mac === old_mac[2])||(obj.pid === old_pid[3] && obj.mac === old_mac[3]) ) return;//Exit if double msg if(debug) print('Debug: Anti Double, saved Data:',iX,'\n',old_pid,'\n',old_mac); if(iX >= old_pid.length) iX= 0; old_pid[iX]= obj.pid; old_mac[iX]= obj.mac; iX++ //increas counter; if(!get_All && obj.pid && !send_pid) delete obj.pid; //reduce data if(debug){ //Debug output r.service_data[uuid]= btoa(r.service_data[uuid]); r.advData= btoa(r.advData); print('\nDebug: BT_data:\n',r,'\nDebug: BTHome_data:\n', obj);} r= undefined, e= undefined; //Delete useless data obj.input= CheckInput(obj.button); if(!obj.input) delete obj.input; //Delete useless data CreateEvent(obj); //Creating Event out of bthObj }catch(e){ErrorMsg(e,'ScanCB()',debug);} } var shelly_Prefix= 0; function Main(){ //Main syncron Script Code BLE.Scanner.Start({duration_ms: -1, active: activeScan, interval_ms: interval_ms, window_ms: window_ms}, ScanCB); //Sub to passiv BT Scanner, start a new scan if no scanner is runnning BLE.Scanner.isRunning() ? print('Status: BLE.Scanner is scanning in Background.'): print('Status: BLE.Scanner cannot be initiated, check your Bluetooth settings!'); shelly_Prefix= Shelly.getComponentConfig("Mqtt").topic_prefix Shelly.addEventHandler(SendMQTTmsg); //Create Event Loop } //Toolbox v1.0(Cut), a universal Toolbox for Shelly scripts function Str(d){ //Upgrade JSON.stringify try{ if(d === null || d === undefined) return null; if(typeof d === 'string')return d; return JSON.stringify(d);}catch(e){ErrorMsg(e,'Str()');}} function Cut(f,k,o,i){ //Upgrade slice f=fullData, k=key-> where to cut, o=offset->offset behind key, i=invertCut try{ let s= f.indexOf(k); if(s === -1) return null; if(o) s= s+o.length || s+o; if(i) return f.slice(0,s); return f.slice(s);}catch(e){ErrorMsg(e,'Cut()');}} function Setup(){ //Wating 2sek, to avoid a Shelly FW Bug try{ if(Main && !tH9){tH9= Timer.set(2000,0,function(){print('\nStatus: started Script _[', scriptN,']_'); if(callLimit > 4){callLimit= 4;} try{Main();}catch(e){ErrorMsg(e,'Main()'); tH9= 0; Setup();}});}}catch(e){ErrorMsg(e,'Setup()');}} function ErrorMsg(e,s,deBug){ //Toolbox formatted Error Msg try{ let i=0; if(Cut(e.message, '-104: Timed out')) i= 'wrong URL or device may be offline'; if(Cut(e.message, 'calls in progress')) i= 'reduce _[ callLimit ]_ by 1 and try again, its a global variabel at the end of the toolbox'; if(s === 'Main()' || deBug) i= e.stack; if(Cut(e.message, '"Main" is not')) i= 'define a Main() function before using Setup()'; print('Error:',s || "",'---> ',e.type,e.message); if(i) print('Info: maybe -->',i);}catch(e){print('Error: ErrorMsg() --->',JSON.stringify(e));}} var tH8= 0, tH9= 0, aC= 0, cCache= [], nCall= [], callLimit= 4, cacheLimit= 40, cSp= 0.1; //Toolbox global variable var Status= Shelly.getComponentStatus, Config= Shelly.getComponentConfig; //Renamed native function var info= Shelly.getDeviceInfo(), scriptID= Shelly.getCurrentScriptId(), scriptN= Config('script',scriptID).name; //Pseudo const, variabel //Toolbox v1.0(cut), Shelly FW >1.0.8 Setup();
-
Ich habe es heute getestet und kann bei mir keine Verbesserung feststellen.
Hast Du den Haken für die Gateway Funktion in den Bluetooth Settings entfernt? Die Einstellungen des Scanners per Script funktioniert nur dann. Eine Aktivierung der Gateway Funktion überschreibt die Script Settings. Ist mir beim Testen immer wieder passiert...
-
Ich habe da was hingebogen...
ThemaWorkaround / (Fast)Lösung für das Beacon-Problem der BLU Gateways
Über das US-Forum zu Shelly bin ich auf eine interessante Idee gestoßen, die einen echt brauchbaren Workaround zu bieten scheint, um die BLU Beacon Geräte zuverlässig an BLU Gateways der verschiedenen Shelly zu binden.
Dort hat jemand ermittelt, dass echte BLU Events (Tastendrücken, Fenster Auf/Zu, Motion Detection etc.) einen Schwarm von 40 BT Signalen im Intervall von 20-40 Millisekunden erzeugen. Dagegen: Regelmäßige Beacons der BLU H&T oder anderer Geräte mit aktivem Beacon Mode erzeugen…Lapu-Lapu13. Oktober 2024 um 16:15