PZEM004 V3

lgorek
Posts: 44
Joined: Sat Aug 31, 2019 8:35 pm

Post

Witam
Na forum jestem nowym, w domu mam kilka ESP8266 z DS18B20 i BME280. Obecnie korzystam z Blynk prosty ale jak mam mieć dwa to może uda mi się wszystko wrzucić do Supla.

Dzisiaj montowałem Zamel MEW-01. Sprzęt fajny ale ogólnie chciałbym mieć kilka takich a cena też swoje robi. Obecnie podłączona jest tylko kuchnia aby wiedzieć ile zjada prądu. Jednak po przeglądaniu neta wpadłem na tego PZEM i od razu zamówione dwie sztuki aby sprawdzić jak to ugryźć.

I teraz mam kilka pytań, ponieważ do do jednego urządzenia to raczej nie mam problemu jakoś będzie dało się to połączyć. Jednak chciałbym już iść na całość i zrobić każde pomieszczenie osobno i ewentualnie gniazdka i świtało. Wychodziło by że mam 10 pomieszczeń gdzie w niektórych mogę zastosować gniazdka/światło co daje nam w przybliżeniu 15 czujników energii. Przy MEW-01 wyszło by to prawie 2000zł. Ale widząc alternatywę warto spróbować może się uda.

Moje pytanie czy jest możliwość podłączenia kilka PZEM do jednego NodeMcu v3 / Wemos D1 mini PRO / takie posiadam albo jeszcze innego. Tak aby jeżeli jest możliwe jednym ESP8266 wysyłać dane z wszystkich PZEM.

Czy ktoś was już coś takiego robił ?
User avatar
pzygmunt
Posts: 19243
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Nie ma jeszcze softu do tego. Leży mi kilka sztuk od @QLQ ale nie mam kiedy się tym zająć.
lgorek
Posts: 44
Joined: Sat Aug 31, 2019 8:35 pm

Post

pzygmunt wrote: Sat Aug 31, 2019 11:01 pm Nie ma jeszcze softu do tego. Leży mi kilka sztuk od @QLQ ale nie mam kiedy się tym zająć.
Nie pozostaje nic jak czekać, a projekty polskie należy rozwijać. Dopiero zaczynam korzystać z Supla ale jest po polsku dzięki czemu żona nie będzie mieć problemu również z obsługą dodatkowo bardzo dużo jest tworzone.

Jak dojdą do mnie czujniki PZEM z chin to będę testował. Zapewne będzie potrzeba dokupienia D1 mini :)


PS.
Są dostępne D1 mini z 32MB pamięcią czy tą pamięć da się wykorzystać do przechowywania danych w czasie kiedy nie ma internetu, a gdy taki się pojawi wyśle na serwer brakujące dane ? Obecnie posiadam internet z GSM więc czasami jest to różnie. Niby ma być światłowód ale kiedy to niewiadome.
User avatar
pzygmunt
Posts: 19243
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Oprogramowanie pod stronie urządzenia przechowuje w pamięci tylko stan licznika. Do tego nie jest potrzebna tak duża pamięć. Generalnie nie wykorzystujemy więcej niż 2MB
User avatar
QLQ
Posts: 2344
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Post

Chłopaki ruszymy coś z tym tematem tego licznika. Właśnie go odkopałem przypadkowo. Sam bym może trochę pokombinował ale nie poradzę sobie bo nie ma tego w SuplaDevice. Działa na ESP12 jak widać - komunikacja po pinie 4 i 5 - program mam oryginalny - działa jak wczesniej pisałem.. czyta Moc,

Tu są pliki *c i *,h od energy_merter : https://github.com/SUPLA/supla-espressi ... r/src/user

W proto.h ( espressif ) jest ale .. wydedukowałem tylko strukturę :

Code: Select all


