{"id":325,"date":"2021-09-19T13:05:21","date_gmt":"2021-09-19T13:05:21","guid":{"rendered":"https:\/\/www.lightninglouk.nl\/?page_id=325"},"modified":"2021-10-29T10:15:10","modified_gmt":"2021-10-29T10:15:10","slug":"esp32-node-monitor-page-4","status":"publish","type":"page","link":"https:\/\/www.lightninglouk.nl\/index.php\/esp32-node-monitor-page-1\/esp32-node-monitor-page-4\/","title":{"rendered":"ESP32 node monitor page 4"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"325\" class=\"elementor elementor-325\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2c0ade51 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2c0ade51\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-597743d3\" data-id=\"597743d3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2a5eebe2 elementor-widget elementor-widget-heading\" data-id=\"2a5eebe2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">ESP32 node monitor<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4b48b81a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4b48b81a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2159a81\" data-id=\"2159a81\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-357888c1 elementor-widget elementor-widget-image\" data-id=\"357888c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1500\" height=\"337\" src=\"https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/Lightning-Louk-1500-kopie-e1630704244431.jpg\" class=\"attachment-full size-full wp-image-242\" alt=\"\" srcset=\"https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/Lightning-Louk-1500-kopie-e1630704244431.jpg 1500w, https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/Lightning-Louk-1500-kopie-e1630704244431-300x67.jpg 300w, https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/Lightning-Louk-1500-kopie-e1630704244431-1024x230.jpg 1024w, https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/Lightning-Louk-1500-kopie-e1630704244431-768x173.jpg 768w\" sizes=\"(max-width: 1500px) 100vw, 1500px\" style=\"width:100%;height:22.47%;max-width:1500px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4b90e07c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4b90e07c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6ed73998\" data-id=\"6ed73998\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-763545f2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"763545f2\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-5c0c64a\" data-id=\"5c0c64a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-15588ceb elementor-align-left elementor-widget elementor-widget-button\" data-id=\"15588ceb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-xs\" href=\"https:\/\/www.lightninglouk.nl\/index.php\/esp32-node-monitor-page-3\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Previous page<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-e9418e\" data-id=\"e9418e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c37348b elementor-align-right elementor-widget elementor-widget-button\" data-id=\"c37348b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-xs\" href=\"https:\/\/www.lightninglouk.nl\/index.php\/esp32-node-monitor\/esp32-node-monitor-page-5\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Next page<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-14955506 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"14955506\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3bf62f9c\" data-id=\"3bf62f9c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-db3b158 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"db3b158\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-49df53af\" data-id=\"49df53af\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-475247cb elementor-widget elementor-widget-heading\" data-id=\"475247cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 7 Why did LND-pussy not connect?<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64a07046 elementor-widget elementor-widget-text-editor\" data-id=\"64a07046\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The reason is (I think) that the certificate is self signed (as your browser also was complaining about).<\/p><p>At this moment I do not know (yet) how to create a really safe connection. Therefore I added the Client.SetInsecure() after each WiFiClientSecure client statement. Be aware that the local WiFi connection can be overheard, so don&#8217;t send any high priveliged macaroons that allow making transactions. Still not sure though, how insecure this is&#8230;.<\/p><p>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-45b6bdb8\" data-id=\"45b6bdb8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-21b211b elementor-widget elementor-widget-image\" data-id=\"21b211b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"406\" height=\"136\" src=\"https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/InseCurel.png\" class=\"attachment-large size-large wp-image-360\" alt=\"\" srcset=\"https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/InseCurel.png 406w, https:\/\/www.lightninglouk.nl\/wp-content\/uploads\/2021\/09\/InseCurel-300x100.png 300w\" sizes=\"(max-width: 406px) 100vw, 406px\" style=\"width:100%;height:33.5%;max-width:406px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-778ce0b0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"778ce0b0\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-2dd0d5ac\" data-id=\"2dd0d5ac\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7c47ce0b elementor-widget elementor-widget-heading\" data-id=\"7c47ce0b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Step 8 Upload the modified program<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5beccd48 elementor-widget elementor-widget-text-editor\" data-id=\"5beccd48\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tThe code on the right can be uploaded to the ESP32.\n\nYou have to get the readonly macaroon from your node. Use SSH to log into your node and type:\n<pre>xxd -p -c2000 .\/lnd\/data\/chain\/bitcoin\/mainnet\/readonly.macaroon<\/pre>\nThis will return your read only macaroon, that needs to be filled in in the wifi portal (or hard code it into the software code, as shown ).\n\nConnect with your phone&#8217;s WiFi to:\n\n<img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/>Nodeuitgans<img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/>. The password is &#8220;gakgakgak&#8221;.\n\nNow you will see the access point WiFi portal. Press configure wifi, be patient while the ESP is scanning your wifi, select your wifi SSID and type in the password of your WiFi network.\n\nFurthermore, somehow copy\/paste the macaroon and type the local adress of your node (without HTTPS:\/\/) and 8080 as REST portnumber.\n\nNow the magic should start.\n\nYou can see if it connects via the serial monitor of the Arduino IDE (under tools).\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-5b1fc700\" data-id=\"5b1fc700\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-117a8426 scroll-box700 elementor-widget elementor-widget-text-editor\" data-id=\"117a8426\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/LOAD LIBRARIES\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p><p>#include &#8220;FS.h&#8221;<br \/>#include <br \/>#include <br \/>#include <br \/>#include &#8220;SPIFFS.h&#8221;<\/p><p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/SOME VARIABLES\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p><p>int new_balance = 0;<br \/>int balance = 0;<br \/>int new_confirmed_balance = 0;<br \/>int confirmed_balance = 0;<br \/>bool synced_to_chain = false;<br \/>bool first_check = true;<br \/>bool first_check1 = true;<br \/>const char* lnd_check;<\/p><p>char lnd_server[40]=&#8221;10.0.10.50&#8243;;<br \/>char lnd_port[6] = &#8220;8080&#8221;;<br \/>char lnd_macaroon[500] = &#8220;0201036c6e6402ac01030a107_etc&#8221;;<br \/>char static_ip[16] = &#8220;10.0.0.120&#8221;;<br \/>char static_gw[16] = &#8220;10.0.0.1&#8221;;<br \/>char static_sn[16] = &#8220;255.255.255.0&#8221;;<\/p><p>bool shouldSaveConfig = true;<\/p><p>const char* spiffcontent = &#8220;&#8221;;<br \/>String spiffing; <br \/>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/SETUP\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p><p>void setup() {<br \/>Serial.begin(115200);<\/p><p>\/\/ CATHODE RGB SETUP, 18 WILL BE PWM FOR DIMMING THE LED<br \/>pinMode(16, OUTPUT);<br \/>pinMode(17, OUTPUT); <br \/>pinMode(5, OUTPUT);<\/p><p>\/\/ the number of the LED pin<br \/>const int ledPin = 18; \/\/ 18 corresponds to GPIO18<\/p><p>\/\/ configure LED PWM functionalitites<br \/>ledcSetup(0, 5000, 8); \/\/ledchannel 0, frequency 5000 and resolution 8<\/p><p>\/\/ attach the channel to the GPIO to be controlled<br \/>ledcAttachPin(18, 0); \/\/ connect pin 18 with led channel 0<br \/>ledcWrite(0, 255-80); \/\/channel 0 to low led brightness (0-255)<br \/>pink();<\/p><p>\/\/ START PORTAL <br \/>NodeUitGans();<\/p><p>blue();<br \/>}<\/p><p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/MAIN LOOP\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p><p>void loop() {<br \/>getinfo();<br \/>delay(3000);<br \/>getonchainbalance();<br \/>delay(3000);<br \/>getlnbalance();<br \/>delay(3000);<br \/>}<\/p><p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/LED SEQUENCES\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p><p>\/\/GREEN &#8212; running<br \/>void green(){<br \/>digitalWrite(16, HIGH); digitalWrite(17, HIGH); digitalWrite(5, LOW);<br \/>}<\/p><p>\/\/RED &#8212; down<br \/>void red(){<br \/>digitalWrite(16, HIGH); digitalWrite(17, LOW); digitalWrite(5, HIGH);<br \/>}<\/p><p>\/\/ PINK &#8212; synching<br \/>void pink(){<br \/>digitalWrite(16, LOW); digitalWrite(17, LOW); digitalWrite(5, HIGH);<br \/>}<\/p><p>\/\/ PINK &#8212; synching<br \/>void blue(){<br \/>digitalWrite(16, LOW); digitalWrite(17, HIGH); digitalWrite(5, HIGH);<br \/>}<\/p><p>\/\/DISCO LOOP \/\/ transaction<br \/>void disco(){<br \/>for (int i = 0; i &lt;= 10; i++) {<br \/>ledcWrite(0, 0); \/\/channel 0 to max led brightness (0-255)<br \/>digitalWrite(16, LOW); digitalWrite(17, HIGH); digitalWrite(5, HIGH);<br \/>delay(100);<br \/>digitalWrite(16, HIGH); digitalWrite(17, HIGH); digitalWrite(5, LOW);<br \/>delay(100);<br \/>digitalWrite(16, HIGH); digitalWrite(17, LOW); digitalWrite(5, HIGH);<br \/>delay(100);<br \/>digitalWrite(16, LOW); digitalWrite(17, LOW); digitalWrite(5, HIGH);<br \/>delay(100);<br \/>digitalWrite(16, LOW); digitalWrite(17, HIGH); digitalWrite(5, LOW);<br \/>delay(100);<br \/>digitalWrite(16, HIGH); digitalWrite(17, LOW); digitalWrite(5, LOW);<br \/>delay(100);<br \/>ledcWrite(0, 255-80); \/\/channel 0 to low led brightness (0-255)<br \/>}<br \/>green();<br \/>}<\/p><p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/NODE CALLS\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p><p>void getinfo() {<br \/>WiFiClientSecure client;<br \/>client.setInsecure();<br \/>const char* lndserver = lnd_server;<br \/>const char* macaroon = lnd_macaroon;<br \/>int lndport = atoi( lnd_port );<br \/>\/\/ Serial.println(lndserver);<br \/>\/\/ Serial.println(lndport);<br \/>if (!client.connect(lndserver, lndport)){<br \/>red();<br \/>Serial.println(&#8220;Not connected to client&#8221;);<br \/>return; <br \/>}<br \/>client.println(String(&#8220;GET &#8220;)+ &#8220;https:\/\/&#8221; + lndserver +&#8221;:&#8221;+ lndport + &#8220;\/v1\/getinfo HTTP\/1.1\\r\\n&#8221; +<br \/>&#8220;Host: &#8221; + lndserver +&#8221;:&#8221;+ lndport +&#8221;\\r\\n&#8221; +<br \/>&#8220;User-Agent: ESP322\\r\\n&#8221; +<br \/>&#8220;Grpc-Metadata-macaroon:&#8221; + macaroon + &#8220;\\r\\n&#8221; +<br \/>&#8220;Content-Type: application\/json\\r\\n&#8221; +<br \/>&#8220;Connection: close\\r\\n&#8221; +<br \/>&#8220;\\n&#8221;);<br \/>String line = client.readStringUntil(&#8216;\\n&#8217;);<br \/>while (client.connected()) {<br \/>String line = client.readStringUntil(&#8216;\\n&#8217;);<br \/>if (line == &#8220;\\r&#8221;) { <br \/>break;<br \/>}<br \/>}<br \/>String content = client.readStringUntil(&#8216;\\n&#8217;);<br \/>client.stop();<br \/>const size_t capacity = JSON_OBJECT_SIZE(3) + 620;<br \/>DynamicJsonDocument doc(capacity);<br \/>deserializeJson(doc, content); <br \/>lnd_check = doc[&#8220;alias&#8221;];<br \/>if (!lnd_check){<br \/>red();<br \/>delay(1000);<br \/>return; <br \/>}<br \/>Serial.println(&#8220;alias: &#8221; + String(lnd_check));<br \/>synced_to_chain = doc[&#8220;synced_to_chain&#8221;];<br \/>if(synced_to_chain == true){<br \/>green();<br \/>Serial.println(&#8220;synced_to_chain: yes&#8221;);<br \/>}<br \/>else{<br \/>pink();<br \/>Serial.println(&#8220;synced_to_chain: no&#8221;);<br \/>}<br \/>}<\/p><p>void getonchainbalance() {<br \/>WiFiClientSecure client;<br \/>client.setInsecure();<br \/>const char* lndserver = lnd_server;<br \/>const char* macaroon = lnd_macaroon;<br \/>int lndport = atoi( lnd_port );<br \/>if (!client.connect(lndserver, lndport)){<br \/>red();<br \/>delay(1000);<br \/>return; <br \/>}<br \/>client.print(String(&#8220;GET &#8220;)+ &#8220;https:\/\/&#8221; + lndserver +&#8221;:&#8221;+ lndport + &#8220;\/v1\/balance\/blockchain HTTP\/1.1\\r\\n&#8221; +<br \/>&#8220;Host: &#8221; + lndserver +&#8221;:&#8221;+ lndport +&#8221;\\r\\n&#8221; +<br \/>&#8220;User-Agent: ESP322\\r\\n&#8221; +<br \/>&#8220;Grpc-Metadata-macaroon:&#8221; + macaroon + &#8220;\\r\\n&#8221; +<br \/>&#8220;Content-Type: application\/json\\r\\n&#8221; +<br \/>&#8220;Connection: close\\r\\n&#8221; +<br \/>&#8220;\\n&#8221;);<br \/>String line = client.readStringUntil(&#8216;\\n&#8217;);<br \/>while (client.connected()) {<br \/>String line = client.readStringUntil(&#8216;\\n&#8217;);<br \/>if (line == &#8220;\\r&#8221;) { <br \/>break;<br \/>}<br \/>}<br \/>String content = client.readStringUntil(&#8216;\\n&#8217;);<br \/>client.stop();<br \/>const size_t capacity = JSON_OBJECT_SIZE(3) + 620;<br \/>DynamicJsonDocument doc(capacity);<br \/>deserializeJson(doc, content);<br \/>new_confirmed_balance = doc[&#8220;confirmed_balance&#8221;];<br \/>if(new_confirmed_balance &gt; confirmed_balance){<br \/>if(first_check == false){<br \/>confirmed_balance = new_confirmed_balance;<br \/>Serial.println(new_confirmed_balance);<br \/>disco();<br \/>}<br \/>else{<br \/>confirmed_balance = new_confirmed_balance;<br \/>first_check = false;<br \/>}<br \/>}<br \/>Serial.println(&#8220;old_onchain_balance: &#8221; + String(confirmed_balance));<br \/>Serial.println(&#8220;new_onchain_balance: &#8221; + String(new_confirmed_balance));<br \/>}<\/p><p>void getlnbalance() {<br \/>WiFiClientSecure client;<br \/>client.setInsecure();<br \/>const char* lndserver = lnd_server;<br \/>const char* macaroon = lnd_macaroon;<br \/>int lndport = atoi( lnd_port );<br \/>if (!client.connect(lndserver, lndport)){<br \/>red();<br \/>return; <br \/>}<br \/>client.print(String(&#8220;GET &#8220;)+ &#8220;https:\/\/&#8221; + lndserver +&#8221;:&#8221;+ lndport + &#8220;\/v1\/balance\/channels HTTP\/1.1\\r\\n&#8221; +<br \/>&#8220;Host: &#8221; + lndserver +&#8221;:&#8221;+ lndport +&#8221;\\r\\n&#8221; +<br \/>&#8220;User-Agent: ESP322\\r\\n&#8221; +<br \/>&#8220;Grpc-Metadata-macaroon:&#8221; + macaroon + &#8220;\\r\\n&#8221; +<br \/>&#8220;Content-Type: application\/json\\r\\n&#8221; +<br \/>&#8220;Connection: close\\r\\n&#8221; +<br \/>&#8220;\\n&#8221;);<br \/>String line = client.readStringUntil(&#8216;\\n&#8217;);<br \/>while (client.connected()) {<br \/>String line = client.readStringUntil(&#8216;\\n&#8217;);<br \/>if (line == &#8220;\\r&#8221;) { <br \/>break;<br \/>}<br \/>}<br \/>String content = client.readStringUntil(&#8216;\\n&#8217;);<br \/>client.stop();<br \/>const size_t capacity = JSON_OBJECT_SIZE(3) + 620;<br \/>DynamicJsonDocument doc(capacity);<br \/>deserializeJson(doc, content);<br \/>new_balance = doc[&#8220;balance&#8221;];<br \/>if(new_balance &gt; balance){<br \/>if(first_check1 == false){<br \/>balance = new_balance;<br \/>disco();<br \/>}<br \/>else{<br \/>balance = new_balance;<br \/>first_check1 = false;<br \/>}<br \/>}<br \/>Serial.println(&#8220;old_lnd_balance : &#8221; + String(balance));<br \/>Serial.println(&#8220;new_lnd_balance : &#8221; + String(new_balance));<br \/>}<\/p><p>void NodeUitGans(){<\/p><p>WiFiManager wm;<br \/>Serial.println(&#8220;mounting FS&#8230;&#8221;);<br \/>while(!SPIFFS.begin(true)){<br \/>Serial.println(&#8220;failed to mount FS&#8221;);<br \/>delay(200);<br \/>}<\/p><p>\/\/CHECK IF RESET IS TRIGGERED\/WIPE DATA<br \/>for (int i = 0; i &lt;= 5; i++) {<br \/>if(touchRead(4) &lt; 50){<br \/>File file = SPIFFS.open(&#8220;\/config.txt&#8221;, FILE_WRITE);<br \/>file.print(&#8220;placeholder&#8221;);<br \/>wm.resetSettings();<br \/>}<br \/>delay(1000);<br \/>}<\/p><p>\/\/MOUNT FS AND READ CONFIG.JSON<br \/>File file = SPIFFS.open(&#8220;\/config.txt&#8221;);<\/p><p>spiffing = file.readStringUntil(&#8216;\\n&#8217;);<br \/>spiffcontent = spiffing.c_str();<br \/>DynamicJsonDocument json(1024);<br \/>deserializeJson(json, spiffcontent);<br \/>if(String(spiffcontent) != &#8220;placeholder&#8221;){<br \/>strcpy(lnd_server, json[&#8220;lnd_server&#8221;]);<br \/>strcpy(lnd_port, json[&#8220;lnd_port&#8221;]);<br \/>strcpy(lnd_macaroon, json[&#8220;lnd_macaroon&#8221;]);<br \/>}<\/p><p>\/\/ADD PARAMS TO WIFIMANAGER<br \/>wm.setSaveConfigCallback(saveConfigCallback);<\/p><p>WiFiManagerParameter custom_lnd_server(&#8220;server&#8221;, &#8220;LND server&#8221;, lnd_server, 40);<br \/>WiFiManagerParameter custom_lnd_port(&#8220;port&#8221;, &#8220;LND port&#8221;, lnd_port, 6);<br \/>WiFiManagerParameter custom_lnd_macaroon(&#8220;macaroon&#8221;, &#8220;LND readonly macaroon&#8221;, lnd_macaroon, 500);<br \/>wm.addParameter(&amp;custom_lnd_server);<br \/>wm.addParameter(&amp;custom_lnd_port);<br \/>wm.addParameter(&amp;custom_lnd_macaroon);<\/p><p>\/\/IF RESET WAS TRIGGERED, RUN PORTAL AND WRITE FILES<br \/>if (!wm.autoConnect(&#8220;<img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/>Nodeuitgans<img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/26a1.svg\" alt=\"\u26a1\" \/>&#8220;, &#8220;gakgakgak&#8221;)) {<br \/>Serial.println(&#8220;failed to connect and hit timeout&#8221;);<br \/>delay(3000);<br \/>ESP.restart();<br \/>delay(5000);<br \/>}<br \/>Serial.println(&#8220;connected :)&#8221;);<br \/>strcpy(lnd_server, custom_lnd_server.getValue());<br \/>strcpy(lnd_port, custom_lnd_port.getValue());<br \/>strcpy(lnd_macaroon, custom_lnd_macaroon.getValue());<br \/>if (shouldSaveConfig) {<br \/>Serial.println(&#8220;saving config&#8221;);<br \/>DynamicJsonDocument json(1024);<br \/>json[&#8220;lnd_server&#8221;] = lnd_server;<br \/>json[&#8220;lnd_port&#8221;] = lnd_port;<br \/>json[&#8220;lnd_macaroon&#8221;] = lnd_macaroon;<\/p><p>File configFile = SPIFFS.open(&#8220;\/config.txt&#8221;, &#8220;w&#8221;);<br \/>if (!configFile) {<br \/>Serial.println(&#8220;failed to open config file for writing&#8221;);<br \/>}<br \/>serializeJsonPretty(json, Serial);<br \/>serializeJson(json, configFile);<br \/>configFile.close();<br \/>shouldSaveConfig = false;<br \/>}<\/p><p>Serial.println(&#8220;local ip&#8221;);<br \/>Serial.println(WiFi.localIP());<br \/>Serial.println(WiFi.gatewayIP());<br \/>Serial.println(WiFi.subnetMask());<br \/>}<\/p><p>void saveConfigCallback () {<br \/>Serial.println(&#8220;Should save config&#8221;);<br \/>shouldSaveConfig = true;<br \/>}<\/p><p>\/\/\/\/\/\/\/\/\/\/\/OTHER COLOURS YOU COULD USE\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\/\/AQUA digitalWrite(16, LOW); digitalWrite(17, HIGH); digitalWrite(5, LOW);<br \/>\/\/LIME digitalWrite(16, HIGH); digitalWrite(17, LOW); digitalWrite(5, LOW);<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-56720807 elementor-widget elementor-widget-text-editor\" data-id=\"56720807\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Now we can stick the ESP32 and some LED&#8217;s on a bread board and start playing with the node monitor in the next step.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-335aca0 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"335aca0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-b431bef elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b431bef\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-5bf9aaf9\" data-id=\"5bf9aaf9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5a389ab9 elementor-align-left elementor-widget elementor-widget-button\" data-id=\"5a389ab9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-xs\" href=\"https:\/\/www.lightninglouk.nl\/index.php\/esp32-node-monitor-page-3\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Previous page<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-58627c86\" data-id=\"58627c86\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d9a1181 elementor-align-right elementor-widget elementor-widget-button\" data-id=\"4d9a1181\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-xs\" href=\"https:\/\/www.lightninglouk.nl\/index.php\/esp32-node-monitor\/esp32-node-monitor-page-5\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Next page<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>ESP32 node monitor Previous page Next page Step 7 Why did LND-pussy not connect? The reason is (I think) that the certificate is self signed (as your browser also was complaining about). At this moment I do not know (yet) how to create a really safe connection. Therefore I added the Client.SetInsecure() after each WiFiClientSecure&hellip; <a class=\"more-link\" href=\"https:\/\/www.lightninglouk.nl\/index.php\/esp32-node-monitor-page-1\/esp32-node-monitor-page-4\/\">Continue reading <span class=\"screen-reader-text\">ESP32 node monitor page 4<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":172,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-325","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/pages\/325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/comments?post=325"}],"version-history":[{"count":50,"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/pages\/325\/revisions"}],"predecessor-version":[{"id":754,"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/pages\/325\/revisions\/754"}],"up":[{"embeddable":true,"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/pages\/172"}],"wp:attachment":[{"href":"https:\/\/www.lightninglouk.nl\/index.php\/wp-json\/wp\/v2\/media?parent=325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}