[{"data":1,"prerenderedAt":351},["ShallowReactive",2],{"project-37862317":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":44,"post_text":45,"what":46,"said":86,"maker_in_thread":201,"shape":210,"grid":214,"attempts":313,"same_week":314,"maker_shows":203,"maker_hidden":343,"reader_version":344,"card":345},"37862317","OpenBLE","OpenBLE, Swagger for Bluetooth","title","Show HN: OpenBLE, Swagger for Bluetooth","https:\u002F\u002Fdemo.openble.org","demo.openble.org","shardulaeer",1697140425,2023,122,43,519,3109,17,"notable","dev_tools","api specification and code generator","web_app",[24,25,26,27,28],"bluetooth low energy","gatt","web bluetooth","api specification","code generator","debated",-0.083,{"positive":32,"neutral":33,"mixed":34,"critical":35},6,8,0,9,23,{"privacy":38,"idea":41,"design":43},{"positive":39,"critical":40},1,5,{"positive":42,"critical":42},3,{"positive":39,"critical":39},[39,34,34,40,39,42,42,39,39,34,34,34,40,39,34,34,40,34,34,34,34,34,34,34,40,42,34,39,34,39,42,34,42,39,40,39,40,42,42,42],"OpenBLE is an API specification language and client generator for Bluetooth services built on the generic attribute (GATT) profile.\n\nBluetooth development is a mess. Too many datasheets, too little documentation and SDK fragmentation across platforms. I built this tool to improve documentation, version control and development speed for BLE programs.\n\nEven though shunned by Apple and Mozilla, Web Bluetooth enjoys wide support and just works. It makes sense to build the frontend for OpenBLE using web Bluetooth. No SDK hell, no installations, wide support albeit experimental. I could ship the spe",{"problem":47,"audience":53,"pricing":61,"motivation":62,"time_to_build":61,"stack":66,"openness":84,"stage":85,"team_size":84},{"value":48,"source":49,"evidence":50},"Bluetooth development suffers from scattered datasheets, poor documentation, and SDK fragmentation across platforms","maker",[51],{"id":52},"post",{"value":54,"source":55,"evidence":56},"Bluetooth Low Energy developers","inferred",[57,58],{"id":52},{"id":59,"by":11,"text":60},"37934667","> But once you have defined and tested your GATTs, it hasn’t been my experience to come back to it a ton of times. > It was my experience to care more about distance, speed,…",null,{"value":63,"source":49,"evidence":64},"Improve documentation, version control and development speed for BLE programs",[65],{"id":52},[67,71,78],{"value":68,"source":49,"evidence":69},"JavaScript",[70],{"id":52},{"value":72,"source":49,"evidence":73},"Web Bluetooth",[74,75],{"id":52},{"id":76,"by":11,"text":77},"37934526","Hey, thanks for checking out my project. So the spec is independent of Web Bluetooth; like Swagger is to Swagger UI. I considered electron but it needs installation and wouldn't…",{"value":79,"source":49,"evidence":80},"YAML",[81],{"id":82,"by":11,"text":83},"37934613","I started with TOML but switched to YAML because people are familiar with OpenAPI. Ultimately everything is parsed to a Javascript object so you can have adapters in your…","unknown","beta",{"praise":87,"objections":111,"requests":144,"questions":167,"alternatives":185},[88,100],{"value":89,"source":90,"evidence":91},"Commenters like the idea of a standard GATT profile definition format","commenter",[92,96],{"id":93,"by":94,"text":95},"37936060","snydersaurus","Great stuff - and it seems you and I are a kindred spirit. For the past few years I've been building iOS and Android BLE apps\u002FSDKs using my own GATT YML spec, and using that to…",{"id":97,"by":98,"text":99},"37891866","foooorsyth","I mean, defining the service in some sort of universal definition format is clearly the way to go. Working with BLE across platforms is incredibly terse and error-prone. The…",{"value":101,"source":90,"evidence":102},"Web Bluetooth is a sane way to access BLE devices",[103,107],{"id":104,"by":105,"text":106},"37891659","IshKebab","I use Nordic's app nRF Connect for this - last I used it it was fantastic. Nice to have alternative options though. I agree WebBluetooth is easily the sanest way to access BLE…",{"id":108,"by":109,"text":110},"37894839","teruakohatu","> Web Bluetooth's usefulness is dubious, It is very useful, I use it often. I can't think what security exploits there could be given that the user has to select the device and…",[112,126,137],{"value":113,"source":90,"evidence":114},"Web Bluetooth exposes security risks in browsers",[115,119,123],{"id":116,"by":117,"text":118},"37893454","ryukoposting","As another commenter mentioned, it's common practice to shove all your device's functionality into one characteristic to reduce service discovery time (and, in some cases, memory…",{"id":120,"by":121,"text":122},"37892705","crote","Unfortunately it also opens up the door for so many new exploits. A lot of hardware has very minimal protection against attacks, because the general idea is that anyone able to…",{"id":124,"by":121,"text":125},"37892745","Security. A lot of hardware devices pretty much implicitly trust the device on the other side of the data connection, because historically anyone able to run software on a…",{"value":127,"source":90,"evidence":128},"Single-characteristic designs make per-characteristic specs less relevant",[129,133],{"id":130,"by":131,"text":132},"37893125","seanalltogether","I don't know about other people, but I've worked for 2 companies now that don't use numerous GATT characteristics to handle numerous operations. They use 1 characteristic with a…",{"id":134,"by":135,"text":136},"37893261","jtrueb","I am of the opinion that a community-backed, portable library of encoders\u002Fdecoders for a single L2CAP stream or notified characteristic would be far more useful than numerous…",{"value":138,"source":90,"evidence":139},"YAML spec format is disliked",[140],{"id":141,"by":142,"text":143},"37891787","orphea","> Features > 1. Define your GATT services in YAML. Uh, nope, thank you.",[145,149,153,160],{"value":146,"source":90,"evidence":147},"Generate code for Zephyr, Android and iOS",[148],{"id":116,"by":117,"text":118},{"value":150,"source":90,"evidence":151},"Describe byte structure of characteristic values",[152],{"id":116,"by":117,"text":118},{"value":154,"source":90,"evidence":155},"Support for HID over GATT profiles",[156],{"id":157,"by":158,"text":159},"37892490","westurner","Is there a HID over GATT YAML? From https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=37522059 : > https:\u002F\u002Fgithub.com\u002FDJm00n\u002FControllersInfo: HID profiles for Xbox 360, Xbox One, PS4, PS5,…",{"value":161,"source":90,"evidence":162},"Peripheral mode and Security Level 3 in Web Bluetooth",[163],{"id":164,"by":165,"text":166},"37896236","jtwaleson","Cool! I have an interesting project but it’s still waiting for Security Level 3 support in Web Bluetooth. Also Peripheral mode would be nice.",[168,178],{"value":169,"source":90,"evidence":170},"Is Web Bluetooth limited to Chrome and unsupported on iPhone?",[171,175],{"id":172,"by":173,"text":174},"37893004","greggsy","Seems to be unsupported on any iPhone browsers - I’m assuming it’s WebKit constraint?",{"id":176,"by":117,"text":177},"37893272","The only mainstream browser that supports Web Bluetooth is Chrome. Maybe Apple told Google \"no, don't implement that.\" There are good reasons for that. Web Bluetooth's usefulness…",{"value":179,"source":90,"evidence":180},"Can a Mac emulate a BLE device like a heart rate monitor?",[181],{"id":182,"by":183,"text":184},"37892083","andy_ppp","One thing I’ve wanted to do for end to end testing purposes is to be able to make pretend Bluetooth devices from my Mac. I’ve not seen much to suggest a simple way to do this,…",[186,190,197],{"value":187,"source":90,"evidence":188},"nRF Connect",[189],{"id":104,"by":105,"text":106},{"value":191,"source":90,"evidence":192},"LightBlue",[193],{"id":194,"by":195,"text":196},"37892477","skibz","My tool of choice for this is LightBlue. It's not fully cross platform, unfortunately, but it works great on Apple devices. (https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Flightblue\u002Fid557428110)…",{"value":198,"source":90,"evidence":199},"bleno and noble",[200],{"id":194,"by":195,"text":196},{"comments":202,"answered":203,"key":204},4,2,[205,206,207],{"id":76,"text":77},{"id":59,"text":60},{"id":208,"text":209},"37934577","Not yet but cool idea. Lot of profiles are reused, so it makes sense to write a yaml repository for common profiles.",{"commenters":211,"max_depth":202,"maker_replies":202,"first_comment_mins":212,"lifespan_hours":213},29,4134,281,[215,217,221,223,226,230,234,238,241,242,245,248,250,254,255,258,261,262,265,268,271,274,275,277,280,281,282,283,284,286,288,289,290,293,295,296,298,301,303,307,310,312],[116,34,39,216,117,34],"project\u002Fcritical\u002Fprivacy",[218,34,34,219,220,34],"37894473","commenter\u002Fneutral\u002Fprivacy","OJFord",[76,34,34,222,11,39],"maker\u002Fneutral\u002Fdesign",[224,34,40,225,117,34],"37998224","project\u002Fpositive\u002Fnone",[227,39,39,228,229,34],"37891290","project\u002Fcritical\u002Fidea","SV_BubbleTime",[231,39,42,232,233,34],"37891525","project\u002Fneutral\u002Fnone","candiddevmike",[235,39,42,236,237,34],"37891879","project\u002Fneutral\u002Fprivacy","johnny22",[239,39,39,216,240,34],"37892762","jwells89",[124,39,39,216,121,34],[243,39,34,219,244,34],"37893220","CamperBob2",[246,39,34,247,229,34],"37893804","commenter\u002Fneutral\u002Fnone",[59,39,34,249,11,39],"project\u002Fneutral\u002Fidea",[251,203,40,252,253,34],"37891788","project\u002Fpositive\u002Fidea","bryancoxwell",[120,203,39,216,121,34],[256,203,34,219,257,34],"37894189","buildfocus",[259,203,34,219,260,34],"37902563","madacol",[104,42,40,252,105,34],[263,42,34,264,98,34],"37891841","other\u002Fneutral\u002Fnone",[266,42,34,267,237,34],"37891857","other\u002Fneutral\u002Fdocs",[269,42,34,270,105,34],"37891970","commenter\u002Fneutral\u002Fdocs",[272,42,34,264,273,34],"37892149","zh3",[182,202,34,264,183,34],[276,202,34,264,273,34],"37892122",[278,202,34,264,279,34],"37892269","OkGoDoIt",[194,202,34,264,195,34],[93,40,40,252,94,34],[157,32,42,249,158,34],[208,32,34,232,11,39],[130,285,39,228,131,34],7,[287,285,34,247,117,34],"37893230",[134,285,39,228,135,34],[164,33,42,232,165,34],[291,35,34,219,292,34],"37895583","modeless",[172,294,42,232,173,34],10,[176,294,39,216,117,34],[108,294,40,297,109,34],"project\u002Fpositive\u002Fprivacy",[141,299,39,300,142,34],11,"project\u002Fcritical\u002Fdesign",[97,299,40,302,98,34],"project\u002Fpositive\u002Fdesign",[304,299,42,305,306,34],"37891875","project\u002Fneutral\u002Fdesign","ForkMeOnTinder",[308,299,42,305,309,34],"37892031","andyfleming",[311,299,42,305,158,34],"37908280",[82,299,34,305,11,39],[],[315,320,325,329,334,339],{"id":316,"name":317,"points":318,"category":319},"37857765","Diceright",395,"games",{"id":321,"name":322,"points":323,"category":324},"37881771","yt-siphon",333,"productivity",{"id":326,"name":327,"points":328,"category":324},"37914672","Floutwork",206,{"id":330,"name":331,"points":332,"category":333},"37888606","Italian Poetry",187,"languages",{"id":335,"name":336,"points":337,"category":338},"37914425","Riffusion",186,"ai",{"id":340,"name":341,"points":342,"category":20},"37854844","Nostalgist.js",124,false,"v2",{"id":346,"name":5,"line":6,"ai":343,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":347,"top":18,"kw":348,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":349,"url":9,"mix":350,"praise":89,"objection":113,"sub":21},37862317,-0.08,[24,25,26,27,28],"1005133110005100500000005301013031515333",[32,33,34,35],1793991076111]