Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 139
» Latest member: MarilynRose
» Forum threads: 91
» Forum posts: 344

Full Statistics

Online Users
There are currently 10 online users.
» 0 Member(s) | 10 Guest(s)

Latest Threads
Neue Version 0.9.1
Forum: SmartPi - Deutsch
Last Post: ielektros
22.04.2018, 09:01
» Replies: 3
» Views: 205
Connection
Forum: SmartPi - English
Last Post: Kemcomm
21.04.2018, 09:17
» Replies: 13
» Views: 2.565
Auslesen der Daten mit Py...
Forum: SmartPi - Deutsch
Last Post: hessam
18.04.2018, 14:06
» Replies: 0
» Views: 44
RS485 - Schaltplan
Forum: SmartPi - Deutsch
Last Post: ielektros
13.04.2018, 08:06
» Replies: 2
» Views: 83
New version 0.9.1
Forum: SmartPi - English
Last Post: jens
12.04.2018, 14:34
» Replies: 0
» Views: 217
API Abfrage - Abfrage URL...
Forum: SmartPi - Deutsch
Last Post: Rheininsel
12.04.2018, 10:51
» Replies: 0
» Views: 59
Ver.09 Settings-Measureme...
Forum: SmartPi - Deutsch
Last Post: Rheininsel
12.04.2018, 10:25
» Replies: 3
» Views: 79
Grid frequency
Forum: SmartPi - English
Last Post: SuperQ
08.04.2018, 22:42
» Replies: 0
» Views: 142
Bug Report / System zeich...
Forum: SmartPi - Deutsch
Last Post: jens
03.04.2018, 10:43
» Replies: 5
» Views: 765
Falsche Consumption (kWh)...
Forum: SmartPi - Deutsch
Last Post: groest
21.03.2018, 13:44
» Replies: 0
» Views: 265

 
  Missing components
Posted by: Lionel - 09.02.2018, 13:52 - Forum: SmartPi - English - Replies (1)

Greetings to all the members.

I received my unit today and look forward to getting started.

I'm sure there will be more questions after I get powered up, but I just wanted to ask about the missing components marked R47, R49 and R48.

The leads were soldered in which makes me think they were clipped off after production.

In the picture shown in the manual they look like they may be MOV's  ( Metal Oxide Varistors ), but I may be wrong.

Should I be worried ?

Thanks

Lionel

Print this item

  Feature Requests
Posted by: admins - 08.02.2018, 18:37 - Forum: SmartPi - Deutsch - Replies (2)

Hallo Jens
Wieder ein paar Requests:
- Anstelle von FTP Export im GUI SCP/SFTP
- Webinterface via Benutzer + Passwort schützen, kein direkter Zugriff auf IP:1080 oder später auf der TLS Seite ;-)
- Webinterface Login via LDAP/Radius Möglichkeit

Gruss
admins

Print this item

  Statistik reset
Posted by: admins - 08.02.2018, 18:25 - Forum: SmartPi - Deutsch - Replies (1)

Guten Abend zusammen
Mein SmartPi kann jetzt in an die original Analge :-)
Wie kann ich die jetzigen Messdaten löschen/resetten?

Danke und Gruss
adminst

Print this item

  Feature Requests
Posted by: admins - 03.02.2018, 17:59 - Forum: SmartPi - Deutsch - Replies (1)

Guten Tag
Ich wünsche mir eine Möglichkeit folgende Dinge mit dem Raspi zu realisieren:
- Verbrauchsabfrage per GUI mit Zeitfilter und die Auswahl ob L1, L2, L3 oder kombiniert
- Stromverbrauch pro Monat anzeigen Charting
- Stromverbrauch pro Tag (total) in Kombination mit lokalen Temperaturen

- Webinterface per SSL verschlüsseln

Danke und Gruss
admins

Print this item

  Probleme mit nodered-install
Posted by: andreas.kolbe - 02.02.2018, 18:32 - Forum: SmartPi - Deutsch - Replies (8)

Hallo zusammen!

