UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Witam, po w pisaniu w konsoli w tasmota
DisplayMode 4
wyświetlają się tematy, rodzaj czujnika i odczytana wartość z jednostkami ze wszystkich czujników wysyłających dane do danego MQTT. Czy jest możliwość wyświetlenia tylko odczytów z jednego czujnika DS18B20 z danego MQTT.?
Czy jest możliwość wyświetlenia tylko odczytów z jednego czujnika
Oczywiście, że jest. Ile masz tych DS-ów ? Który ma być ? Jaki OLED ?
Na tą chwilę to tego MQTT mam podłączone dwa DS-y ale ich liczba jeszcze się powiększy, każdy z tych DS-ów jest podłączony do innego ESP. OLED to SSD1306.
Który ma być?
Nie rozumiem, ten który ma być publikuje w temacie "esp32-2".
@adamadamowski myślałem że masz kilka DS-ów podłączonych do jednego ESP, dlatego zapytałem który.
Generalnie musisz przełączyć wyświetlacz w tryb DisplayMode 0 , czyli wyświetlanie tekstu, i napisać sobie regułę
przykład dla lokalnego czujnika podłączonego do GPIO
rule1 on DS18B20#Temperature do DisplayText [f0s2p15x0y25]Temp. %value% C endon
Na koniec aktywacja reguły
rule1 1
Chodzi o to że do tego ESP nie mam podłączonego żadnego czujnika. Układ to samo ESP z tasmotę i OLED SSD1306 i na tym urządzeniu chcę wyświetlać temperaturę ze zdalnego czujnika, tamto urządzenie z czujnikiem publikuje odczyty do serwera MQTT. Urządzenie z wyświetlaczem subskrybuje odczyty z różnych moich czujników które publikują do MQTT ale chcę wyświetlać odczyty z tylko jednego urządzenia.
Wiem że ESP32 z podłączonym jedynie wyświetlaczem to marnotrawstwo ale tylko to mam do dyspozycji w tym momencie.
@adamadamowski ok teraz jest jaśniej, skoro esp32 z wyświetlaczem subskrybuje wskazania tych czujników peryferyjnych to trzeba utworzyć regułę która zapisze wskazania tego konkretnego czujnika do jakiejś zmiennej i wartość tej zmiennej przedstawić na wyświetlaczu, albo po prostu zapisywać te wartości w event i używajac nazwy tego event wysłać do wyświetlacza. Przykład gdzie topic modułu z DS-em, który chcesz wyświetlić to "czujnik" , event z nazwą "Temp"
Rule1 ON mqtt#connected DO Subscribe Temp, stat/czujnik/SENSOR, DS18B20.Temperature ENDON ON Event#Temp DO DisplayText[f0s2p15x0y0]Temp. %value%C ENDON
To co otrzymasz w konsoli powinno wygladać tak jak poniżej, tylko zamiast błędu command: Error, który wynika u mnie z braku wyświetlacza dostaniesz potwierdzenie wykonania
Niestety nie działa ta reguła. Wynik mam taki jak poniżej:
@adamadamowski niestety chyba nie umiem pomóc, ustawiasz topic do subskrybcji modułu który ma odebrać te dane, a powinien być topic modułu z czujnikiem w rule masz esp32-2 i w logach to samo. To co moduł z wyświetlaczem ma wysłać do siebie parametry innego esp ? Myślałem, że wiesz co robisz.
Dodatkowo jesteś tak oszczędny w opisie tego co tam masz, że naprawdę trudno coś doaradzać.
Napiszę tylko tak : U mnie działa co widać na foto 🙂
Zmieniłem temat modułu z wyświetlaczem i dalej nic. Jakie informacje są jeszcze potrzebne o moich urządzeniach?
Zmieniłem temat modułu z wyświetlaczem
A po co go zmieniłeś ? Powinieneś zmienić topic w regule a nie topic modułu z wyświetlaczem
Zmieniłem temat modułu z wyświetlaczem
A po co go zmieniłeś ? Powinieneś zmienić topic w regule a nie topic modułu z wyświetlaczem
W regule mam ustawić ten sam topic jaki jest w module z wyświetlaczem?
W module z wyświetlaczem mam topic "display", a w module z czujnikiem "esp32-2".
W module z wyświetlaczem mam topic "display", a w module z czujnikiem "esp32-2".
No dobra to chyba wiem odrobinę więcej, ale zapytam, w którym module dodajesz tą regułę? Bo z logów które wstawiłeś widać że to moduł z tematem esp32-2
To zdjęcie które wkleiłem było z modułu z wyświetlaczem.
W module z czujnikiem jest cały czas temat "esp32-2".
W module z wyświetlaczem też w momencie kiedy było zdjęcie był topic "esp32-2". Teraz zrobiłem "display".
Regułę którą mi podałaś wpisałem w module z wyświetlacze, sugerowałem się tym słowem "Subscribe" po słowie "Do". Dla mnie logicznym wydaje się że skoro "Subscribe" a po nim "Temp" i temat ze słowem czujnik to ma subskrybować to co publikuje moduł-czujnik.
Ogarnąłem to 😀 😀 😀 😀 😀 😀
U mnie reguła powinna być taka
Rule1 ON mqtt#connected DO Subscribe Temp, tele/esp32-2/SENSOR, DS18B20.Temperature ENDON ON Event#Temp DO DisplayText[zf0s3p15x1y22]%value% ~f8C ENDON
Nie wiem na czym polega różnica ale w subskrybowanym temacie zmieniłem
stat
na
tele
@isom swoją drogą jak nauczyłeś się pisać reguł?
@adamadamowski różnica między stat i tele polega na tym, że tele to teleperiod czyli dane są wysyłane zgodnie z ustawieniem w konfiguracji dziennika, stat to aktualny stan i pewnie gdyby wartość temp zmieniła się chociaż o 0.1 st po dodaniu reguły też by działało.
Reguł nauczyłem się czytając dokumentację i eksperymentując, nie ma zbyt wiele informacji na ten temat w necie.
@isom zaskoczę cię albo i nie zamieniłem tele na stat i nie zadziałało nawet po kilku zmianach temperatury, to chyba nie to. Ale i tak dziękuję za pomoc, tele/esp32-2/SENSOR przepisałem z openhaba. Tyle było mojego udziału w całym tym zamieszaniu.
@adamadamowski powtórzę to co wcześniej, u mnie działa :), ale tak naprawdę przy tak napisanej regule nie ma to znaczenia, czy dasz stat czy tele , gdybyś chciał np w tej samej linii wyświetlać inny czujnik naprzemiennie , robiło by to różnicę. Fajnie, że się udało, teraz wypada dodać opis co to za temp i ustawić wskazania tak żeby to wyglądało, ale to już kosmetyka.
A skoro już mowa o innych czujnikach. Do innego ESP z innym topikiem mam czujnik BME280 mierzy ciśnie, wilgotność i temperaturę. Jak
wyświetlać wartości z tych czujników? Napisałem coś takiego na podstawie wyświetlania temperatury z DS18B20
Rule1 ON mqtt#connected DO Subscribe Temp, tele/esp32/SENSOR, BME280.Temperature ENDON ON Event#Temp DO DisplayText[f0s4p15x1y30]%value% ENDON ON Event#Temp DO DisplayText[s2x1y4]Temp. ENDON ON Event#Temp DO DisplayText[s2x100y4]~f8C ENDON ON mqtt#connected DO Subscribe Pres, tele/esp32/SENSOR, BME280.Pressure ENDON ON Event#Pres DO DisplayText[f0s4p15x1y30]%value% ENDON ON Event#Pres DO DisplayText[s2x1y4]Cisnie ENDON ON Event#Pres DO DisplayText[s2x100y4]hPa ENDON ON mqtt#connected DO Subscribe Humid, tele/esp32/SENSOR, BME280.Humidity ENDON ON Event#Humid DO DisplayText[f0s4p15x1y30]%value% ENDON ON Event#Humid DO DisplayText[s2x1y4]Wilgotnosc ENDON ON Event#Humid DO DisplayText[s2x100y4]% ENDON
Ale wszystkie odczyty na wyświetlaczu za szybko się zmieniają na kolejną i zatrzymuje się na kilka sekund na ostatniej wartości i znów szybko przeskakują od początku.Jak zrobić kilkusekundowe przerwy pomiędzy poszczególnymi zmianami?
@adamadamowski najprościej, bez kompilowania nowego firmware, rozdzielić to na trzy rule i uruchamiać jedną regułę drugą w pętli, można interwał ustawić najprostszym delay, ale bardziej precyzjnie ustawisz przez RuleTimer.
Chcąc użyć mniejszej ilości reguł trzeba przy kompilacji dodać obsługę złożonych warunków ( jest w dokumentacji rule )
Próbowałem zrobić wyzwalanie Rule2 w Rule1 ale zakręciłem się strasznie i już w głowie mam bałagan, nawet nie potrafię opisać co próbowałem zrobić. Załóżmy że nie próbowałem i jestem zielony w tym temacie. Podpowiecie jak to zrobić?