diff --git a/README.md b/README.md index b726675..e040c1c 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,19 @@ need root certificates openssl s_client -showcerts -connect www.bigfoot-inc.com:443 -openssl s_client -showcerts -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 \ No newline at end of file +openssl s_client -showcerts -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 + +to get full certificate and save it to pem file: +openssl s_client -showcerts -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 /dev/null|openssl x509 -outform PEM >mycertfile.pem + +openssl s_client -showcerts -verify 5 -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 < /dev/null + +openssl s_client -showcerts -verify 5 -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 < /dev/null | + awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{ if(/BEGIN CERTIFICATE/){a++}; out="cert"a".pem"; print >out}' +for cert in *.pem; do + newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p' | tr '[:upper:]' '[:lower:]').pem + echo "${newname}"; mv "${cert}" "${newname}" +done + +convert crl to pem +openssl crl -in "Microsoft Azure ECC TLS Issuing CA 08 - xsign.crt" -inform PEM -out "Microsoft Azure ECC TLS Issuing CA 08 - xsign.pem" diff --git a/main/MqttService.cpp b/main/MqttService.cpp index 0b95898..8865925 100644 --- a/main/MqttService.cpp +++ b/main/MqttService.cpp @@ -42,8 +42,18 @@ void MqttService::task() while (!m_mqtt_client->connected()) { ESP_LOGI(TAG, "connecting to mqtt broker..."); - if (m_mqtt_client->connect("Esp32 client", "client1-authn-ID", NULL)) + if (m_mqtt_client->connect("Esp32 client", "client1-authn-ID", NULL)) + { ESP_LOGI(TAG, "connected"); + if(m_mqtt_client->subscribe("my_topic")) + { + ESP_LOGI(TAG, "subscribed"); + } + else + { + ESP_LOGE(TAG, "subscribe failed"); + } + } else { ESP_LOGE(TAG, "failed with state %d", m_mqtt_client->state()); diff --git a/main/SensorData.cpp b/main/SensorData.cpp index 7995b94..d95f531 100644 --- a/main/SensorData.cpp +++ b/main/SensorData.cpp @@ -10,7 +10,6 @@ void createHeader(struct MESSAGE_HEADER * header) { struct timeval tv; gettimeofday(&tv, NULL); - header->type = MESSAGE_TYPE_HEADER; header->sec = tv.tv_sec; header->usec = tv.tv_usec; header->group_id = SETTINGS.device.group_id; diff --git a/main/SensorData.h b/main/SensorData.h index 4782632..01c3c98 100644 --- a/main/SensorData.h +++ b/main/SensorData.h @@ -6,143 +6,89 @@ #pragma pack(push, 1) -struct MESSAGE_HEADER // 19 bytes +struct MESSAGE_HEADER // 18 bytes { - uint8_t type; uint32_t sec; uint32_t usec; uint8_t mac[6]; uint32_t group_id; }; -struct MESSAGE_TYPE_VAL_REASON +struct MESSAGE_RADAR_BLOCK // 67 bytes { - uint8_t type; - uint32_t val; - uint8_t reason; -}; - -struct RADAR // 49 -{ - uint8_t type; + struct MESSAGE_HEADER header; + uint8_t id; uint16_t vals[24]; }; -struct GAS_HEADER // 2 bytes -{ - uint8_t type; - uint8_t num_measurements; -}; - -struct GAS_DATA //5 bytes +struct GAS_DATA { uint8_t index; - float gas_resistance; + float resistance; }; -struct OTHERS +struct MESSAGE_SENSORS_BLOCK { + struct MESSAGE_HEADER header; + uint8_t id; float pressure; - float temp; + float temperature; uint16_t light; + float humidity; + uint8_t num_data; + struct GAS_DATA data[0]; }; -struct GAS // 6 + num_gas_data * 5 +struct MESSAGE_NOTIFY_PRESSURE { - struct GAS_HEADER header; - float humidity; - struct GAS_DATA data[0]; + struct MESSAGE_HEADER header; + uint8_t id; + float value; +}; + +struct MESSAGE_NOTIFY_TEMPERATURE +{ + struct MESSAGE_HEADER header; + uint8_t id; + float value; +}; + +struct MESSAGE_NOTIFY_HUMIDITY +{ + struct MESSAGE_HEADER header; + uint8_t id; + float value; +}; + +struct MESSAGE_NOTIFY_LIGHT // 21 bytes +{ + struct MESSAGE_HEADER header; + uint8_t id; + uint16_t value; }; #pragma pack(pop) -#define HEADER_MESSAGE(name_) \ - struct MESSAGE_HEADER name_; \ - createHeader(&name_); +#define MQTT_MESSAGE_BLOCK_RADAR(msgaddr_) \ + createHeader(&(*msgaddr_).header); \ + (msgaddr_)->id = MESSAGE_TYPE_BLOCK_RADAR; -#define HEADER_MESSAGE_P(addr_) \ - createHeader(addr_); +#define MQTT_MESSAGE_BLOCK_SENSOR(msgaddr_) \ + createHeader(&(*msgaddr_).header); \ + (msgaddr_)->id = MESSAGE_TYPE_BLOCK_SENSOR; -#define PRESSURE_MESSAGE(name_, val_, reason_) \ - struct MESSAGE_TYPE_VAL_REASON name_; \ - name_.type = MESSAGE_TYPE_PRESSURE; \ - name_.val = val_; name_.reason = reason_; +#define MQTT_MESSAGE_NOTIFY_LIGHT(msgaddr_) \ + createHeader(&(msgaddr_)->header); \ + (msgaddr_)->id = MESSAGE_TYPE_NOTIFY_LIGHT; -#define PRESSURE_MESSAGE_P(addr_, val_, reason_) \ - (addr)->type = MESSAGE_TYPE_PRESSURE; \ - (addr)->val = val_; (addr)->reason = reason_; -#define LIGHT_MESSAGE(name_, val_, reason_) \ - struct MESSAGE_TYPE_VAL_REASON name_; \ - name_.type = MESSAGE_TYPE_LIGHT; \ - name_.val = val_; name_.reason = reason_; +#define MESSAGE_TYPE_NOTIFY_PRESSURE 0x01 +#define MESSAGE_TYPE_NOTIFY_TEMPERATURE 0x02 +#define MESSAGE_TYPE_NOTIFY_HUMIDITY 0x03 +#define MESSAGE_TYPE_NOTIFY_LIGHT 0x04 -#define LIGHT_MESSAGE_P(addr_, val_, reason_) \ - (addr_)->type = MESSAGE_TYPE_LIGHT; \ - (addr_)->val = val_; (addr_)->reason = reason_; - -#define TEMP_MESSAGE(name_, val_, reason_) \ - struct MESSAGE_TYPE_VAL_REASON name_; \ - name_.type = MESSAGE_TYPE_TEMP; \ - name_.val = val_; name_.reason = reason_; - -#define TEMP_MESSAGE_P(addr_, val_, reason_) \ - (addr_)->type = MESSAGE_TYPE_TEMP; \ - (addr_)->val = val_; (addr_)->reason = reason_; - -#define HUM_MESSAGE(name_, val_, reason_) \ - struct MESSAGE_TYPE_VAL_REASON name_; \ - name_.type = MESSAGE_TYPE_HUMIDITY; \ - name_.val = val_; name_.reason = reason_; - -#define HUM_MESSAGE_P(addr_, val_, reason_) \ - (addr_)->type = MESSAGE_TYPE_HUMIDITY; \ - (addr_)->val = val_; (addr_)->reason = reason_; - -#define GAS_IX_MESSAGE(name_, val_, reason_) \ - struct MESSAGE_TYPE_VAL_REASON name_; \ - name_.type = MESSAGE_TYPE_GAS_IX; \ - name_.val = val_; name_.reason = reason_; - -#define GAS_IX_MESSAGE_P(addr_, val_, reason_) \ - (addr_)->type = MESSAGE_TYPE_GAS_IX; \ - (addr_)->val = val_; (addr_)->reason = reason_; - -#define GAS_VAL_MESSAGE(name_, val_, reason_) \ - struct MESSAGE_TYPE_VAL_REASON name_; \ - name_.type = MESSAGE_TYPE_GAS_VAL; \ - name_.val = val_; name_.reason = reason_; - -#define GAS_VAL_MESSAGE_P(addr_, val_, reason_) \ - (addr_)->type = MESSAGE_TYPE_GAS_VAL; \ - (addr_)->val = val_; (addr_)->reason = reason_; - -#define RADAR_MESSAGE(name_) \ - struct RADAR name_; \ - name_.type = MESSAGE_TYPE_RADAR; - -#define RADAR_MESSAGE_P(addr_) \ - (addr_)->type = MESSAGE_TYPE_RADAR; - -#define GAS_MESSAGE(name_, num_vals_) \ - struct GAS name_; \ - name_.header.type = MESSAGE_TYPE_GAS; \ - name_.header.num_measurements = num_vals_; - -#define GAS_MESSAGE_P(addr_, num_vals_) \ - (addr_)->header.type = MESSAGE_TYPE_GAS; \ - (addr_)->header.num_measurements = num_vals_; - -#define MESSAGE_TYPE_HEADER 0xa5 -#define MESSAGE_TYPE_PRESSURE 0x04 -#define MESSAGE_TYPE_RADAR 0x37 -#define MESSAGE_TYPE_LIGHT 0x06 -#define MESSAGE_TYPE_TEMP 0x07 -#define MESSAGE_TYPE_HUMIDITY 0x08 -#define MESSAGE_TYPE_GAS_IX 0x09 // deprecated -#define MESSAGE_TYPE_GAS_VAL 0x0a // deprecated -#define MESSAGE_TYPE_GAS 0x0b -#define MESSAGE_TYPE_SENSOR_BLOCK 0x0c +#define MESSAGE_TYPE_BLOCK_RADAR 0x10 +#define MESSAGE_TYPE_BLOCK_SENSOR 0x11 void createHeader(struct MESSAGE_HEADER * header); diff --git a/main/sensors/Bme68x.cpp b/main/sensors/Bme68x.cpp index aa16f1c..3da97f1 100644 --- a/main/sensors/Bme68x.cpp +++ b/main/sensors/Bme68x.cpp @@ -55,8 +55,6 @@ bool Bme68x::read(struct BME_DATA * data) { int ix = _min(bdata.gas_index, 9); - ESP_LOGW(TAG, "index: %d", ix); - data->measurement_bitmask |= (1 << ix); if(ix == 0) diff --git a/main/sensors/Bmp280.cpp b/main/sensors/Bmp280.cpp index 82d5018..9121406 100644 --- a/main/sensors/Bmp280.cpp +++ b/main/sensors/Bmp280.cpp @@ -16,7 +16,7 @@ bool Bmp280::init() uint8_t status = m_sensor->begin(0x76); m_sensor->setPresOversampling(OVERSAMPLING_X4); // Set the pressure oversampling to X4 m_sensor->setTempOversampling(OVERSAMPLING_X1); // Set the temperature oversampling to X1 - m_sensor->setIIRFilter(IIR_FILTER_2); // Set the IIR filter to setting 4 + m_sensor->setIIRFilter(IIR_FILTER_4); // Set the IIR filter to setting 4 m_sensor->setTimeStandby(TIME_STANDBY_62MS); m_sensor->startNormalConversion(); // Start BMP280 continuous conversion in NORMAL_MODE @@ -28,9 +28,7 @@ bool Bmp280::init() bool Bmp280::read(float & temp, float & pressure) { if(m_sensor->getTempPres(temp, pressure)) - { return true; - } - return true; + return false; } \ No newline at end of file diff --git a/main/sensors/SensorService.cpp b/main/sensors/SensorService.cpp index 77ad793..de491c6 100644 --- a/main/sensors/SensorService.cpp +++ b/main/sensors/SensorService.cpp @@ -51,42 +51,47 @@ void SensorService::start() pinMode(LIGHT_SENSOR_PIN, INPUT); } +void::SensorService::processPressure(float pressure) +{ + static float filtered = 0; + static uint64_t previous = esp_timer_get_time(); + + if(filtered == 0 && pressure != 0) + filtered = pressure; + + uint64_t now = esp_timer_get_time(); + + ESP_LOGI(TAG, "delta T: %d", (uint32_t)((now-previous)/1000)); + + filtered = 0.95 * filtered + 0.05 * pressure; + previous = now; + ESP_LOGI(TAG, "%0.3f \t%0.3f", pressure, filtered); +} + void SensorService::postBme68xData(float pressure, float temp) { - struct msg - { - struct MESSAGE_HEADER header; - struct OTHERS others; - struct GAS gas; - }; - - uint8_t msg_buffer[100]; - - struct msg *data_to_send = (struct msg *)msg_buffer; - - HEADER_MESSAGE_P(&data_to_send->header); - GAS_MESSAGE_P(&data_to_send->gas, 0); - - data_to_send->others.light = m_light_value; - data_to_send->others.pressure = pressure; - data_to_send->others.temp = temp; + uint8_t msg_buffer[sizeof(struct MESSAGE_SENSORS_BLOCK) + 10*sizeof(struct GAS_DATA)]; + struct MESSAGE_SENSORS_BLOCK * msg = (struct MESSAGE_SENSORS_BLOCK *)msg_buffer; + MQTT_MESSAGE_BLOCK_SENSOR(msg); + msg->humidity = m_bme_data.humidity; + msg->light = m_light_value; + msg->pressure = pressure; + msg->temperature = temp; int num_total = 0; - struct GAS_DATA * p = data_to_send->gas.data; + struct GAS_DATA * p = msg->data; for(int n = 0; n < 10; n++) { if(m_bme_data.measurement_bitmask & (1 << n)) { - p[num_total].gas_resistance = m_bme_data.measurement[n].resistance; + p[num_total].resistance = m_bme_data.measurement[n].resistance; p[num_total++].index = n; } } + msg->num_data = num_total; - data_to_send->gas.header.num_measurements = num_total; - data_to_send->gas.humidity = m_bme_data.humidity; - - m_app_if.getBuffer()->putBlock((uint8_t*)&data_to_send, sizeof(*data_to_send) + num_total * sizeof(struct GAS_DATA)); + m_app_if.getBuffer()->putBlock((uint8_t*)msg, sizeof(*msg) + num_total * sizeof(struct GAS_DATA)); // clear the blackboard memset(&m_bme_data, 0, sizeof(m_bme_data)); @@ -109,22 +114,15 @@ void SensorService::processLight(int light_value) if(now - last_time >= 2000000) // >= 2s { - ESP_LOGI(TAG, "light: %d", min_light_val); if(last_light_val >= 0) { if(abs(min_light_val - last_light_val) > 4096*5/100) { ESP_LOGI(TAG, "light tripped"); - struct msg - { - struct MESSAGE_HEADER header; - struct MESSAGE_TYPE_VAL_REASON light; - }; - - struct msg m; - HEADER_MESSAGE_P(&m.header); - LIGHT_MESSAGE_P(&m.light, min_light_val, 1); - m_app_if.getBuffer()->putBlock((uint8_t*)&m, sizeof(m)); + struct MESSAGE_NOTIFY_LIGHT msg; + MQTT_MESSAGE_NOTIFY_LIGHT(&msg); + msg.value = min_light_val; + m_app_if.getBuffer()->putBlock((uint8_t*)&msg, sizeof(msg)); } } last_light_val = min_light_val; @@ -139,14 +137,14 @@ void SensorService::run_i2c_1() { while(true) { - m_bmp280->read(m_bmp_data.temp, m_bmp_data.pressure); + if(m_bmp280->read(m_bmp_data.temp, m_bmp_data.pressure)) + processPressure(m_bmp_data.pressure); + bool bme_cycle_finished = m_bme68x->read(&m_bme_data); uint16_t read_light_val = analogRead(LIGHT_SENSOR_PIN); if(bme_cycle_finished) - { postBme68xData(m_bmp_data.pressure, m_bmp_data.temp); - } processLight(read_light_val); @@ -170,25 +168,18 @@ void SensorService::run_uart() if(m_ld2410->stationary_energy[0] != 0) { - struct msg - { - struct MESSAGE_HEADER header; - struct RADAR radar; - }; - - struct msg m; - HEADER_MESSAGE_P(&m.header); - RADAR_MESSAGE_P(&m.radar); + struct MESSAGE_RADAR_BLOCK msg; + MQTT_MESSAGE_BLOCK_RADAR(&msg); for(int n = 0; n < 24; n++) { if(n < 14) - m.radar.vals[n] = m_ld2410->motion_energy[n] > 0xffff ? 0xffff : (uint16_t)m_ld2410->motion_energy[n]; + msg.vals[n] = m_ld2410->motion_energy[n] > 0xffff ? 0xffff : (uint16_t)m_ld2410->motion_energy[n]; else - m.radar.vals[n] = m_ld2410->stationary_energy[n-14] > 0xffff ? 0xffff : (uint16_t)m_ld2410->stationary_energy[n-14]; + msg.vals[n] = m_ld2410->stationary_energy[n-14] > 0xffff ? 0xffff : (uint16_t)m_ld2410->stationary_energy[n-14]; } - m_app_if.getBuffer()->putBlock((uint8_t*)&m, sizeof(m)); + m_app_if.getBuffer()->putBlock((uint8_t*)&msg, sizeof(msg)); ESP_LOGI(TAG, "delta t: %lld", (now - last_read)/1000); last_read = now; diff --git a/main/sensors/SensorService.h b/main/sensors/SensorService.h index 3e7cc2a..a7f55cf 100644 --- a/main/sensors/SensorService.h +++ b/main/sensors/SensorService.h @@ -30,7 +30,7 @@ protected: void postBme68xData(float pressure, float temp); void processLight(int light_value); - void processHumidity(float humidity); + void processPressure(float pressure); uint16_t m_light_value = 0; public: diff --git a/utils/DigiCertGlobalRootG3.crt.pem b/utils/DigiCertGlobalRootG3.crt.pem new file mode 100755 index 0000000..bc20c1e --- /dev/null +++ b/utils/DigiCertGlobalRootG3.crt.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- diff --git a/utils/c1.txt b/utils/c1.txt new file mode 100644 index 0000000..7deba1e --- /dev/null +++ b/utils/c1.txt @@ -0,0 +1,38 @@ +-----BEGIN CERTIFICATE----- +MIIGZTCCBeugAwIBAgITMwAAF5dJwzxVQmn/kwAAAAAXlzAKBggqhkjOPQQDAzBd +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS4w +LAYDVQQDEyVNaWNyb3NvZnQgQXp1cmUgRUNDIFRMUyBJc3N1aW5nIENBIDA4MB4X +DTI0MDYwNjEwNDYzMloXDTI1MDYwMTEwNDYzMlowbDELMAkGA1UEBhMCVVMxCzAJ +BgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg +Q29ycG9yYXRpb24xHjAcBgNVBAMMFSouZXZlbnRncmlkLmF6dXJlLm5ldDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABCROnPe0MEoTPo7mZV7qBXj/gNaEhuTiIfoqzkkE +mayyKiKUh3M8kcNMFKA6Cw5FQpKcJnFgNdHhgK2an2bY16k1Rl+BGdH7cgeW4KxJ +/8BZGCUrcF0XqVYqU1ta2tPSe6OCBFwwggRYMIIBfgYKKwYBBAHWeQIEAgSCAW4E +ggFqAWgAdgDPEVbu1S58r/OHW9lpLpvpGnFnSrAX7KwB0lt3zsw7CAAAAY/tMX1g +AAAEAwBHMEUCIDvK/oTF+17QrKCyrkP+aJu5OOkWwWcdvW+fo0yuDj5TAiEAhIDF +m1B7P4TRY+80nE3klxMaDpXz13W/GFGLu3b/CC0AdwB9WR4S4XgqexxhZ3xe/fjQ +h1wUoE6VnrkDL9kOjC55uAAAAY/tMX5iAAAEAwBIMEYCIQC4AVpEBPNMlmXA6Rgm +jwbxZ12dY4t0y+d3zVmERPSpkQIhAL4eN6aJcxc7AbfCpRVq9MVmmaAgpcin33Ab +Kub+uVlxAHUA4JKz/AwdyOdoNh/eYbmWTQpSeBmKctZyxLBNpW1vVAQAAAGP7TF+ +1gAABAMARjBEAiAmSpLfPIgdhcYH4KeElGfrQAp3mv2UeqXsc+g6Zrl2VgIgP9xH +zAwKA1JmO+GQgQWacfy3opms5EvuTyUL33uw/6UwJwYJKwYBBAGCNxUKBBowGDAK +BggrBgEFBQcDAjAKBggrBgEFBQcDATA8BgkrBgEEAYI3FQcELzAtBiUrBgEEAYI3 +FQiHvdcbgefrRoKBnS6O0AyH8NodXYKE5WmC86c+AgFkAgEmMIG0BggrBgEFBQcB +AQSBpzCBpDBzBggrBgEFBQcwAoZnaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br +aW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBBenVyZSUyMEVDQyUyMFRMUyUyMElzc3Vp +bmclMjBDQSUyMDA4JTIwLSUyMHhzaWduLmNydDAtBggrBgEFBQcwAYYhaHR0cDov +L29uZW9jc3AubWljcm9zb2Z0LmNvbS9vY3NwMB0GA1UdDgQWBBSd0gLTJBBooJfu +lBbYLw4ogSVu0zAOBgNVHQ8BAf8EBAMCB4AwZQYDVR0RBF4wXIIVKi5ldmVudGdy +aWQuYXp1cmUubmV0giIqLndlc3R1czItMS50cy5ldmVudGdyaWQuYXp1cmUubmV0 +gh8qLndlc3R1czItMS5ldmVudGdyaWQuYXp1cmUubmV0MAwGA1UdEwEB/wQCMAAw +agYDVR0fBGMwYTBfoF2gW4ZZaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w +cy9jcmwvTWljcm9zb2Z0JTIwQXp1cmUlMjBFQ0MlMjBUTFMlMjBJc3N1aW5nJTIw +Q0ElMjAwOC5jcmwwZgYDVR0gBF8wXTBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEF +BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9z +aXRvcnkuaHRtMAgGBmeBDAECAjAfBgNVHSMEGDAWgBStVB0DVHHGL17WWxhYzm4k +xdaiCjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwCgYIKoZIzj0EAwMD +aAAwZQIxAIljbWjBlPPC1hJQEy1Pq4V5fPe+F0zNNuk6paj1ZCoqHahiBpvKpYTp +tZlJVKZtpAIwWnTO0WileYRCYWSniZFtliF/HZvgrLoAWd+NGZzdmhjoavdVYZho +0VvfpbsVVech +-----END CERTIFICATE----- + diff --git a/utils/c2.txt b/utils/c2.txt new file mode 100644 index 0000000..8814023 --- /dev/null +++ b/utils/c2.txt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDXDCCAuOgAwIBAgIQDvLl2DaBUgJV6Sxgj7wv9DAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0yMzA2MDgwMDAwMDBaFw0yNjA4MjUyMzU5NTlaMF0xCzAJBgNVBAYTAlVTMR4w +HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLjAsBgNVBAMTJU1pY3Jvc29m +dCBBenVyZSBFQ0MgVExTIElzc3VpbmcgQ0EgMDgwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATlQzoKIJQIe8bd4sX2x9XBtFvoh5m7Neph3MYORvv/rg2Ew7Cfb00eZ+zS +njUosyOUCspenehe0PyKtmq6pPshLu5Ww/hLEoQT3drwxZ5PaYHmGEGoy2aPBeXa +23k5ruijggFiMIIBXjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBStVB0D +VHHGL17WWxhYzm4kxdaiCjAfBgNVHSMEGDAWgBSz20ik+aHF2K42QcwRY2liKbxL +xjAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC +MHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +cnQuY29tMEAGCCsGAQUFBzAChjRodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +RGlnaUNlcnRHbG9iYWxSb290RzMuY3J0MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6 +Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMy5jcmwwHQYD +VR0gBBYwFDAIBgZngQwBAgEwCAYGZ4EMAQICMAoGCCqGSM49BAMDA2cAMGQCMD+q +5Uq1fSGZSKRhrnWKKXlp4DvfZCEU/MF3rbdwAaXI/KVM65YRO9HvRbfDpV3x1wIw +CHvqqpg/8YJPDn8NJIS/Rg+lYraOseXeuNYzkjeY6RLxIDB+nLVDs9QJ3/co89Cd +-----END CERTIFICATE----- + diff --git a/utils/eventgrid.azure_full.pem b/utils/eventgrid.azure_full.pem new file mode 100644 index 0000000..151ca44 --- /dev/null +++ b/utils/eventgrid.azure_full.pem @@ -0,0 +1,72 @@ +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGZTCCBeugAwIBAgITMwAAF5dJwzxVQmn/kwAAAAAXlzAKBggqhkjOPQQDAzBd +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS4w +LAYDVQQDEyVNaWNyb3NvZnQgQXp1cmUgRUNDIFRMUyBJc3N1aW5nIENBIDA4MB4X +DTI0MDYwNjEwNDYzMloXDTI1MDYwMTEwNDYzMlowbDELMAkGA1UEBhMCVVMxCzAJ +BgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg +Q29ycG9yYXRpb24xHjAcBgNVBAMMFSouZXZlbnRncmlkLmF6dXJlLm5ldDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABCROnPe0MEoTPo7mZV7qBXj/gNaEhuTiIfoqzkkE +mayyKiKUh3M8kcNMFKA6Cw5FQpKcJnFgNdHhgK2an2bY16k1Rl+BGdH7cgeW4KxJ +/8BZGCUrcF0XqVYqU1ta2tPSe6OCBFwwggRYMIIBfgYKKwYBBAHWeQIEAgSCAW4E +ggFqAWgAdgDPEVbu1S58r/OHW9lpLpvpGnFnSrAX7KwB0lt3zsw7CAAAAY/tMX1g +AAAEAwBHMEUCIDvK/oTF+17QrKCyrkP+aJu5OOkWwWcdvW+fo0yuDj5TAiEAhIDF +m1B7P4TRY+80nE3klxMaDpXz13W/GFGLu3b/CC0AdwB9WR4S4XgqexxhZ3xe/fjQ +h1wUoE6VnrkDL9kOjC55uAAAAY/tMX5iAAAEAwBIMEYCIQC4AVpEBPNMlmXA6Rgm +jwbxZ12dY4t0y+d3zVmERPSpkQIhAL4eN6aJcxc7AbfCpRVq9MVmmaAgpcin33Ab +Kub+uVlxAHUA4JKz/AwdyOdoNh/eYbmWTQpSeBmKctZyxLBNpW1vVAQAAAGP7TF+ +1gAABAMARjBEAiAmSpLfPIgdhcYH4KeElGfrQAp3mv2UeqXsc+g6Zrl2VgIgP9xH +zAwKA1JmO+GQgQWacfy3opms5EvuTyUL33uw/6UwJwYJKwYBBAGCNxUKBBowGDAK +BggrBgEFBQcDAjAKBggrBgEFBQcDATA8BgkrBgEEAYI3FQcELzAtBiUrBgEEAYI3 +FQiHvdcbgefrRoKBnS6O0AyH8NodXYKE5WmC86c+AgFkAgEmMIG0BggrBgEFBQcB +AQSBpzCBpDBzBggrBgEFBQcwAoZnaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br +aW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBBenVyZSUyMEVDQyUyMFRMUyUyMElzc3Vp +bmclMjBDQSUyMDA4JTIwLSUyMHhzaWduLmNydDAtBggrBgEFBQcwAYYhaHR0cDov +L29uZW9jc3AubWljcm9zb2Z0LmNvbS9vY3NwMB0GA1UdDgQWBBSd0gLTJBBooJfu +lBbYLw4ogSVu0zAOBgNVHQ8BAf8EBAMCB4AwZQYDVR0RBF4wXIIVKi5ldmVudGdy +aWQuYXp1cmUubmV0giIqLndlc3R1czItMS50cy5ldmVudGdyaWQuYXp1cmUubmV0 +gh8qLndlc3R1czItMS5ldmVudGdyaWQuYXp1cmUubmV0MAwGA1UdEwEB/wQCMAAw +agYDVR0fBGMwYTBfoF2gW4ZZaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w +cy9jcmwvTWljcm9zb2Z0JTIwQXp1cmUlMjBFQ0MlMjBUTFMlMjBJc3N1aW5nJTIw +Q0ElMjAwOC5jcmwwZgYDVR0gBF8wXTBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEF +BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9z +aXRvcnkuaHRtMAgGBmeBDAECAjAfBgNVHSMEGDAWgBStVB0DVHHGL17WWxhYzm4k +xdaiCjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwCgYIKoZIzj0EAwMD +aAAwZQIxAIljbWjBlPPC1hJQEy1Pq4V5fPe+F0zNNuk6paj1ZCoqHahiBpvKpYTp +tZlJVKZtpAIwWnTO0WileYRCYWSniZFtliF/HZvgrLoAWd+NGZzdmhjoavdVYZho +0VvfpbsVVech +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDXDCCAuOgAwIBAgIQDvLl2DaBUgJV6Sxgj7wv9DAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0yMzA2MDgwMDAwMDBaFw0yNjA4MjUyMzU5NTlaMF0xCzAJBgNVBAYTAlVTMR4w +HAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLjAsBgNVBAMTJU1pY3Jvc29m +dCBBenVyZSBFQ0MgVExTIElzc3VpbmcgQ0EgMDgwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAATlQzoKIJQIe8bd4sX2x9XBtFvoh5m7Neph3MYORvv/rg2Ew7Cfb00eZ+zS +njUosyOUCspenehe0PyKtmq6pPshLu5Ww/hLEoQT3drwxZ5PaYHmGEGoy2aPBeXa +23k5ruijggFiMIIBXjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBStVB0D +VHHGL17WWxhYzm4kxdaiCjAfBgNVHSMEGDAWgBSz20ik+aHF2K42QcwRY2liKbxL +xjAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC +MHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +cnQuY29tMEAGCCsGAQUFBzAChjRodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +RGlnaUNlcnRHbG9iYWxSb290RzMuY3J0MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6 +Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RHMy5jcmwwHQYD +VR0gBBYwFDAIBgZngQwBAgEwCAYGZ4EMAQICMAoGCCqGSM49BAMDA2cAMGQCMD+q +5Uq1fSGZSKRhrnWKKXlp4DvfZCEU/MF3rbdwAaXI/KVM65YRO9HvRbfDpV3x1wIw +CHvqqpg/8YJPDn8NJIS/Rg+lYraOseXeuNYzkjeY6RLxIDB+nLVDs9QJ3/co89Cd +-----END CERTIFICATE----- diff --git a/utils/mqtt.py b/utils/mqtt.py new file mode 100755 index 0000000..b8939c4 --- /dev/null +++ b/utils/mqtt.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +from paho.mqtt import client as mqtt_client +import time + +mqtt_broker = "mqtt-dev-server.westus2-1.ts.eventgrid.azure.net" +mqtt_port = 8883 +mqtt_topic = "wellnuotopics/topic1" +mqtt_client_id = "client1-authn-ID" + +connected = False + +def connect_mqtt(client_id): + def on_connect(client, userdata, flags, rc): + global connected + if rc == 0: + print("Connected to MQTT Broker!") + connected = True + else: + print("Failed to connect, return code %d\n", rc) + + client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION1, "client_id") + client.tls_set( + ca_certs='eventgrid.azure_full.pem', + certfile='../certs/client1-authn-ID.pem', + keyfile='../certs/client1-authn-ID.key' + ) + + client.username_pw_set(client_id, "") + client.on_connect = on_connect + client.connect(mqtt_broker, mqtt_port) + return client + +def publish(client, topic, msg): + result = client.publish(topic, msg) + # result: [0, 1] + status = result[0] + if status == 0: + print(f"Sent `{msg}` to topic `{topic}`") + else: + print(f"Failed to send message to topic {topic}") + +def main() -> None: + client = connect_mqtt(mqtt_client_id) + client.loop_start() + + while(connected == False): + time.sleep(1) + + publish(client, "wellnuotopics/topic1", "hello") + time.sleep(2) + client.disconnect() + +if __name__ == "__main__": + main() + \ No newline at end of file diff --git a/plot/plot.py b/utils/plot.py similarity index 100% rename from plot/plot.py rename to utils/plot.py