NodeMCU v3 - zliczanie włączeń przekaźnika

bigthomas
Posty: 37
Rejestracja: pn sie 12, 2019 3:35 pm

pt lis 22, 2019 7:52 am

Witam,
Czy jest możliwe zliczanie ilości włączeń przekaźnika i prezentacja tych danych w supli?
Od razu mówię że przekaźnik uruchamia mi się losowo w zależności od warunków (temperatury) na kilka sekund.
W tym czasie zasila inne urządzenie. Chciałbym mieć informacje ile razy zostało to urządzenie uruchomione.
Awatar użytkownika
klew
Posty: 659
Rejestracja: czw cze 27, 2019 12:16 pm

pt lis 22, 2019 8:51 am

Czy przekaźnik jest sterowany przez Suplę?
Jeśli tak, to relatywnie prosto można zaimplementować licznik impulsów podpięty pod włączanie przekaźnika. Tylko wtedy ten licznik będzie dostępny jako osobny kanał w aplikacji
krycha88
Posty: 687
Rejestracja: pt lis 16, 2018 7:25 am

pt lis 22, 2019 10:31 am

klew pisze:
pt lis 22, 2019 8:51 am
Czy przekaźnik jest sterowany przez Suplę?
Jeśli tak, to relatywnie prosto można zaimplementować licznik impulsów podpięty pod włączanie przekaźnika. Tylko wtedy ten licznik będzie dostępny jako osobny kanał w aplikacji
a ten kanał zlicza przyrostowi wartości po stronie clouda czy zapisuje te wartości w eepromie a później je wysyła do clouda??
Awatar użytkownika
klew
Posty: 659
Rejestracja: czw cze 27, 2019 12:16 pm

pt lis 22, 2019 10:49 am

krycha88 pisze:
pt lis 22, 2019 10:31 am
a ten kanał zlicza przyrostowi wartości po stronie clouda czy zapisuje te wartości w eepromie a później je wysyła do clouda??
Licznik zapisuje w EEPROM. Dane są wysyłane cyklicznie do Cloud, ale licznik i tak musi je lokalnie pamiętać.
alvaroboven
Posty: 12
Rejestracja: śr lis 06, 2019 8:33 am

sob lis 23, 2019 5:49 pm

klew pisze:
pt lis 22, 2019 8:51 am
Czy przekaźnik jest sterowany przez Suplę?
Jeśli tak, to relatywnie prosto można zaimplementować licznik impulsów podpięty pod włączanie przekaźnika. Tylko wtedy ten licznik będzie dostępny jako osobny kanał w aplikacji


Jak to jest realizowane? Mam „esp8266” podłączony do mega arduino, gdzie mam resztę programowania. Następnie muszę wiedzieć, czy przekaźnik jest aktywowany, czy nie, aby wysłać swój status do arduino.
Awatar użytkownika
klew
Posty: 659
Rejestracja: czw cze 27, 2019 12:16 pm

sob lis 23, 2019 7:54 pm

alvaroboven pisze:
sob lis 23, 2019 5:49 pm
klew pisze:
pt lis 22, 2019 8:51 am
Czy przekaźnik jest sterowany przez Suplę?
Jeśli tak, to relatywnie prosto można zaimplementować licznik impulsów podpięty pod włączanie przekaźnika. Tylko wtedy ten licznik będzie dostępny jako osobny kanał w aplikacji


Jak to jest realizowane? Mam „esp8266” podłączony do mega arduino, gdzie mam resztę programowania. Następnie muszę wiedzieć, czy przekaźnik jest aktywowany, czy nie, aby wysłać swój status do arduino.
Trzeba stworzyć licznik impulsów, który będzie zliczał ilość przełączeń przekaźnika. Przekaźnikiem sterujesz z tej samej aplikacji, więc wystarczy w tym samym miejscu gdzie jest przełączanie dodać zwiększenie countera w liczniku.
W aktualnym kodzie najprościej byłoby wpiąć się w metody "supla digital write" (można ustawić callback metodą setDigitalWriteFuncImpl - na forum jest kilka przykładów użycia tej metody do różnych zastosowań). Wtedy możesz tam wstawić metodę zwiększającą licznik np. przy zmianie wartości kanału przekaźnika na HIGH.
bigthomas
Posty: 37
Rejestracja: pn sie 12, 2019 3:35 pm

