{"id":647,"date":"2022-10-10T21:17:41","date_gmt":"2022-10-10T19:17:41","guid":{"rendered":"https:\/\/thegreydiamond.de\/blog\/?p=647"},"modified":"2022-10-11T22:55:16","modified_gmt":"2022-10-11T20:55:16","slug":"reverse-engineering-moonside-lighthouse","status":"publish","type":"post","link":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/","title":{"rendered":"Reverse engineering a Moonside Lighthouse Light"},"content":{"rendered":"\n<div class=\"wp-block-uagb-inline-notice uagb-dismissable uagb-inline_notice__align-left uagb-block-d92d7201\"><svg xmlns=\"https:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\"><path d=\"M448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM175 208.1L222.1 255.1L175 303C165.7 312.4 165.7 327.6 175 336.1C184.4 346.3 199.6 346.3 208.1 336.1L255.1 289.9L303 336.1C312.4 346.3 327.6 346.3 336.1 336.1C346.3 327.6 346.3 312.4 336.1 303L289.9 255.1L336.1 208.1C346.3 199.6 346.3 184.4 336.1 175C327.6 165.7 312.4 165.7 303 175L255.1 222.1L208.1 175C199.6 165.7 184.4 165.7 175 175C165.7 184.4 165.7 199.6 175 208.1V208.1z\"><\/path><\/svg><h4 class=\"uagb-notice-title\">Working in Progress<\/h4><div class=\"uagb-notice-text\"><p>This article is still a work in progress, which means it will be updated in the future. Images may be missing captions or alt-texts. There might also be some language weirdness. <\/p><\/div><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>I&#8217;ve had a <a href=\"https:\/\/shop.moonside.design\/products\/moonside-lighthouse\" target=\"_blank\" rel=\"noreferrer noopener\">Moonside Lighthouse<\/a> lying around for some time. It&#8217;s a pretty nice-looking light fixture, however, there was no way to integrate it into my Homeassistant setup. I&#8217;ve had a shot at reverse engineering it&#8217;s communication and here are my results:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Trying the network route<\/h2>\n\n\n\n<p>Lighthouse is able to join your WiFi-Network for remote control, because of that I was hoping to find some open network port using Nmap. A quick scan showed nothing, meaning that this way is likely a dead end. <\/p>\n\n\n\n<p>However, this digging surfaced one interesting piece of information about its MAC Address, which belongs to the Espressif MAC range (meaning it&#8217;s likely something ESPy).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Internet<\/h3>\n\n\n\n<p>There also exists a <a href=\"https:\/\/moonside.design\/pages\/developer\" target=\"_blank\" rel=\"noreferrer noopener\">public API<\/a> which enables you to control the fixture remotely. I was unable to get it working, also I would like to be able to control my light locally. I have not explored this route further.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bluethooth<\/h2>\n\n\n\n<p>After it became clear that networking is sadly not an option I started looking into Bluethooth. The App uses BLE to talk to the lamp. My first attempt was to use the nRF Connect tool to reads its characteristics.<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"236\" src=\"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg\" alt=\"A screenshot made in the nRF connect app showing three services. The first being a &quot;Generic Attribute&quot; with UUID: 0x1801.\nThe next one being a &quot;Generic Access&quot; with the UUID 0x1800.\nThe last one is &quot;Nordic UART Service&quot; with UUID: 6e400001-b5a3-f393-e0a9-e50e24dcca9e\" class=\"wp-image-649\" srcset=\"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg 300w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-1024x804.jpg 1024w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-768x603.jpg 768w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-676x531.jpg 676w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect.jpg 1080w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"296\" src=\"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201139_nRF_Connect-300x296.jpg\" alt=\"A screenshot from the nRF connect app where the first service (&quot;Generic Access&quot;) was expanded. It's shows three attributes, &quot;Device Name&quot;, &quot;Apperance&quot; and &quot;Central Address Resolution&quot;. The device name is &quot;MOONSIDE-T1&quot;, apperance is &quot;[0] Unknown&quot;, address resoultion is not supported.\" class=\"wp-image-650\" srcset=\"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201139_nRF_Connect-300x296.jpg 300w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201139_nRF_Connect-1024x1010.jpg 1024w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201139_nRF_Connect-768x757.jpg 768w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201139_nRF_Connect-676x667.jpg 676w, https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201139_nRF_Connect.jpg 1080w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p>None of these characteristics were helpful, except one which piqued my interest., &#8220;Nordic UART Service&#8221;, I&#8217;ve never heard of that before, though it seems fairly helpful. Using the <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=no.nordicsemi.android.nrftoolbox\" target=\"_blank\" rel=\"noreferrer noopener\">nRF toolbox<\/a> I was able to connect to it via BLE UART. That itself worked fine, however, brute-forcing commands were not useful as there was no response to anything.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Snooping the traffic<\/h3>\n\n\n\n<p>The next logical step was to snoop on the traffic between the android app and the hardware counterpart. That proved to be not as easy as it sounds, in the end, I used Wireshark to look at the traffic.<\/p>\n\n\n\n<p>First step was to enable Bluetooth Snooping in the developer settings. Then after some debugging and using this command: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">db shell su -c \"'nc -s 127.0.0.1 -p 8872 -L system\/bin\/tail -f -c +0 data\/misc\/bluetooth\/logs\/btsnoop_hci.log'\"<\/code><\/pre>\n\n\n\n<p>The interface showed up in Wireshark. Though you need to android dump androiddump module for Wireshark.<\/p>\n\n\n\n<div class=\"wp-block-uagb-inline-notice uagb-inline_notice__align-left uagb-block-455e07e1\"><h4 class=\"uagb-notice-title\">Info<\/h4><div class=\"uagb-notice-text\"><p>It seems like your device needs to be rooted for this to work, I&#8217;ve seen contradicting information about that, however.<\/p><\/div><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Finally, I was able to see communication with a device called Espressi_2a:9d:5a, which looks suspiciously like the device in question.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deconstructing the communication<\/h3>\n\n\n\n<p>The became apparent that the app talks in clear text with the light fixture. These commands started showing up:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Command<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr><\/thead><tbody><tr><td>LEDOFF<\/td><td>Turns the light off<\/td><\/tr><tr><td>LEDON<\/td><td>Turns the light on<\/td><\/tr><tr><td>BRIGH<em>XXX<\/em><\/td><td>Brightness, replace XXX with number (max: 120, min:0)<\/td><\/tr><tr><td>COLOR<em>RRRGGGBBB XXX<\/em><\/td><td>Sets the colour, replace R with red value, G with green value and B with blue value (0-255), optional X brightness argument<\/td><\/tr><tr><td>THEME.????????<\/td><td>Sets a theme<\/td><\/tr><tr><td>PIXEL,<em>ID<\/em>,<em>XXX<\/em> <em>COLOR<\/em>?<\/td><td>Set a pixel, where ID is the pixel (0-89), XXX is the brightness and COLOR is the colour in an unknown format<\/td><\/tr><tr><td>MODEPIXEL<\/td><td>Applies pixel settings<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Mind you the values of for example the ID range might be different between devices, however I will probably not buy more devices just to prove my theory. <\/p>\n\n\n\n<p>Some things are also just unknown. I do not understand how sound-enabled modes work (yet!). It sends some number string and that&#8217;s it. I was also unable to figure out the COLOR format for pixel setting, it is six digits ranging from 0-9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Themes<\/h3>\n\n\n\n<p>Themes are a whole different topic. They are way more configurable than the app gives you options. Here is a list of the themes from the app:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th>Theme name<\/th><th>Themenick<\/th><\/tr><\/thead><tbody><tr><td>RAINBOW1.20,<\/td><td>Rainbow One<\/td><\/tr><tr><td>FIRE1.20,<\/td><td>Night Fire<\/td><\/tr><tr><td>THEME.THEME1.162,255,174,255,85,90,<\/td><td>Blue Raspberry<\/td><\/tr><tr><td>THEME.WAVE1.255,0,0,255,0,255,<\/td><td>Pink Ball<\/td><\/tr><tr><td>THEME.BEAT1.255,0,0,0,255,0,0,0,255,<\/td><td>Dancing Beat<\/td><\/tr><tr><td>THEME.GRADIENT2.0,255,0,20,65,20,200,200,200,<\/td><td>Green Land<\/td><\/tr><tr><td>THEME.THEME3.0,0,200,0,100,200,100,0,200,200,0,0,200,06,100,120,200,0,<\/td><td>Candy Mix<\/td><\/tr><tr><td>THEME.THEME1.255,0,0,0,0,255,<\/td><td>My Moon<\/td><\/tr><tr><td>THEME.BEAT2.255,255,0,0,0,255,<\/td><td>Bouning Stars<\/td><\/tr><tr><td>THEME.GRADIENT1.0,255,0,255,0,0,<\/td><td>Christmas Blend<\/td><\/tr><tr><td>THEME.RAINBOW3.0,<\/td><td>Blending Rainbow<\/td><\/tr><tr><td>THEME.THEME2.138,35,135,242,113,33,<\/td><td>Wire Tap<\/td><\/tr><tr><td>THEME.COLORDROP1.10,100,255,200,200,200,<\/td><td>Raining Blue<\/td><\/tr><tr><td>THEME.TWINKLE1.255,0,0,0,0,255,<\/td><td>Twinkle Star<\/td><\/tr><tr><td>THEME.FIRE2.0,0,0,0,255,0,200,0,0,255,0,0,<\/td><td>Green Fire<\/td><\/tr><tr><td>THEME.GRADIENT2.145,3,245,255,25,194,191,176,187,<\/td><td>Purple Cake<\/td><\/tr><tr><td>THEME.GRADIENT1.150,0,255,255,214,243,<\/td><td>Purple Dream<\/td><\/tr><tr><td>THEME.LAVA1.200,0,0,50,0,0,0,0,255,<\/td><td>Blue Lava<\/td><\/tr><tr><td>THEME.LAVA1.20,255,2,255,100,0,255,0,60,<\/td><td>MacMac<\/td><\/tr><tr><td>THEME.THEME1.168,255,120,120,255,214,<\/td><td>Summer Glow<\/td><\/tr><tr><td>THEME.BEAT2.7,200,249,13,34,135,<\/td><td>Dancing Ocean<\/td><\/tr><tr><td>THEME.PALETTE2.0,0,200,0,100,200,100,0,200,200,0,0,2006,0,100,120,200,0,<\/td><td>Colorful Swinging<\/td><\/tr><tr><td>THEME.GRADIENT1.255,80,0,0,0,0,<\/td><td>Late OJ<\/td><\/tr><tr><td>THEME.BEAT1.255,190,100,255,190,100,<\/td><td>Shining Beat<\/td><\/tr><tr><td>THEME.GRADIENT1.255,208,50,100,100,100,<\/td><td>Margo<\/td><\/tr><tr><td>THEME.RAINBOW2.20,<\/td><td>Rising Rainbow<\/td><\/tr><tr><td>THEME.THEME5.200,20,150,0,60,255,<\/td><td>Vibrant City<\/td><\/tr><tr><td>THEME.COLORDROP1.0,255,0,255,8,130,<\/td><td>Rose Drop<\/td><\/tr><tr><td>THEME.FIRE2.0,0,0,31,255,110,155,252,212,255,255,255,<\/td><td>Ghost Fire<\/td><\/tr><tr><td>THEME.GRADIENT1.255,0,0,200,200,200,<\/td><td>Pink Dawn<\/td><\/tr><tr><td>THEME.PULSING1.255,0,20,20,20,255,<\/td><td>Super Pulsing<\/td><\/tr><tr><td>THEME.PULSING1.115,255,182,250,255,204,<\/td><td>Super Limeade<\/td><\/tr><tr><td>THEME.GRADIENT1.147,71,255,255,102,50,<\/td><td>Galaxy Purple<\/td><\/tr><tr><td>THEME.GRADIENT2.255,0,0,50,190,10,0,160,200,<\/td><td>Nemo Green<\/td><\/tr><tr><td>THEME.LAVA1.0,183,255,0,0,0,255,255,255,<\/td><td>Cool Sky<\/td><\/tr><tr><td>THEME.THEME1.0,0,255,255,0,255,<\/td><td>Distant Night<\/td><\/tr><tr><td>THEME.FIRE2.0,0,0,255,0,0,0,255,0,0,0,255,<\/td><td>Rainbow Fire<\/td><\/tr><tr><td>THEME.GRADIENT2.255,0,0,80,20,0,200,200,200,<\/td><td>Volcano Ice Cream<\/td><\/tr><tr><td>THEME.THEME1.255,0,0,0,255,0,<\/td><td>Wild Watermelon<\/td><\/tr><tr><td>THEME.TWINKLE1.255,0,0,0,180,0,<\/td><td>Twinkle Christmas<\/td><\/tr><tr><td>THEME.GRADIENT2.255,66,20,255,66,20,8,217,255,<\/td><td>Ali<\/td><\/tr><tr><td>THEME.GRADIENT1.198,255,221,247,45,50,<\/td><td>Megatron<\/td><\/tr><tr><td>THEME.GRADIENT1.255,0,0,0,50,200,<\/td><td>Blue Raspberry<\/td><\/tr><tr><td>THEME.GRADIENT1.0,255,0,200,200,200, Wizard<\/td><td>Vibe Beat<\/td><\/tr><tr><td>THEME.THEME4.255,50,0,0,90,220,<\/td><td>Orange Ocean<\/td><\/tr><tr><td>THEME.GRADIENT2.0,255,0,255,0,0,100,0,0,<\/td><td>Jingle Bell<\/td><\/tr><tr><td>THEME.LAVA1.255,25,0,100,30,0,255,150,0,<\/td><td>Glowing Lava<\/td><\/tr><tr><td>THEME.GRADIENT2.59,250,229,255,85,0,255,0,20,<\/td><td>Celebration Candy<\/td><\/tr><tr><td>THEME.GRADIENT2.0,0,255,30,102,128,255,255,255,<\/td><td>Ice Mountain<\/td><\/tr><tr><td>THEME.GRADIENT1.86,255,119,98,38,210,<\/td><td>Magic Blend<\/td><\/tr><tr><td>THEME.GRADIENT1.255,255,30,36,255,65,<\/td><td>Martini<\/td><\/tr><tr><td>THEME.PALETTE1.0,<\/td><td>Color Wheel<\/td><\/tr><tr><td>THEME.LAVA1.255,0,0,60,60,60,0,255,0,<\/td><td>Christmas Snow<\/td><\/tr><tr><td>THEME.GRADIENT1.195,255,210,2,9,19,<\/td><td>Petrol<\/td><\/tr><tr><td>THEME.GRADIENT1.0,150,255,200,200,200,<\/td><td>Aqua Wave<\/td><\/tr><tr><td>THEME.FIRE2.0,0,0,255,0,0,0,0,255,255,255,255,<\/td><td>Magic Fire<\/td><\/tr><tr><td>THEME.GRADIENT2.8,175,212,178,37,247,242,12,188,<\/td><td>WaterShine<\/td><\/tr><\/tbody><\/table><figcaption>All themes<\/figcaption><\/figure>\n\n\n\n<p>Sound-activated modes seem to be variations of themes. These have yet to be mapped. However, they commonly start with M and another number following that. After that, there are colour arguments again. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Modifiying theme data<\/h4>\n\n\n\n<p>There are a few theme &#8220;keywords&#8221; which can then be mixed with arguments. These are: <code>THEME1, THEME2, THEME3, THEME4, THEME5, WAVE1, BEAT1, BEAT2, BEAT3, GRADIENT1, GRADIENT2, RAINBOW1, RAINBOW2, RAINBOW3, TWINKLE1, FIRE2, COLORDROP1, LAVA1, COLORDROP1, PULSING1<\/code><\/p>\n\n\n\n<p>Following these theme keywords are blocks of colour, most in this format: (yes they end in a <code>,<\/code>)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">THEME.THEME1.RRR1,GGG1,BBB1,RRR2,GGG2,BBB2,<\/code><\/pre>\n\n\n\n<p>It seems like every theme&#8217;s colour values change different aspects of the effect. (more will be added below over time)<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Theme<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>FIRE2.BBB,BBB,BBB,111,111,111,222,222,222,333,333,333<\/td><td>B is the &#8220;background&#8221; or base colour of the effect, you can leave it with 0s, meaning it will stay off. The rest 1-3 are other effect colours.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Building a smart home interface<\/h2>\n\n\n\n<p>I&#8217;ve built a basic Sketch which connects to the WiFi network. Have a look below! (I will continue working on this sketch)<\/p>\n\n\n\n<script src=\"https:\/\/gist.github.com\/TheGreyDiamond\/2a39ba01c009bc1e6beea151792ef918.js\"><\/script>\n\n\n\n<p class=\"has-medium-gray-color has-text-color\">(If there is nothing above this text make sure to enable experience cookies!)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve had a Moonside Lighthouse lying around for some time. It&#8217;s a pretty nice-looking light fixture, however, there was no way to integrate it into my Homeassistant setup. I&#8217;ve had a shot at reverse engineering it&#8217;s communication and here are my results: Trying the network route Lighthouse is able to join your WiFi-Network for remote [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[1],"tags":[92,7,93,8],"class_list":["post-647","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-esp","tag-iot","tag-moonside-lighthouse","tag-smarthome","post-preview"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reverse engineering a Moonside Lighthouse Light &#8211; Thegreydiamond<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reverse engineering a Moonside Lighthouse Light &#8211; Thegreydiamond\" \/>\n<meta property=\"og:description\" content=\"I&#8217;ve had a Moonside Lighthouse lying around for some time. It&#8217;s a pretty nice-looking light fixture, however, there was no way to integrate it into my Homeassistant setup. I&#8217;ve had a shot at reverse engineering it&#8217;s communication and here are my results: Trying the network route Lighthouse is able to join your WiFi-Network for remote [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/\" \/>\n<meta property=\"og:site_name\" content=\"Thegreydiamond\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-10T19:17:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-11T20:55:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg\" \/>\n<meta name=\"author\" content=\"TheGreydiamond\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@thegreydiamond2\" \/>\n<meta name=\"twitter:site\" content=\"@thegreydiamond2\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"TheGreydiamond\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/\"},\"author\":{\"name\":\"TheGreydiamond\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/person\\\/a7ba7a2ca50e4001f3f8f852c079910d\"},\"headline\":\"Reverse engineering a Moonside Lighthouse Light\",\"datePublished\":\"2022-10-10T19:17:41+00:00\",\"dateModified\":\"2022-10-11T20:55:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/\"},\"wordCount\":1004,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg\",\"keywords\":[\"esp\",\"iot\",\"Moonside Lighthouse\",\"smarthome\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/\",\"name\":\"Reverse engineering a Moonside Lighthouse Light &#8211; Thegreydiamond\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg\",\"datePublished\":\"2022-10-10T19:17:41+00:00\",\"dateModified\":\"2022-10-11T20:55:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/SmartSelect_20221010_201120_nRF_Connect.jpg\",\"contentUrl\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/SmartSelect_20221010_201120_nRF_Connect.jpg\",\"width\":1080,\"height\":848},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/2022\\\/10\\\/10\\\/reverse-engineering-moonside-lighthouse\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reverse engineering a Moonside Lighthouse Light\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/\",\"name\":\"Thegreydiamond\",\"description\":\"TheGreydiamonds Blog\",\"publisher\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#organization\",\"name\":\"TheGreydiamond\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/logoVersuch2.png\",\"contentUrl\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/09\\\/logoVersuch2.png\",\"width\":1000,\"height\":1000,\"caption\":\"TheGreydiamond\"},\"image\":{\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/thegreydiamond2\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thegreydiamond.de\\\/blog\\\/#\\\/schema\\\/person\\\/a7ba7a2ca50e4001f3f8f852c079910d\",\"name\":\"TheGreydiamond\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg\",\"caption\":\"TheGreydiamond\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reverse engineering a Moonside Lighthouse Light &#8211; Thegreydiamond","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/","og_locale":"en_US","og_type":"article","og_title":"Reverse engineering a Moonside Lighthouse Light &#8211; Thegreydiamond","og_description":"I&#8217;ve had a Moonside Lighthouse lying around for some time. It&#8217;s a pretty nice-looking light fixture, however, there was no way to integrate it into my Homeassistant setup. I&#8217;ve had a shot at reverse engineering it&#8217;s communication and here are my results: Trying the network route Lighthouse is able to join your WiFi-Network for remote [&hellip;]","og_url":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/","og_site_name":"Thegreydiamond","article_published_time":"2022-10-10T19:17:41+00:00","article_modified_time":"2022-10-11T20:55:16+00:00","og_image":[{"url":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg","type":"","width":"","height":""}],"author":"TheGreydiamond","twitter_card":"summary_large_image","twitter_creator":"@thegreydiamond2","twitter_site":"@thegreydiamond2","twitter_misc":{"Written by":"TheGreydiamond","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#article","isPartOf":{"@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/"},"author":{"name":"TheGreydiamond","@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/person\/a7ba7a2ca50e4001f3f8f852c079910d"},"headline":"Reverse engineering a Moonside Lighthouse Light","datePublished":"2022-10-10T19:17:41+00:00","dateModified":"2022-10-11T20:55:16+00:00","mainEntityOfPage":{"@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/"},"wordCount":1004,"commentCount":4,"publisher":{"@id":"https:\/\/thegreydiamond.de\/blog\/#organization"},"image":{"@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#primaryimage"},"thumbnailUrl":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg","keywords":["esp","iot","Moonside Lighthouse","smarthome"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/","url":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/","name":"Reverse engineering a Moonside Lighthouse Light &#8211; Thegreydiamond","isPartOf":{"@id":"https:\/\/thegreydiamond.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#primaryimage"},"image":{"@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#primaryimage"},"thumbnailUrl":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect-300x236.jpg","datePublished":"2022-10-10T19:17:41+00:00","dateModified":"2022-10-11T20:55:16+00:00","breadcrumb":{"@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#primaryimage","url":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect.jpg","contentUrl":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2022\/10\/SmartSelect_20221010_201120_nRF_Connect.jpg","width":1080,"height":848},{"@type":"BreadcrumbList","@id":"https:\/\/thegreydiamond.de\/blog\/2022\/10\/10\/reverse-engineering-moonside-lighthouse\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thegreydiamond.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Reverse engineering a Moonside Lighthouse Light"}]},{"@type":"WebSite","@id":"https:\/\/thegreydiamond.de\/blog\/#website","url":"https:\/\/thegreydiamond.de\/blog\/","name":"Thegreydiamond","description":"TheGreydiamonds Blog","publisher":{"@id":"https:\/\/thegreydiamond.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thegreydiamond.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/thegreydiamond.de\/blog\/#organization","name":"TheGreydiamond","url":"https:\/\/thegreydiamond.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2021\/09\/logoVersuch2.png","contentUrl":"https:\/\/thegreydiamond.de\/blog\/wp-content\/uploads\/2021\/09\/logoVersuch2.png","width":1000,"height":1000,"caption":"TheGreydiamond"},"image":{"@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/thegreydiamond2"]},{"@type":"Person","@id":"https:\/\/thegreydiamond.de\/blog\/#\/schema\/person\/a7ba7a2ca50e4001f3f8f852c079910d","name":"TheGreydiamond","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/55ee91221a0c102f9e4fa464a2edf06cc82724dc4f1299c99818b23e45801a75?s=96&d=mm&r=pg","caption":"TheGreydiamond"}}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"post-image":false},"uagb_author_info":{"display_name":"TheGreydiamond","author_link":"https:\/\/thegreydiamond.de\/blog\/author\/thegreydiamond\/"},"uagb_comment_info":4,"uagb_excerpt":"I&#8217;ve had a Moonside Lighthouse lying around for some time. It&#8217;s a pretty nice-looking light fixture, however, there was no way to integrate it into my Homeassistant setup. I&#8217;ve had a shot at reverse engineering it&#8217;s communication and here are my results: Trying the network route Lighthouse is able to join your WiFi-Network for remote&hellip;","_links":{"self":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/posts\/647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/comments?post=647"}],"version-history":[{"count":0,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/posts\/647\/revisions"}],"wp:attachment":[{"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/media?parent=647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/categories?post=647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thegreydiamond.de\/blog\/wp-json\/wp\/v2\/tags?post=647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}