<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Hi! I'm Akash!]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://murthy.dev/</link><image><url>https://murthy.dev/favicon.png</url><title>Hi! I&apos;m Akash!</title><link>https://murthy.dev/</link></image><generator>Ghost 5.26</generator><lastBuildDate>Fri, 05 Jun 2026 17:23:53 GMT</lastBuildDate><atom:link href="https://murthy.dev/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[HomeLab v2: Decentralised Data Warehousing]]></title><description><![CDATA[Building a decentralised data warehousing and compute infrastructure.]]></description><link>https://murthy.dev/homelab-v2-decentralised-data-warehouse/</link><guid isPermaLink="false">64a79ec2c0ce7b00010c237c</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Akash Murthy]]></dc:creator><pubDate>Fri, 07 Jul 2023 12:26:17 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1587293852726-70cdb56c2866?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fFdhcmVob3VzZXxlbnwwfHx8fDE2ODg3MTU2Njl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1587293852726-70cdb56c2866?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fFdhcmVob3VzZXxlbnwwfHx8fDE2ODg3MTU2Njl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="HomeLab v2: Decentralised Data Warehousing"><p>With my foray into HomeLab setups, it was time to evolve. This meant shifting my focus towards three concepts; Sustainability, Reliability and Scalability. Shoutout to my mentor @sukanto.sahoo!</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://murthy.dev/building-a-homelab-v1-0/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Building a HomeLab v1.0</div><div class="kg-bookmark-description">Upgrading my current homelab setup after learning a tat bit of widely used industry standards.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://murthy.dev/favicon.ico" alt="HomeLab v2: Decentralised Data Warehousing"><span class="kg-bookmark-author">Hi! I&apos;m Akash!</span><span class="kg-bookmark-publisher">Akash Murthy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1521542464131-cb30f7398bc6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGhvbWVsYWJ8ZW58MHx8fHwxNjYxMTEyMjM1&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="HomeLab v2: Decentralised Data Warehousing"></div></a></figure><p>To achieve reliability, a multi region infrastructure deployment is required. These networks contain nodes spread across physical locations that would be connected via VPN. This would allow seamless failover in case of any disaster. Load balancing the IPs will be taken care of by the DNS provider. On the DNS layer, we can define rules to enable traffic routing to the nearest region. This should help minimise latency in theory.</p><p>Keeping data consistency is another challenge that is yet to be solved. After closing studying CAP theorem, I hope the solution I&apos;ve put down further below works towards my goals. &#xA0;</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe style="border-radius: 12px" width="100%" height="152" title="Spotify Embed: Clarity" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/track/60wwxj6Dd9NJlirf84wr2c?si=ae7v5buLSoi1YhturX3M6Q&amp;utm_source=oembed&amp;utm_medium=sms&amp;nd=1&amp;_branch_match_id=1205797490028908446&amp;_branch_referrer=H4sIAAAAAAAAA8soKSkottLXLy7IL8lMq9TLyczL1q8yzksKLUvySnVKAgCvgfSYIAAAAA%3D%3D"></iframe><figcaption>Ignorance is blis... Get it?</figcaption></figure><p>Its like building a datacenter that&apos;s spread across multiple homes. In this case its between a few trusted friends. Will refer to homes as sites going forward!</p><p>Part of having a reliable system involves it being scalable in nature. Nothing screams scalablility like kubernetes. Having a flavour of kubernetes with a hyper converged infrastructure (HCI) solution is paramount. VMware has a great setup but requires some capital to get going. Going open source was the only viable option at this point in time. This leaves me with openSUSE. Harvester is one such solution that works well and covers most of my needs.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2023/07/8DF77863-7D02-42A8-9526-057B0446AE91_1_201_a.jpeg" class="kg-image" alt="HomeLab v2: Decentralised Data Warehousing" loading="lazy" width="2000" height="1230" srcset="https://murthy.dev/content/images/size/w600/2023/07/8DF77863-7D02-42A8-9526-057B0446AE91_1_201_a.jpeg 600w, https://murthy.dev/content/images/size/w1000/2023/07/8DF77863-7D02-42A8-9526-057B0446AE91_1_201_a.jpeg 1000w, https://murthy.dev/content/images/size/w1600/2023/07/8DF77863-7D02-42A8-9526-057B0446AE91_1_201_a.jpeg 1600w, https://murthy.dev/content/images/2023/07/8DF77863-7D02-42A8-9526-057B0446AE91_1_201_a.jpeg 2388w" sizes="(min-width: 720px) 720px"><figcaption>Physical Locations</figcaption></figure><p>Harvester is a cloud native HCI platform that is built on open source technologies, including Kubernetes, Longhorn, and KubeVirt. It is designed to help operators put together their virtual machine workloads with their Kubernetes workloads, making it easier to manage and deploy applications.</p><p>Kubernetes is fairly straight forward, nothing new. Its been around for a while. Its basically an open-source container orchestration system that automates deployment, scaling, and management of containerized applications. It is a portable, extensible, and scalable platform that can be used to deploy applications on a variety of infrastructure, including bare metal, virtual machines, and cloud platforms.</p><p>Longhorn is a distributed storage system that is designed to be highly available and scalable. It achieves this by replicating data across multiple nodes in a cluster. This means that if one node fails, the data is still available on the other nodes.</p><p>Longhorn fits into the CAP theorem by choosing to prioritize availability and partition tolerance over consistency. This means that Longhorn is always available, even if some of the nodes in the cluster fail. However, it is possible that some writes may be lost if a node fails before the data is replicated to another node.</p><p>KubeVirt is an open-source project that enables the management of virtual machines (VMs) on Kubernetes. It does this by extending the Kubernetes API to support VMs as first-class citizens. This means that you can create, manage, and deploy VMs using the same tools and concepts that you use for containers.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/07/architecture-6e8723efeab0d976b53f60c563e3e843-2.svg" width="943" height="486" loading="lazy" alt="HomeLab v2: Decentralised Data Warehousing"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/07/how-longhorn-works-1.svg" width="1366" height="820" loading="lazy" alt="HomeLab v2: Decentralised Data Warehousing"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/07/architecture-simple-1.png" width="2000" height="875" loading="lazy" alt="HomeLab v2: Decentralised Data Warehousing" srcset="https://murthy.dev/content/images/size/w600/2023/07/architecture-simple-1.png 600w, https://murthy.dev/content/images/size/w1000/2023/07/architecture-simple-1.png 1000w, https://murthy.dev/content/images/size/w1600/2023/07/architecture-simple-1.png 1600w, https://murthy.dev/content/images/size/w2400/2023/07/architecture-simple-1.png 2400w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Overview of Harvester, Longhorn and KubeVirt.</figcaption></figure><p>Apart from having fault tolerance in each site on a system level with RAID, data redundancy will exist across sites to aid disaster recovery. </p><p>To sustain the use of compute, I will be turning to be solar power plant. Part of its output will be used to run systems with my network rack.</p><p>The plan is have spare systems sitting in three homes connected via VPN. These systems would remain in sync and run workloads like our websites, cloud storage and home automation systems. </p><p>This is an exciting time to be in the tech industry, can&apos;t wait to see how this goes. Will update this space with time!</p><p><strong><strong>Update (</strong>19<strong> July 2023):</strong></strong></p><p>Obtained public IPs for each site. Parallely, exploring ZeroTier as a Peer-to-Peer VPN solution to enable connectivity between networks. This will be an alternative to routing traffic through the public IPs obatined (L2TP with IPsec or OpenVPN). &#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2023/07/Screenshot-2023-07-19-at-5.56.21-PM.png" class="kg-image" alt="HomeLab v2: Decentralised Data Warehousing" loading="lazy" width="1410" height="310" srcset="https://murthy.dev/content/images/size/w600/2023/07/Screenshot-2023-07-19-at-5.56.21-PM.png 600w, https://murthy.dev/content/images/size/w1000/2023/07/Screenshot-2023-07-19-at-5.56.21-PM.png 1000w, https://murthy.dev/content/images/2023/07/Screenshot-2023-07-19-at-5.56.21-PM.png 1410w" sizes="(min-width: 720px) 720px"><figcaption>Similar setup, but will use K8s nodes as devices.</figcaption></figure><p>I was able to ping a system in another physical location using ZeroTier, will need to setup K8s nodes that talk to each and share the workload over this VPN. In the background, the packets are routed via UDP punch hole over the internet. </p><p><strong><strong>Update (</strong>6<strong> </strong>Aug<strong> 2023):</strong></strong></p><p>With more research and testing, we decided to use a VPN server over our Static IPs and make use of HasiCorp&apos;s suite of software. Starting with Nomad. We are still evaluating its use over OpenSUSE&apos;s stack.</p><p><strong>Final Upd<strong>a</strong>te (11 Jan 2024):</strong></p><p>We now have stable infrastructure with disaster recovery standards. Considering this project to be production ready, we have onboarded failover services for clients and have been testing its reliability with workloads. </p><p>The potential for generating revenue with the added benefit of support seems very feasible. We are actively engaging with clients to try new and exciting ideas! </p>]]></content:encoded></item><item><title><![CDATA[Preserve Your Memories]]></title><description><![CDATA[My Journey on Digitising VHS and Other Analog Formats!]]></description><link>https://murthy.dev/saving-analog-content/</link><guid isPermaLink="false">6412b45fb9daff0001f9622b</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Akash Murthy]]></dc:creator><pubDate>Sun, 11 Jun 2023 05:55:35 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1644365978525-fd5aa085f885?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI5fHxhbmFsb2clMjB0YXBlfGVufDB8fHx8MTY3OTIzMTAyOA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1644365978525-fd5aa085f885?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDI5fHxhbmFsb2clMjB0YXBlfGVufDB8fHx8MTY3OTIzMTAyOA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Preserve Your Memories"><p>It was after the pandemic hit, that one fine day I decided to go through all the boxes my parents had stashed in the attic. And it&apos;s just crazy how stacks of tapes, negatives were neatly sealed and kept after all these years. Hats off to my parent for storing them well, but no matter how hard you try, they inevitably degrade with time. </p><p>I wanted to make sure that nothing was left behind, which is why I started by taking inventory of the formats at hand. This helped me narrow down the hardware required to rip the data and digitise it. Once digitised, there&apos;s a lot that can be done to patch or upscale it. I was keen on making a remix!</p><!--kg-card-begin: html--><blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/CD8oh0ehz42/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/p/CD8oh0ehz42/?utm_source=ig_embed&amp;utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewbox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"/></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/CD8oh0ehz42/?utm_source=ig_embed&amp;utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Akash Murthy (@akash_murthy)</a></p></div></blockquote> <script async src="//www.instagram.com/embed.js"></script><!--kg-card-end: html--><p>I hope you find this useful. If you have any questions or comments, feel free to contact me!</p><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe style="border-radius: 12px" width="100%" height="152" title="Spotify Embed: Comfortably Numb" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/track/5HNCy40Ni5BZJFw1TKzRsC?utm_source=oembed"></iframe><figcaption>Another time appropriate track!</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2023/03/ai_gen-image.jpg)" data-kg-background-image="https://murthy.dev/content/images/2023/03/ai_gen-image.jpg"><h2 class="kg-header-card-header" id="taking-inventory">Taking Inventory</h2><h3 class="kg-header-card-subheader" id="or-lose-track">or lose track!</h3></div><p>Here&apos;s what I found in neatly sealed cardboard boxes:</p><ul><li>VHS Tapes</li><li>Film Negatives</li><li>Hi8 - HandyCam Tapes</li><li>CDs</li></ul><p>Unlike images which are mostly static in nature (duh!), videos in the pre digital era had different formats. Its important to note that every region had its own standard for video. Standards like NTSC, PAL, and SECAM sound like they are cross compatible, but are worlds apart! My parents bought the camera and tapes from north america, and settled back here in India. Interlaced videos are alright, just got to deinterlace in post processing to remove the line-like movement on the screen. Modern TVs handle automatically switch between the formats to playback the content decently if not perfect.</p><p>Fornutanely, my parents saved the actual HandyCam that took the videos and it still works! It even holds charge and was able to playback the Hi8 tapes, it uses them to store the video and audio data. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/05/37EB2650-941C-43A1-819C-8086FD04452E_1_102_o.jpeg" width="480" height="852" loading="lazy" alt="Preserve Your Memories"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/05/51D61024-3709-4D52-B347-086F99C29CA6_1_102_o.jpeg" width="480" height="852" loading="lazy" alt="Preserve Your Memories"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/05/13E265B8-2F21-4C72-A193-E723293EA6D4.jpeg" width="1080" height="1920" loading="lazy" alt="Preserve Your Memories" srcset="https://murthy.dev/content/images/size/w600/2023/05/13E265B8-2F21-4C72-A193-E723293EA6D4.jpeg 600w, https://murthy.dev/content/images/size/w1000/2023/05/13E265B8-2F21-4C72-A193-E723293EA6D4.jpeg 1000w, https://murthy.dev/content/images/2023/05/13E265B8-2F21-4C72-A193-E723293EA6D4.jpeg 1080w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/05/44D207F5-F445-441A-986A-B231E7F4DD65_1_102_o.jpeg" width="720" height="1280" loading="lazy" alt="Preserve Your Memories" srcset="https://murthy.dev/content/images/size/w600/2023/05/44D207F5-F445-441A-986A-B231E7F4DD65_1_102_o.jpeg 600w, https://murthy.dev/content/images/2023/05/44D207F5-F445-441A-986A-B231E7F4DD65_1_102_o.jpeg 720w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>The Process...</figcaption></figure><p>Although it was an NTSC based system, I had a good idea on how I would record it. Initially, I bought an RCA capture card. The plan was to drop the tape into the HandyCam, hit play and record the playback from the RCA out. This worked in theory, but in reality, there was an unacceptable level of noise in the video and audio. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/05/image.png" width="1398" height="1128" loading="lazy" alt="Preserve Your Memories" srcset="https://murthy.dev/content/images/size/w600/2023/05/image.png 600w, https://murthy.dev/content/images/size/w1000/2023/05/image.png 1000w, https://murthy.dev/content/images/2023/05/image.png 1398w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/05/image-1.png" width="800" height="800" loading="lazy" alt="Preserve Your Memories" srcset="https://murthy.dev/content/images/size/w600/2023/05/image-1.png 600w, https://murthy.dev/content/images/2023/05/image-1.png 800w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Capture Cards</figcaption></figure><p>The idea of using my home theatre&apos;s receiver hit me. The RCA out of the HandyCam would be fed into the receiver as input, which had an HDMI output to a television. It was time to get an HDMI capture card. This produced a clean output, free of noise. The only problem was it took the 4:3 aspect SD video out from the HandyCam and produced a 16:9 wide aspect HD video, which meant I had to fix it in post. No biggie!</p><p>VHS Players are hard to come by, especially NTSC players in a PAL country. Most photography houses treasure them to provide it out as a service. Turns out my good friend and neighbour, Abhishek had a VHS player that could play both NTSC and PAL with a flip of a switch. So rare, but hooray!</p><p>Applied the same principal as with the HandyCam.</p><p>Analog Player (RCA out) =&gt; Receiver (HDMI Out) =&gt; Capture card.</p><p>All I had to do now was let the tapes play from start to finish, while the capture card with OBS studio on my computer would record it completely. OBS is an amazing open source software that allows you to do alot with the respect to video and audio streams. </p><p>For the CDs, I just used VLC player to rip them to MP4 files. </p><p>Now the last challeging piece was converting negatives. I wanted high resolution grabs though. So I used a cardboard box to create my own backlight. This cardboard backlight had a cutout lined with wax paper, that acted as a diffuser. For the light source I used an LED bulb.</p><p>That turned out it be a crude solution, it worked but I wanted better. So, I invested in a scanner to scan all the negatives and then use DxO Photolab (I prefer that over Adobe Photoshop).</p><p>Inverting the colours provided my digitised photos! </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2023/05/254E0123-AB7F-460E-856C-BC6C307C0FDE.jpeg" class="kg-image" alt="Preserve Your Memories" loading="lazy" width="1080" height="1920" srcset="https://murthy.dev/content/images/size/w600/2023/05/254E0123-AB7F-460E-856C-BC6C307C0FDE.jpeg 600w, https://murthy.dev/content/images/size/w1000/2023/05/254E0123-AB7F-460E-856C-BC6C307C0FDE.jpeg 1000w, https://murthy.dev/content/images/2023/05/254E0123-AB7F-460E-856C-BC6C307C0FDE.jpeg 1080w" sizes="(min-width: 720px) 720px"><figcaption>Invert a negative, you have the positive!</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2023/06/kaleidico-3V8xo5Gbusk-unsplash.jpg)" data-kg-background-image="https://murthy.dev/content/images/2023/06/kaleidico-3V8xo5Gbusk-unsplash.jpg"><h2 class="kg-header-card-header" id="basic-formula">Basic Formula</h2><h3 class="kg-header-card-subheader" id="apply-it-anywhere">Apply it anywhere!</h3></div><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2023/06/Screenshot-2023-06-11-at-11.42.11-AM.png" class="kg-image" alt="Preserve Your Memories" loading="lazy" width="2000" height="1223" srcset="https://murthy.dev/content/images/size/w600/2023/06/Screenshot-2023-06-11-at-11.42.11-AM.png 600w, https://murthy.dev/content/images/size/w1000/2023/06/Screenshot-2023-06-11-at-11.42.11-AM.png 1000w, https://murthy.dev/content/images/size/w1600/2023/06/Screenshot-2023-06-11-at-11.42.11-AM.png 1600w, https://murthy.dev/content/images/2023/06/Screenshot-2023-06-11-at-11.42.11-AM.png 2012w" sizes="(min-width: 720px) 720px"><figcaption>Flowchart for conversion.</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Open-Source Contribution]]></title><description><![CDATA[Here's a post dedicated to all collaborators, it's what helps us grow together.]]></description><link>https://murthy.dev/open-source-contribution/</link><guid isPermaLink="false">63590f44e4da6200011563d4</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Akash Murthy]]></dc:creator><pubDate>Sun, 08 Jan 2023 10:56:15 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1555949963-aa79dcee981c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fG9wZW4lMjBzb3VyY2V8ZW58MHx8fHwxNjY2NzgxMDA2&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1555949963-aa79dcee981c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fG9wZW4lMjBzb3VyY2V8ZW58MHx8fHwxNjY2NzgxMDA2&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Open-Source Contribution"><p>Lifting code off of GitHub is great, gets the job done but when you take something, it&apos;s only fair to give back! Here&apos;s a post dedicated to all collaborators, it&apos;s what helps us grow together.</p><p>Github doesn&apos;t need any introduction, it is a version control software that is publicly available to use. Most of my personal repositries are stored here, both public and private. There is an enterprise version known as Gitlab for larger companies to use. Similarly, another platform primarily used for data warehousing is Kaggle. Kaggle is great if you ever want to donate datasets. This would help others analyze and research your data. </p><p>There are many licenses available to protect what you put online, and this is updated frequently. </p><p>Recently, I started working on a couple of home improvement projects. One project I really liked and wanted to give back to was, a fingerprint scanner repository. This was my first time contributing publicly, I&apos;ve taken care of countless merge requests for enterprises, but you got to start somewhere. </p><p>So, I opened an issue, forked the repository and got back to my IDE. Pushed my commits into said forked repo and raised a pull request. </p><p>If all this sounds complicated, it really isn&apos;t. Every year, there&apos;s a month-long celebration of open-source projects, their maintainers, and the entire community of contributors known as the hacktoberfest. Although my college pushed us to make contribution every October, I for one wasn&apos;t fond of staying back after hours. Here I am spreading the word much later!</p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2023/01/halloween.jpeg)" data-kg-background-image="https://murthy.dev/content/images/2023/01/halloween.jpeg"><h2 class="kg-header-card-header" id="hacktoberfest">Hacktoberfest</h2><h3 class="kg-header-card-subheader" id="it-doesnt-have-to-be-halloween-to-contribute">It doesn&apos;t have to be halloween to contribute!</h3></div><p>Collaborating with a community of open-source contributors, following guidelines and navigating around hot head and what not! </p><p>You&apos;ll always remember your first...</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/EverythingSmartHome/fingerprint-mqtt/pull/20"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Issue #18: R503 FPS LED WDT ESP32 by unseemlycoder &#xB7; Pull Request #20 &#xB7; EverythingSmartHome/fingerprint-mqtt</div><div class="kg-bookmark-description">Inclusion of R503 fingerprint sensor and its led to indicate sensor state. Watchdog for device lockup specifically for ESP32xx Family of microcontrollers.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Open-Source Contribution"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">EverythingSmartHome</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/f737cf82c370e7cff12425b9979c0727e462404d117bfed652368c0268b6e0ff/EverythingSmartHome/fingerprint-mqtt/pull/20" alt="Open-Source Contribution"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.kaggle.com/datasets/unseemlycoder/smart-energy-meters-in-bangalore-india"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Smart Energy Meters in Bangalore India</div><div class="kg-bookmark-description">Detect appliances in use within households!</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.kaggle.com/static/images/favicon.ico" alt="Open-Source Contribution"><span class="kg-bookmark-author">Kaggle</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://storage.googleapis.com/kaggle-datasets-images/2783676/4807352/15fc093adfd0411d72f8f91a268eb800/dataset-card.jpg?t=2023-01-08-13-06-55" alt="Open-Source Contribution"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Home Security]]></title><description><![CDATA[Putting together a system for home surveillance and security.]]></description><link>https://murthy.dev/home-security/</link><guid isPermaLink="false">635907e1e4da6200011563b2</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Akash Murthy]]></dc:creator><pubDate>Sun, 27 Nov 2022 11:36:39 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1523946460406-614d8a4ea8d8?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDl8fGhvbWUlMjBzZWN1cml0eXxlbnwwfHx8fDE2NjY3ODAxMTI&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1523946460406-614d8a4ea8d8?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDl8fGhvbWUlMjBzZWN1cml0eXxlbnwwfHx8fDE2NjY3ODAxMTI&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Home Security"><p>I love working on DIY projects. Just like other posts on this site, here&apos;s one dealing with home security. I&apos;m mostly talking about a door lock and video surveillance. I do have a security system, but this post isn&apos;t about that!</p><p>For the last 6 years, I was using an optical fingerprint scanner and Bluetooth as a fallback to unlock my door. This was one of those nice to have comforts, I did not have to carry my keys and could walk out knowing there was a r&#x336;e&#x336;l&#x336;i&#x336;a&#x336;b&#x336;l&#x336;e&#x336; &#xA0;system in place. That was until last week, where it decided to go <em>poof. </em>It had its flaws but now was the time to replace it with an over engineered system. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/10/IMG_3481.jpg" class="kg-image" alt="Home Security" loading="lazy" width="2000" height="1500" srcset="https://murthy.dev/content/images/size/w600/2022/10/IMG_3481.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/10/IMG_3481.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/10/IMG_3481.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/10/IMG_3481.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption>Out with the old!</figcaption></figure><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe style="border-radius: 12px" width="100%" height="152" title="Spotify Embed: Same Mistake - R&#xE4;uber Club Remix" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/track/054rP6PQaevs0bUPw7I7Ea?si=42d2348e09d3400e&amp;utm_source=oembed"></iframe><figcaption>Another favourite.</figcaption></figure><p>The optical fingerprint sensor [GT-511c3] did not do well with worn out fingers. My parents hated it and refused to leave the keys at home. Capacitive fingerprint sensors were the way to go. So, I set out to find one that was compatible with Home Assistant via ESPhome. Thats where I landed with the R503. The R503 from Grow has an optional daughterboard K202, that packs the logic for enrolling, scanning fingerprints and activating the on-board relay. I could have stopped here as this was mostly a complete package that did everything I asked for.</p><blockquote>Enroll Fingerprints, Scan to match and activate relay. The relay would modulate an electromagnet inside the door lock.</blockquote><p>But convenience was at the top of my list. Can&apos;t open up the system and click some buttons every time I wanted to do maintenance. That was where I <em>yeeted </em>the K202 board and connected the scanner to a compact ESP32c3.</p><p>Credit where credit is due: </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://everythingsmarthome.co.uk/how-to-build-a-wifi-connected-fingerprint-sensor-with-home-assistant/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to build a WiFi connected Fingerprint Sensor with Home Assistant</div><div class="kg-bookmark-description">When I posted some update videos on Reddit[https://www.reddit.com/r/homeautomation/comments/gquzmc/quick_update_on_the_fingerprint_sensor_remotely/] and Twitter [https://twitter.com/EverySmartHome] (make sure to follow me therefor more updates!) earlier this week about the Fingerprint Sensor upda&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://everythingsmarthome.co.uk/content/images/size/w256h256/2022/02/website-logo-black-transparent.png" alt="Home Security"><span class="kg-bookmark-author">Everything Smart Home</span><span class="kg-bookmark-publisher">Lewis Barclay</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://everythingsmarthome.co.uk/content/images/wordpress/2020/05/How-to-build-a-Wifi-connected-fingerprint-scanner-thumbnail-scaled.jpg" alt="Home Security"></div></a></figure><p>Although Lewis used an optical scanner, I was keen on adapting it for a capacitive scanner as the key library supported both. This setup used Home Assistant with an MQTT broker to talk to the microcontroller system! Skipping ESPhome entirely.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/10/image.png" class="kg-image" alt="Home Security" loading="lazy" width="1812" height="437" srcset="https://murthy.dev/content/images/size/w600/2022/10/image.png 600w, https://murthy.dev/content/images/size/w1000/2022/10/image.png 1000w, https://murthy.dev/content/images/size/w1600/2022/10/image.png 1600w, https://murthy.dev/content/images/2022/10/image.png 1812w" sizes="(min-width: 720px) 720px"><figcaption>Just look at that dashboard!</figcaption></figure><p>Silicone Wires! That&apos;s another amazing invention. I&apos;ve always used PVC based wired. PVC isn&apos;t heat resistant, it will burn and turn black when soldering or adding heat shrink tubing. Silicone wires just breeze through heat. That was the choice of wire this time around. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/11/image.png" class="kg-image" alt="Home Security" loading="lazy" width="800" height="400" srcset="https://murthy.dev/content/images/size/w600/2022/11/image.png 600w, https://murthy.dev/content/images/2022/11/image.png 800w" sizes="(min-width: 720px) 720px"><figcaption>PVC wires disintegrate when heated</figcaption></figure><p>In an effort to minimize the circuit footprint while keeping the same connectivity options as usual, I settled with an ESP32 based board. It was only a matter of finding the smallest one. DF-Robot&apos;s Beetle c3 and M5&apos;s Stamp c3 went neck to neck. I bought both to try out and found the M5 easier to use. The Beetle&apos;s support is a bit lacking, I ended up locking the board in CDC mode. Need to figure out how to undo that. </p><p>Back to the M5 with a nice 3D printed top cover! Uploaded the sketch from Lewis&apos; repo, noticed things did not work at first. With a little more debugging and digging, corrected some functions and voila!</p><p>Hardware serial instead of software, the use of compatible functions and enabling the LED ring light to indicate error messages by timing the blinks. Definitely called for a pull request. Will make a post about that soon.</p><p>Home assistant communicates with the system via MQTT, messages are published, and functions are called based off of it. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/11/image-1.png" class="kg-image" alt="Home Security" loading="lazy" width="1200" height="631" srcset="https://murthy.dev/content/images/size/w600/2022/11/image-1.png 600w, https://murthy.dev/content/images/size/w1000/2022/11/image-1.png 1000w, https://murthy.dev/content/images/2022/11/image-1.png 1200w" sizes="(min-width: 720px) 720px"><figcaption>PubSub - Topics</figcaption></figure><p>The ESP32 microcontroller can handle WiFi Channel changes and MQTT reconnection, provided its coded right. About a day into having the system up, I noticed the microcontroller would lock up at random. I could not have a serial monitor hooked up to it at all times to debug this. After giving it some thought and trying to reproduce the error by messing with my WiFi Access Points, I had a reproducible bug. It was time to implement a WiFi reconnection strategy. In case of WiFi failure, what would the system do?</p><p>WatchDog, an enforcer that will reboot the microcontroller if conditions are met. It was the easiest approach, having added 5 lines of code. If WiFi lost, reboot and try to reconnect again. The premise was that WiFi would be available at all times, as my smart home would have bigger issues if WiFi was down.</p><figure class="kg-card kg-video-card kg-card-hascaption"><div class="kg-video-container"><video src="https://murthy.dev/content/media/2022/11/IMG_3631.mp4" poster="https://img.spacergif.org/v1/1280x720/0a/spacer.png" width="1280" height="720" playsinline preload="metadata" style="background: transparent url(&apos;https://murthy.dev/content/images/2022/11/media-thumbnail-ember147.jpg&apos;) 50% 50% / cover no-repeat;"></video><div class="kg-video-overlay"><button class="kg-video-large-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button></div><div class="kg-video-player-container"><div class="kg-video-player"><button class="kg-video-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-video-pause-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-video-current-time">0:00</span><div class="kg-video-time">/<span class="kg-video-duration"></span></div><input type="range" class="kg-video-seek-slider" max="100" value="0"><button class="kg-video-playback-rate">1&#xD7;</button><button class="kg-video-unmute-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-video-mute-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-video-volume-slider" max="100" value="100"></div></div></div><figcaption>Sensor fit perfectly in the teak frame</figcaption></figure><p>ESP32 Camera </p><p>The plan is to deploy a set of cheap ESP32-CAMs to record to sd card and setup a simple webserver from the microcontroller to stream the camera feed. Home assistant would then be able to capture this feed for viewing and dumping to secure storage.</p><p><strong>Update (31 Dec 2022)</strong>: It took a while for the microcontroller to come back in stock. I had back ordered them, but the delay allowed me to research some more and come up with a better stack. </p><p>The streaming protocol for networked cameras being RTSP meant that I was not limited to using microcontroller boards with camera modules. Any third party CCTV camera with ONVIF / Streaming would do the trick. </p><p>With that out of the way, the NVR platform was remaining. Frigate in a docker container allows me to record and carry out object detection using trained models. My Raspberry Pi isn&apos;t powerful enough to run these models. Hence, an upgrade to a Tiny PC was required. Enter the micro optiplex, x86 based and with the help of intel quicksync transcoding videos shouldn&apos;t be hassle. Integrating Frigate with Home Assistant gives me the ability to view and receive notifications of people, pets or any object set to be detected. </p><p>My cameras should arrive by the weekend. Will drop an update with progress. </p><p>Side note, I also created a couple of pull requests on Lewis&apos; repository to update the code as certain functions were deprecated. </p><p><strong>Update (08 Jan 2023)</strong>: We have results! </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/01/HA_frigate.png" width="1874" height="962" loading="lazy" alt="Home Security" srcset="https://murthy.dev/content/images/size/w600/2023/01/HA_frigate.png 600w, https://murthy.dev/content/images/size/w1000/2023/01/HA_frigate.png 1000w, https://murthy.dev/content/images/size/w1600/2023/01/HA_frigate.png 1600w, https://murthy.dev/content/images/2023/01/HA_frigate.png 1874w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2023/01/Frigate-1.png" width="804" height="829" loading="lazy" alt="Home Security" srcset="https://murthy.dev/content/images/size/w600/2023/01/Frigate-1.png 600w, https://murthy.dev/content/images/2023/01/Frigate-1.png 804w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Dashboard View</figcaption></figure><p>I&apos;ll be adding a couple more ESP-32 cameras around the house, now that this concept works really well. This microcontroller and camera combo is the ideal size, I have enabled OTA updates via the Arduino IDE. This means I can update code on the fly over WiFi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2023/01/IMG_3870.png" class="kg-image" alt="Home Security" loading="lazy" width="2000" height="2667" srcset="https://murthy.dev/content/images/size/w600/2023/01/IMG_3870.png 600w, https://murthy.dev/content/images/size/w1000/2023/01/IMG_3870.png 1000w, https://murthy.dev/content/images/size/w1600/2023/01/IMG_3870.png 1600w, https://murthy.dev/content/images/size/w2400/2023/01/IMG_3870.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>ESP-32 CAM</figcaption></figure><p><strong>Update (13 Aug 2023)</strong>: Frigate has updated their code and documentation to support object detection on various GPUs through OpenVINO. This method is much faster than using CPUs and does not require the use of a dedicated TPU like the Google Coral Platform. </p><p>Moving from CPU detectors to OpenVINO (Device: Auto) yeilded a significant improvement. Inferencing speeds went from 75-129ms on CPU to 10-12ms on OpenVINO. I am yet to accertain the accuracy of this new method and provided model.</p><p>Suport for Intel iGPU, AMD Radeon and Nvidia GPUs is open. I will be putting together a new server with a dedicated GPU to test this out. </p>]]></content:encoded></item><item><title><![CDATA[Exploring Energy Monitoring with ESPhome]]></title><description><![CDATA[Just a climate conscious being taking steps to reduce carbon footprint!]]></description><link>https://murthy.dev/exploring-energy-monitoring-with-esphome/</link><guid isPermaLink="false">630b234c3e06d200019d98d2</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Akash Murthy]]></dc:creator><pubDate>Sun, 28 Aug 2022 10:47:26 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1517925035435-7976539b920d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE1fHxuZXQlMjBlbmVyZ3l8ZW58MHx8fHwxNjYxNjc0MzQ3&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1517925035435-7976539b920d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE1fHxuZXQlMjBlbmVyZ3l8ZW58MHx8fHwxNjYxNjc0MzQ3&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Exploring Energy Monitoring with ESPhome"><p>A few weeks after I started to record my solar plant&apos;s energy generation, It was only right to measure the consumption at home. Previously, all reading from the sensor attached to the solar plant were being pushed into a timeseries database known as InfluxDB. From there, I would put flux queries in place to create visuals and dashboards.</p><p>Just like networks have ingress and egress, net data moved is calculated on the difference of these values. I initially planned to add a sensor on each phase and push the readings into InfluxDB, but I quick realized that calculating the net consumptions with an on-grid solar system would prove to be challenging. I&apos;ll explain more on how I deviated from this path further down.</p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/IMG_2844.HEIC.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/IMG_2844.HEIC.jpg"><h2 class="kg-header-card-header" id="mcu-amp-sensornbsp">MCU &amp; Sensor&#xA0;</h2><h3 class="kg-header-card-subheader" id="looking-forward-to-phase-4">Looking forward to Phase 4</h3></div><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe style="border-radius: 12px" width="100%" height="80" title="Spotify Embed: White Flag" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/track/1NJH4ROnDMzFuFDGLsDo4S?si=2d26946d443444b8&amp;utm_source=oembed"></iframe><figcaption>I almost gave up on this mid way!</figcaption></figure><p>As I have worked with measuring electrical usage on a capstone project for my bachelors, I decided to use the same set of sensors. The PZEM-004T just gets the job done. It measures voltage, current, power, energy, power factor and frequency. On the microcontroller side, I chose an ESP32. Having 3 sensors on a single serial port meant I had to use Multidrop networked UART with the sensors acting as slaves.</p><p>With the microcontroller code working as expected with the sensors, the piece that holds the hardware in place was missing. I cut a small section of wood and mounted the hardware onto it.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2845.HEIC.jpg" width="2000" height="2667" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2845.HEIC.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2845.HEIC.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2845.HEIC.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2845.HEIC.jpg 2268w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2846.HEIC.jpg" width="2000" height="2667" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2846.HEIC.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2846.HEIC.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2846.HEIC.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2846.HEIC.jpg 2268w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2847.HEIC.jpg" width="2000" height="2667" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2847.HEIC.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2847.HEIC.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2847.HEIC.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2847.HEIC.jpg 2268w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2848.HEIC.jpg" width="2000" height="2667" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2848.HEIC.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2848.HEIC.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2848.HEIC.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2848.HEIC.jpg 2268w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2849.HEIC.jpg" width="2000" height="2667" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2849.HEIC.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2849.HEIC.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2849.HEIC.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2849.HEIC.jpg 2268w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>P.S. Not an ad placement for Fevicol</figcaption></figure><p>The next task at hand was to move this data somewhere.</p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/bence-boros-anapPhJFRhM-unsplash.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/bence-boros-anapPhJFRhM-unsplash.jpg"><h2 class="kg-header-card-header" id="esphome">ESPhome</h2><h3 class="kg-header-card-subheader" id="community-driven-home-automation">Community driven Home Automation</h3></div><p>All this while, even after I&apos;d heard of ESPhome, I would manually compile and push code into microcontrollers using my laptop. I finally got myself to try ESPHome. And OMG!</p><p>I can update the microcontroller wirelessly and on demand. Its like an OTA update for the board. Everything from logs, signal strengths, changing Wi-Fi SSID, ports or adding code in general could be done via a browser.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image-22.png" width="859" height="482" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-22.png 600w, https://murthy.dev/content/images/2022/08/image-22.png 859w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image-27.png" width="661" height="911" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-27.png 600w, https://murthy.dev/content/images/2022/08/image-27.png 661w"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image-24.png" width="744" height="904" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-24.png 600w, https://murthy.dev/content/images/2022/08/image-24.png 744w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>ESPHome Dashboard</figcaption></figure><p>After I plugging the sensors into Home Assistant. I was presented with a masterpiece. I did leave out a few bits, like configuring the Riemann sum integral to calculate energy for appliances that only reported power. Trapezoidal rule of integration was a good read. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2855.jpg" width="1284" height="2778" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2855.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2855.jpg 1000w, https://murthy.dev/content/images/2022/08/IMG_2855.jpg 1284w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2853.jpg" width="1284" height="2778" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2853.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2853.jpg 1000w, https://murthy.dev/content/images/2022/08/IMG_2853.jpg 1284w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2854.jpg" width="1284" height="2778" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2854.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2854.jpg 1000w, https://murthy.dev/content/images/2022/08/IMG_2854.jpg 1284w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Energy Stats on Home Assistant</figcaption></figure><p>CO2 Signal is an integration that is available on Home Assistant. It gives details on your source of electricity.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-28.png" class="kg-image" alt="Exploring Energy Monitoring with ESPhome" loading="lazy" width="477" height="134"><figcaption>Stats from CO2 Signal</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/ralph-ravi-kayden-iOLHAIaxpDA-unsplash.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/ralph-ravi-kayden-iOLHAIaxpDA-unsplash.jpg"><h2 class="kg-header-card-header" id="electrical-panel">Electrical Panel</h2><h3 class="kg-header-card-subheader" id="room-for-improvement-perhaps">Room for improvement perhaps?</h3></div><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2851.HEIC.jpg" width="2000" height="2667" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2851.HEIC.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2851.HEIC.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2851.HEIC.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2851.HEIC.jpg 2268w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2852.HEIC.jpg" width="2000" height="2667" loading="lazy" alt="Exploring Energy Monitoring with ESPhome" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2852.HEIC.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2852.HEIC.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2852.HEIC.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2852.HEIC.jpg 2268w" sizes="(min-width: 720px) 720px"></div></div></div></figure><p>With home assistant, I can now access these metrics from anywhere. Albeit, with an internet connection and a device. I can&apos;t stress the need to be careful, working with AC mains is not a joke. Do not take it lightly if you attempt to recreate this!</p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/daniel-mccullough--FPFq_trr2Y-unsplash.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/daniel-mccullough--FPFq_trr2Y-unsplash.jpg"><h2 class="kg-header-card-header" id="getting-technical">Getting Technical</h2><h3 class="kg-header-card-subheader" id="specifications">Specifications</h3></div><p>ESP32 using one hardware serial monitor in TTL serial network as master and connected sensors as slaves.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-26.png" class="kg-image" alt="Exploring Energy Monitoring with ESPhome" loading="lazy" width="1022" height="513" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-26.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-26.png 1000w, https://murthy.dev/content/images/2022/08/image-26.png 1022w" sizes="(min-width: 720px) 720px"><figcaption>Architecture of Serial Interface</figcaption></figure><p>Each sensor was assigned a custom address that ranges between 0x01 and 0xF8. This is part of ModBus. With custom addresses, unique calls can be made from microcontroller to fetch reading. The PZEM-AC Library has all the necessary tools and example code.</p><p>ESPhome was flashed onto the microcontroller and a yaml file with the required details was pushed. This setup was then deployed right after the electricity meter. Following the documentation on Home Assistant to add all the sources of electricity, it set up a dashboard and started recording. Forecasting was also available for the solar plant.</p><p>To make all the connections permanent and leave no room for loose contacts, I opted to solder and not use jumper cables.</p>]]></content:encoded></item><item><title><![CDATA[Reviving Ancient Power Tools]]></title><description><![CDATA[A brief summary on a weekend project I undertook to fix an old power tool from another generation.]]></description><link>https://murthy.dev/reviving-ancient-power-tools/</link><guid isPermaLink="false">6309c0783e06d200019d96b1</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Akash Murthy]]></dc:creator><pubDate>Sat, 27 Aug 2022 09:13:17 GMT</pubDate><media:content url="https://murthy.dev/content/images/2022/08/IMG_20200920_020936.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://murthy.dev/content/images/2022/08/IMG_20200920_020936.jpg" alt="Reviving Ancient Power Tools"><p>During the pandemic, a cleanup of some old boxes led to the discovery of an old tool box. This interesting Craftsman hard box had a backstory and was in pristine condition for its age. Turns out my dad bought this tool kit back with him from the states in the year 2000. The folks at the airport thought he was a skilled carpenter, bringing back such equipment... He&apos;s just an enthusiast who loves his tools. &#xA0;</p><p>The tools barely saw any action and 20 years later, the dying Ni-Cd batteries lasted a maximum of 5 mins before going flat. These batteries powered a cordless drill gun and a reciprocating saw. </p><p>The unique feature of the drill gun was its clutch. It is not easy to find drill guns with a clutch, where I stay. This clutch allows to set a torque level for screws. This avoids over tightening and stripping of the screw head. It was capable of drilling into walls, wood and metal with the right bits and fully closed clutch. The reciprocating saw can chew through 2x4 lumber with a breeze.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/IMG_20200920_103853_1-1.jpg" class="kg-image" alt="Reviving Ancient Power Tools" loading="lazy" width="2000" height="2014" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20200920_103853_1-1.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20200920_103853_1-1.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20200920_103853_1-1.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20200920_103853_1-1.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption>The tool kit with a 110vAC to 12vDC charger</figcaption></figure><hr><p>I set myself on a mission to get this working again, with the best engineering practices and replacement possible.</p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/IMG_20151209_093105.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/IMG_20151209_093105.jpg"><h2 class="kg-header-card-header" id="battery-science">Battery Science</h2><h3 class="kg-header-card-subheader" id="solid-discoveries">Solid discoveries</h3></div><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe style="border-radius: 12px" width="100%" height="80" title="Spotify Embed: Come Together" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/track/7n8sDrEcuMt0yezLDhIbnN?si=2f5a475760af46f6&amp;utm_source=oembed"></iframe><figcaption>Let&apos;s go physics and chemistry!</figcaption></figure><p>The Craftsman&apos;s battery pack employed the use of Ni-Cd Cells. It was the popular choice, as Lithium based cells were expensive at the time and found only in high end equipment. The battery pack consisted of 10 Ni-Cd cells in series with a thermistor to measure temperature during charging. The nominal voltage of each cell is about 1.2V. This adds up to 12v to form the battery. </p><p>Power tools pull a lot of current on startup, and Ni-Cd cells have a favorable discharging curve. They maintain their voltage steadily until full discharge. A key problem of Nickel based cells is memory effect. This meant you had to follow complete charge and discharge cycles to prolong its life. Something that doesn&apos;t sit with newer battery technologies.</p><p>For its replacement, I picked 18650 Li-ion cells. This came with its own set of challenges. The nominal voltage of a Lithium cell doesn&apos;t match that of a Nickel cell, and Li-ion cells require a battery management system (BMS) when used. The operating voltage of Li-ion and Li-Po cells were 3.7V to 4.2V (based on state of charge). Another candidate for consideration were LiFePO4 cells that have a steady operating voltage of 3.2V. However, LiFePO4 cells and its BMS boards are not widely available right now.</p><p>Therefore, Li-ion cells were my pick. As a proof of concept, I used some old cells from a power bank I had in combination with a 40A BMS board bought online in a 3s1p configuration to check if this project was even viable. 3s1p stands for 3 in series and 1 parallel set.</p><p>This meant my operating voltage for the pack shifted from 12.0V steady with Ni-Cd to a range between 11.1V and 12.6V with Li-ion.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20200916_200036.jpg" width="2000" height="2697" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20200916_200036.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20200916_200036.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20200916_200036.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20200916_200036.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20200919_222151_1.jpg" width="2000" height="2697" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20200919_222151_1.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20200919_222151_1.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20200919_222151_1.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20200919_222151_1.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20200919_220925_1.jpg" width="2000" height="2697" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20200919_220925_1.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20200919_220925_1.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20200919_220925_1.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20200919_220925_1.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20200919_222101.jpg" width="2000" height="2697" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20200919_222101.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20200919_222101.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20200919_222101.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20200919_222101.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Ni-Cd to Li-ion</figcaption></figure><p>After I was satisfied with the results, &#xA0;I bought a fresh set of Li-ion batteries to support the 40 amperes that the BMS board could allow for. The current 3s1p configuration would cut off power to save the batteries under higher load. I doubled the capacity, which resulted in a 3s2p configuration. The BMS would now be able to allow for higher currents and not cut off power.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20201001_103915.jpg" width="2000" height="2697" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20201001_103915.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20201001_103915.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20201001_103915.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20201001_103915.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20201001_131652.jpg" width="2000" height="1483" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20201001_131652.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20201001_131652.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20201001_131652.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20201001_131652.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20201002_162507.jpg" width="2000" height="2697" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20201002_162507.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20201002_162507.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20201002_162507.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20201002_162507.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Set of new cells for the second battery pack</figcaption></figure><p>To accommodate the Li-ion cells in the old battery housing, some modifications had to be made using a Dremel. Certain plastic spacer where getting in the way of the cells. Overall, it was a snug fit after adding some Styrofoam spacers to absorb shock. </p><p>I should mention that using insulation tape to isolate electrodes and hold cells together is not the best idea. Kapton tape, a yellow translucent polyamide film is recommended. Nickel strips with spot welding is to be used for connecting cells. As spot welders are quite an investment for a one time project, I used thick gauge copper wire as a substitute. Roughed up the surface of the cell, and applied heat using a soldering iron for the shorted period of time possible. </p><p>Another solution would have been to use an old desktop power supply to turn this into a corded power tool via the 12vDC power rail. </p><p>The BMS supports charging the battery with a constant voltage of 12.6V. Using an old LED driver power supply to replace the insides of the Ni-Cd charger, I set the voltage to 12.45V (+/- 0.05V) as output. This was done to prolong the number of charge cycles the pack an sustain with a slower degradation rate of the cells.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2842.jpg" width="2000" height="1500" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2842.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2842.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2842.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_2842.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_2843.jpg" width="2000" height="2667" loading="lazy" alt="Reviving Ancient Power Tools" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_2843.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_2843.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_2843.jpg 1600w, https://murthy.dev/content/images/2022/08/IMG_2843.jpg 2268w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Charger circuitry updated&#xA0;</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-dark" style data-kg-background-image><h2 class="kg-header-card-header" id="end-result">End Result</h2><h3 class="kg-header-card-subheader" id="the-beginning-of-a-new-chapter-in-the-life-of-a-tool">The beginning of a new chapter in the life of a tool</h3></div><figure class="kg-card kg-video-card kg-card-hascaption"><div class="kg-video-container"><video src="https://murthy.dev/content/media/2022/08/VID_20200920_104234-1.mp4" poster="https://img.spacergif.org/v1/1080x1920/0a/spacer.png" width="1080" height="1920" playsinline preload="metadata" style="background: transparent url(&apos;https://murthy.dev/content/images/2022/08/media-thumbnail-ember627-1.jpg&apos;) 50% 50% / cover no-repeat;"></video><div class="kg-video-overlay"><button class="kg-video-large-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button></div><div class="kg-video-player-container"><div class="kg-video-player"><button class="kg-video-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-video-pause-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-video-current-time">0:00</span><div class="kg-video-time">/<span class="kg-video-duration"></span></div><input type="range" class="kg-video-seek-slider" max="100" value="0"><button class="kg-video-playback-rate">1&#xD7;</button><button class="kg-video-unmute-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-video-mute-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-video-volume-slider" max="100" value="100"></div></div></div><figcaption>Satisfying ASMR</figcaption></figure><figure class="kg-card kg-video-card kg-card-hascaption"><div class="kg-video-container"><video src="https://murthy.dev/content/media/2022/08/IMG_2841-1.mp4" poster="https://img.spacergif.org/v1/1080x1920/0a/spacer.png" width="1080" height="1920" playsinline preload="metadata" style="background: transparent url(&apos;https://murthy.dev/content/images/2022/08/media-thumbnail-ember749.jpg&apos;) 50% 50% / cover no-repeat;"></video><div class="kg-video-overlay"><button class="kg-video-large-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button></div><div class="kg-video-player-container"><div class="kg-video-player"><button class="kg-video-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-video-pause-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-video-current-time">0:00</span><div class="kg-video-time">/<span class="kg-video-duration"></span></div><input type="range" class="kg-video-seek-slider" max="100" value="0"><button class="kg-video-playback-rate">1&#xD7;</button><button class="kg-video-unmute-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-video-mute-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-video-volume-slider" max="100" value="100"></div></div></div><figcaption>Reciprocating Saw</figcaption></figure><p>All of this was possible with a little bit of research and the will to bring something into existence. This project gave me the confidence to continue building and prototyping solutions.</p>]]></content:encoded></item><item><title><![CDATA[Building a HomeLab v1.0]]></title><description><![CDATA[Upgrading my current homelab setup after learning a tat bit of widely used industry standards.]]></description><link>https://murthy.dev/building-a-homelab-v1-0/</link><guid isPermaLink="false">63028da53e06d200019d92f6</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Akash Murthy]]></dc:creator><pubDate>Mon, 22 Aug 2022 19:46:14 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1521542464131-cb30f7398bc6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGhvbWVsYWJ8ZW58MHx8fHwxNjYxMTEyMjM1&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1521542464131-cb30f7398bc6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGhvbWVsYWJ8ZW58MHx8fHwxNjYxMTEyMjM1&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Building a HomeLab v1.0"><p>After picking up a few skills at my workplace, it was time for me to upgrade my setup at home. My old setup included gigabit networking with a 24 port switch, some dated yet functional access points and a Raspberry Pi 4 running my local NAS for storing media and files. &#xA0;This post is more of a personal blog than a step by step setup tour, so get cracking on and drop a comment! </p><p>I&apos;ve always loved the idea of having access to my data and memories wherever I am, on demand. Being a data accumulator is easy said, to bring this idea to reality there were some hurdles to cross with the vast set of requirements put up for myself. </p><blockquote>I wanted the following pieces: <br>&#x2003;Network attached storage with cloud capabilities.<br>&#x2003;Self Hosted, run all services from one system.<br>&#x2003;Home Assistant to control devices with Siri.<br>&#x2003;Local DNS server with ad and tracker blocking.<br>&#x2003;TimeSeriesDB to store solar energy readings.<br>&#x2003;Monitoring and management of services.<br>&#x2003;Website.<br>&#x2003;Single Wi-Fi SSID with 802.11 k/v/r roaming.</blockquote><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20200731_030950.jpg" width="2000" height="2697" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20200731_030950.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20200731_030950.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20200731_030950.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20200731_030950.jpg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/IMG_20200729_143042.jpg" width="2000" height="2697" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/08/IMG_20200729_143042.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/08/IMG_20200729_143042.jpg 1000w, https://murthy.dev/content/images/size/w1600/2022/08/IMG_20200729_143042.jpg 1600w, https://murthy.dev/content/images/size/w2400/2022/08/IMG_20200729_143042.jpg 2400w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Improved wire management in the network closet.</figcaption></figure><figure class="kg-card kg-embed-card kg-card-hascaption"><iframe style="border-radius: 12px" width="100%" height="80" title="Spotify Embed: Perfect Strangers (feat. Luna Morgenstern)" frameborder="0" allowfullscreen allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy" src="https://open.spotify.com/embed/track/3uMqBLT2VG9rm9pVL7EMUz?si=bef379b0adbc4ff6&amp;utm_source=oembed"></iframe><figcaption>Do you like techno? I know I do.</figcaption></figure><hr><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/technology-g0f689c085_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/technology-g0f689c085_1920.jpg"><h2 class="kg-header-card-header" id="network-attached-storage">Network Attached Storage</h2><h3 class="kg-header-card-subheader" id="accessing-your-data-from-any-device-on-the-network">Accessing your data from any device on the network</h3></div><p>I needed a resilient self hosted cloud that was affordable and did not take much of my time to maintain. Several opensource and paid offering were considered like UnRAID, TrueNAS, OpenMediaVault and NextCloud.</p><p>After learning about the release of OMV 6 and having used the previous version, I was inclined to use OMV. My system of choice was a trusty Raspberry Pi 4 which was lying around and used solely for its gigabit ethernet and USB3 ports. This makes setting a NAS viable with acceptable speeds.</p><p>Although RAID is not recommended or supported to be used on USB, one could setup software RAID over USB if its absolutely necessary. The lack of SATA ports on the Pi 4B could have been overcome by using a Pi compute module, in addition to a SATA controller connected to the PCIe slot on an expansion board. For this step, any ARM or x86-64 PC could have be used.</p><p> Following the basic recipe, I had the mise-en-place:<br>&#x2003;System: Raspberry Pi 4B (Overclocked to 2.1 GHz)<br>&#x2003;Storage: 2TB HDD and a 500GB SSD<br>&#x2003;OMV 6 setup with access control lists<br>&#x2003;FTP, Samba/CIFS, and NFS services enabled.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/Connect.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="606" height="446" srcset="https://murthy.dev/content/images/size/w600/2022/08/Connect.png 600w, https://murthy.dev/content/images/2022/08/Connect.png 606w"><figcaption>Setup network drives on Windows</figcaption></figure><p>This allows for all systems on the network that are wired or wireless to access the storage device through Network Auto-Discover or by means of IP address. My IP camera can use this storage medium as a backup to dump all recording. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="1121" height="589" srcset="https://murthy.dev/content/images/size/w600/2022/08/image.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image.png 1000w, https://murthy.dev/content/images/2022/08/image.png 1121w" sizes="(min-width: 720px) 720px"><figcaption>Auto Discover of NAS</figcaption></figure><p>Now that native access to my NAS was secured, it was time to look for a web application to conveniently manage my files. It was looking bright for NextCloud until I found another freemium tool called FileRun, it looks like a clone of Google Drive. There&apos;s a readily available docker compose file which was used to get this up and about.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-1.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="1199" height="643" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-1.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-1.png 1000w, https://murthy.dev/content/images/2022/08/image-1.png 1199w" sizes="(min-width: 720px) 720px"><figcaption>FileRun on a browser</figcaption></figure><p>Using the NextCloud App on mobile, I could auto upload my complete media library (All photos and videos with EXIF metadata) on demand. This is particularly useful as I do not have to use other platforms like Google Photos and iCloud to share and sync my memories. Sharing uncompressed files with my friends using android devices is easier and free!</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/10/IMG_3431.jpg" width="1284" height="2778" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/10/IMG_3431.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/10/IMG_3431.jpg 1000w, https://murthy.dev/content/images/2022/10/IMG_3431.jpg 1284w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/10/IMG_3432.jpg" width="1284" height="2778" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/10/IMG_3432.jpg 600w, https://murthy.dev/content/images/size/w1000/2022/10/IMG_3432.jpg 1000w, https://murthy.dev/content/images/2022/10/IMG_3432.jpg 1284w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>NextCloud App on iOS</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/cloud-g1ce595798_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/cloud-g1ce595798_1920.jpg"><h2 class="kg-header-card-header" id="cloud">Cloud</h2><h3 class="kg-header-card-subheader" id="external-access">External Access</h3></div><p>To truly be able to access my files from anywhere, I require a means to connect to my system over the internet. This is usually achieved by setting up dynamic DNS or purchasing a public-static IP from your ISP. </p><p>Before all this, you would need to pick up a domain to resolve from a registrar. I bought a domain ending with dev. Seemed like a short form for developer and is part of the HTTP Strict-Transport-Security (HSTS) list. This mean it defaults to HTTPS on most browsers. </p><p>My nameservers were set up with Cloudflare on a free plan which includes CDN proxy and most security features like DNSSEC that was enabled. This plan includes Argo Tunnel and E-mail routing. Now Argo tunnels allow you to forward traffic from a host like my Raspberry Pi and sent to CloudFlare servers, so clients can be served with this data from your host. This saves time and resources as it negates the need for a public IP and SSL certificates (I know Let&apos;s Encrypt is a free option, but still!). E-mail routing was set up to forward all mails to a personal email ID. &#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-2.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="2000" height="967" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-2.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-2.png 1000w, https://murthy.dev/content/images/size/w1600/2022/08/image-2.png 1600w, https://murthy.dev/content/images/size/w2400/2022/08/image-2.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Cloudflare&apos;s Tunnel</figcaption></figure><p>Having all my subdomains point to different ports on my host system was a breeze. I also setup SSH browser rendering to quickly be able to execute commands when I need to. More about this later down. </p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/google-home-g1cfdefaf8_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/google-home-g1cfdefaf8_1920.jpg"><h2 class="kg-header-card-header" id="home-assistant">Home Assistant</h2><h3 class="kg-header-card-subheader" id="one-stop-for-all-smart-home-devices">One stop for all smart home devices</h3></div><p>With the sole intent of being able to control all my smart home devices using Siri, I looked for tools that would act as a bridge between Apple and third party smart home devices. Turns out there&apos;s a big community supporting a software known as Home assistant with custom integrations and add-ons. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image-3.png" width="1894" height="924" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-3.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-3.png 1000w, https://murthy.dev/content/images/size/w1600/2022/08/image-3.png 1600w, https://murthy.dev/content/images/2022/08/image-3.png 1894w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image0.png" width="1284" height="2778" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/08/image0.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image0.png 1000w, https://murthy.dev/content/images/2022/08/image0.png 1284w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image-4.png" width="1920" height="914" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-4.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-4.png 1000w, https://murthy.dev/content/images/size/w1600/2022/08/image-4.png 1600w, https://murthy.dev/content/images/2022/08/image-4.png 1920w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Home app on iPhone and Home Assistant on a browser</figcaption></figure><p>Each vendor has their own add-ons and integrations that are mostly well documented. Every OEM has different ways of connecting to their API Endpoint and several access and secret keys to keep track of. I went with the container approach for Home Assistant using docker. This meant I did not have supervisor on Home Assistant, and used HACS - Home Assistant Community Store as a work around for many off the shelf integration. </p><p>All switches, televisions, binary and temperature sensors showed up perfectly, apart from the unsupported accessory warning on initial setup. Now, I can issue commands to Siri from any Apple device. If I add a new accessory, it automatically gets updated and shows up on the list. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-6.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="1920" height="929" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-6.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-6.png 1000w, https://murthy.dev/content/images/size/w1600/2022/08/image-6.png 1600w, https://murthy.dev/content/images/2022/08/image-6.png 1920w" sizes="(min-width: 720px) 720px"><figcaption>Integrations to setup your smart home devices</figcaption></figure><p>Automation of WAN failover in case the fiber line to my house breaks, was easy to set up. Upon offline WAN status being signaled from my router, a backup LTE modem is turned on to maintain connectivity at home to the internet. </p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/organization-g74e3d6276_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/organization-g74e3d6276_1920.jpg"><h2 class="kg-header-card-header" id="dns-server">DNS Server</h2><h3 class="kg-header-card-subheader" id="giving-you-turn-by-turn-navigation-recursively">Giving you turn by turn navigation recursively</h3></div><p>With all these services running, its easy to lose track of the IP addresses and port numbers. A local DNS server will only help with the former. AdGuard and PiHole are the two services that are highly popular in the HomeLab community. You can set custom domain names for several local IP addresses and the services will answer DNS queries with the local IP address of the Host. </p><p>The main highlight of these services is blocking trackers and ads. They work by comparing a DNS query to a list of known trackers and ad sites and responding with an unreachable IP address. This is known as DNS sink holing.</p><p>The docker container running this service was assigned a virtual mac address and an IP address on the host segment. This allows the main router to get DNS responses for every device on the network, from the DNS server. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-7.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="1188" height="905" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-7.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-7.png 1000w, https://murthy.dev/content/images/2022/08/image-7.png 1188w" sizes="(min-width: 720px) 720px"><figcaption>AdGuard Dashboard</figcaption></figure><p>I setup my main router running a DHCP server to redirect all DNS queries to the Pi. In this fashion, every device on the network will get the same answers!</p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/kermit-gc1ce4e849_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/kermit-gc1ce4e849_1920.jpg"><h2 class="kg-header-card-header" id="databases">Databases</h2><h3 class="kg-header-card-subheader" id="did-you-cover-all-the-bases">Did you cover all the bases?</h3></div><p>The backend system in place for this website and FileRun is an RDBMS - MySQL. To store the readings of my solar power generation plant, a timeseries database was needed. InfluxDB and Prometheus are two popular options. I prefer InfluxDB due its push based approach, compared to Prometheus&apos; pull based approach. </p><p>The in-built Query editor and playground, dashboards and click to generate scripts for various programing languages was a boon. I was able to run a quick python script to poll the readings from the sensor and write into InfluxDB every second. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image-15.png" width="1920" height="885" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-15.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-15.png 1000w, https://murthy.dev/content/images/size/w1600/2022/08/image-15.png 1600w, https://murthy.dev/content/images/2022/08/image-15.png 1920w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://murthy.dev/content/images/2022/08/image-12.png" width="1383" height="807" loading="lazy" alt="Building a HomeLab v1.0" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-12.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-12.png 1000w, https://murthy.dev/content/images/2022/08/image-12.png 1383w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>InfluxDB on a browser</figcaption></figure><p>InfluxDB, being a timeseries databases is optimized for consistent data flow in per unit time. PM2 was used to monitor and run the python code. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-9.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="1333" height="680" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-9.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-9.png 1000w, https://murthy.dev/content/images/2022/08/image-9.png 1333w" sizes="(min-width: 720px) 720px"><figcaption>PM2 on the CLI</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/lace-monitor-g4b09d1a27_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/lace-monitor-g4b09d1a27_1920.jpg"><h2 class="kg-header-card-header" id="monitoring">Monitoring</h2><h3 class="kg-header-card-subheader" id="whats-the-uptime">What&apos;s the Uptime!?!</h3></div><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-11.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="632" height="80" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-11.png 600w, https://murthy.dev/content/images/2022/08/image-11.png 632w"><figcaption>System uptime!</figcaption></figure><p>Most enterprises maintain failovers and load balance all their services. At home, I&apos;m fine with just knowing what&apos;s up and what&apos;s down. An open source project by the name Uptime Kuma was just the right pick. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-16.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="1920" height="962" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-16.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-16.png 1000w, https://murthy.dev/content/images/size/w1600/2022/08/image-16.png 1600w, https://murthy.dev/content/images/2022/08/image-16.png 1920w" sizes="(min-width: 720px) 720px"><figcaption>Uptime Kuma</figcaption></figure><p>I also use Portainer to maintain and deploy docker containers. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-14.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="1920" height="679" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-14.png 600w, https://murthy.dev/content/images/size/w1000/2022/08/image-14.png 1000w, https://murthy.dev/content/images/size/w1600/2022/08/image-14.png 1600w, https://murthy.dev/content/images/2022/08/image-14.png 1920w" sizes="(min-width: 720px) 720px"><figcaption>Portainer&apos;s dashboard</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/technology-gefacbecbe_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/technology-gefacbecbe_1920.jpg"><h2 class="kg-header-card-header" id="website">Website</h2><h3 class="kg-header-card-subheader" id="a-space-to-express-myself">A space to express myself</h3></div><p>I tried going full stack, setting up mongoDB and next.js, only to realize it was not easy to maintain a bunch of pages and links manually. So I pivoted to static site generators like Astro, Hugo and 11ty. Although writing in markdown was better than the above approach, it still requires effort from a management perspective.</p><p>I was against using Wordpress, having a bad experience from past projects. When I started looking into alternative CMS&apos;, I found ghost. Ghost has the option to work as a headless CMS and is lightweight. I went ahead and deployed it as a container. Updating it was as easy as changing the image. </p><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-image" style="background-image: url(https://murthy.dev/content/images/2022/08/ict-g00bd787cf_1920.jpg)" data-kg-background-image="https://murthy.dev/content/images/2022/08/ict-g00bd787cf_1920.jpg"><h2 class="kg-header-card-header" id="wi-fi-6">Wi-Fi 6</h2><h3 class="kg-header-card-subheader" id="80211ax-is-here">802.11AX is here!</h3></div><p>Staying in a house with multiple concrete walls, Wi-Fi tends to lose signal strength as you move away from the router. Which is why we has multiple access point with different SSIDs like bedroom_wifi, staircase_wifi, kitchen_wifi, etc.</p><p>Looking at new standards and technologies, it was clear that Wi-Fi roaming was the way to go with multiple access points. And that&apos;s exactly what I did, replacing my wireless infrastructure with a new mesh networked infrastructure that uses an ethernet backhaul. </p><p>So many new tech standards like BSS coloring, OFMDA, &#xA0;Target Wake Time, etc.</p><p>There were a lot of options to choose from. My main criteria was price. TP-Link&apos;s Deco range was the at the top of my list, but this proved expensive. My home required at least 4 access points, and my requirement of 802.11AX and Wi-Fi Roaming was bumping up the cost.</p><p>Huawei&apos;s AX3 had just entered the market and it was on sale. So I picked up one to test the range and speed. As a single router, it has horrible range but amazing speeds. The return policy of 10 days gave me some confidence, and I ordered three more routers to use in access point mode for roaming. This proved to be a good gamble, as it worked amazing in a mesh configuration. </p><p> &#xA0;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://murthy.dev/content/images/2022/08/image-17.png" class="kg-image" alt="Building a HomeLab v1.0" loading="lazy" width="755" height="941" srcset="https://murthy.dev/content/images/size/w600/2022/08/image-17.png 600w, https://murthy.dev/content/images/2022/08/image-17.png 755w" sizes="(min-width: 720px) 720px"><figcaption>The management console for Huawei AX3 (Dual-core edition)</figcaption></figure><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-dark" style data-kg-background-image><h2 class="kg-header-card-header" id="extras">Extras</h2><h3 class="kg-header-card-subheader" id="the-aftermath">The aftermath...</h3></div><h3 id="casaos">CasaOS </h3><p>A low code open source software that spins up your favourite services with a click of a button as docker containers. Having deployed my services with other tools, this is something I plan on trying sometime in the future. I would have to &#xA0;rebase my setup with CasaOS, its hardwork alright... </p><p><strong>Update (7 July 2023):</strong></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://murthy.dev/homelab-v2-decentralised-data-warehouse/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">HomeLab v2: Decentralised Data Warehousing</div><div class="kg-bookmark-description">Building a decentralised data warehousing and compute infrastructure.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://murthy.dev/favicon.ico" alt="Building a HomeLab v1.0"><span class="kg-bookmark-author">Hi! I&apos;m Akash!</span><span class="kg-bookmark-publisher">Akash Murthy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1587293852726-70cdb56c2866?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDN8fFdhcmVob3VzZXxlbnwwfHx8fDE2ODg3MTU2Njl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Building a HomeLab v1.0"></div></a></figure>]]></content:encoded></item></channel></rss>