pn lis 25, 2019 9:46 am

klew pisze:
pt lis 22, 2019 8:51 am
Czy przekaźnik jest sterowany przez Suplę?
Jeśli tak, to relatywnie prosto można zaimplementować licznik impulsów podpięty pod włączanie przekaźnika. Tylko wtedy ten licznik będzie dostępny jako osobny kanał w aplikacji
Tak jest sterowany przez Suple, było by nawet lepiej gdyby był to osobny kanał.
Możesz podrzucić kawałek kodu w jaki sposób to zrealizować ...?
Awatar użytkownika
klew
Posty: 659
Rejestracja: czw cze 27, 2019 12:16 pm

pn lis 25, 2019 3:33 pm

bigthomas pisze:
pn lis 25, 2019 9:46 am

Tak jest sterowany przez Suple, było by nawet lepiej gdyby był to osobny kanał.
Możesz podrzucić kawałek kodu w jaki sposób to zrealizować ...?
Tu jest przykład. Działa z moją wersją biblioteki z tej lokalizacji: https://github.com/klew/arduino/tree/develop

Przykład na Arduino IDE dla ESP8266. Przeróbka na Arduino Mega to zmiana kilku linijek.
Zrobiłem to jeszcze prościej - popiąłem licznik bezpośrednio pod pin sterujący przekaźnikiem. Ważne aby "addImpulseCounter" było wywołane przed "addRelay", bo inaczej impulse counter nadpisze ustawienia pinu. Zlicza przejścia z low do high.

Kod: Zaznacz cały

/*
Copyright (C) AC SOFTWARE SP. Z O.O.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#include <SPI.h>
#include <SuplaDevice.h>

// ESP8266 based board:
#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifiInterface("ssid", "password");


void setup() {

  Serial.begin(115200);
 
  // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid

  SuplaDevice.addImpulseCounter(D4, 0, true, false, 50);
  SuplaDevice.addRelay(D4, false);           // 44 - Pin number where the relay is connected      

  /*
   * SuplaDevice Initialization.
   * Server address, LocationID and LocationPassword are available at https://cloud.supla.org 
   * If you do not have an account, you can create it at https://cloud.supla.org/account/create
   * SUPLA and SUPLA CLOUD are free of charge
   * 
   */

  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    "svrX.supla.org",  // SUPLA server address
                    0,                 // Location ID 
                    "");               // Location Password
    
}

void loop() {
  SuplaDevice.iterate();
}
Screenshot_20191125-162416.png
Screenshot_20191125-162416.png (76.11 KiB) Przejrzano 344 razy
Screenshot_20191125-162428.png
Screenshot_20191125-162428.png (83.36 KiB) Przejrzano 344 razy
Screenshot_20191125-162516.png
Screenshot_20191125-162516.png (84.45 KiB) Przejrzano 344 razy
bigthomas
Posty: 37
Rejestracja: pn sie 12, 2019 3:35 pm

śr lis 27, 2019 12:39 pm

Niestety z Twoją biblioteką mam błędy przy kompilacji (na poprzedniej bibliotece działało).

Niestety z Twoją biblioteką mam błędy przy kompilacji (na poprzedniej bibliotece działało).

Kod: Zaznacz cały

Arduino:1.8.8 (Windows 7), Płytka:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

UWAGA: biblioteka SuplaDevice działa na architekturze(/architekturach) (avr) i może nie być kompatybilna z obecną płytką która działa na architekturze(/architekturach) (esp8266).
C:\Arduino\Projekty\projekt12\projekt12.ino: In function 'void setup()':

projekt12:220:27: error: invalid conversion from 'uint8_t* {aka unsigned char*}' to 'const char*' [-fpermissive]

                     "xxxx");               // Hasło lokalizacji

                           ^

In file included from C:\Arduino\Projekty\projekt12\projekt12.ino:5:0:

