Mam kod który odczytuje stan czujnika temperatury i wysyła go poprzez MQTT do HA.
Problem w tym że działa tylko przy odczycie stanu temperatury do 23s. Powyżej tego czasu, wartości są wysyłane (czytam z monitora COM) lecz nie trafiaja do HA jak i do MQTT Explorera.
Chciałbym ustawić dłuższy okres czasu odpytywania.
Czy ktoś może wskazać mi błąd gdzie popełniam. Pingowanie działa przez cały czas, więc to nie błąd połączenia Wifi.
Poniżej kod:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// WiFi
const char* ssid = "xxx";
const char* wifi_password = "xxx";
// MQTT
const char* mqtt_server = "x.x.x.x";
const char* mqtt_topic = "Temperatura";
const char* mqtt_username = "xxx";
const char* mqtt_password = "xxx";
const char* clientID = "Czujnik_2";
// ds18b20 GPIO pin
const int oneWireBus = 4;
// Initialise the WiFi and MQTT Client objects
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient); // 1883 is the listener port for the Broker
// oneWire instance
OneWire oneWire(oneWireBus);
// Pass oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
Serial.print("Connecting to ");
Serial.println(ssid);
// Connect to the WiFi
WiFi.begin(ssid, wifi_password);
// Wait until the connection has been confirmed before continuing
while (WiFi.status() != WL_CONNECTED) {
delay(5000);
Serial.print(".");
}
// Debugging - Output the IP Address of the ESP8266
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Connect to MQTT Broker
// client.connect returns a boolean value to let us know if the connection was successful
if (client.connect(clientID, mqtt_username, mqtt_password)) {
Serial.println("Connected to MQTT Broker!");
}
else {
Serial.println("Connection to MQTT Broker failed...");
}
sensors.begin();
}
void loop() {
sensors.setResolution(11);
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
Serial.print(tempC);
client.publish(mqtt_topic, String(tempC).c_str(), true);
delay(22000);
}
Może rozłącza cię z brokerem, a ten PubSubClient nie odnawia połączenia?
Ja bym na początek spróbował w pętli loop sprawdzać czy jest połączony i wyświetlać na serialu.
Są różne motywacje, jeden potrzebuje coś “zrobić” i zapomnieć, drugi przy okazji czegoś nauczyć.
Traktowanie Tasmota itp. jako “pacaneum” na wszystko prowadzi do myślenia, że gdy czegoś nie obsługuje to to nie istnieje
Zauważ ile jest tematów p.t.“Tasmota… problem”. W niektórych przypadkach łatwiej napisać 10 linijek kodu niż przeglądać morze opcji i działa to zgodnie oczekiwaniami.
Podobne myślenie pokutuje o NR.
Ponieważ potrafiłbym to zrobić na “piechotę” - jako mało interesujący projekt też użyłbym tasmoty. “… po co pocierasz te dwa patyki, zamiast jak normalny człowiek poczekać na burzę…”
No dobra Panowie, schodzimy z tematu.
Na jednych zainstalowałem ESP easy + bramka MQTT, na innych przez HA ESPhome.
Pytanie co do pierwszego sposobu, w jaki sposób można kontrolować czy dany czujnik lub ESP jest podłączony i “żyje”?
W ESPhome, jest odrazu informacja Unvailable co jest bardzo przydatne.
I jeszcze jedno pytanie: jak skonfigurować yaml do wgrania esp, przy podłączeniu DS18b20 do dwóch osobnych GPIO np D4 i D5.
Dziękuje, również to doczytałem na innych forach,
W Tasmocie też nie mogę skonfigurować aby na osobnych GPIO mieć podpięte czujniki, działa tylko pod jedno GPIO, z różnym adresowaniem.
Wybór pada na espeasy +mqtt, jeszcze tylko musze znaleźć informację, jak kontrolować czy jest łączność między HA a modułami z czujnikami.