Czujnik deszczu

amplif3r
Posts: 22
Joined: Sun Aug 28, 2022 8:09 pm

Post

Cześć,
Dopiero zaczynam z pisaniem kodu pod suplę (Coś nieco o C i Arduino wiem).
Podłączyłem pod esp8266 na wejście analogowe rezystancyjny czujnik cieczy.

Code: Select all

  auto leakDetectorResistance = new Supla::ADCDriver(A0);
  auto leakDetector = new Supla::Sensor::VirtualBinary();
  leakDetectorResistance->addAction(Supla::SET, leakDetector, OnGreater(500));
  leakDetectorResistance->addAction(Supla::CLEAR,leakDetector,OnLess(500));
i kod samego ADCDriver

Code: Select all

#include "adc_driver.h"

using Supla::ADCDriver;

ADCDriver::ADCDriver(int gpio) {
   channel.setType(SUPLA_CHANNELTYPE_THERMOMETER);
  channel.setDefault(SUPLA_CHANNELFNC_THERMOMETER);
   channel.setNewValue(getValue());
 
   this->gpio = gpio;
}

int ADCDriver::getValue() {
    return analogRead(gpio);
  }

void ADCDriver::iterateAlways() {
  if (millis() - lastReadTime > 5000) {
    lastReadTime = millis();
    channel.setNewValue(getValue());
  }

}  

To co mam na wyjściu szeregowym:

Code: Select all

21:08:15.522 -> Recv: [53 55 50 4C 41 10 08 00 00 00 32 00 00 00 10 00 00 00 1F 15 1B 65 00 00 00 00 4E BA 08 00 00 00 00 00 53 55 50 4C 41 ]
21:08:25.160 -> Channel(0) value changed to 843
21:08:25.160 -> Send: [53 55 50 4C 41 10 16 00 00 00 67 00 00 00 0E 00 00 00 00 00 00 00 00 00 4B 03 00 00 00 00 00 00 53 55 50 4C 41 ]
21:08:30.129 -> Channel(0) value changed to 907
21:08:30.162 -> Send: [53 55 50 4C 41 10 17 00 00 00 67 00 00 00 0E 00 00 00 00 00 00 00 00 00 8B 03 00 00 00 00 00 00 53 55 50 4C 41 ]
21:08:35.129 -> Channel(0) value changed to 4
21:08:35.129 -> Send: [53 55 50 4C 41 10 18 00 00 00 67 00 00 00 0E 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 53 55 50 4C 41 ]
Czujnik łączy się z wifi, rejestruje sie w supla cloud, zakłada sobie tam dwa kanały.

Problemy
1. Wartość kanału 0 nijak nie zapisuje mi po stronie supli mimo, że po stronie portu szeregowego raportuje zmiany stanu
2. Wartośc kanału 1 mawet się nie zmienia mimo, że wg mnie powinna.
Co robię nie tak ?
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

amplif3r wrote: Mon Oct 02, 2023 7:15 pm Problemy
1. Wartość kanału 0 nijak nie zapisuje mi po stronie supli mimo, że po stronie portu szeregowego raportuje zmiany stanu
2. Wartośc kanału 1 mawet się nie zmienia mimo, że wg mnie powinna.
Co robię nie tak ?
Ten ADCDriver jest ustawiony jako kanał temperatury, który pracuje na type "double".
Metoda getValue zwraca u Ciebie int, i wywołanie "channel.setNewValue(int)" odpala intowy wariant metody i w efekcie zapisuje te liczby w postaci inta.
Następnie te warunku OnGreater itp. sprawdzają typ kanału i jest to termometr, więc próbują czytać te dane jako double, więc są tam jakieś bliżej nieokreślone wartości liczbowe, które pewnie nie odpowiadają liczbie 500 :).

Zmień sobie ten getValue, aby zwracał double i powinno ruszyć. Jeśli nie ruszy, to daj znać, będziemy szukać dalej.
Najlepsze suple dla Twojego domu :mrgreen:
amplif3r
Posts: 22
Joined: Sun Aug 28, 2022 8:09 pm

Post

Dzięki za pomoc, zmieniłem na double wartości zwracane przez getValue() oraz w warunkach:

Code: Select all

  leakDetectorResistance->addAction(Supla::SET, leakDetector, OnGreater(500.0));
  leakDetectorResistance->addAction(Supla::CLEAR,leakDetector,OnLess(500.0));
Niestety dalej to samo, ale faktycznie miałeś racje Condtion operuje na typie sensora, dobrze wiedzieć :)
amplif3r
Posts: 22
Joined: Sun Aug 28, 2022 8:09 pm

Post

ok, mam sukces

Code: Select all

22:11:21.311 -> Send: [53 55 50 4C 41 10 06 00 00 00 67 00 00 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B8 8C 40 53 55 50 4C 41 ]
22:11:21.358 -> Channel(1) value changed to 1
22:11:21.405 -> Send: [53 55 50 4C 41 10 07 00 00 00 67 00 00 00 0E 00 00 00 01 00 00 00 00 00 01 00 00 00 00 00 00 00 53 55 50 4C 41 ]
22:11:26.294 -> Channel(0) value changed to 19.0
22:11:26.294 -> Send: [53 55 50 4C 41 10 08 00 00 00 67 00 00 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 33 40 53 55 50 4C 41 ]
22:11:26.388 -> Channel(1) value changed to 0
22:11:26.388 -> Send: [53 55 50 4C 41 10 09 00 00 00 67 00 00 00 0E 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 53 55 50 4C 41 ]
22:11:26.435 -> Send: [53 55 50 4C 41 10 0A 00 00 00 28 00 00 00 10 00 00 00 1E 00 00 00 00 00 00 00 ED 97 04 00 00 00 00 00 53 55 50 4C 41 ]
22:11:26.482 -> Recv: [53 55 50 4C 41 10 03 00 00 00 32 00 00 00 10 00 00 00 EE 23 1B 65 00 00 00 00 0E 25 09 00 00 00 00 00 53 55 50 4C 41 ]
22:11:31.295 -> Channel(0) value changed to 0.0
22:11:31.295 -> Send: [53 55 50 4C 41 10 0B 00 00 00 67 00 00 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 53 55 50 4C 41 ]
Zmieniłem jeszcze

Code: Select all

 channel.setDefault(SUPLA_CHANNELFNC_THERMOMETER);
Wielkie dzięki !

Return to “Projekty użytkowników”