C:\Arduino\libraries\SuplaDevice/SuplaDevice.h:266:8: error:   initializing argument 2 of 'bool SuplaDeviceClass::begin(char*, const char*, int, const char*, unsigned char)' [-fpermissive]

   bool begin(char GUID[SUPLA_GUID_SIZE],

        ^

projekt12:220:27: error: invalid conversion from 'const char*' to 'int' [-fpermissive]

                     "xxxx");               // Hasło lokalizacji

                           ^

In file included from C:\Arduino\Projekty\projekt12\projekt12.ino:5:0:

C:\Arduino\libraries\SuplaDevice/SuplaDevice.h:266:8: error:   initializing argument 3 of 'bool SuplaDeviceClass::begin(char*, const char*, int, const char*, unsigned char)' [-fpermissive]

   bool begin(char GUID[SUPLA_GUID_SIZE],

        ^

projekt12:220:27: error: invalid conversion from 'int' to 'const char*' [-fpermissive]

                     "xxxx");               // Hasło lokalizacji

                           ^

In file included from C:\Arduino\Projekty\projekt12\projekt12.ino:5:0:

C:\Arduino\libraries\SuplaDevice/SuplaDevice.h:266:8: error:   initializing argument 4 of 'bool SuplaDeviceClass::begin(char*, const char*, int, const char*, unsigned char)' [-fpermissive]

   bool begin(char GUID[SUPLA_GUID_SIZE],

        ^

projekt12:220:27: error: invalid conversion from 'const char*' to 'unsigned char' [-fpermissive]

                     "xxxx");               // Hasło lokalizacji

                           ^

In file included from C:\Arduino\Projekty\projekt12\projekt12.ino:5:0:

C:\Arduino\libraries\SuplaDevice/SuplaDevice.h:266:8: error:   initializing argument 5 of 'bool SuplaDeviceClass::begin(char*, const char*, int, const char*, unsigned char)' [-fpermissive]

   bool begin(char GUID[SUPLA_GUID_SIZE],

        ^

C:\Arduino\Projekty\projekt12\projekt12.ino: In function 'SuplaDeviceCallbacks supla_arduino_get_callbacks()':

projekt12:315:6: error: 'SuplaDeviceCallbacks' has no member named 'tcp_read'

   cb.tcp_read = &supla_arduino_tcp_read;

      ^

projekt12:316:6: error: 'SuplaDeviceCallbacks' has no member named 'tcp_write'

   cb.tcp_write = &supla_arduino_tcp_write;

      ^

projekt12:317:6: error: 'SuplaDeviceCallbacks' has no member named 'eth_setup'

   cb.eth_setup = &supla_arduino_eth_setup;

      ^

projekt12:318:6: error: 'SuplaDeviceCallbacks' has no member named 'svr_connected'

   cb.svr_connected = &supla_arduino_svr_connected;

      ^

projekt12:319:6: error: 'SuplaDeviceCallbacks' has no member named 'svr_connect'

   cb.svr_connect = &supla_arduino_svr_connect;

      ^

projekt12:320:6: error: 'SuplaDeviceCallbacks' has no member named 'svr_disconnect'

   cb.svr_disconnect = &supla_arduino_svr_disconnect;

      ^

exit status 1
invalid conversion from 'uint8_t* {aka unsigned char*}' to 'const char*' [-fpermissive]

Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"
Awatar użytkownika
klew
Posty: 659
Rejestracja: czw cze 27, 2019 12:16 pm

śr lis 27, 2019 2:15 pm

bigthomas pisze:
śr lis 27, 2019 12:39 pm
Niestety z Twoją biblioteką mam błędy przy kompilacji (na poprzedniej bibliotece działało).
Po błędach wnioskuję, że wrzuciłeś stary projekt "ino" z nową biblioteką. To nie będzie działać ;)
Musisz przerobić swoją aplikację, aby działała z nową biblioteką. Zobacz sobie przykłady, ale chociażby użyj tego przykładu, który wstawiłem w poprzedniej wiadomości.
Jeśli potrzebujesz pomocy, to wklej tutaj swój kod (albo wyślij go).
ODPOWIEDZ