Ich habe von vornherein Probleme mit der nodered installation. Installiere und update paket smartpi via apt-get auf Raspbian GNU/Linux 8.0 (jessie).

Beim Paket-Update meldet sich der nodered installer, meckert erst, dass ich mit root komme (kein sudo nötig), was ich nicht verhindern kann, wenn die nodered Installation im Bauch vom Paket-Update mit apt-get läuft. Dann möchte der Installer die Erlaubnis, alte Nodered-Instanzen zu deinstallieren (habe ich bestätigt) und dann will er wissen, ob er Raspi-Versionen nehmen soll (habe ich positiv beantwortet).

Dann sieht das so aus:


Quote:Running Node-RED install for user root at /root

This can take 20-30 minutes on the slower Pi versions - please wait.

  Stop Node-RED                       ✔
  Remove old version of Node-RED      ✔
  Remove old version of Node.js       ✔
  Install Node.js LTS                 ✘   Failed to install Node.js - Exit
  Clean npm cache                     
  Install Node-RED core               
  Move global nodes to local          
  Install extra Pi nodes              
  Npm rebuild existing nodes          
  Add menu shortcut                   
  Update systemd script               
  Update update script                

Any errors will be logged to   /var/log/nodered-install.log



In der /var/log/nodered-install.log finde ich dann

Quote:E: Konnte Sperre /var/lib/dpkg/lock nicht bekommen - open (11: Die Ressource ist zur Zeit nicht verfügbar)
E: Sperren des Administrationsverzeichnisses (/var/lib/dpkg/) nicht möglich, wird es von einem anderen Prozess verwendet?


Ich konnte nicht herausfinden, dass die lock-Datei durch irgendwen in Gebrauch sei, habe sie aber vorsichtshalber mal gelöscht und neu angelegt.

Allerdings brachte dann ein
Code:
sudo apt-get --reinstall install smartpi
auch keine Besserung.

Hat jemand eine Idee für mich? Vielen Dank!

Lieben Gruß
Andreas

Print this item

  Webpage 'No Data Available'
Posted by: ila - 01.02.2018, 12:20 - Forum: SmartPi - English - Replies (3)

Hello,

We got our smartpi yesterday and want to thank you folks for putting it all together. Everything works out of the box and setup was fairly smooth. However, more documentation would certainly help!

We have connected one device on L1 for initial setup and values can be seen in webpage.  Pi was  running for few hours but the main webpage keep displaying 'No Data Available' with empty CSV/table under download option. Here is the output from /var/smartpi/db:

ls -alh /var/smartpi/db

total 69M
drwxrwxrwx 2 pi pi 4.0K Nov 23 11:26 .
drwxr-xr-x 5 pi pi 4.0K Oct 10 15:21 ..
-rwxrwxrwx 1 pi pi 156K Sep 27 11:59 smartpi_logdata_201702.db
-rwxrwxrwx 1 pi pi 8.4M Sep 27 11:59 smartpi_logdata_201703.db
-rwxrwxrwx 1 pi pi 9.2M Sep 27 12:00 smartpi_logdata_201704.db
-rwxrwxrwx 1 pi pi 9.6M Sep 27 12:00 smartpi_logdata_201705.db
-rwxrwxrwx 1 pi pi 9.8M Sep 27 12:00 smartpi_logdata_201706.db
-rwxrwxrwx 1 pi pi  11M Sep 27 12:00 smartpi_logdata_201707.db
-rwxrwxrwx 1 pi pi  11M Sep 27 12:01 smartpi_logdata_201708.db
-rwxrwxrwx 1 pi pi 9.1M Sep 29 12:27 smartpi_logdata_201709.db
-rwxrwxrwx 1 pi pi 1.8M Oct 23 15:18 smartpi_logdata_201710.db
-rwxrwxrwx 1 pi pi 544K Nov 23 11:26 smartpi_logdata_201711.db
-rwxrwxrwx 1 pi pi  12K Jan 23  2018 smartpi_logdata_201801.db
-rwxrwxrwx 1 pi pi  12K Nov 23 09:07 smartpi_logdata_201802.db


