[PODSTAWY] Pomoc przy analizie programu od podstaw - dla zielonych

User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Ok, teraz ja załapałem dlaczego używałeś dwóch płytek :D .
Najwyklej suplą nie sterowałeś fizycznymi urządzeniami tylko to symulowałeś a info o tym orzechwytywało nano i dopiero coś tam robiło. Sprytnie. Zwracam honor. :mrgreen:
W takim wypadku, jeśli te warunki faktycznie mają być tak skomplikowane, a każda akcja ma być od czegoś zależna, to tak:
albo kupa samozaparcia, przedziieranie się przez Suplę i mnóstwo pytań, będzie Ci ciężko jak nie znasz obiektówki,

albo zostawiasz jak masz, dwa urządzenia,

albo przesiadasz się na Blynka, tam jest dokładnie tak jak chcesz, z każdą informacją wysłaną z aplikacji możesz bardzo łatwo zrobić co chcesz, a każdą informację którą masz na urządzeniu możesz dowolnie sobie obrobić własnym kodem i kiedy chcesz, wysłać na apk.

Ja się obraziłem na Blynka, mam Suplę, aż tak skomplikowanych warunków nie stosuję, póki co😁. Zostaję przy Supli.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
matrix0606
Posts: 496
Joined: Tue Nov 08, 2022 9:05 pm

Post

SOYER wrote: Sat May 06, 2023 5:34 am Ok, teraz ja załapałem dlaczego używałeś dwóch płytek :D .
Najwyklej suplą nie sterowałeś fizycznymi urządzeniami tylko to symulowałeś a info o tym orzechwytywało nano i dopiero coś tam robiło. Sprytnie. Zwracam honor. :mrgreen:
No wreszcie mnie ktoś zrozumiał. Nano to taki bufor i jednocześnie element wykonawczy w którym przetwarzam informacje odebrane od serwera Supla przekazane przez Wemos D1 Mini.
SOYER wrote: Sat May 06, 2023 5:34 am W takim wypadku, jeśli te warunki faktycznie mają być tak skomplikowane, a każda akcja ma być od czegoś zależna, to tak:
albo kupa samozaparcia, przedziieranie się przez Suplę i mnóstwo pytań, będzie Ci ciężko jak nie znasz obiektówki,

albo zostawiasz jak masz, dwa urządzenia,
Dlatego chciałem tu na forum trochę popytać czy faktycznie da sie w prosty sposób wpleść swoje dyrektywy w kod Supla i dopiero decydować co zrobić.
Na stronie którą podał mi kolega KLEW było coś o virtualrelay, ale nie do końca to rozumiem.
SOYER wrote: Sat May 06, 2023 5:34 amalbo przesiadasz się na Blynka, tam jest dokładnie tak jak chcesz, z każdą informacją wysłaną z aplikacji możesz bardzo łatwo zrobić co chcesz, a każdą informację którą masz na urządzeniu możesz dowolnie sobie obrobić własnym kodem i kiedy chcesz, wysłać na apk.,
Nie, dziękuje. Supla podoba mi się bardzo i przy niej zostaje. Co to zastosować jeden moduł więcej? Wgranie GG na wemosa to dosłownie 5minut bez jakiegoś pisania kodu, a pisanie na dodatkowy moduł Ardu Nano to sama przyjemność. Przyjemność też czerpię podczas projektowania obwodów na oba te moduły. Dla mnie to żaden kłopot.
Vivo V21 5G 8G RAM + 4G SWAP - Funtouch OS 12 Global
MOBO - MSI B350 Tomahawk || GPU - XFX Radeon RX 6600 Speedster
CPU - Ryzen5 1400 3,2G || PSU - SPC Vero | L2 500W 80 Plus Bronze
RAM - HyperX 2x8GB 3200MHz CL16 Predator RGB
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 136 times
Been thanked: 137 times

Post

Ja nadal uważam, że używanie drugiej płytki jako "bufor", to nie jest dobry pomysł.
Nie widzę w tym żadnych sensownych zalet, poza tą, że wydaje Ci się to prostsze do implementacji.
W rzeczywistości jest to trudniejsze, a jakiekolwiek błędy będzie bardzo trudno poprawić.

Wszystko co możesz zrobić na dwóch płytkach, możesz też zrobić na jednej.

VirtualRelay to taki "przekaźnik" w pamięci urządzenia. Tzn. nic fizycznie na żadnym GPIO nie zmienia, więc działałby podobnie do tego Twojego "przekombinowanego" przykładu z dwoma płytkami.

Proponuję, abyś rozpisał w miarę szczegółowo co byś chciał zrobić, a potem pomożemy to zrealizować. Bo takie gdybanie o wielu różnych potencjalnych możliwościach do niczego nie prowadzi. Jak masz obecnie jakiś jeden konkretny projekt, to rozpisz jakbyś chciał to mieć ogarnięte.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

