Generated by All in One SEO v4.9.7.2, this is an llms.txt file, used by LLMs to index the site. # Arik Yavilevich's blog “Code IT”, my thoughts on technology ## Sitemaps - [XML Sitemap](https://blog.yavilevich.com/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [Easy wireless mesh network with ESP32s and Arduino](https://blog.yavilevich.com/2025/11/easy-wireless-mesh-network-with-esp32s-and-arduino/) - Introduction I have a Home Assistant-based Smart Home in my apartment. Many of my electronic devices are connected to HA and I can monitor and manage them centrally. The main communication method for all the devices is Wi-Fi with Zigbee being a second option. Some time ago I wanted to monitor several processes outside of - [40 cent DIY pressure sensor based on a capacitive principle](https://blog.yavilevich.com/2017/10/40-cent-diy-pressure-sensor-based-on-a-capacitive-principle/) - Lately I am spending a lot of time working on Fochica. Fochica is a system that alerts parents if they unknowingly leave a child in a car. The Fochica device is Arduino-based, installed in a vehicle and communicates with the parents' smartphones via Bluetooth. Fochica is a finalist in the Hackaday Prize 2017 competition and - [Thingy:91 cellular vibration sensor](https://blog.yavilevich.com/2023/07/thingy91-cellular-vibration-sensor/) - A year ago I published an article about a very simple Vibration Logger using an Arduino Uno, an SD card and an accelerometer. Recently, the need to measure vibration came up again, but this time I wanted something better. A device that will let me monitor the readings from anywhere without the need to go - [Arduino Vibration Logger](https://blog.yavilevich.com/2022/02/arduino-vibration-logger/) - Recently I have had to monitor the operation of a system of pumps over a period of a few days. Monitoring in person would be a waste of time and would be a pain to do at night. The operation state of the pumps can be determined by the vibration of the system. When the - [Real-time location tracking of individuals or things that are important to you](https://blog.yavilevich.com/2020/12/real-time-location-tracking-of-individuals-or-things-that-are-important-to-you/) - When I was taking my young kids to the park or playground I wished I had a solution that would tell me where they are in case they go out of sight. This led me to a project where I made a system to tell me in which direction (AKA bearing) and how far a - [Is one good “First post” on the blog better than two epic “First posts” in the head?](https://blog.yavilevich.com/2013/08/is-one-good-first-post-on-the-blog-better-than-two-epic-first-posts-in-the-head/) - I think that, most often, doing something good is better than not doing something amazing. This is a motto of mine that I learned from experience. Most people will procrastinate, while working to make the deliverable better. While in reality, not making a deliverable at all. With this though in mind, I am writing "first - [Integrating 433Mhz smoke detectors with Home Assistant](https://blog.yavilevich.com/2020/10/integrating-433mhz-smoke-detectors-with-home-assistant/) - Recently I have integrated several such detectors with Home Assistant (HA), a popular, open-source home automation software. - [Convention for compile time configuration of PlatformIO projects](https://blog.yavilevich.com/2020/09/convention-for-compile-time-configuration-of-platformio-projects/) - Separation between code and data (specifically configuration data) is a critical concept in any development environment. Having worked a lot with the nodejs stack I found the way configuration is handled in embedded Arduino/PlatformIO projects surprisingly messy. I decided to come up with a convention to simplify this and I will describe it below. tl;dr, - [Changing a "dumb" Rinnai water heater to a smart one](https://blog.yavilevich.com/2020/08/changing-a-dumb-rinnai-water-heater-to-a-smart-one/) - This article covers a home automation project, in which I extended a control panel of a Rinnai gas water heater with an ESP32. The ESP32 then functions as an interface between the control panel and Home Assistant, a home automation software. tl;dr, the ESP32 sits as a MitM (proxy) on a few data lines inside - [Making a proper adapter board for the "smart" WiFi Rinnai](https://blog.yavilevich.com/2020/09/making-a-proper-adapter-board-for-the-smart-wifi-rinnai/) - This is a quick follow-up post to my previous article about converting a Rinnai heater device to a smart device and controlling it with WiFi. Previously, when making the board that connects between the ESP32 and the traces of the Rinnai control panel, I did something that is not per-spec. I was using the ESP32 - [Repurposing unused steering wheel buttons as generic macros for an Android head unit](https://blog.yavilevich.com/2020/06/repurposing-unused-steering-wheel-buttons-as-generic-macros-for-an-android-head-unit/) - This article covers an automotive project, in which I connect unused buttons on my car's steering wheel to a micro-controller, which in turn emulates a keyboard and mouse device to the car's infotainment system via USB. tl;dr, the buttons form a resistor ladder and I use an STM32 black pill board to read the state - [Should you throw away your CC41 HM-10 clones now that Android 8 is here?](https://blog.yavilevich.com/2018/04/should-you-throw-away-your-cc41-hm-10-clones-now-that-android-8-is-here/) - With the release of Android 8.0 ("Oreo"), I as well as others have noticed that they cannot find some HM-10 clone BLE modules when scanning for them with an Android 8.0 phone. Why is that happening and what can you do about it? tl;dr, the issue is due to a bug in the firmware of - [HM-10 or CC41-A module? Automatic Arduino BLE module identification](https://blog.yavilevich.com/2016/12/hm-10-or-cc41-a-module-automatic-arduino-ble-module-identification/) - I will cover the basic construction of the BLE modules, the differences and will present an Arduino sketch that can automatically identify a module. - [MLT-BT05 BLE module - a clone of a clone??](https://blog.yavilevich.com/2017/03/mlt-bt05-ble-module-a-clone-of-a-clone/) - Previously I covered the HM-10 Bluetooth Low Energy (BLE) module and its clone, the CC41-A. Those are two popular modules that allow simple BLE communication through a serial interface and are handy with Arduinos and other hobby micro controllers. Make sure you read that article first as it provides important background for this curious update. - [Fixing a bad STATE pin on an MLT-BT05 BLE module](https://blog.yavilevich.com/2017/04/fixing-a-bad-state-pin-on-an-mlt-bt05-ble-module/) - This is a follow up article to the detailed review of the MLT-BT05 BLE module. In that previous post I mentioned that I got some MLT-BT05 modules with their STATE pin floating. No working STATE pin was an issue for me and I decided to investigate the cause. Update: same issue was observed with Bolutek - [Arduino sound level meter and spectrum analyzer](https://blog.yavilevich.com/2016/08/arduino-sound-level-meter-and-spectrum-analyzer/) - The process and best practices of measuring sound levels and analyzing frequencies with an Arduino. I will talk about sound, microphones, sampling, FFT and more. - [Fochica™ – Forgotten Child in Car Alert](https://blog.yavilevich.com/2017/06/fochica-forgotten-child-in-car-alert/) - Over the last 12 months I have been working on an interesting project with an important mission: to prevent forgetting children in vehicles. Kids who are left alone in cars are likely to suffer a heat stroke, often with grave consequences. Naturally, this is a bigger concern in hot countries, such as Israel, where I - [Efficient DC 12V to 5V conversion for low-power electronics, evaluation of six modules](https://blog.yavilevich.com/2017/03/efficient-dc-12v-to-5v-conversion-for-low-power-electronics-evaluation-of-six-modules/) - I am currently working on a vehicle-installed Arduino project. The device is designed to be powered constantly and I decided to use the car battery as the constant power source. I am designing the device for low power consumption, consuming 50mA or less, 'cause who wants to get stuck with a flat battery, right? Car - [Capturing and reversing wireless keyboard signal](https://blog.yavilevich.com/2016/09/capturing-and-reversing-wireless-keyboard-signal/) - Recently I have made a presentation at the "Software Defined Radio Israel" meetup about my work capturing and reversing wireless keyboard signals. I focused on a "Rapoo E2700 keyboard and track-pad" but we also discussed the broader challenge of such capturing for SDR enthusiasts. The project involved capturing 2.4Ghz wireless signal with an RTL-SDR dongle - [Why use - Fosphor, a GNU Radio real-time spectrum analyzer?](https://blog.yavilevich.com/2016/08/why-use-fosphor-a-gnu-radio-real-time-spectrum-analyzer/) - During my exploration of SDR I discovered one tool that I must tell you about, Fosphor. One reason I am so excited to tell you about Fosphor is that I discovered some features which are not initially obvious. - [Immersive Computing and the Experiential Age](https://blog.yavilevich.com/2016/05/immersive-computing-and-the-experiential-age/) - In the past year or so I have been closely following and partially involved in the Virtual Reality space. Interesting things are happening in the VR space since about 2012, when Oculus and Palmer Lucky brought in the consumer VR revolution in the form of DK1. A short summary for those, who have not been - [Understanding and improving VMware snapshot integration in FreeNAS](https://blog.yavilevich.com/2016/03/understanding-and-improving-vmware-snapshot-integration-in-freenas/) - Those who followed my previous posts know that I am using a storage server called FreeNAS in a VMware virtualization environment. There are several benefits of why one would use a storage server rather than just a trivial storage solution. Two of such major benefits are snapshots and replication. In this article I will discuss - [DLNA or who the hell needs a "smart" TV?](https://blog.yavilevich.com/2013/08/dlna-or-who-the-hell-needs-a-smart-tv/) - Most consumers prefer integrated solutions. A gadget that does everything and the more the merrier. I think that most of the time, you can get a better solution if you integrate top-of-category components yourself. Especially if, like me, you love technology and are not afraid of integrating. A few months ago, when I was shopping - [IO performance benchmark of unsupported ESXi configurations](https://blog.yavilevich.com/2015/05/io-performance-benchmark-of-unsupported-esxi-configurations/) - Introduction VMware is a serious platform for enterprise-scale virtualization. VMware also offers a free ESXi hypervisor and plenty of individuals choose to use that for various small setups, such as home labs or home infrastructure. VMware maintains a list of hardware devices, which are compatible with the hypervisor. VMware products also implement many features and - [Experiments with dead space reclamation and the wonders of storage over-provisioning](https://blog.yavilevich.com/2016/01/experiments-with-dead-space-reclamation-and-the-wonders-of-storage-over-provisioning/) - In this article I will conduct several experiments showing how available disk space fluctuates at the various layers in the system. Hopefully by following through you will be able to fully understand the wonders of dead space reclamation and storage over-provisioning. - [Why use - SoundWire?](https://blog.yavilevich.com/2015/12/why-use-soundwire/) - SoundWire is a nifty little app that lets you listen to sound that normally comes out of your Windows (or Linux) PC on an Android device. The main use of this for me is as “wireless headphones” for listening to YouTube or movies that the PC can play without really purchasing actual wireless headphones. The - [The essential Virtual Reality blogs and podcasts](https://blog.yavilevich.com/2015/12/the-essential-virtual-reality-blogs-and-podcasts/) - Being very enthusiastic about Virtual and Augmented Reality, I have been following up with what has been happening in the industry. Those of you who are excited about VR and AR as I am should follow up with the below resources. Blogs In the textual category, we have two recommended sites that are specific to - [DiskSpdAuto: Automating IO performance tests and result collection using DiskSpd and PowerShell](https://blog.yavilevich.com/2015/10/diskspdauto-automating-io-performance-tests-and-result-collection-using-diskspd-and-powershell/) - DiskSpdAuto is a PowerShell script that executes a predefined set of IO tests on a disk or disks without any human intervention. All the results, both raw and processed, are written to disk for further analysis in XML/CSV format. - [Quirks of ZFS interoperability](https://blog.yavilevich.com/2015/10/quirks-of-zfs-interoperability/) - My main tech project in the last few month has been an all-in-one home lab. The lab is a high-end PC running a hypervisor, which hosts VMs and provides a flexible infrastructure for experiments. One of the main components of such a setup is a storage VM that provides storage to other VMs, while giving - [Ten years in Tag Clouds](https://blog.yavilevich.com/2015/04/ten-years-in-tag-clouds/) - Being an avid user of the Delicious bookmarking service for over 10 years, I have collected a significant amount (over 5K) of tagged bookmarks. Lately I have been doing some cleanups on this data-set. Being a big believer in automation, this repetitive task brought me to try the Delicious API. A few node.js scripts later - [Dissecting a broken hard disk drive](https://blog.yavilevich.com/2015/04/dissecting-a-broken-hard-disk-drive/) - A year ago I had an unfortunate accident, in which I dropped a barely used 2TB WD Green drive. It fell from about 30cm height onto a hard surface, creating a noticeable dent on the outside. It stopped working on the spot, making unusual sounds and cycling down instead of operating normally. On the one - [My favorite node.js packages](https://blog.yavilevich.com/2015/02/my-favorite-node-js-packages/) - I have spent the last year programming almost exclusively in javascript using the node.js framework. Previously, my client side code was written in javascript (of course) and the server side code in C#. Having different languages and frameworks on both ends required more "plumbing" in the form of code that connects the two parts together. - [Dear Gigya CEO, JavaScript files are important](https://blog.yavilevich.com/2014/12/dear-gigya-ceo-javascript-files-are-important/) - A few days ago, news broke about a large-scale hack of various sites by the Syrian Electronic Army. The motivation behind the hack was political and the only damage came down to a popup message: "You've been hacked by the Syrian Electronic Army (SEA).". https://twitter.com/Official_SEA16/status/537960538752311301 Reports claim this hack affected about 600 large sites, including - [Restarting while expanding a RAID can get your server to get stuck at boot](https://blog.yavilevich.com/2014/10/restarting-while-expanding-a-raid-can-get-your-server-to-get-stuck-at-boot/) - The ability to do an online RAID capacity expansion is something we had for some time. Still, every time I do this I feel like I am doing something amazing and state-of-the-art. The idea that you can expand an existing volume without losing any data and without downtime is almost magical and requires some clever - [XSA-108 hitting AWS EC2 makes me speculate](https://blog.yavilevich.com/2014/10/xsa-108-hitting-aws-ec2-makes-me-speculate/) - You might have heard of the massive September EC2 virtual machine reboot on the Amazon Web Services cloud. Right away it was speculated that this is due to a security bug in Xen, the hypervisor platform used by EC2. On October 1st, the embargo was lifted and the suspicions were confirmed. The bug, XSA-108, can - [How we fell for a SORBS SPAM trap because we are such nice guys](https://blog.yavilevich.com/2014/08/how-we-fell-for-a-sorbs-spam-trap-because-we-are-such-nice-guys/) - A few days ago our IT teams got a support ticket from an employee, who sent an email and it bounced. The explanation for the reject states: "This message has been blocked because it is from a FortiGuard - AntiSpam black IP address". Naturally it was quite a surprise for us. A quick check with - [Is Adaptec's latest 7.4.0 (build 30862) firmware bugged?](https://blog.yavilevich.com/2014/04/is-adaptecs-latest-firmware-bugged/) - Update (5/2): This was resolved. Adaptec worked with me directly on this issue. The issue was confirmed, identified and a fix was found. The fixed firmware will be released in the next official release which is promised to be delivered later this month. For now I recommend you don't use builds 30612 - ["Closing credits" - Measuring third-party effect on your page load time](https://blog.yavilevich.com/2014/04/closing-credits-measuring-third-party-effect-on-your-page-load-time/) - A few months ago I was at the ClickTale Forum, an amazing ClickTale customer event in NYC. At the event I got a chance to have many interesting discussions; a theme that repeated in some of them was customers' concern of adding third-party services to their sites. Who can blame those customers? It is widely - [Study shows technical individuals choose better passwords](https://blog.yavilevich.com/2013/11/study-shows-technical-individuals-choose-better-passwords/) - A research at Carnegie Mellon University tested how likely a password is to be guessed, segmented by the faculty of the password owner. The news were covered in Ars Technica. To me this is scientific proof that technically inclined individuals care about computer security more than non-technical ones. I would go as far as to - [IO Performance Benchmarking 101](https://blog.yavilevich.com/2013/09/io-performance-benchmarking-101/) - Introduction There are 4 parameters that are important for any storage setup. They are, in no particular order: Performance - speed of reading and writing data at various usage patterns [measured in bytes/sec or operations/sec for each pattern] Capacity - how much space you can use [measured in bytes] Cost - $ per GB [measured - [Why use - PingInfoView?](https://blog.yavilevich.com/2013/08/why-use-pinginfoview/) - In this first "Why use?" post, I will tell you about PingInfoView, a freeware utility from NirSoft that makes it easy to monitor ping to several servers overtime. In the "Why use?" series I will review interesting software products and services. PingInfoView is a utility by Nir Sofer, a powerhouse of Win32 utilities. I have ## Pages - [About me](https://blog.yavilevich.com/about-me/) - I am Arik Yavilevich, a technology leader and entrepreneur. In 2006, I co-founded ClickTale around a disruptive technology that I developed and later served as its CTO. In just a few years, ClickTale grew from zero to over 150 employees. During that time I held various roles in the company, such as software development, architecture, - [Privacy Policy](https://blog.yavilevich.com/privacy-policy/) - Who we are Our website address is: https://blog.yavilevich.com. This is a personal blog of Arik Yavilevich. What personal data we collect and why we collect it Comments When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to ## Categories - [General](https://blog.yavilevich.com/category/general/) - [Meta](https://blog.yavilevich.com/category/meta/) - Posts about the blog or about blogging - [Why use?](https://blog.yavilevich.com/category/why-use/) - [IT](https://blog.yavilevich.com/category/it/) - [Security](https://blog.yavilevich.com/category/security/) - [Web](https://blog.yavilevich.com/category/web/) - [Optimization](https://blog.yavilevich.com/category/optimization/) - [Cloud](https://blog.yavilevich.com/category/cloud/) - [Code](https://blog.yavilevich.com/category/code/) - [Languages](https://blog.yavilevich.com/category/languages/) - [Data](https://blog.yavilevich.com/category/data/) - [Virtualization](https://blog.yavilevich.com/category/virtualization/) - [Storage](https://blog.yavilevich.com/category/storage/) - [Virtual Reality](https://blog.yavilevich.com/category/virtual-reality/) - [Home](https://blog.yavilevich.com/category/home/) - [Immersive Computing](https://blog.yavilevich.com/category/immersive-computing/) - [SDR](https://blog.yavilevich.com/category/sdr/) - [GNURadio](https://blog.yavilevich.com/category/sdr/gnuradio/) - [Arduino](https://blog.yavilevich.com/category/arduino/) - [Electronics](https://blog.yavilevich.com/category/electronics/) - [Automotive](https://blog.yavilevich.com/category/automotive/) - [Android](https://blog.yavilevich.com/category/android/) - [Smart Home](https://blog.yavilevich.com/category/home/smart-home/) - [IoT](https://blog.yavilevich.com/category/iot/) ## Tags - [tool](https://blog.yavilevich.com/tag/tool/) - [review](https://blog.yavilevich.com/tag/review/) - [network](https://blog.yavilevich.com/tag/network/) - [servers](https://blog.yavilevich.com/tag/servers/) - [nodejs](https://blog.yavilevich.com/tag/nodejs/) - [npm](https://blog.yavilevich.com/tag/npm/) - [recovery](https://blog.yavilevich.com/tag/recovery/) - [hdd](https://blog.yavilevich.com/tag/hdd/) - [zfs](https://blog.yavilevich.com/tag/zfs/) - [freenas](https://blog.yavilevich.com/tag/freenas/) - [nexentastor](https://blog.yavilevich.com/tag/nexentastor/) - [nas4free](https://blog.yavilevich.com/tag/nas4free/) - [powershell](https://blog.yavilevich.com/tag/powershell/) - [VR](https://blog.yavilevich.com/tag/vr/) - [AR](https://blog.yavilevich.com/tag/ar/) - [sound](https://blog.yavilevich.com/tag/sound/) - [wireless](https://blog.yavilevich.com/tag/wireless/) - [audio](https://blog.yavilevich.com/tag/audio/) - [esxi](https://blog.yavilevich.com/tag/esxi/) - [vmware](https://blog.yavilevich.com/tag/vmware/) - [rdm](https://blog.yavilevich.com/tag/rdm/) - [vmfs](https://blog.yavilevich.com/tag/vmfs/) - [snapshots](https://blog.yavilevich.com/tag/snapshots/) - [tv](https://blog.yavilevich.com/tag/tv/) - [fosphor](https://blog.yavilevich.com/tag/fosphor/) - [burst](https://blog.yavilevich.com/tag/burst/) - [spectrum](https://blog.yavilevich.com/tag/spectrum/) - [RF](https://blog.yavilevich.com/tag/rf/) - [microphone](https://blog.yavilevich.com/tag/microphone/) - [FHT](https://blog.yavilevich.com/tag/fht/) - [rapoo](https://blog.yavilevich.com/tag/rapoo/) - [keyboard](https://blog.yavilevich.com/tag/keyboard/) - [fsk](https://blog.yavilevich.com/tag/fsk/) - [bluetooth](https://blog.yavilevich.com/tag/bluetooth/) - [ble](https://blog.yavilevich.com/tag/ble/) - [dc](https://blog.yavilevich.com/tag/dc/) - [step-down](https://blog.yavilevich.com/tag/step-down/) - [converter](https://blog.yavilevich.com/tag/converter/) - [buck](https://blog.yavilevich.com/tag/buck/) - [mlt-bt05](https://blog.yavilevich.com/tag/mlt-bt05/) - [module](https://blog.yavilevich.com/tag/module/) - [kids](https://blog.yavilevich.com/tag/kids/) - [cars](https://blog.yavilevich.com/tag/cars/) - [capacitive](https://blog.yavilevich.com/tag/capacitive/) - [capacitor](https://blog.yavilevich.com/tag/capacitor/) - [sensor](https://blog.yavilevich.com/tag/sensor/) - [seat](https://blog.yavilevich.com/tag/seat/) - [HM-10](https://blog.yavilevich.com/tag/hm-10/) - [CC41](https://blog.yavilevich.com/tag/cc41/) - [Oreo](https://blog.yavilevich.com/tag/oreo/) - [android](https://blog.yavilevich.com/tag/android/) - [auto](https://blog.yavilevich.com/tag/auto/) - [car](https://blog.yavilevich.com/tag/car/) - [stm32](https://blog.yavilevich.com/tag/stm32/) - [can bus](https://blog.yavilevich.com/tag/can-bus/) - [usb hid](https://blog.yavilevich.com/tag/usb-hid/) - [black pill](https://blog.yavilevich.com/tag/black-pill/) - [mazda](https://blog.yavilevich.com/tag/mazda/) - [steering wheel](https://blog.yavilevich.com/tag/steering-wheel/) - [rinnai](https://blog.yavilevich.com/tag/rinnai/) - [esp32](https://blog.yavilevich.com/tag/esp32/) - [home assistant](https://blog.yavilevich.com/tag/home-assistant/) - [iot](https://blog.yavilevich.com/tag/iot/) - [pcb](https://blog.yavilevich.com/tag/pcb/) - [mosfet](https://blog.yavilevich.com/tag/mosfet/) - [platformio](https://blog.yavilevich.com/tag/platformio/) - [433mhz](https://blog.yavilevich.com/tag/433mhz/) - [home-assistant](https://blog.yavilevich.com/tag/home-assistant-2/) - [lora](https://blog.yavilevich.com/tag/lora/) - [lorawan](https://blog.yavilevich.com/tag/lorawan/) - [tracking](https://blog.yavilevich.com/tag/tracking/) - [gnss](https://blog.yavilevich.com/tag/gnss/) - [gps](https://blog.yavilevich.com/tag/gps/) - [cellular](https://blog.yavilevich.com/tag/cellular/) - [vibration](https://blog.yavilevich.com/tag/vibration/) - [accelerometer](https://blog.yavilevich.com/tag/accelerometer/) - [ds1307](https://blog.yavilevich.com/tag/ds1307/) - [adxl345](https://blog.yavilevich.com/tag/adxl345/) - [nrf9160](https://blog.yavilevich.com/tag/nrf9160/) - [thingy91](https://blog.yavilevich.com/tag/thingy91/) - [adxl362](https://blog.yavilevich.com/tag/adxl362/) - [thingsboard](https://blog.yavilevich.com/tag/thingsboard/) - [zephyr](https://blog.yavilevich.com/tag/zephyr/) - [mesh](https://blog.yavilevich.com/tag/mesh/) - [esp-now](https://blog.yavilevich.com/tag/esp-now/)