Any thoughts?

Thanks
ila

Print this item

  Datenbank
Posted by: mark - 29.01.2018, 23:03 - Forum: SmartPi - Deutsch - Replies (2)

Hallo 
erstmal danke für das super smartpi Projekt wurde von mir nach Anleitung zur Funktion gebracht und funktioniert sehr gut.

Ein paar Fragen hätte ich noch:

- Gibt es eine Möglichkeit alle bisherigen Messdaten zurückzusetzen/löschen da der smartpi nun an seinen endgültigen Bestimmungsort kommen soll.
- Gibt es eine Möglichkeit die Mysql Datenbank einzusehen (in meinen letzten Projekten z.B. über phpmyadmin)
- Ich würde auch gerne die Datenbank extern über Python abfragen dazu brauche ich Informationen wie username, Passwort, db Name usw
- Wo finde ich auf dem raspberry die Datei ade7878.go um diese zu editieren 

Vielen Dank 
Smile

Print this item

  Current transformer
Posted by: Jonny - 26.01.2018, 23:57 - Forum: SmartPi - English - Replies (3)

Hi

I got mine smartpi today, its upp running and everything works except that i do have have 375 A current transformer mounted in my grid connection, how can i change it? is there any dokumentation, thanks for a lovely produkt!


Best regards Jonny

Print this item

  Connection
Posted by: Kemcomm - 24.01.2018, 11:30 - Forum: SmartPi - English - Replies (13)

Hello

i have smartpi2.
My electricty network consist of 3 phase and no Neutral conductor.
So onliy L1 L2 and L3.  3 times 230 Volt
How do i proceed for the connection to measure the voltage?
Also the values that i measure seems to be to high

Thanks

Print this item

  SmartESP - SmartPi mit einem ESP32 auslesen
Posted by: clemens - 16.01.2018, 16:05 - Forum: Projekte - No Replies

Hallo,

hier ist ein kleines Projekt, bei dem ich den SmartPi mit einem ESP32 NodeMCU auslese und diese Daten dann über MQTT verteile. Es werden keine Daten gespeichert.

Als Grundlage wird das Projekt Basecamp von der Zeitschrift ct genommen. Bei diesen Projekt hat man bereits eine Weboberfläche für die W-LAN und für die MQTT Einstellungen.

https://github.com/merlinschumacher/Basecamp

Benötigte Hardware

1 x SmartPi: https://shop.enerserve.eu/smartpi/262/smartpi-2.0
1 x ESP32 NodeMCU (oder ähnliches) https://www.amazon.de
2 x 3 kOhm Widerstand

IDE

Als IDE wird die Arduino IDE benutzt: https://www.arduino.cc/en/Main/Software
Die Desktop Version runterladen und installieren. 

Im nächsten Schritt muss noch die Informationen für den ESP32 ins Arduino geladen werden. Dazu folgen Sie bitte diese Anleitung: https://github.com/espressif/arduino-esp32

Nun können Sie in der Arduino IDE unter "Werkzeuge" => "Board" das "ESP32 Dev Module" auswählen.

Bibliotheken laden

Es gibt die Möglichkeit die Bibliotheken direkt über die Arduino IDE runter zu laden. Allerdings sind diese nicht immer auf den aktuellsten Stand. Daher empfehle ich die Bibliotheken von Hand runter zu laden und dann in die Arduino IDE hinzuzufügen.

Dazu bitte bei folgenden Bibliotheken wir folgt vorgehen:
- Bei GitHub auf "Clone or download" klicken und als ZIP Datei runter laden
- In der Arduino IDE "Sketch" => "Bibliotheken einbinden" => ".ZIP Bibliothek hinzufügen .." und die Datei auswählen

https://github.com/merlinschumacher/Basecamp
https://github.com/me-no-dev/ESPAsyncWebServer
https://github.com/bblanchon/ArduinoJson
https://github.com/marvinroger/async-mqtt-client
https://github.com/me-no-dev/AsyncTCP

