diff --git a/README.md b/README.md index c133171..3803566 100644 --- a/README.md +++ b/README.md @@ -1 +1,113 @@ -# MEP-Echelon \ No newline at end of file +# πŸ”Œ Echelon 83331 MEP Sniffer with ESP32 + +A project for reading raw data from the MEP port of the Echelon 83331 electricity meter using an ESP32. Data is read in RAW format for later parsing and decryption with a locally stored encryption key. + +## 🎯 Purpose + +- Read measurement data directly from the meter's MEP port. +- Avoid dependencies like SaveEye, cloud services, or MQTT. +- Store and parse all data 100% locally. +- Later send data to Home Assistant via REST API. + +--- + +## πŸ”Œ Hardware Connection + +### πŸ“Ÿ Components +- ESP32 DevKit (WROOM recommended) +- RJ12 female socket or MEP adapter +- Optional logic level shifter (if MEP port uses RS-232 instead of TTL) +- Jumper wires + +### βš™οΈ MEP RJ12 Pinout (standard): + +| Pin | Signal | Example ESP32 GPIO | +|-----|---------------|--------------------| +| 1 | GND | GND | +| 2 | VCC (3.3/5V) | 3.3V / 5V (check meter specs) | +| 3 | TX from meter | GPIO16 (RX) | +| 4 | RX to meter | GPIO17 (TX) | +| 5–6 | Not used | – | + +> ⚠️ Double-check voltage and signal type – if RS-232 is used, insert a MAX3232 between ESP32 and the meter. + +--- + +## πŸ“Š Expected Data Output + +Once decoding is active and the correct encryption key is implemented, the following output is expected from the meter: + +| Field | Unit | Description | +|----------------------------|----------|------------------------------------------| +| `meterType` | String | Meter type (e.g., "MEP meter") | +| `meterSerialNumber` | String | Serial number of the meter | +| `wifiRssi` | dBm | Signal strength (only relevant for WiFi) | +| `activeActualConsumption` | Watt (W) | Instantaneous active consumption | +| `activeActualProduction` | Watt (W) | Instantaneous production (e.g., solar) | +| `activeTotalConsumption` | Wh/kWh | Accumulated consumption | +| `activeTotalProduction` | Wh/kWh | Accumulated production | +| `reactiveActualConsumption`| VAr | Instantaneous reactive consumption | +| `reactiveActualProduction` | VAr | Instantaneous reactive production | +| `rmsVoltage` (L1–L3) | Volt (V) | RMS voltage per phase | +| `rmsCurrent` (L1–L3) | mA / A | RMS current per phase | +| `powerFactor` | % | Power factor (e.g., 98 = 0.98 cos(Ο†)) | + +> Note: Some values depend on the meter's firmware and configuration. + +--- + +## πŸ” ESP32 Sniffer Code (Arduino C++) + +Use this code to log raw data from the meter in HEX format for analysis: + +```cpp +#include + +HardwareSerial MEP(2); // UART2 + +void setup() { + Serial.begin(115200); + MEP.begin(9600, SERIAL_8N1, 16, 17); // RX=GPIO16, TX=GPIO17 + + Serial.println("πŸ” Starting MEP sniffer..."); +} + +void loop() { + while (MEP.available()) { + byte b = MEP.read(); + if (b < 0x10) Serial.print("0"); + Serial.print(b, HEX); + Serial.print(" "); + } +} +``` + +πŸ‘‰ Once connected and receiving data, bytes will appear in the Serial Monitor (baud: 115200). + +--- + +## πŸ” Encryption Key + +The project will later use the meter’s **private encryption key** (if required) to: +- Authenticate with the meter +- Decrypt binary data into readable values + +### πŸ”’ Security Measures +- The key will be **hardcoded in firmware**. +- Changes require OTA or physical update – **no access via web or serial interface**. +- Key usage will be handled in a dedicated parsing section. + +--- + +## πŸ§ͺ Next Steps + +1. Use this sniffer to log a data dump from the meter. +2. Compare values with your known usage/voltage to identify structure. +3. We will implement parsing + decryption, and REST push to Home Assistant. + +--- + +## πŸ“¬ Contact + +> Developed and maintained by [Thomas Emil](https://www.linkedin.com/in/thomas-emil-b3497995/). +> For technical questions, reach out via GitHub Issues or ESP32 RF-beams πŸ’‘ diff --git a/README_EN.md b/README_EN.md deleted file mode 100644 index 3803566..0000000 --- a/README_EN.md +++ /dev/null @@ -1,113 +0,0 @@ -# πŸ”Œ Echelon 83331 MEP Sniffer with ESP32 - -A project for reading raw data from the MEP port of the Echelon 83331 electricity meter using an ESP32. Data is read in RAW format for later parsing and decryption with a locally stored encryption key. - -## 🎯 Purpose - -- Read measurement data directly from the meter's MEP port. -- Avoid dependencies like SaveEye, cloud services, or MQTT. -- Store and parse all data 100% locally. -- Later send data to Home Assistant via REST API. - ---- - -## πŸ”Œ Hardware Connection - -### πŸ“Ÿ Components -- ESP32 DevKit (WROOM recommended) -- RJ12 female socket or MEP adapter -- Optional logic level shifter (if MEP port uses RS-232 instead of TTL) -- Jumper wires - -### βš™οΈ MEP RJ12 Pinout (standard): - -| Pin | Signal | Example ESP32 GPIO | -|-----|---------------|--------------------| -| 1 | GND | GND | -| 2 | VCC (3.3/5V) | 3.3V / 5V (check meter specs) | -| 3 | TX from meter | GPIO16 (RX) | -| 4 | RX to meter | GPIO17 (TX) | -| 5–6 | Not used | – | - -> ⚠️ Double-check voltage and signal type – if RS-232 is used, insert a MAX3232 between ESP32 and the meter. - ---- - -## πŸ“Š Expected Data Output - -Once decoding is active and the correct encryption key is implemented, the following output is expected from the meter: - -| Field | Unit | Description | -|----------------------------|----------|------------------------------------------| -| `meterType` | String | Meter type (e.g., "MEP meter") | -| `meterSerialNumber` | String | Serial number of the meter | -| `wifiRssi` | dBm | Signal strength (only relevant for WiFi) | -| `activeActualConsumption` | Watt (W) | Instantaneous active consumption | -| `activeActualProduction` | Watt (W) | Instantaneous production (e.g., solar) | -| `activeTotalConsumption` | Wh/kWh | Accumulated consumption | -| `activeTotalProduction` | Wh/kWh | Accumulated production | -| `reactiveActualConsumption`| VAr | Instantaneous reactive consumption | -| `reactiveActualProduction` | VAr | Instantaneous reactive production | -| `rmsVoltage` (L1–L3) | Volt (V) | RMS voltage per phase | -| `rmsCurrent` (L1–L3) | mA / A | RMS current per phase | -| `powerFactor` | % | Power factor (e.g., 98 = 0.98 cos(Ο†)) | - -> Note: Some values depend on the meter's firmware and configuration. - ---- - -## πŸ” ESP32 Sniffer Code (Arduino C++) - -Use this code to log raw data from the meter in HEX format for analysis: - -```cpp -#include - -HardwareSerial MEP(2); // UART2 - -void setup() { - Serial.begin(115200); - MEP.begin(9600, SERIAL_8N1, 16, 17); // RX=GPIO16, TX=GPIO17 - - Serial.println("πŸ” Starting MEP sniffer..."); -} - -void loop() { - while (MEP.available()) { - byte b = MEP.read(); - if (b < 0x10) Serial.print("0"); - Serial.print(b, HEX); - Serial.print(" "); - } -} -``` - -πŸ‘‰ Once connected and receiving data, bytes will appear in the Serial Monitor (baud: 115200). - ---- - -## πŸ” Encryption Key - -The project will later use the meter’s **private encryption key** (if required) to: -- Authenticate with the meter -- Decrypt binary data into readable values - -### πŸ”’ Security Measures -- The key will be **hardcoded in firmware**. -- Changes require OTA or physical update – **no access via web or serial interface**. -- Key usage will be handled in a dedicated parsing section. - ---- - -## πŸ§ͺ Next Steps - -1. Use this sniffer to log a data dump from the meter. -2. Compare values with your known usage/voltage to identify structure. -3. We will implement parsing + decryption, and REST push to Home Assistant. - ---- - -## πŸ“¬ Contact - -> Developed and maintained by [Thomas Emil](https://www.linkedin.com/in/thomas-emil-b3497995/). -> For technical questions, reach out via GitHub Issues or ESP32 RF-beams πŸ’‘