@@ -419,6 +419,10 @@ using irutils::msToString;
419
419
ADC_MODE (ADC_VCC);
420
420
#endif // REPORT_VCC
421
421
422
+ #ifdef SHT3X_SUPPORT
423
+ #include < WEMOS_SHT3X.h>
424
+ #endif
425
+
422
426
// Globals
423
427
uint8_t _sanity = 0 ;
424
428
#if defined(ESP8266)
@@ -495,9 +499,15 @@ String MqttClimateCmnd; // Sub-topic for the climate command topics.
495
499
#if MQTT_DISCOVERY_ENABLE
496
500
String MqttDiscovery;
497
501
String MqttUniqueId;
502
+ #if SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
503
+ String MqttDiscoverySensor;
504
+ #endif // SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
498
505
#endif // MQTT_DISCOVERY_ENABLE
499
506
String MqttHAName;
500
507
String MqttClientId;
508
+ #if SHT3X_SUPPORT
509
+ String MqttSensorStat;
510
+ #endif // SHT3X_SUPPORT
501
511
502
512
// Primative lock file for gating MQTT state broadcasts.
503
513
bool lockMqttBroadcast = true ;
@@ -537,6 +547,11 @@ bool isSerialGpioUsedByIr(void) {
537
547
return false ; // Not in use as far as we can tell.
538
548
}
539
549
550
+ #if SHT3X_SUPPORT
551
+ SHT3X TemperatureSensor (SHT3X_I2C_ADDRESS);
552
+ TimerMs statSensorReadTime = TimerMs();
553
+ #endif // SHT3X_SUPPORT
554
+
540
555
// Debug messages get sent to the serial port.
541
556
#pragma GCC diagnostic push
542
557
#pragma GCC diagnostic ignored "-Wunused-parameter"
@@ -1290,7 +1305,13 @@ void handleAdmin(void) {
1290
1305
#if MQTT_DISCOVERY_ENABLE
1291
1306
html += htmlButton (
1292
1307
kUrlSendDiscovery , F (" Send MQTT Discovery" ),
1293
- F (" Send a Climate MQTT discovery message to Home Assistant.<br><br>" ));
1308
+ #if SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
1309
+ F (" Send a Climate and Sensor MQTT"
1310
+ #else
1311
+ F (" Send a Climate MQTT"
1312
+ #endif // SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
1313
+ " discovery message to Home Assistant.<br><br>" ));
1314
+
1294
1315
#endif // MQTT_DISCOVERY_ENABLE
1295
1316
#if MQTT_CLEAR_ENABLE
1296
1317
html += htmlButton (
@@ -1492,6 +1513,10 @@ bool clearMqttSavedStates(const String topic_base) {
1492
1513
#if MQTT_DISCOVERY_ENABLE
1493
1514
// Clear the HA climate discovery message.
1494
1515
success &= mqtt_client.publish (MqttDiscovery.c_str (), " " , true );
1516
+ #if SHT3X_SUPPORT && MQTT_DISCOVERY_ENABLE
1517
+ // Clear the HA sensor discovery message.
1518
+ success &= mqtt_client.publish (MqttDiscoverySensor.c_str (), " " , true );
1519
+ #endif // SHT3X_SUPPORT && MQTT_DISCOVERY_ENABLE
1495
1520
#endif // MQTT_DISCOVERY_ENABLE
1496
1521
for (size_t channel = 0 ;
1497
1522
channel <= kNrOfIrTxGpios ;
@@ -2207,12 +2232,19 @@ void init_vars(void) {
2207
2232
// Sub-topic for the climate stat topics.
2208
2233
#if MQTT_DISCOVERY_ENABLE
2209
2234
MqttDiscovery = " homeassistant/climate/" + String (Hostname);
2235
+ #if SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2236
+ MqttDiscoverySensor = " homeassistant/sensor/" + String (Hostname);
2237
+ #endif // SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2210
2238
MqttUniqueId = WiFi.macAddress ();
2211
2239
MqttUniqueId.replace (" :" , " " );
2212
2240
#endif // MQTT_DISCOVERY_ENABLE
2213
2241
MqttHAName = String (Hostname) + " _aircon" ;
2214
2242
// Create a unique MQTT client id.
2215
2243
MqttClientId = String (Hostname) + String (kChipId , HEX);
2244
+ #if SHT3X_SUPPORT
2245
+ // Sub-topic for the climate stat topics.
2246
+ MqttSensorStat = String (MqttPrefix) + ' /' + MQTT_SENSOR_STAT + ' /' ;
2247
+ #endif // SHT3X_SUPPORT
2216
2248
#endif // MQTT_ENABLE
2217
2249
}
2218
2250
@@ -2518,6 +2550,9 @@ void handleSendMqttDiscovery(void) {
2518
2550
htmlMenu () +
2519
2551
F (" <p>The Home Assistant MQTT Discovery message is being sent to topic: " )
2520
2552
+ MqttDiscovery +
2553
+ #if SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2554
+ F (" and " ) + MqttDiscoverySensor +
2555
+ #endif // SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2521
2556
F (" . It will show up in Home Assistant in a few seconds."
2522
2557
" </p>"
2523
2558
" <h3>Warning!</h3>"
@@ -2530,6 +2565,10 @@ void handleSendMqttDiscovery(void) {
2530
2565
if (i > 0 ) channel_id = " _" + String (i);
2531
2566
sendMQTTDiscovery (MqttDiscovery.c_str (), channel_id);
2532
2567
}
2568
+ #if SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2569
+ sendMQTTDiscoverySensor (MqttDiscoverySensor.c_str (), KEY_TEMP);
2570
+ sendMQTTDiscoverySensor (MqttDiscoverySensor.c_str (), KEY_HUMIDITY);
2571
+ #endif // SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2533
2572
}
2534
2573
#endif // MQTT_DISCOVERY_ENABLE
2535
2574
@@ -2734,6 +2773,9 @@ void sendMQTTDiscovery(const char *topic, String channel_id) {
2734
2773
" \" swing_modes\" :[\" " D_STR_OFF " \" ,\" " D_STR_AUTO " \" ,\" " D_STR_HIGHEST
2735
2774
" \" ,\" " D_STR_HIGH " \" ,\" " D_STR_MIDDLE " \" ,\" "
2736
2775
D_STR_LOW " \" ,\" " D_STR_LOWEST " \" ],"
2776
+ #if SHT3X_SUPPORT
2777
+ " \" curr_temp_t\" :\" " ) + MqttSensorStat + F (KEY_TEMP " \" ,"
2778
+ #endif // SHT3X_SUPPORT
2737
2779
" \" uniq_id\" :\" " ) + MqttUniqueId + channel_id + F (" \" ,"
2738
2780
" \" device\" :{"
2739
2781
" \" identifiers\" :[\" " ) + MqttUniqueId + channel_id + F (" \" ],"
@@ -2752,6 +2794,47 @@ void sendMQTTDiscovery(const char *topic, String channel_id) {
2752
2794
mqttLog (PSTR (" MQTT climate discovery FAILED to send." ));
2753
2795
}
2754
2796
}
2797
+
2798
+ #if SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2799
+ // Send the MQTT Discovery data for the SHT3X sensor.
2800
+ // type must be a String of either KEY_TEMP or KEY_HUMIDITY.
2801
+ void sendMQTTDiscoverySensor (const char *topic, String type) {
2802
+ String pub_topic = String (topic) + F (" _" ) + type + F (" /config" );
2803
+ String uom = " %" ;
2804
+ String ha_class = type;
2805
+ // XXX Update units of measure for temperature.
2806
+ if (type == KEY_TEMP) {
2807
+ uom = " °C" ;
2808
+ ha_class = " temperature" ;
2809
+ }
2810
+ if (mqtt_client.publish (
2811
+ pub_topic.c_str (), String (
2812
+ F (" {"
2813
+ " \" name\" :\" " ) + MqttHAName + " _" + type + F (" \" ,"
2814
+
2815
+ " \" stat_t\" :\" " ) + MqttSensorStat + type + F (" \" ,"
2816
+ " \" dev_cla\" :\" " ) + ha_class + F (" \" ,"
2817
+ " \" unit_of_meas\" :\" " ) + uom + F (" \" ,"
2818
+
2819
+ " \" uniq_id\" :\" " ) + MqttUniqueId + type + F (" \" ,"
2820
+ " \" device\" :{"
2821
+ " \" identifiers\" :[\" " ) + MqttUniqueId + type + F (" \" ],"
2822
+ " \" connections\" :[[\" mac\" ,\" " ) + WiFi.macAddress () + F (" \" ]],"
2823
+ " \" manufacturer\" :\" IRremoteESP8266\" ,"
2824
+ " \" model\" :\" IRMQTTServer\" ,"
2825
+ " \" name\" :\" " ) + Hostname + F (" \" ,"
2826
+ " \" sw_version\" :\" " _MY_VERSION_ " \" "
2827
+ " }"
2828
+ " }" )).c_str (), true )) {
2829
+ mqttLog (PSTR (" MQTT sensor discovery successful sent." ));
2830
+ hasDiscoveryBeenSent = true ;
2831
+ lastDiscovery.reset ();
2832
+ mqttSentCounter++;
2833
+ } else {
2834
+ mqttLog (PSTR (" MQTT sensor discovery FAILED to send." ));
2835
+ }
2836
+ }
2837
+ #endif // SHT3X_SUPPORT && SHT3X_MQTT_DISCOVERY_ENABLE
2755
2838
#endif // MQTT_DISCOVERY_ENABLE
2756
2839
#endif // MQTT_ENABLE
2757
2840
@@ -2820,6 +2903,29 @@ void loop(void) {
2820
2903
}
2821
2904
// Periodically send all of the climate state via MQTT.
2822
2905
doBroadcast (&lastBroadcast, kBroadcastPeriodMs , climate, false , false );
2906
+ #if SHT3X_SUPPORT
2907
+ // Check if it's time to read the SHT3x sensor.
2908
+ if (statSensorReadTime.elapsed () > SHT3X_CHECK_FREQ * 1000 ) {
2909
+ byte result = TemperatureSensor.get ();
2910
+ if (result == 0 ) {
2911
+ // Success
2912
+ float temp = TemperatureSensor.cTemp ;
2913
+ // XXX Convert units
2914
+ float humidity = TemperatureSensor.humidity ;
2915
+ // Publish the temp and humidity to MQTT.
2916
+ String mqttTempTopic = MqttSensorStat + KEY_TEMP;
2917
+ String mqttHumidityTopic = MqttSensorStat + KEY_HUMIDITY;
2918
+ mqtt_client.publish (mqttTempTopic.c_str (), String (temp).c_str ());
2919
+ mqtt_client.publish (mqttHumidityTopic.c_str (),
2920
+ String (humidity).c_str ());
2921
+ } else {
2922
+ // Error
2923
+ mqttLog ((String (F (" SHT3x sensor read error: " )) +
2924
+ String (result)).c_str ());
2925
+ }
2926
+ statSensorReadTime.reset ();
2927
+ }
2928
+ #endif // SHT3X_SUPPORT
2823
2929
}
2824
2930
#endif // MQTT_ENABLE
2825
2931
#if IR_RX
0 commit comments