SmartPi mit dem ESP32 verbinden

Die PINs +5V, GND, SCL und SDA müssen mit verbunden werden.
   

Zusätzlich benötigen die I2C Leitungen jeweils noch einen 3 kOhm PullUp Widerstand zu 3,3V da die PullUp Widerstände auf dem SmartPi zu groß sind für den ESP32.
   

Software

Erstelle ein neues Arduino Projekt und füge den Code ein.

Hier kann man den Topic Namen für MQTT anpassen
#define TOPIC "SmartESP" 

Intervall zum Auslesen des SmartPi. Angabe in ms 
#define DELAY 5000

Überprüfen und Hochladen:

Code:
#include <Basecamp.hpp>
#include <Wire.h>

Basecamp iot;

#define TOPIC "SmartESP"
#define DELAY 5000

#define ADE_ADDRESS  0x38
#define BUFSIZE 4
#define PI 3.141592654
#define ADE7878_CLOCK   256000
#define FACTOR_CIRCLE   360
#define   FACTOR_1   256
#define   FACTOR_2   65536
#define   FACTOR_3   16777216
#define   RMS_FACTOR_VOLTAGE   2427873
#define   CURRENT_RESISTOR_A   7.07107
#define   CURRENT_RESISTOR_B   7.07107
#define   CURRENT_RESISTOR_C   7.07107
#define   CURRENT_RESISTOR_N   7.07107
#define   CURRENT_CLAMP_FACTOR_A   0.05
#define   CURRENT_CLAMP_FACTOR_B   0.05
#define   CURRENT_CLAMP_FACTOR_C   0.05
#define   CURRENT_CLAMP_FACTOR_N   0.05
#define   OFFSET_CURRENT_A   0.97129167
#define   OFFSET_CURRENT_B   0.97129167
#define   OFFSET_CURRENT_C   0.97129167
#define   OFFSET_CURRENT_N   0.97129167
#define   OFFSET_VOLTAGE_A   1.0
#define   OFFSET_VOLTAGE_B   1.0
#define   OFFSET_VOLTAGE_C   1.0
#define  POWER_CORRECTION_FACTOR_A   0.019413
#define   POWER_CORRECTION_FACTOR_B   0.019413
#define   POWER_CORRECTION_FACTOR_C   0.019413

int write_i2c(char data[],unsigned char length)
{
  unsigned char i;
  Wire.beginTransmission(ADE_ADDRESS);
  for(i=0;i<length;i++)
  {
    Wire.write(data[i]);
  }
  Wire.endTransmission();
  return i;
}

int read_i2c(char * data, int length)
{
 unsigned char i;
 unsigned char ret;
 Wire.requestFrom(ADE_ADDRESS,length);
 ret=Wire.available();
 if(ret!=length) return -1;

 for(i=0;i<ret;i++)
   data[i] = Wire.read();
 
 return ret;
}

void mqtt_publish(char name[],double data)
{
   char string[20];
   char topic[100];
   sprintf(string,"%.4f",data);
   sprintf(topic,"%s/%s",TOPIC,name);
   iot.mqtt.publish(topic, 1, true, string);
}