typedef struct {
  // 3 phases
  unsigned _supla_int16_t freq;        // * 0.01 Hz
  unsigned _supla_int16_t voltage[3];  // * 0.01 V
  unsigned _supla_int16_t current[3];  // * 0.001 A
  _supla_int_t power_active[3];        // * 0.00001 kW
  _supla_int_t power_reactive[3];      // * 0.00001 kvar
  _supla_int_t power_apparent[3];      // * 0.00001 kVA
  _supla_int16_t power_factor[3];      // * 0.001
  _supla_int16_t phase_angle[3];       // * 0.1 degree
} TElectricityMeter_Measurement; // v. >= 10

]typedef struct {
  unsigned _supla_int64_t total_forward_active_energy[3];    // * 0.00001 kWh
  unsigned _supla_int64_t total_reverse_active_energy[3];    // * 0.00001 kWh
  unsigned _supla_int64_t total_forward_reactive_energy[3];  // * 0.00001 kvarh
  unsigned _supla_int64_t total_reverse_reactive_energy[3];  // * 0.00001 kvarh

  // The price per unit, total cost and currency is overwritten by the server
  // total_cost == SUM(total_forward_active_energy[n] * price_per_unit
  _supla_int_t total_cost;      // * 0.01
  _supla_int_t price_per_unit;  // * 0.0001
  // Currency Code A https://www.nationsonline.org/oneworld/currencies.htm
  char currency[3];

  _supla_int_t measured_values;
  _supla_int_t period;  // Approximate period between measurements in seconds
  _supla_int_t m_count;
  TElectricityMeter_Measurement m[EM_MEASUREMENT_COUNT];  // Last variable in
                                                          // struct!
} TElectricityMeter_ExtendedValue;                        // v. >= 10

#define EM_VALUE_FLAG_PHASE1_ON 0x01
#define EM_VALUE_FLAG_PHASE2_ON 0x02
#define EM_VALUE_FLAG_PHASE3_ON 0x04

// [IODevice->Server->Client]
typedef struct {
  char flags;
  unsigned _supla_int_t total_forward_active_energy;  // * 0.01 kW
} TElectricityMeter_Value;                            // v. >= 10
.
"Nieuzbrojone" płytki ze zdjecia mam do rozdania Niebieskie są pod 3fazy- podłącza się 3 PZEM004, zielone na 1fazę

Tak to wygląda po złożeniu z płytką:
Bez nazwy 1.jpg
Ten PZEM po prawej jest nowszą wersją:
20191201_141035.jpg
You do not have the required permissions to view the files attached to this post.
jak coś nie działa to włącz zasilanie.....
User avatar
pzygmunt
Posts: 19243
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

W definicji własnej płytki musisz tylko dodać

Code: Select all

#define ELECTRICITY_METER_COUNT 1
oraz

Code: Select all

char ICACHE_FLASH_ATTR supla_esp_board_get_measurements(
   unsigned char channel_number, TElectricityMeter_ExtendedValue *value) {
   value->measured_values = EM_VAR_ALL;
  value->m_count = 0;
  value->period = 1;
  ......
}
To funkcja jest wywoływana co kolka sekund. W niej musisz podstawić do value pomiary.
User avatar
QLQ
Posts: 2344
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Post

pzygmunt wrote: Sun Dec 01, 2019 8:32 pm W definicji własnej płytki musisz tylko dodać

Code: Select all

#define ELECTRICITY_METER_COUNT 1
oraz

Code: Select all

char ICACHE_FLASH_ATTR supla_esp_board_get_measurements(
   unsigned char channel_number, TElectricityMeter_ExtendedValue *value) {
   value->measured_values = EM_VAR_ALL;
  value->m_count = 0;
  value->period = 1;
  ......
}
To funkcja jest wywoływana co kolka sekund. W niej musisz podstawić do value pomiary.
Ok ale to w SDK a nie Arduino? Będę musiał zapoznać się z lnx . VM mam postawiony...
jak coś nie działa to włącz zasilanie.....
User avatar
pzygmunt
Posts: 19243
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków

Post

Tak. W SDK. Dla Arduino też pojawi się obsługa. Temat ogarnia @klew.
User avatar
QLQ
Posts: 2344
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Post

pzygmunt wrote: Sun Dec 01, 2019 8:38 pm Tak. W SDK. Dla Arduino też pojawi się obsługa. Temat ogarnia @klew.
O to super.
jak coś nie działa to włącz zasilanie.....
User avatar
QLQ
Posts: 2344
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Post

A czy ktoś z Was koledzy nie spróbowałby skompilowac tego softy na 4 i 5 pon D1 i D2 w wemos? Aby byly prezentowane wartości :
- napięcia
- prądu
-mocy
-energii (zapisuje je w swojej pamięci - w przypadku zaniku zasilania)
-częstotliwości
-współczynnika mocy
jak coś nie działa to włącz zasilanie.....

Return to “Zrób to sam”