Forum Replies Created
-
AuthorPosts
-
DonZalmrolParticipant
trying numerous things, would it be possible to check the serverside if my data is coming through?
Perhaps my post is not formed correctly 🙂DonZalmrolParticipantLooks like I was wrong the whole time with thinking the uploads needs to be in JSON…
Reworking the whole thing to work with the EXP protocol.Current code:
// Upload data to the uradmonitor.com server void connecToURadMonLogger() { WiFiClient client; if(retry < 3) { if (client.connect("data.uradmonitor.com", 80)) { if(client.connected()) { Serial.println(F("Connection to uradmonitoring platform succeeded!")); // Authentication client.print(F("X-User-id:")); client.print(USER_ID) + "\r\n"; client.print(F("X-User-hash:")); client.print(USER_KEY) + "\r\n"; client.print(F("X-Device-id:")); client.print(DEVICE_ID) + "\r\n"; // Concat data for POST String ptr = "POST http_:_//data.uradmonitor.com/api/v1/upload/exp"; // Do a post call to the API ptr += "/01/"; // compulsory: local time in seconds ptr += timeClient.getEpochTime(); // time epoch value ptr += "/02/"; // 02 = optional: temperature in degrees celsius ptr += dht.getTemperature(); // temperature value ptr += "/04/"; // 04 = optional: humidity as relative humidity in percentage % ptr += dht.getHumidity(); // humidity value ptr += "/0B/"; // 0B = optional: radiation measured on geiger tube in cpm ptr += totalCount_3; // a-cpm value ptr += "/0C/"; // 0C = optional: high voltage geiger tube inverter voltage in volts ptr += displayTubeVoltage(); // tube voltage value ptr += "/10/0x6"; // 10 = Tube ID | 0x6 = GEIGER_TUBE_SI22G // Print out pointer (ptr) to client client.print(ptr); client.println(F("")); // Test output Serial.println(ptr); Serial.println(F("\n")); uploadOk = true; retry = 0; // 5 blinks for 50 ms blinkLedUpload(5, 50); client.flush(); // Flush connection client.stop(); // Stop client delay(5);// Give some time to stop Serial.println(F("Connection to urad monitoring platform Disconnected.")); } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to urad monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to urad monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { Serial.println("Rebooting due uradmonitoring failed connection"); ESP.restart(); } }
Looks like I can now authenticate and received a device ID when querying with Postman. It states my device is online but my POSTs aren’t getting through…
Example of the output of one of my POSTs:19:28:42.042 -> Connection to uradmonitoring platform succeeded!
19:28:42.042 -> POST http_:_//data.uradmonitor.com/api/v1/upload/exp/01/1621445321/02/23.00/04/46.00/0B/78/0C/406.39/10/0x6
19:28:42.091 ->
19:28:42.091 ->
19:28:42.549 -> Connection to uradmonitoring platform Disconnected.If you POST the result using Postman the values are actually pushed to my dashboard into my device… But not from my ESP32.
One step forward, two steps back situation 😉
PS: added _:_ to prevent URLs
DonZalmrolParticipantminor update, the fully outprinted json is this:
11:28:49.410 -> }GET /data.uradmonitor.com/api/v1/upload/exp/01/X-User-id:%s 11:28:49.410 -> X-User-hash:%s 11:28:49.410 -> X-Device-id:%08lX 11:28:49.410 -> XXXYYYZZZ{ 11:28:49.458 -> "id": "0", 11:28:49.458 -> "latitude": "50.989699", 11:28:49.458 -> "longitude": "3.503907", 11:28:49.458 -> "altitude": "12", 11:28:49.458 -> "city": "Deinze", 11:28:49.458 -> "country": "BE", 11:28:49.458 -> "detector": "SI22G", 11:28:49.458 -> "factor": "0.001714", 11:28:49.458 -> "timefirst": 1621416528, 11:28:49.458 -> "cpm": 72, 11:28:49.458 -> "temperature": 22.3, 11:28:49.458 -> "humidity": 48, 11:28:49.458 -> "voltage": 406.395 11:28:49.458 -> }
It looks like my user-id (XXX), user-key (YYY) and device-id (ZZZ) are printed directly under the correct fields.
Probably has to do with this part of my code where it forces %s\r\n and %8081\r\n:// Place get and json in string pointer to upload to platform String ptr = "GET /data.uradmonitor.com/api/v1/upload/exp/01/"; ptr += "X-User-id:<strong>%s\r\n</strong>X-User-hash:<strong>%s\r\n</strong>X-Device-id:<strong>%08lX\r\n</strong>"; ptr += USER_ID; ptr += USER_KEY; ptr += "0"; // device ID
DonZalmrolParticipantGetting a step closer.
I now have a correctly formed json to upload the following data:
10:10:12.021 -> { 10:10:12.021 -> "id": "0", 10:10:12.021 -> "latitude": "50.989699", 10:10:12.021 -> "longitude": "3.503907", 10:10:12.021 -> "altitude": "12", 10:10:12.021 -> "city": "Deinze", 10:10:12.021 -> "country": "BE", 10:10:12.021 -> "detector": "SI22G", 10:10:12.021 -> "factor": "0.001714", 10:10:12.068 -> "timefirst": 1621411811, 10:10:12.068 -> "cpm": 86, 10:10:12.068 -> "temperature": 22, 10:10:12.068 -> "humidity": 49, 10:10:12.068 -> "voltage": 406.395 10:10:12.068 -> }
However I still see nothing in my dashboard. Believe the issue is still in my authentication.
Current partial code for uradmon connection:
// Upload json to the uradmonitor.com server void connecToURadMonLogger() { WiFiClient client; if(retry < 3) { if (client.connect("data.uradmonitor.com", 443)) { if(client.connected()) { Serial.println(F("Connection to urad monitoring platform succeeded!")); uploadJson["timefirst"] = timeClient.getEpochTime(); uploadJson["cpm"] = totalCount_3; uploadJson["temperature"] = dht.getTemperature(); uploadJson["humidity"] = dht.getHumidity(); uploadJson["voltage"] = displayTubeVoltage(); // Below does not work String ptr = "GET /data.uradmonitor.com/api/v1/upload/exp/01/"; ptr += "X-User-id:%s\r\nX-User-hash:%s\r\nX-Device-id:%08lX\r\n"; ptr += USER_ID; ptr += USER_KEY; ptr += "0"; serializeJsonPretty(uploadJson, ptr); serializeJsonPretty(uploadJson, Serial); // Print out pointer (ptr) client.print(ptr); Serial.println(F("\n")); Serial.println("Uploaded cpm = " + String(totalCount_3)); uploadOk = true; retry = 0; // 5 blinks for 50 ms blinkLedUpload(5, 50); client.flush(); // Flush connection client.stop(); // Stop client delay(5);// Give some time to stop Serial.println(F("Connection to urad monitoring platform Disconnected.")); } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to urad monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to urad monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { Serial.println("Rebooting due uradmonitoring failed connection"); ESP.restart(); } }
The used user-id and key I get from my dashboard. For my device ID how can I generate (or request) the correct ID I could use?
First time using json queries, so its pretty new to me 😉DonZalmrolParticipantI use WifiServer instead of WebServer which means that the original code from the opensource version uploads it data to uRadmonitor on a different manner then what I’m currently using to do a HTTPS using the WifiServer options.
Below is my current code which works for uploading it to another platform (Radmon) at this moment.
Would love to also getting it to work to upload it uRadmonitor to provide the other sensors that I can monitor already through my build in webserver page.The json query will take a bit of work but I’m hoping I will be able to do that on my own. My main concern now is how to do the upload to uRadmonitor.
Thx!
#include <Arduino.h> #include <heltec.h> #include <WiFi.h> #include <movingAvg.h> #include <esp_task_wdt.h> #include <Preferences.h> #include <DHTesp.h> #include <ArduinoJson.h> Preferences preferences; DHTesp dht; #define WDT_TIMEOUT 15 //15 seconds WDT // Tube dead time in seconds // SI-22G = 0.000xxx seconds // SBM-20 = 0.000190 seconds #define tubeDeadTime 0.000190 // define Radiation DETECTORS #define GEIGER_TUBE_SI22G 0x6 const char *ssid = "YourSSIDNameHere"; const char *password = "YourSSIDPaswordHere"; const long timeoutTime = 5000; WiFiServer server(80); // be.pool.ntp.org unsigned long currentMillis = 0; unsigned long previousMillis_1 = 0, previousMillis_2 = 0, previousMillis_3 = 0, previousMillis_4 = 0; unsigned long ONE_WEEK = 7ul * 24ul * 60ul * 60ul * 1000ul; unsigned long cps_1 = 0, cps_2 = 0; unsigned long cpm_1 = 0, cpm_2 = 0; unsigned long actual_cps_1 = 0, actual_cps_2 = 0; unsigned long actual_cpm_1 = 0, actual_cpm_2 = 0; unsigned long totalCount_3 = 0; int sensorMovingAvg_3 = 0; int tenSecCount = 0; int increaseSecCount = 0; int retry = 0; unsigned long weekCPMCtr = 0, totCPMCtr = 0, prevcpm_1 = 0, prevcpm_2 = 0, prevACPM = 0, prevMACPM = 0; float currentTemp = 0.0, currentHumidity = 0.0; // Set sensor to 120 data points for moving average (2x 60 second data entry points) movingAvg sensor_3(120); boolean event1 = false, event2 = false; boolean uploadOk = false; boolean buttonShowLCD = false; // RADMON credentials const char *UserName = "username"; const char *DataSendingPassWord = "password"; void setup() { // True = Display, False = LoRa, True = Serial Heltec.begin(true, false, true); Heltec.display->flipScreenVertically(); Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->setFont(ArialMT_Plain_10); Heltec.display->clear(); Heltec.display->drawString(0, 0, "GM SI-22G"); Heltec.display->drawString(0, 10, "Stationary Logger"); Heltec.display->drawString(0, 20, "V5"); Heltec.display->drawString(0, 40, "By Don Zalmrol"); Heltec.display->display(); delay(3000); Heltec.display->clear(); // Connect to the WiFi WiFiSetup(); delay(10); // Initialize variables cps_1 = 0, cps_2 = 0; cpm_1 = 0, cpm_2 = 0; actual_cps_1 = 0, actual_cps_2 = 0; sensorMovingAvg_3 = 0; tenSecCount = 0; increaseSecCount = 0; // Initialize sensor sensor_3.begin(); // Initialize Arduino pins pinMode(0, INPUT_PULLUP); // Set pin0 (GPIO0) input for button (PCB and external) pinMode(25, OUTPUT); // Set pin25 (GPIO25) as output for LED upload = OK pinMode(34, INPUT_PULLUP); // Set pin12 (GPIO12) input for capturing GM Tube events pinMode(35, INPUT_PULLUP); // Set pin14 (GPIO14) input for capturing GM Tube events pinMode(21, OUTPUT); // Set pin21 (GPIO21) as output for OLED pinMode(26, OUTPUT); // Set pin04 (GPIO26) as output for LED // Allow external interrupts on INT0 and INT1 attachInterrupt(digitalPinToInterrupt(34), tube_impulse1, FALLING); //define external interrupts attachInterrupt(digitalPinToInterrupt(35), tube_impulse2, FALLING); //define external interrupts // Set pin13 (GPIO13) as input for DHT sensor dht.setup(13, DHTesp::DHT11); Serial.println(F("--- Start program ---")); Serial.println(F("\n")); // Initialize UART on 115200 baud rate for ethernet shield Serial.begin(115200); delay(1000); // Initialize watchdog Serial.println(F("\n")); Serial.println(F("Initializing WatchDogTimer (WDT).")); Serial.println(F("\n")); esp_task_wdt_init(WDT_TIMEOUT, true); //enable panic so ESP32 restarts esp_task_wdt_add(NULL); //add current thread to WDT watch // Open Preferences with my-app namespace. Each application module, library, etc // has to use a namespace name to prevent key name collisions. We will open storage in // RW-mode (second parameter has to be false). // Note: Namespace name is limited to 15 chars. //preferences.begin("GM-SI-22G", false); // Remove all preferences under the opened namespace //preferences.clear(); // Or remove the counter key only //preferences.remove("weekCPMCtr"); // Close the Preferences //preferences.end(); } void loop() { newclient(); currentMillis = millis(); // if button is pressed set LCD bool to true // turn on LCD if((digitalRead(0)== LOW) && (buttonShowLCD == false)) { buttonShowLCD = true; Serial.println("button pushed = " + String(digitalRead(0))); } // turn off LCD if(buttonShowLCD == false) { Heltec.display->clear(); Heltec.display->setContrast(0); Heltec.display->display(); } if ((event1 == true) || (event2 == true)) { // 1 blink for 50 ms blinkLed(1, 50); event1 = false, event2 = false; } // If reached 01 seconds if (currentMillis - previousMillis_1 > 1000) { previousMillis_1 = currentMillis; increaseSecCount++; // Recalute with tube dead time accounted for actual CPS actual_cps_1 = (cps_1 / (1- (cps_1 * tubeDeadTime))); actual_cps_2 = (cps_2 / (1- (cps_2 * tubeDeadTime))); actual_cpm_1 = (cpm_1 / (1- (cpm_1 * tubeDeadTime))); actual_cpm_2 = (cpm_2 / (1- (cpm_2 * tubeDeadTime))); // Add a new datapoint to the moving average array // Add both tubes sensors to the combination sensorMovingAvg_3 = sensor_3.reading(actual_cps_1); sensorMovingAvg_3 = sensor_3.reading(actual_cps_2); Serial.println(F("--- 01 sec ---")); Serial.println("| Tube 1 " + String(increaseSecCount) + " sec current count (cps_1) = " + String(actual_cps_1)); Serial.println("| Tube 2 " + String(increaseSecCount) + " sec current count (cps_2) = " + String(actual_cps_2)); Serial.println("| Tubes current total mavg " + String(increaseSecCount) + " sec current count = " + String(sensorMovingAvg_3)); Serial.println(F("--- 01 sec ---")); // Print to LCD if(buttonShowLCD) { Heltec.display->clear(); Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->drawString(0, 0, "Current sec. = " + String(increaseSecCount) + " of 60"); Heltec.display->drawString(0, 10, "CPS 1 = " + String(actual_cps_1) + " | CPS 2 = " + String(actual_cps_2)); Heltec.display->drawString(0, 20, "MA-CPS = " + String(sensorMovingAvg_3)); Heltec.display->drawString(0, 30, "Current uSv = " + String(outputSieverts(sensorMovingAvg_3))); Heltec.display->drawString(0, 40, "Tubes voltage = " + String(displayTubeVoltage()) + " V"); Heltec.display->drawString(0, 50, "Last Upload = " + String(uploadOk) + " | retry = " + String(retry)); Heltec.display->display(); } } // If reached 10 seconds if (currentMillis - previousMillis_2 > 10000) { previousMillis_2 = currentMillis; tenSecCount++; // Print out for closing the 01 sec group Serial.println(F("--- 01 sec ---")); // Print new line Serial.println(F("\n")); Serial.println(F("--- 10 sec ---")); Serial.println("| count " + String(tenSecCount) + " of 6 x 10 seconds"); Serial.println("| Tubes voltage = " + String(displayTubeVoltage()) + " V"); Serial.println("| Resetting WDT"); Serial.println(F("--- 10 sec ---")); // Print new line Serial.println(F("\n")); // Reset WatchDogTimer esp_task_wdt_reset(); } // If reached 60 seconds if (currentMillis - previousMillis_3 > 60000) { previousMillis_3 = currentMillis; totalCount_3 = sensor_3.getAvg(); // Print new line Serial.println(F("\n")); Serial.println(F("--- 60 sec ---")); Serial.println("| Tube 1 current 60 sec total count = " + String(actual_cpm_1) + " cpm_1"); Serial.println("| Tube 2 current 60 sec total counts = " + String(actual_cpm_2) + " cpm_2"); Serial.println("| Total current 60 sec mavg count = " + String(totalCount_3) + " counts"); Serial.println("| uSV = " + String(outputSieverts(totalCount_3)) + " uSV"); Serial.println("| Temperature = " + String(dht.getTemperature()) + "°C"); Serial.println("| Humidity = " + String(dht.getHumidity()) + "%"); Serial.println(F("--- 60 sec ---")); // Print new line Serial.println(F("\n")); // Print to LCD if(buttonShowLCD) { Heltec.display->clear(); Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->drawString(0, 0, "Current second = " + String(increaseSecCount)); Heltec.display->drawString(0, 10, "CPS 1 = " + String(actual_cps_1) + " | CPS 2 = " + String(actual_cps_2)); Heltec.display->drawString(0, 20, "MA-CPS total = " + String(totalCount_3)); Heltec.display->drawString(0, 30, "Current uSv = " + String(outputSieverts(totalCount_3))); Heltec.display->drawString(0, 40, "Tubes voltage = " + String(displayTubeVoltage()) + " V"); Heltec.display->drawString(0, 50, "Last upload = " + String(uploadOk) + " | retry = " + String(retry)); Heltec.display->display(); } Serial.println(F("\n")); // Store vars into Flash memory of ESP32 // Minute CPM tube 1, Minute CPM tube 2, total count storeInFlash(actual_cpm_1, actual_cpm_2, totalCount_3); // Connect to RadMon.org connecToRadMonLogger(); // Reset variables cps_1 = 0, cps_2 = 0; cpm_1 = 0, cpm_2 = 0; actual_cps_1 = 0, actual_cps_2 = 0; actual_cpm_1 = 0, actual_cpm_2 = 0; totalCount_3 = 0; sensorMovingAvg_3 = 0; tenSecCount = 0; increaseSecCount = 0; sensor_3.reset(); buttonShowLCD = false; // Print new line Serial.println(F("\n")); } // If one week uptime has been reached, reboot device for maintenance. if (currentMillis - previousMillis_4 >= ONE_WEEK) { previousMillis_4 = currentMillis; Serial.println(F("Weekly reboot")); // Clear from Flash Memory clearFromFlash(); // Restart ESP32 ESP.restart(); } } //------------------------// //--- START functions ---// //----------------------// void WiFiSetup() { Serial.println(F("\n")); Serial.println("Connecting to = " + String(ssid)); WiFi.begin(ssid, password); // Set up Wifi connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } if(WiFi.status() == WL_CONNECTED) { Serial.println(F("\n")); Serial.println(F("WiFi connected")); Serial.println("IP address = " + String(WiFi.localIP().toString())); Serial.println("Gateway = " + String(WiFi.gatewayIP().toString())); Serial.println("SubnetMask = " + String(WiFi.subnetMask().toString())); Serial.println("DNS 1 = " + String(WiFi.dnsIP(0).toString())); Serial.println("DNS 2 = " + String(WiFi.dnsIP(1).toString())); Serial.println("MAC = " + String(WiFi.macAddress())); server.begin(); Serial.println(F("HTTP server started")); Serial.println(F("\n")); } // Wifi is not connected else { Serial.println(F("WiFi NOT connected")); Serial.println(F("HTTP server NOT started")); Serial.println(F("\n")); WiFiSetup(); // Try again } } // Start webserver client void newclient() { WiFiClient client = server.available(); // listen for incoming clients // if you get a client connection if (client) { Serial.println(F("New remote client connection.")); while (client.connected() && currentMillis - previousMillis_1 <= timeoutTime) { currentMillis = millis(); String uploadOkStatus = "Failed"; if(uploadOk == 1) { uploadOkStatus = "Succeeded"; } else { uploadOkStatus = "Failed"; } // Get vars from Flash memory of ESP32 readFromFlash(); String color = "#00FF00"; if(outputSieverts(weekCPMCtr) <= 1000) { color = "#00FF00"; } else if(outputSieverts(weekCPMCtr) >= 1001 & outputSieverts(weekCPMCtr) <= 3000) { color = "#FFFF00"; } else { color = "#FF0000"; } String ptr = "HTTP/1.1 200 OK;\n"; ptr += "Content-type:text/html\n"; ptr += "\n"; ptr += "<!DOCTYPE html lang='en'>\n"; ptr += "<html>\n"; ptr += "<head>\n"; ptr += "<title>GM SI-22G : Stationary Logger</title>\n"; ptr += "<style>\n"; ptr += "table { font-family: arial, sans-serif; border-collapse: collapse; width: 100%; }\n"; ptr += "td, th { border: 1px solid #dddddd; text-align: left; padding: 8px; }\n"; ptr += "tr:nth-child(even) { background-color: #dddddd; }\n"; ptr += "</style>\n"; ptr += "</head>\n"; ptr += "<body>\n"; ptr += "<center><h2>GM SI-22G : Stationary Logger</h2></center>\n"; ptr += "<table>\n"; ptr += "<caption>60 seconds results</caption>\n"; ptr += "<tr>\n"; ptr += "<th>Description</th>\n"; ptr += "<th>Value</th>\n"; ptr += "<th>Symbol</th>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Counts Per Second Tube 1</td>\n"; ptr += "<td>" + String(actual_cps_1) + "</td>\n"; ptr += "<td>CPS</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Counts Per Second Tube 2</td>\n"; ptr += "<td>" + String(actual_cps_2) + "</td>\n"; ptr += "<td>CPS</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Moving Average Counts Per Second Tubes 1+2</td>\n"; ptr += "<td>" + String(sensorMovingAvg_3) + "</td>\n"; ptr += "<td>maCPS</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>µSieverts</td>\n"; ptr += "<td>" + String(outputSieverts(sensorMovingAvg_3)) + "</td>\n"; ptr += "<td>µSV ☢</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Tubes High Voltage</td>\n"; ptr += "<td>" + String(displayTubeVoltage()) + "</td>\n"; ptr += "<td>V</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Temperature</td>\n"; ptr += "<td>" + String(dht.getTemperature()) + "</td>\n"; ptr += "<td>℃</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Humidity</td>\n"; ptr += "<td>" + String(dht.getHumidity()) + "</td>\n"; ptr += "<td>%</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td colspan='3'><center>Current second <b>" + String(increaseSecCount) + "</b> of <b>60</b> results</center></td>\n"; ptr += "</tr>\n"; ptr += "</table>\n"; ptr += "<br /> \n"; ptr += "<table>\n"; ptr += "<caption>Previous minute results</caption>\n"; ptr += "<tr>\n"; ptr += "<th>Description</th>\n"; ptr += "<th>Value</th>\n"; ptr += "<th>Symbol</th>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Counts Per Minute Tube 1</td>\n"; ptr += "<td>" + String(prevcpm_1) + "</td>\n"; ptr += "<td>CPM</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Counts Per Minute Tube 2</td>\n"; ptr += "<td>" + String(prevcpm_2) + "</td>\n"; ptr += "<td>CPM</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Moving Average Counts Per Minute Tubes 1+2</td>\n"; ptr += "<td>" + String(prevMACPM) + "</td>\n"; ptr += "<td>maCPM</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>µSieverts</td>\n"; ptr += "<td>" + String(outputSieverts(prevMACPM)) + "</td>\n"; ptr += "<td>µSV ☢</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Last upload</td>\n"; ptr += "<td>" + String(uploadOkStatus) + "</td>\n"; ptr += "<td>Succeeded or Failed</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Retry count</td>\n"; ptr += "<td>" + String(retry) + "</td>\n"; ptr += "<td>of 3</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td colspan='3'><center>Previous minute results</center></td>\n"; ptr += "</tr>\n"; ptr += "</table>\n"; ptr += "<br /> \n"; ptr += "<table>\n"; ptr += "<caption>Week results</caption>\n"; ptr += "<tr>\n"; ptr += "<th>Description</th>\n"; ptr += "<th>Value</th>\n"; ptr += "<th>Symbol</th>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Total Counts this week</td>\n"; ptr += "<td>" + String(weekCPMCtr) + "</td>\n"; ptr += "<td>CPM</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Total µSieverts max dosage this week</td>\n"; ptr += "<td><progress value=" + String(outputSieverts(weekCPMCtr)) + " max='5000'>" + String(outputSieverts(weekCPMCtr)) + "</progress></td>\n"; ptr += "<td>µSV ☢</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td style='background-color:" + String(color) + "'>Total µSieverts max this week</td>\n"; ptr += "<td style='background-color:" + String(color) + "'>" + String(outputSieverts(weekCPMCtr)) + "</td>\n"; ptr += "<td style='background-color:" + String(color) + "'>Of max 5000 µSV (5 mSV) ☢</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td colspan='3'><center><b>7 day results</b></center></td>\n"; ptr += "</tr>\n"; ptr += "</table>\n"; ptr += "<br /> \n"; ptr += "<table>\n"; ptr += "<caption>Total results since start of counting on 2021-05-01</caption>\n"; ptr += "<tr>\n"; ptr += "<th>Description</th>\n"; ptr += "<th>Value</th>\n"; ptr += "<th>Symbol</th>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Total Counts</td>\n"; ptr += "<td>" + String(totCPMCtr) + "</td>\n"; ptr += "<td>CPM</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td>Total µSieverts</td>\n"; ptr += "<td>" + String(outputSieverts(totCPMCtr)) + "</td>\n"; ptr += "<td>µSV ☢</td>\n"; ptr += "</tr>\n"; ptr += "<tr>\n"; ptr += "<td colspan='3'><center><b>Total counting results</b></center></td>\n"; ptr += "</tr>\n"; ptr += "</table>\n"; ptr += "</body>\n"; ptr += "</html>\n"; ptr += "\n"; // Print out pointer (ptr) client.print(ptr); // Flush connection client.flush(); // break out of the while loop: break; } client.flush(); // Flush connection again client.stop(); // Stop client delay(5);// Give some time to stop Serial.println(F("Remote client disconnected.")); } } // GM Tube fastpulse 01 counting void tube_impulse1() { cps_1++; cpm_1++; event1 = true; } // GM Tube fastpulse 02 counting void tube_impulse2() { cps_2++; cpm_2++; event2 = true; } // Convert cpm_1 to uSV float outputSieverts(float x) { // 0.001714 value for SI-22G float y = x * 0.001714; return y; } // Measure Tube voltage through A0 float displayTubeVoltage() { // read the input on analog pin 27: float adcInput = analogRead(27); // Convert the analog reading (12bit resolution which goes from 0 - 4095) to a voltage (0 - 3.3V): // actual lowVoltage = ( adcInput x 3.3V ) / 4095.0 Resolution float lowVoltage = ((adcInput * 3.3) / 4095.0); // Rule of 3 to calculate approx HV //float highVoltage = ((lowVoltage * 400) / 2); // ~190-195 conversion factor according to Alex - RH Electronics 2021-03-15 // ~171 calculated on 2021-04-01 for Arduino // 123.15 calcultated on 2021-05-04 for ESP32 float highVoltage = (lowVoltage * 123.15); // Print out voltage //Serial.println("| Tubes HV = " + String(highVoltage) + " Volts, A0 LV = " + String(lowVoltage)); return highVoltage; } // Blink the LED (blinks, time) void blinkLed(int blinks, int time) { for (int i = 0; i < blinks; i++) { digitalWrite(26, HIGH); delay(time); digitalWrite(26, LOW); delay(time); } } // Blink the LED (blinks, time) void blinkLedUpload(int blinks, int time) { for (int i = 0; i < blinks; i++) { digitalWrite(25, HIGH); delay(time); digitalWrite(25, LOW); delay(time); } } // Read from Flash Memory void readFromFlash() { // Open namespace with RW-mode enabled (false) preferences.begin("GM-SI-22G", false); // Get the counter value, if the key does not exist, return a default value of 0 // Note: Key name is limited to 15 chars. weekCPMCtr = preferences.getULong("weekCPMCtr", 0); totCPMCtr = preferences.getULong("totCPMCtr", 0); prevcpm_1 = preferences.getULong("prevcpm_1", 0); prevcpm_2 = preferences.getULong("prevcpm_2", 0); prevMACPM = preferences.getULong("prevMACPM", 0); // Close the Preferences preferences.end(); } // Store into Flash Memory // void storeInFlash(unsigned long totalCountVar) void storeInFlash(unsigned long actual_cpm_1, unsigned long actual_cpm_2, unsigned long totalCount_3) { // Open namespace with RW-mode enabled (false) preferences.begin("GM-SI-22G", false); // Increment weekly counts and usv with 60 second and store data weekCPMCtr = preferences.getULong("weekCPMCtr", 0) + totalCount_3; preferences.putULong("weekCPMCtr", weekCPMCtr); // Increment total counts and usv with 60 second and store data totCPMCtr = preferences.getULong("totCPMCtr", 0) + totalCount_3; preferences.putULong("totCPMCtr", totCPMCtr); // Store the counters to the Preferences preferences.putULong("prevcpm_1", actual_cpm_1); preferences.putULong("prevcpm_2", actual_cpm_2); preferences.putULong("prevMACPM", totalCount_3); // Close the Preferences preferences.end(); } // Clear from the Flash Memory void clearFromFlash() { // Open namespace with RW-mode enabled (false) preferences.begin("GM-SI-22G", false); // Remove all preferences under the opened namespace //preferences.clear(); // Or remove the counter key only preferences.remove("weekCPMCtr"); // Close the Preferences preferences.end(); } // Upload totalCount_3 to the RadMon.org server void connecToRadMonLogger() { WiFiClient client; if(retry < 3) { //if (client.connect(radmonServerIP, radmonServerPort)) if (client.connect("radmon.org", 80)) { if(client.connected()) { Serial.println(F("Connection to radmon monitoring platform succeeded!")); client.print(F("GET /radmon.php?function=submit&user=")); client.print(UserName); client.print(F("&password=")); client.print(DataSendingPassWord); client.print(F("&value=")); client.print(totalCount_3); client.print(F("&unit=CPM")); client.println(F("HTTP/1.0")); client.println(F("HOST: radmon.org")); //client.println(); client.println(F("")); Serial.println("Uploaded cpm = " + String(totalCount_3)); uploadOk = true; retry = 0; // 5 blinks for 50 ms blinkLedUpload(5, 50); client.flush(); // Flush connection client.stop(); // Stop client delay(5);// Give some time to stop Serial.println(F("Connection to radmon monitoring platform Disconnected.")); } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to radmon monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to radmon monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { Serial.println("Reboot"); ESP.restart(); } } // Upload totalCount_3 to the uradmonitor.com server void connecToURadMonLogger() { WiFiClient client; if(retry < 3) { if (client.connect("data.uradmonitor.com", 443)) { if(client.connected()) { Serial.println(F("Connection to urad monitoring platform succeeded!")); // Below does not work String ptr = "GET /data.uradmonitor.com/api/v1/upload/exp/01/"; ptr += increaseSecCount; ptr += totalCount_3; ptr += GEIGER_TUBE_SI22G; ptr += "\n"; // Print out pointer (ptr) client.print(ptr); Serial.println("Uploaded cpm = " + String(totalCount_3)); uploadOk = true; retry = 0; // 5 blinks for 50 ms blinkLedUpload(5, 50); client.flush(); // Flush connection client.stop(); // Stop client delay(5);// Give some time to stop Serial.println(F("Connection to urad monitoring platform Disconnected.")); } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to urad monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { // you didn't get a connection to the Radmon server: Serial.println(F("Connection to urad monitoring platform failed!")); client.flush(); // Flush connection client.stop(); // Stop client delay(1);// Give some time to stop uploadOk = false; retry++; } } else { Serial.println("Reboot"); ESP.restart(); } }
DonZalmrolParticipantStrange, I’m trying to reply but looks like my other reply isn’t getting through…
Could it be blocked as it contains URLs? -
AuthorPosts