Browse Source

Merge branch 'development03' into Zero-Export

pull/1155/head
DanielR92 2 years ago
parent
commit
7d6195daf5
  1. 13
      README.md
  2. 5
      manual/ahoy_config.md
  3. 6
      src/CHANGES.md
  4. 2
      src/defines.h
  5. 220
      src/web/html/grid_info.json
  6. 3
      src/web/html/visualization.html

13
README.md

@ -18,19 +18,26 @@ This work is licensed under a
# 🖐 Ahoy!
![Logo](https://github.com/grindylow/ahoy/blob/main/doc/logo1_small.png?raw=true)
![Logo](https://github.com/lumapu/ahoy/blob/main/doc/logo1_small.png?raw=true)
This repository provides hardware and software solutions for communicating with Hoymiles inverters via radio. Our system allows you to easily obtain real-time values, such as power, current, and daily energy, as well as set parameters like the power limit of your inverter to achieve zero export. You can access these functionalities through our user-friendly web interface, MQTT, or JSON. Our solutions simplify the process of monitoring and fine-tuning your solar panel system to help you achieve your goals.
## Changelog
[latest Release](https://github.com/lumapu/ahoy/blob/main/src/CHANGES.md)
[Development Version](https://github.com/lumapu/ahoy/blob/development03/src/CHANGES.md)
Table of approaches:
| Board | MI | HM | HMS/HMT | comment | HowTo start |
| ------ | -- | -- | ------- | ------- | ---------- |
| [ESP8266/ESP32, C++](Getting_Started.md) | ✔️ | ✔️ | ✔️ ✨ | 👈 the most effort is spent here | [create your own DTU](https://ahoydtu.de/getting_started/) |
| [ESP8266/ESP32, C++](Getting_Started.md) | ✔️ | ✔️ | ✔️ | 👈 the most effort is spent here | [create your own DTU](https://ahoydtu.de/getting_started/) |
| [Arduino Nano, C++](tools/nano/NRF24_SendRcv/) | ❌ | ✔️ | ❌ | |
| [Raspberry Pi, Python](tools/rpi/) | ❌ | ✔️ | ❌ | |
| [Others, C/C++](tools/nano/NRF24_SendRcv/) | ❌ | ✔️ | ❌ | |
⚠️ **Warning: HMS-XXXXW-2T WiFi inverters are not supported. They have a 'W' in their name and a DTU serial number on its sticker**
## Getting Started
1. [Guide how to start with a ESP module](Getting_Started.md)
@ -56,3 +63,5 @@ If you encounter any problems, use the issue tracker on Github. Provide a detail
### Related Projects
- [OpenDTU](https://github.com/tbnobody/OpenDTU)
<- Our sister project for Hoymiles HM- and HMS-/HMT-series (for ESP32 only!)
- [hms-mqtt-publisher](https://github.com/DennisOSRM/hms-mqtt-publisher)
<- a project which can handle WiFi inverters like HMS-XXXXW-2T

5
manual/ahoy_config.md

@ -54,6 +54,10 @@ Each inverter has its own S.Nr. This also serves as an identity for communicatio
The S.Nr is a 12-digit number. You can look it up [here (german)](https://github.com/lumapu/ahoy/wiki/Hardware#wie-ist-die-serien-nummer-der-inverter-aufgebaut) for more information.
#### set pv-modules (not necessary)
Click on "Add Inverter" and enter the S.No. and a name. Please keep the name short!
![grafik](https://github.com/DanielR92/ahoy/assets/25644396/b52a2d5d-513c-4895-848a-01ce129f93c1)
![grafik](https://github.com/DanielR92/ahoy/assets/25644396/b508824f-08a7-4b9c-bc41-29dfee02dced)
In the upper tab "Inputs" you can enter the data of the solar modules. These are only used directly in Ahoy for calculation and have no influence on the inverter.
#### set radio parameter (not necessary, only for EU)
@ -62,4 +66,5 @@ In the next tab "Radio" you can adjust the power and other parameters if necessa
#### advanced options (not necessary)
In the "Advanced" section, you can customize more settings.
Save and reboot.
# Done - Now check the live site

6
src/CHANGES.md

@ -1,5 +1,11 @@
# Development Changes
## 0.8.37 - 2023-12-30
* added grid profiles
* format version of grid profile
# RELEASE 0.8.36 - 2023-12-30
## 0.8.35 - 2023-12-30
* added dim option for LEDS
* changed reload time for opendtufusion after update to 5s

2
src/defines.h

@ -13,7 +13,7 @@
//-------------------------------------
#define VERSION_MAJOR 0
#define VERSION_MINOR 8
#define VERSION_PATCH 35
#define VERSION_PATCH 37
//-------------------------------------
typedef struct {

220
src/web/html/grid_info.json

@ -1,11 +1,24 @@
{
"type": [
{"0x0100": "CN_NBT32004_2018"},
{"0x0200": "US_Rule21_240V"},
{"0x0300": "DE_VDE4105_2018"},
{"0x0301": "DE_VDE4105_2011"},
{"0x0604": "Germany_VDE4105"},
{"0x0800": "IT_CEI0-21"},
{"0x0807": "Netherland_EN50438"},
{"0x0908": "France_VFR2014"},
{"0x0a00": "DE NF_EN_50549-1:2019"},
{"0x0c00": "AT_TOR_Erzeuger_default"},
{"0x0d04": "France NF_EN_50549-1:2019"},
{"0x1200": "2.0.4 (EU_EN50438)"},
{"0x3700": "2.0.0 (CH_NA EEA-NE7–CH2020)"}
{"0x0d00": "FR_VFR2019"},
{"0x0d04": "NF_EN_50549-1:2019"},
{"0x1000": "ES_RD1699"},
{"0x1200": "EU_EN50438"},
{"0x2600": "BE_C10_26"},
{"0x2900": "NL_NEN-EN50549-1_2019"},
{"0x2a00": "PL_PN-EN 50549-1:2019"},
{"0x3700": "CH_NA EEA-NE7–CH2020"}
{"0xe100": "LN_50Hz"}
],
"grp_codes": [
{"0x00": "Voltage H/LVRT"},
@ -94,6 +107,52 @@
}
]
},
{
"0x0008": [
{
"name": "Nominal Voltage",
"div": 10,
"def": 230,
"unit": "V"
},
{
"name": "Low Voltage 1",
"div": 10,
"min": 170,
"max": 184,
"def": 184,
"unit": "V"
},
{
"name": "LV1 Maximum Trip Time",
"div": 10,
"def": 0.1,
"unit": "s"
},
{
"name": "High Voltage 1",
"div": 10,
"min": 264.5,
"max": 270,
"def": 264.5,
"unit": "V"
},
{
"name": "HV1 Maximum Trip Time",
"div": 10,
"def": 0.1,
"unit": "s"
},
{
"name": "10 mins Average High Voltage",
"div": 10,
"min": 253,
"max": 260,
"def": 253,
"unit": "V"
}
]
},
{
"0x000a": [
{
@ -286,6 +345,58 @@
}
]
},
{
"0x1002": [
{
"name": "Nominal Frequency",
"div": 100,
"def": 50,
"unit": "Hz"
},
{
"name": "Low Frequency 1",
"div": 100,
"min": 49.5,
"max": 49.9,
"def": 49.5,
"unit": "Hz"
},
{
"name": "LF1 Maximum Trip Time",
"div": 10,
"def": 700,
"unit": "s"
},
{
"name": "High Frequency 1",
"div": 100,
"max": 51,
"min": 50.1,
"def": 50.2,
"unit": "Hz"
},
{
"name": "HF1 Maximum Trip time",
"div": 10,
"def": 0.1,
"unit": "s"
},
{
"name": "Low Frequency 2",
"div": 100,
"max": 49,
"min": 47.5,
"def": 47.5,
"unit": "Hz"
},
{
"name": "LF2 Maximum Trip Time",
"div": 100,
"def": 0.1,
"unit": "s"
}
]
},
{
"0x1003": [
{
@ -415,6 +526,62 @@
}
]
},
{
"0x3007": [
{
"name": "Reconnect Time",
"div": 10,
"min": 10,
"max": 300,
"def": 65,
"unit": "s"
},
{
"name": "Reconnect High Voltage",
"div": 10,
"min": 253,
"max": 264.5,
"def": 264.5,
"unit": "V"
},
{
"name": "Reconnect Low Voltage",
"div": 10,
"min": 184,
"max": 210,
"def": 184,
"unit": "V"
},
{
"name": "Reconnect High Frequency",
"div": 100,
"max": 52,
"min": 50.5,
"def": 51.5,
"unit": "Hz"
},
{
"name": "Reconnect Low Frequency",
"div": 100,
"min": 47,
"max": 49.9,
"def": 47.5,
"unit": "Hz"
},
{
"name": "Short Interruption Reconnect Time",
"div": 10,
"def": 8,
"unit": "s"
},
{
"name": "Short Interruption Time",
"div": 10,
"def": 3,
"unit": "s"
}
]
},
{
"0x4000": [
{
@ -435,6 +602,42 @@
}
]
},
{
"0x5000": [
{
"name": "FW Function Activated",
"div": 1,
"min": 0,
"max": 1,
"def": 1
},
{
"name": "Start of Frequency Watt Droop",
"div": 100,
"min": 50.2,
"max": 52,
"def": 50.2,
"unit": "Hz"
},
{
"name": "FW Droop Slope",
"div": 10,
"min": 16.7,
"max": 100,
"def": 40,
"unit": "Pn%/Hz"
},
{
"name": "Recovery Ramp Rate",
"div": 100,
"min": 0.1,
"max": 50,
"def": 0.5,
"unit": "Pn%/s"
}
]
},
{
"0x5001": [
{
@ -563,6 +766,17 @@
}
]
},
{
"0x7000": [
{
"name": "APC Function Activated",
"div": 1,
"min": 0,
"max": 1,
"def": 1
}
]
},
{
"0x7002": [
{

3
src/web/html/visualization.html

@ -357,6 +357,7 @@
var glob = {offs:0, grid:obj.grid, info: data}
var content = [];
var g = getGridType(glob.info.type, getGridIdentifier(glob))
var v = getGridValue(glob);
if(null === g) {
if(0 == obj.grid.length) {
content.push(ml("div", {class: "row"}, ml("div", {class: "col"}, ml("p", {}, "Profile was not read until now, maybe turned off?"))))
@ -367,7 +368,7 @@
}
} else {
content.push(ml("div", {class: "row"},
ml("div", {class: "col my-3"}, ml("h5", {}, g + " (Version " + getGridValue(glob).toString(16) + ")"))
ml("div", {class: "col my-3"}, ml("h5", {}, g + " (Version " + (Math.round(v / 0x1000)) + "." + (Math.round((v & 0x0ff0) / 0x10)) + "." + (v & 0x0F) + ")"))
))
while((glob.offs*3) < glob.grid.length) {

Loading…
Cancel
Save