@matrix0606 na początek może przeanalizuj poniższy kod. To kod kolegi @klew który pomógł mi przy moim projekcie termostatu.
Tworzysz klasę RelayAsInput która dziedziczy z klasy virtualRelay, w aplikacji klikasz on lub off, a w kodzie na urządzeniu możesz odpowiednio reagować na te kliki. Dodatkowo jest tworzony wirtualny termometr w tej klasie, który wyświetla w apk ustawioną wartość.

Code: Select all

class RelayAsInput : public Supla::Control::VirtualRelay {  //temp wł pompy
 public:
  explicit RelayAsInput(int step = 1) : step(step) { }
  virtual ~RelayAsInput() {}
  void onInit() override {}
  void turnOn(_supla_int_t duration = 0) override { // to co w tej metodzie wykona się po kliku ON
   (void)(duration);
    int newTemp = temp.getValue() + step;
    if (newTemp > 90) {
      newTemp = 90;
    }
    temp.setValue(newTemp);//newTemp
    tempON = newTemp;
    sekund5.restart();
     if(menu != PIEC){
      lcd.clear();
     }
    menu = PIEC;
    Supla::Storage::ScheduleSave(2000);
  }

  void turnOff(_supla_int_t duration = 0) override { // to co w tej metodzie wykona się po kliku OFF
    (void)(duration);
    int newTemp = temp.getValue() - step;
    if (newTemp < 5) {
      newTemp = 5;
    }
    temp.setValue(newTemp);
    tempON = newTemp;
    sekund5.restart();
     if(menu != PIEC){
      lcd.clear();
     }
    menu = PIEC;
    Supla::Storage::ScheduleSave(2000);
  }

  int getValue() {
    return temp.getValue();
  }

  void setValue(int value) {
    temp.setValue(value);
    Supla::Storage::ScheduleSave(2000);
  }

  void onLoadState() override {
    int temperature = 0;
    Supla::Storage::ReadState(reinterpret_cast<unsigned char *>(&temperature),
                              sizeof(int));
    temp.setValue(temperature);
    tempON = temperature;
  }

  void onSaveState() override {
    int temperature = temp.getValue();
    Supla::Storage::WriteState(reinterpret_cast<unsigned char *>(&temperature),
                               sizeof(int));
  }

 protected:
  Supla::Sensor::VirtualThermometer temp;
  int step = 1;
Potem w SETUP:
new RelayAsInput();
a w LOOP:
SuplaDevice.iterate();

Pytaj.
Last edited by SOYER on Sun May 07, 2023 6:50 am, edited 1 time in total.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Znowu tutaj masz kod z tego forum, autora proszę o wybaczenie, że go nie wymienię ale nie potrafię teraz znaleźć tego posta.
Korzystałem z tego kodu kiedy podłączałem suszarkę i pralkę do Supli. Tworzysz klasę AnalogValue, która dziedziczy po klasie Thermometer.
Pod tą klasą mam metodę sterującą przekaźnikiem zależnie od odczytu analogowego.

Code: Select all

Supla::Control::Relay *r1 = nullptr;

int sus;
#define r1_pin D2
const int analogInPin = A0;

class AnalogValue : public Supla::Sensor::Thermometer {
  public:
    AnalogValue(int pin) : pin(pin) {
    }
    