int init_ade7878()
{
 Wire.begin();
 Serial.println("init");
 char data[10];
 int i;

 data[0] = 0xEC;//0xEC01 (CONFIG2-REGISTER)
 data[1] = 0x01;
 data[2] = 0x02;//00000010 --> Bedeutet I2C-Lock (I2C ist nun die gewählte Übertragungsart)
 if(write_i2c( data, 3) != 3)  return -1;

 data[0] = 0xEC;//0xEC01 (CONFIG2-REGISTER)
 if(write_i2c( data, 1) != 1) return -1;

 data[0] = 0xE7;//0xE7FE writeprotection
 data[1] = 0xFE;
 data[2] = 0xAD;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE7;//0xE7E3 writeprotection OFF
 data[1] = 0xE3;
 data[2] = 0x00;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE6;//0xE60E (COMPMODE-REGISTER)
 data[1] = 0x0E;
 data[2] = 0x01;//50HZ 0x60 60HZ
 data[3] = 0xFF;
 if(write_i2c( data, 4) != 4) return -1;

 data[0] = 0x43;//0x43B5 (DICOEFF-REGISTER)
 data[1] = 0xB5;
 data[2] = 0xFF;
 data[3] = 0x80;
 data[4] = 0x00;
 if(write_i2c( data, 5) != 5) return -1;
 
 data[0] = 0x43;//0x43AB (WTHR1-REGISTER)
 data[1] = 0xAB;
 data[2] = 0x00;
 data[3] = 0x00;
 data[4] = 0x00;
 data[5] = 0x17;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x43AC (WTHR0-REGISTER)
 data[1] = 0xAC;
 data[2] = 0x00;
 data[3] = 0x85;
 data[4] = 0x60;
 data[5] = 0x16;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x43B3 (VLEVEL-REGISTER)
 data[1] = 0xB3;
 data[2] = 0x00;
 data[3] = 0x0C;
 data[4] = 0xEC;
 data[5] = 0x85;
 if(write_i2c( data, 6) != 6) return -1;
 
 delay(875);
 
 data[0] = 0x43;//0x4381 (AVGAIN-REGISTER)
 data[1] = 0x81;
 data[2] = 0xFF;
 data[3] = 0xFC;
 data[4] = 0x1C;
 data[5] = 0xC2;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x4383 (BVGAIN-REGISTER)
 data[1] = 0x83;
 data[2] = 0xFF;
 data[3] = 0xFC;
 data[4] = 0x1C;
 data[5] = 0xC2;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0x43;//0x4385 (CVGAIN-REGISTER)
 data[1] = 0x85;
 data[2] = 0xFF;
 data[3] = 0xFC;
 data[4] = 0x1C;
 data[5] = 0xC2;
 if(write_i2c( data, 6) != 6) return -1;
 
 data[0] = 0xE7;//0xE702 LCYCMODE
 data[1] = 0x02;
 data[2] = 0x0F;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE6;//0xE60C LINECYC
 data[1] = 0x0C;
 data[2] = 0xC8;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE7;//0xE7FE writeprotection
 data[1] = 0xFE;
 data[2] = 0xAD;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE7;//0xE7E3 writeprotection
 data[1] = 0xE3;
 data[2] = 0x80;
 if(write_i2c( data, 3) != 3) return -1;
 
 data[0] = 0xE2;//0xE228 (RUN-Register)
 data[1] = 0x28;
 data[2] = 0x00;
 data[3] = 0x01;
 if(write_i2c( data, 4) != 4) return -1;
 
 return 0;
}

