[{"data":1,"prerenderedAt":281},["ShallowReactive",2],{"i-lucide:menu":3,"i-lucide:arrow-up-right":8,"i-lucide:moon":10,"i-lucide:sun":12,"i-lucide:rss":14,"i-simple-icons:github":16,"i-simple-icons:linkedin":18,"post-\u002F2017\u002Fsnarky-doorbell":21,"surround-\u002F2017\u002Fsnarky-doorbell":268,"i-lucide:arrow-left":277,"i-lucide:arrow-right":279},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16\"\u002F>\u003Ccircle cx=\"5\" cy=\"19\" r=\"1\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":17},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19,"hidden":20},"\u003Cpath fill=\"currentColor\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z\"\u002F>",true,{"id":22,"title":23,"body":24,"category":255,"comments":256,"date":257,"description":30,"excerpt":256,"extension":258,"image":259,"meta":260,"navigation":20,"path":261,"readingTime":262,"seo":263,"stem":264,"subtitle":265,"tags":256,"wordCount":266,"__hash__":267},"posts\u002F2017\u002Fsnarky-doorbell.md","Snarky Doorbell",{"type":25,"value":26,"toc":244},"minimark",[27,31,34,41,46,49,53,56,65,69,78,81,108,112,131,135,143,157,168,171,175,199,203,206],[28,29,30],"p",{},"Snarky Doorbell is a custom-built smart IoT office doorbell.",[28,32,33],{},"Instead of the usual monotonic \"ding-dong\", it has personality: when the doorbell is rung, it responds\nwith a snarky voice comment in the style of \"Ooo, this must be the pizza we ordered!\" or\n\"The developer who gets up and opens the door is immune from the next team meeting invite!\"\nor \"Another victim arrives....muahahahaha!\".",[28,35,36],{},[37,38],"img",{"alt":39,"src":40},"Snarky doorbell","\u002Fcontent\u002F2017\u002Fsnarky\u002Fmugshot.jpg",[42,43,45],"h2",{"id":44},"how-it-operates","How it Operates",[28,47,48],{},"The doorbell is installed to the office space and \"listens\" to the already existing wireless doorbell ring button\nwe have behind the door. When a visitor rings the doorbell, first the \"regular\" doorbell rings and a second later,\nthe Snarky Doorbell enhances that ring with a snarky voice comment.",[42,50,52],{"id":51},"background","Background",[28,54,55],{},"I used to sit very close to the office's outer door. As we had no secretary, it was often me, who answered the door.\nI was annoyed by the repeating \"ding-dong\" ringtone and was motivated to do something about it: what if the doorbell\ncould speak, and express its feelings? What if I built my own doorbell, that was snarky?",[28,57,58,59,64],{},"I had ",[60,61,63],"a",{"href":62},"\u002F2015\u002Foffice-prank-building-a-secondary-remote-to-a-wireless-doorbell","previously messed around with our wireless doorbell"," and thought it would be a quick and easy project. Boy, was I wrong - it took over two years to complete it, with various technical challenges.",[42,66,68],{"id":67},"the-build","The Build",[70,71],"iframe",{"style":72,"width":73,"height":74,"src":75,"frameBorder":76,"allow":77,"allowFullScreen":20},"width: 100%",700,600,"https:\u002F\u002Fwww.youtube-nocookie.com\u002Fembed\u002Fut_KckcVxW0?rel=0","0","autoplay; encrypted-media",[28,79,80],{},"The build process took over two years of intermittent tinkering.",[28,82,83,87,90,93,96,99,102,105],{},[37,84],{"alt":85,"src":86},"Build photo","\u002Fcontent\u002F2017\u002Fsnarky\u002F1.jpg",[37,88],{"alt":85,"src":89},"\u002Fcontent\u002F2017\u002Fsnarky\u002F2.jpg",[37,91],{"alt":85,"src":92},"\u002Fcontent\u002F2017\u002Fsnarky\u002F3.jpg",[37,94],{"alt":85,"src":95},"\u002Fcontent\u002F2017\u002Fsnarky\u002F4.jpg",[37,97],{"alt":85,"src":98},"\u002Fcontent\u002F2017\u002Fsnarky\u002F5.jpg",[37,100],{"alt":85,"src":101},"\u002Fcontent\u002F2017\u002Fsnarky\u002F6.jpg",[37,103],{"alt":85,"src":104},"\u002Fcontent\u002F2017\u002Fsnarky\u002F7.jpg",[37,106],{"alt":85,"src":107},"\u002Fcontent\u002F2017\u002Fsnarky\u002F8.jpg",[42,109,111],{"id":110},"features","Features",[113,114,115,119,122,125,128],"ul",{},[116,117,118],"li",{},"Several custom voice personals (\"Easily excitable manager\", \"Old lady\")",[116,120,121],{},"Settings (voice, language, volume) can be changed via knobs on the front panel",[116,123,124],{},"Built-in WiFi HTTP RESTful API server (statistics on doorbell rings)",[116,126,127],{},"Open source project plans",[116,129,130],{},"Non-intrusive integration with the existing doorbell system (uses the same doorbell button)",[42,132,134],{"id":133},"architecture","Architecture",[28,136,137,138,142],{},"Our wireless doorbell is a pretty standard one - when the ring button is pressed, it sends a ASK-encoded signal over ",[139,140,141],"code",{},"433MHz","\nradio frequency to the doorbell unit, which listens to it and rings.",[28,144,145,146,149,150,152,153,156],{},"Snarky Doorbell is, in essence, another signal receiver. In the doorbell, there is an ",[139,147,148],{},"Atmega328"," chip with a ",[139,151,141],{}," receiver,\nthat constantly listens for incoming signals. When a signal from the doorbell remote is detected, the module\noutputs a ",[139,154,155],{},"HIGH"," signal, that is then sent to a Raspberry Pi pin.",[28,158,159,160,163,164,167],{},"The Pi activates and plays a pre-recorded, randomly picked ",[139,161,162],{},".wav"," file as the ringtone through a connected ",[139,165,166],{},"3.5mm"," speaker.",[28,169,170],{},"The doorbell is enclosed in a wooden enclosure. Front panel has three rotary encoders for controlling doorbell\nvolume, current voice persona and settings.",[42,172,174],{"id":173},"links","Links",[113,176,177,185,192],{},[116,178,179],{},[60,180,184],{"href":181,"rel":182},"https:\u002F\u002Fgithub.com\u002Fanroots\u002Fsnarky-doorbell",[183],"nofollow","Source code and build files",[116,186,187],{},[60,188,191],{"href":189,"rel":190},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ut_KckcVxW0&t=1s",[183],"Build video on YouTube",[116,193,194],{},[60,195,198],{"href":196,"rel":197},"https:\u002F\u002Fgithub.com\u002Fanroots\u002Fsnarky-doorbell\u002Ftree\u002Fmaster\u002Fwav\u002Fvoices\u002Fenglish",[183],"Listen to doorbell ringtones",[42,200,202],{"id":201},"credits","Credits",[28,204,205],{},"The following awesome people gave the doorbell their voice:",[113,207,208,211,214,217,220,223,226,229,232,235,238,241],{},[116,209,210],{},"Julian Linke",[116,212,213],{},"Maarit Cimolonskas",[116,215,216],{},"Harles Paesüld",[116,218,219],{},"Tormi Tuuling",[116,221,222],{},"Kaupo Toom",[116,224,225],{},"Ken Kanarik",[116,227,228],{},"Nele Sergejeva",[116,230,231],{},"Ando Roots",[116,233,234],{},"Maria Liiger",[116,236,237],{},"Rauno Meronen",[116,239,240],{},"Tanel Sirp",[116,242,243],{},"Toivo Värbu",{"title":245,"searchDepth":246,"depth":246,"links":247},"",2,[248,249,250,251,252,253,254],{"id":44,"depth":246,"text":45},{"id":51,"depth":246,"text":52},{"id":67,"depth":246,"text":68},{"id":110,"depth":246,"text":111},{"id":133,"depth":246,"text":134},{"id":173,"depth":246,"text":174},{"id":201,"depth":246,"text":202},"Hardware",null,"2017-11-19","md","\u002Fcontent\u002F2017\u002Fsnarky\u002Fcover-img.jpg",{},"\u002F2017\u002Fsnarky-doorbell","about 2 minutes",{"title":23,"description":30},"2017\u002Fsnarky-doorbell","I built a smart IoT doorbell for the office. Instead of \"ding-dong\", the doorbell expresses his snarky feelings with words.",504,"yfWt2J6tEngLlT1ck9W5qgzwRy82xFgaIgY6KYWvuPI",[269,273],{"title":270,"path":271,"stem":272,"children":-1},"DockerCon 17","\u002F2017\u002Fdockercon-17","2017\u002Fdockercon-17",{"title":274,"path":275,"stem":276,"children":-1},"Repurposing an Old Phone: Personal HUD Screen","\u002F2017\u002Fscreen","2017\u002Fscreen",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":278},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":280},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",1790886931402]