    void onInit() {
      pinMode(pin, INPUT); 
      channel.setNewValue(getValue());
    }
    double getValue() {
      return analogRead(pin);
    }
  protected:
    int pin;
};
void ustaw(){
  sus = analogRead(analogInPin);
  if(sus > 200){
    r1->turnOff();  
  }
}
W SETUP:
new AnalogValue(analogInPin);
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Zerknij też:
viewtopic.php?t=13076
wkleiłem cały kod od termostatu, możesz przeanalizować co się tam dzieje.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
radzik_r
Posts: 468
Joined: Sun Aug 11, 2019 5:32 pm
Has thanked: 1 time
Been thanked: 2 times

Post

matrix0606, tak jak koledzy wspomnieliśmy te twoje pomysły da się realizować na esp wplatając w to suple.
Pierwsza rzecz to musisz sterowanie pinami poprzez digitalwrite indigitalread odstawić na bok i nauczyć się nimi sterować za pomocą kodu supla. Jest dział na forum Rozwój oprogramowania / Arduino IDE. Tam jest dużo podstawowej wiedzy.
Z kolei jak to opanujesz to możesz wtedy zacząć czytać o wspomnianych klasach. W nich się dzieje dużo i dużo można na nich zrobić, właśnie te twoje pomysły na logikę i warunki. To fajne wiec rzycze samozaparcia w
wchłanianiu tej wiedzy. Pisze z tel . Wieczorem poszukam ciekawe linki na których ja też się uczę do tej pory.

EDIT.

Rozwój oprogramowania/Arduino IDE
viewforum.php?f=61

Duży dział ale też dużo wiedzy w nim zawarte
Last edited by radzik_r on Sun May 07, 2023 7:30 pm, edited 1 time in total.
matrix0606
Posts: 496
Joined: Tue Nov 08, 2022 9:05 pm

Post

Dziękuję wszystkim za dotychczasowe podpowiedzi i kody. Wszystko będę czytał i analizował, bo wiadomo, zawsze to nowa wiedza.
klew wrote: Sat May 06, 2023 7:42 pm(...)
Proponuję, abyś rozpisał w miarę szczegółowo co byś chciał zrobić, a potem pomożemy to zrealizować. (...) Jak masz obecnie jakiś jeden konkretny projekt, to rozpisz jakbyś chciał to mieć ogarnięte.
No dobra, to zaczynam. Płytka miała by posiadać taką funkcjonalność:
- BME280 + anemometr
- przydałby się lcd do dowolnego wykorzystania (ale nie jest koniczny)
- wejście OPEN_A z radia 433Mhz
- wejście OPEN_B z radia 433Mhz
- czujnik włamania
- czujnik naciśnięcia a w zasadzie naruszenia wejścia STOP w centrali od automatu
- wejście czujnika jasności
- wejscie do podłączenia NO/NC z czujki ruchu
- 2 lub 3 wejścia dla przycisków dowolnego wykorzystania (włączanie/wyłączanie czegokolwiek, ustawianie kodów, wyłączanie alarmów, zależnie jak je oprogramuję)

- wyjście na przekaźnjik STOP (może być wykorzystany do czegoś innego - zależnie od jego oprogramowania)
- wyjście na przekaźnik OPEN_A (może być wykorzystany do czegoś innego - zależnie od jego oprogramowania)
- wyjście na przekaźnik OPEN_B (może być wykorzystany do czegoś innego - zależnie od jego oprogramowania)
- wyjście na przekaźnik wyłączający zasilanie radia 433Mhz (jeśli da się programowo wyłączyć możliwość nieuruchamiania wyjścia przkaźników OPEN_A i OPEN_B to ten przekaźnik nie jest konieczny)
- wyjście na diodę ALARM
- wyjście na MOSFET Lampa1
- wyjście na MOSFET Lampa2

Nie wiem czy czegoś nie pominąłem, ale jak na mój gust, to po tym co wymieniłem, to chyba brakuje ciut we/wy w ESP8266, no chyba że wdrożymy do zabawy PCF8574
Vivo V21 5G 8G RAM + 4G SWAP - Funtouch OS 12 Global
MOBO - MSI B350 Tomahawk || GPU - XFX Radeon RX 6600 Speedster
CPU - Ryzen5 1400 3,2G || PSU - SPC Vero | L2 500W 80 Plus Bronze
RAM - HyperX 2x8GB 3200MHz CL16 Predator RGB
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Wejścia, wyjścia mało kogo interesują, to tylko sprawa ustawienia w kodzie. Ważniejsze zależności. Tylko nie opisane ogólnie, ale bardzo dokładnie. Wklej też kod który sam napisałeś i pokaż gdzie utknąłeś.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
matrix0606
Posts: 496
Joined: Tue Nov 08, 2022 9:05 pm

Post

SOYER wrote: Sun May 07, 2023 2:56 pm Wejścia, wyjścia mało kogo interesują, to tylko sprawa ustawienia w kodzie.
Wiem, ale chciałem pokazać do czego i co będzie.
SOYER wrote: Sun May 07, 2023 2:56 pmWażniejsze zależności. Tylko nie opisane ogólnie, ale bardzo dokładnie.
Zalezności sam sobie napiszę jeśli już będę potrafił ogarnąć działania takiego ESP8266 z moimi wklejkami kodu.
SOYER wrote: Sun May 07, 2023 2:56 pmWklej też kod który sam napisałeś i pokaż gdzie utknąłeś.
Na razie na ESP nie napisałem nic bo nie mam wolnego wemosa w domu do testów a na NodeMCU czekam.
A tak z ciekawości, taki soft z własnymi wklejkami to się wgywa jak do ardu? Wemos czy NodeMCU ma bootloader?
Vivo V21 5G 8G RAM + 4G SWAP - Funtouch OS 12 Global
MOBO - MSI B350 Tomahawk || GPU - XFX Radeon RX 6600 Speedster
CPU - Ryzen5 1400 3,2G || PSU - SPC Vero | L2 500W 80 Plus Bronze
RAM - HyperX 2x8GB 3200MHz CL16 Predator RGB

Return to “Pomoc”