int read_ade7878()
{
   Serial.println("read");
   double ua=230,ub=230,uc=230,ia=0,ib=0,ic=0,pa=0,pb=0,pc=0,pac=0,cosa=1,cosb=1,cosc=1,hza=50,hzb=50,hzc=50,pfa,pfb,pfc;
   double awatt,ava,avar,bwatt,bva,bvar,cwatt,cva,cvar;
   char data[30],data_out[20];
   float ergebnis;
   double VAL = PI / 180.0;
   double rms_factor_current = 4191910;
   double ia_corr=1,ib_corr=1,ic_corr=1;
   char ua_gemessen=1,ub_gemessen=1,uc_gemessen=1;
   char string[100];

   ua_gemessen=1;
   ub_gemessen=1;
   uc_gemessen=1;
   //0 current phase a
   data_out[0] = 0x43;//0x43C0 (AIRMS; Current rms an A)
   data_out[1] = 0xC0;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 4) != 4) return -1;
   ergebnis=(double) (FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];

   ia=((((ergebnis * 0.3535) / rms_factor_current) / CURRENT_RESISTOR_A) / CURRENT_CLAMP_FACTOR_A) * 100.0 * OFFSET_CURRENT_A;

   //1 current phase b
   data_out[0] = 0x43;//0x43C2 (BIRMS; Current rms an B)
   data_out[1] = 0xC2;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(double) (FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   ib=((((ergebnis * 0.3535) / rms_factor_current) / CURRENT_RESISTOR_B) / CURRENT_CLAMP_FACTOR_B) * 100.0 * OFFSET_CURRENT_B;

   //2 current phase c
   data_out[0] = 0x43;//0x43C4 (CIRMS; Current rms an C)
   data_out[1] = 0xC4;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(double) (FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   ic=((((ergebnis * 0.3535) / rms_factor_current) / CURRENT_RESISTOR_C) / CURRENT_CLAMP_FACTOR_C) * 100.0 * OFFSET_CURRENT_C;
   
   //3 current phase n
   
   //4 voltage phase a
   data_out[0] = 0x43;//0x43C1 (AVRMS; Voltage rms an A)
   data_out[1] = 0xC1;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ergebnis/10000 > 100) ua=ergebnis/10000;
   else ua_gemessen=0;
   
   //5 voltage phase b
   data_out[0] = 0x43;//0x43C3 (BVRMS; Voltage rms an B)
   data_out[1] = 0xC3;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ergebnis/10000 > 100) ub=ergebnis/10000;
   else ub_gemessen=0;

   //6 voltage phase c
   data_out[0] = 0x43;//0x43C5 (CVRMS; Voltage rms an C)
   data_out[1] = 0xC5;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ergebnis/10000 > 100) uc=ergebnis/10000;
   else uc_gemessen=0;
   
   //7  Phase A total active power.
   data_out[0] = 0xE5;//0xE513 (AWATT total active power an A)
   data_out[1] = 0x13;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ua_gemessen) awatt=(ergebnis*POWER_CORRECTION_FACTOR_A);
   else awatt=ia*ua;
   
   //8  Phase B total active power.
   data_out[0] = 0xE5;//0xE514 (BWATT total active power an B)
   data_out[1] = 0x14;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( ub_gemessen) bwatt=(ergebnis*POWER_CORRECTION_FACTOR_B);
   else bwatt=ib*ub;
   
   //9  Phase C total active power.
   data_out[0] = 0xE5;//0xE515 (CWATT total active power an C)
   data_out[1] = 0x15;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   if( uc_gemessen) cwatt=(ergebnis*POWER_CORRECTION_FACTOR_C);
   else cwatt=ic*uc;

   //10 cosphi phase a
   data_out[0] = 0xE6;//0xE601 (ANGLE0 cosphi an A)
   data_out[1] = 0x01;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   if( ua_gemessen) cosa=cos(ergebnis * FACTOR_CIRCLE * 50 / ADE7878_CLOCK * VAL);
   else cosa=1;

   //11 cosphi phase b
   data_out[0] = 0xE6;//0xE601 (ANGLE1 cosphi an B)
   data_out[1] = 0x02;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   if( ub_gemessen) cosb=cos(ergebnis * FACTOR_CIRCLE * 50 / ADE7878_CLOCK * VAL);
   else cosb=1;

   //12 cosphi phase c
   data_out[0] = 0xE6;//0xE601 (ANGLE2 cosphi an C)
   data_out[1] = 0x03;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   if( uc_gemessen) cosc=cos(ergebnis * FACTOR_CIRCLE * 50 / ADE7878_CLOCK * VAL);
   else cosc=1;

   //13 frequency phase a
   data_out[0] = 0xE7;//MMODE-Register measure frequency at VA
   data_out[1] = 0x00;
   data_out[2] = 0x1C;
   if(write_i2c(data_out, 3) != 3) return -1;
   delay(50);
   data_out[0] = 0xE6;//0xE607 (PERIOD)
   data_out[1] = 0x07;
   if(write_i2c(data_out, 2) != 2) return -1;
   if (read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   hza=(double) ADE7878_CLOCK / (ergebnis +1 );
   
   //14 frequency phase b
   data_out[0] = 0xE7;//MMODE-Register measure frequency at VB
   data_out[1] = 0x00;
   data_out[2] = 0x1D;
   if(write_i2c(data_out, 3) != 3) return -1;
   delay(50);
   data_out[0] = 0xE6;//0xE607 (PERIOD)
   data_out[1] = 0x07;
   if(write_i2c(data_out, 2) != 2) return -1;
   if (read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   hzb=(double) ADE7878_CLOCK / (ergebnis +1 );
   
   //15 frequency phase c
   data_out[0] = 0xE7;//MMODE-Register measure frequency at VC
   data_out[1] = 0x00;
   data_out[2] = 0x1E;
   if(write_i2c(data_out, 3) != 3) return -1;
   delay(50);
   data_out[0] = 0xE6;//0xE607 (PERIOD)
   data_out[1] = 0x07;
   if(write_i2c(data_out, 2) != 2) return -1;
   if (read_i2c(data, 2) != 2) return -1;
   ergebnis=(FACTOR_1*data[0])+data[1];
   hzc=(double) ADE7878_CLOCK / (ergebnis +1 );
   
   //16 Phase A total apparent power.
   data_out[0] = 0xE5;//0xE519 (AVA total apparent power an A)
   data_out[1] = 0x19;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   ava=ergebnis;
   
   //17 Phase B total apparent power.
   data_out[0] = 0xE5;//0xE519 (BVA total apparent power an B)
   data_out[1] = 0x1A;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   bva=ergebnis;
   
   //18 Phase C total apparent power.
   data_out[0] = 0xE5;//0xE519 (CVA total apparent power an C)
   data_out[1] = 0x1B;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   cva=ergebnis;
   
   //19 Phase A total reactive power.
   data_out[0] = 0xE5;//0xE516 (AVAR total reactive power an A)
   data_out[1] = 0x16;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   avar=ergebnis;
   
   //20 Phase A total reactive power.
   data_out[0] = 0xE5;//0xE516 (AVAR total reactive power an B)
   data_out[1] = 0x17;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   bvar=ergebnis;
   
   //21 Phase A total reactive power.
   data_out[0] = 0xE5;//0xE516 (AVAR total reactive power an C)
   data_out[1] = 0x18;
   if(write_i2c(data_out, 2) != 2) return -1;
   if(read_i2c(data, BUFSIZE) != BUFSIZE) return -1;
   ergebnis=(FACTOR_3*data[0])+(FACTOR_2*data[1])+(FACTOR_1*data[2])+data[3];
   cvar=ergebnis;

   pa=awatt*(-1.0);
   pb=bwatt*(-1.0);
   pc=cwatt*(-1.0);

   if( ua_gemessen)
   {
     if(avar<0)
       pfa=awatt/POWER_CORRECTION_FACTOR_A/ava;
     else
       pfa=awatt/POWER_CORRECTION_FACTOR_A/ava*(-1.0);
     ia=ia*fabs(pfa);
   }

   if( ub_gemessen)
   {
     if(bvar<0)
       pfb=bwatt/POWER_CORRECTION_FACTOR_B/bva;
     else
       pfb=bwatt/POWER_CORRECTION_FACTOR_B/bva*(-1.0);
     ib=ib*fabs(pfb);
   }

   if( uc_gemessen)
   {
     if(cvar<0)
       pfc=cwatt/POWER_CORRECTION_FACTOR_C/cva;
     else
       pfc=cwatt/POWER_CORRECTION_FACTOR_C/cva*(-1.0);
     ic=ic*fabs(pfc);
   }

   pac=pa+pb+pc;
   
   if(pac>=0)
   {
     sprintf(string,"BEZUG: %f",pac);
     Serial.println(string);
   }
   else
   {
     sprintf(string,"EINSPEISUNG: %f",pac);
     Serial.println(string);
   }

   mqtt_publish("P0",pac);
   mqtt_publish("P1",pa);
   mqtt_publish("P2",pb);
   mqtt_publish("P3",pc);
   
   mqtt_publish("COS1",cosa);
   mqtt_publish("COS2",cosb);
   mqtt_publish("COS3",cosc);
   
   mqtt_publish("I1",ia);
   mqtt_publish("I2",ib);
   mqtt_publish("I3",ic);

   mqtt_publish("U1",ua);
   mqtt_publish("U2",ub);
   mqtt_publish("U3",uc);

   mqtt_publish("HZ1",hza);
   mqtt_publish("HZ2",hzb);
   mqtt_publish("HZ3",hzc);

   mqtt_publish("PF1",pfa);
   mqtt_publish("PF2",pfb);
   mqtt_publish("PF3",pfc);

   mqtt_publish("VAR1",avar);
   mqtt_publish("VAR2",bvar);
   mqtt_publish("VAR3",cvar);

   mqtt_publish("VA1",ava);
   mqtt_publish("VA2",bva);
   mqtt_publish("VA3",cva);
   
   sprintf(string,"Leistung : %.4f %.4f %.4f = %.4f W",pa,pb,pc,pac);
   Serial.println(string);
   sprintf(string,"Cos Phi  : %.4f %.4f %.4f",cosa,cosb,cosc);
   Serial.println(string);
   sprintf(string,"PF     : %.4f %.4f %.4f",pfa,pfb,pfc);
   Serial.println(string);
   sprintf(string,"VAR    : %.4f %.4f %.4f",avar,bvar,cvar);
   Serial.println(string);
   sprintf(string,"VA     : %.4f %.4f %.4f",ava,bva,cva);
   Serial.println(string);
   sprintf(string,"Strom    : %.4f %.4f %.4f A",ia,ib,ic);
   Serial.println(string);
   sprintf(string,"Spannung : %.4f %.4f %.4f V",ua,ub,uc);
   Serial.println(string);
   sprintf(string,"Frequenz : %.4f %.4f %.4f Hz",hza,hzb,hzc);
   Serial.println(string);
   delay(DELAY);
}


void setup() {
 iot.begin();
 init_ade7878();
 Serial.println(WiFi.localIP());
}

void loop() {
  read_ade7878();
}

MQTT

Gesamtleistung [W]: P0
Leistung L1 [W]: P1
Leistung L2 [W]: P2
Leistung L3 [W]: P3

Cos L1 []: COS1
Cos L2 []: COS2
Cos L3 []: COS3

Strom L1 [A]: I1
Strom L2 [A]: I2
Strom L3 [A]: I3

Spannung L1 [V]: U1
Spannung L2 [V]: U2
Spannung L3 [V]: U3
   
Frequenz L1 [Hz]: HZ1
Frequenz L2 [Hz]: HZ2
Frequenz L3 [Hz]: HZ3

Power Faktor L1 [Hz]: PF1
Power Faktor L2 [Hz]: PF2
Power Faktor L3 [Hz]: PF3

Blindleistung L1 [Hz]: VAR1
Blindleistung L2 [Hz]: VAR2
Blindleistung L3 [Hz]: VAR3

Scheinleistung L1 [Hz]: VA1
Scheinleistung L2 [Hz]: VA2
Scheinleistung L3 [Hz]: VA3

Stromversorgung

Variante 1: Stromversorgung über den ESP32
Wenn man nur die Stromklemmen anschließen möchte, ohne die Spannung anschließen zu wollen, kann man das ganze über ein 5V Netzteil versorgen

Variante 2: Stromversorgung über den SmartPi
Man kann den ESP32 auch über den SmartPi mit 230V versorgen. Dazu müssen 230V an L und N angeschlossen werden. Siehe Handbuch: https://shop.enerserve.eu/media/pdf/8b/8...Pi-2-0.pdf

Inbetriebnahme

Nachdem der SmartPi und der ESP32 mit Strom versorgt sind, baut der ESP32 ein W-LAN Access Point auf.
Verbinden Sie sich z.B. mit Handy mit dem WLAN Netzwerk "ESP32".
Rufen Sie die Webseite "192.168.4.1" auf.
Hier können Sie die SSID und Passwort Ihres W-LAN Netzwerkes einstellen, sowie den MQTT Broker.
Nach dem Speichern wird der ESP32 neu gestartet und das System ist fertig eingerichtet.

Print this item