Ich habe noch keine BLU TRV und wenn ich im Forum dazu lese, warte ich damit auch noch eine Weile. Deren Firmware ist noch eine sehr unreife Banane.
Beiträge von Lapu-Lapu
-
-
ich vermute irgendwann nach einem Update
Hast Du die Bewegungsmelder Firmware auf 1.0.21 hochgezogen? Da gibt es Probleme:
ThemaShelly Blu DW, HT und Motion mit Firmware 1.0.21.0 dauer Event Single Button Pressed
Hallo,
habe leider die meisten meiner Blu Door, H&T und motion auf 1.0.21.0 geupdatet.
seit dem bekomme ich dauer events single Button Pressed, bei den Geräten mit 1.0.20.0 ist das nciht der fall.
Somit werden meine Batterien gerade leer gesaugt.
Kann man wieder ein Downgrade machen auf 1.0.20 ? Wo finde ich die Firmware 1.0.20.0 ? oder 1.0.16.0 ? Downgrade wird warscheinlich mit der Blu Debug app gehenPharaDOS15. Februar 2025 um 10:25 -
-
auf dem Gateway Stick kann man das Gateway leider nicht ausschalten
Das Teil hab ich nicht, aber es wäre logisch. Der Zweck ist ja die Gateway-Funktion.
Ich bin auch bei Firmware Upgrades mit Blick auf den BLE Scanner sehr "zurückhaltend". Darum:
https://shelly-api-docs.shelly.cloud/gen2/Scripts/S…blescannerstart
Das steht: "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."
Das klingt in meinen Ohren wie die Androhung, solchen Script-Modifikationen einen Riegel vorzuschieben. Also wieder "never change a running system".
-
-
Beitrag
RE: Workaround / (Fast)Lösung für das Beacon-Problem der BLU Gateways
In Zeile 25/26 wird das Scanner Window definiert. In Zeile 328 wird es angewendet. Mit den gewählten Werten 200/50 habe ich keine Probleme mit den Beacons und der Scanner läuft auch längere Zeit, ohne dass er sich aufhängt. Wichtig ist, dass die Gateway Funktion im Shelly nicht aktiviert ist, ansonsten kann das Script beim Start die Scanner Werte nicht setzen. Firmware auf dem Shelly ist die 1.4.2.
(Quelltext, 357 Zeilen)
Lapu-Lapu16. Februar 2025 um 09:47 -
In Zeile 25/26 wird das Scanner Window definiert. In Zeile 328 wird es angewendet. Mit den gewählten Werten 200/50 habe ich keine Probleme mit den Beacons und der Scanner läuft auch längere Zeit, ohne dass er sich aufhängt. Wichtig ist, dass die Gateway Funktion im Shelly nicht aktiviert ist, ansonsten kann das Script beim Start die Scanner Werte nicht setzen. Firmware auf dem Shelly ist die 1.4.2.
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:xx:xx:xx": "Name", , }, //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 = [ 'yy:yy:yy: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();
-
wegen dem firmware Bug von 1.0.20
welcher genau?
Fixed
- Delay device reboot if button is pressed (avoid accidentaly entering bootloader)
- Fix fw_id reported on boot
- DW: Increase battery measurement period and fix FW send counter initialisation
- Motion: Reset blue led flash counter on connection open
- Various fixes to work with shelly app flawlesly
- Fix encryption freeze by changing reboot function to use BURTC timer in EM4 mode
-
Das alles bestätigt mal wieder: neue Shelly Firmware NUR einsetzen, wenn es ein Problem löst, das akut weh tut. Ansonsten Changelogs lesen, Foren beobachten und vielleicht ein nicht benötigtes Gerät testweise upgraden (auf die Gefahr, dass es unbrauchbar wird). Downgrades mag der Hersteller nicht und rollt uns jeden erdenklichen Stein dazu in den Weg.
Shelly Firmware und Bananen reifen beim Kunden. Never change a running system. Bei Shelly kommt gern mal ein Fix mit zwei und mehr neuen Bugs. Das braucht keiner...
Bzgl. BLE Geräten - bei mir läuft immer noch die 1.0.16 und auf meinen Gateways das Blu_to_MQTT Script mit modifizierten Scanner Settings. Das funktioniert problemlos...
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 -
AppPilot Shelly Plus Uni werden leider noch nicht von der App erkannt. Wird es da eine Anpassung geben? Ich habe alle meine UNI G1 gegen neue Plus UNI ersetzt. Soweit sich die IP-Adressen dabei nicht verändert haben, sind sie sogar wieder sichtbar. Aber neue Plus UNI werden als unbekannte Shelly dargestellt.
-
-
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.