diff --git a/docs/DeviceProfiles.md b/docs/DeviceProfiles.md
index edfad546..3444acc6 100644
--- a/docs/DeviceProfiles.md
+++ b/docs/DeviceProfiles.md
@@ -1,12 +1,8 @@
# Device Profiles
-It is possible to change hardware settings like pin assignments or ethernet support using a json file. The json file can be uploaded using the configuration management in the web interface. Just select "Pin Mapping (pin_mapping.json)" in the recovery section.
+This documentation will has been moved and can be found here:
-When the file is uploaded the ESP performs a reboot. This is required as the pin settings could have changed within the file. By default all the pin assignments are used as compiled into the firmware.
-
-To change the device profile, navigate to the "Device Manager" and selected the appropriate profile. You can see the current (Active) and the new (Selected) in assignment in the table below the combobox.
-
-## Structure of the json file
+## Structure of the json file for openDTU-onBattery (outdated example)
```json
[
@@ -92,48 +88,4 @@ To change the device profile, navigate to the "Device Manager" and selected the
}
}
]
-```
-
-The json file can contain multiple profiles. Each profile requires a name and different parameters. If one parameter is not set, the default value, as compiled into the firmware is used. The example above shows all the currently supported values. Others may follow. Sample files for some boards can be found [here](DeviceProfiles/). This means you can just flash the generic bin file and upload the json file. Then you select your board and everything works hopyfully as expected.
-
-## Implemented configuration values
-
-| Parameter | Data Type | Description |
-| ------------- | --------- | ----------- |
-| name | string | Unique name of the profile (max 63 characters) |
-| nrf24.miso | number | MISO Pin |
-| nrf24.mosi | number | MOSI Pin |
-| nrf24.clk | number | Clock Pin |
-| nrf24.irq | number | Interrupt Pin |
-| nrf24.en | number | Enable Pin |
-| nrf24.cs | number | Chip Select Pin |
-| cmt.sdio | number | SDIO Pin |
-| cmt.clk | number | CLK Pin |
-| cmt.cs | number | CS Pin |
-| cmt.fcs | number | FCS Pin |
-| cmt.gpio2 | number | GPIO2 Pin (optional) |
-| cmt.gpio3 | number | GPIO3 Pin (optional) |
-| eth.enabled | boolean | Enable/Disable the ethernet stack |
-| eth.phy_addr | number | Unique PHY addr |
-| eth.power | number | Power Pin (if available). Use -1 for not assigned pins. |
-| eth.mdc | number | Serial Management Interface MDC Pin. Use -1 for not assigned pins. |
-| eth.mdio | number | Serial Management Interface MDIO Pin. Use -1 for not assigned pins. |
-| eth.type | number | Possible values:
* 0 = ETH_PHY_LAN8720
* 1 = ETH_PHY_TLK110
* 2 = ETH_PHY_RTL8201
* 3 = ETH_PHY_DP83848
* 4 = ETH_PHY_DM9051
* 5 = ETH_PHY_KSZ8041
* 6 = ETH_PHY_KSZ8081 |
-| eth.clk_mode | number | Possible values:
* 0 = ETH_CLOCK_GPIO0_IN
* 1 = ETH_CLOCK_GPIO0_OUT
* 2 = ETH_CLOCK_GPIO16_OUT
* 3 = ETH_CLOCK_GPIO17_OUT |
-| display.type | number | Specify type of display. Possible values:
* 0 = None (default)
* 1 = PCD8544
* 2 = SSD1306
* 3 = SH1106 |
-| display.data | number | Data Pin (e.g. SDA for i2c displays) required for all displays. Use 255 for not assigned pins. |
-| display.clk | number | Clock Pin (e.g. SCL for i2c displays) required for SSD1306 and SH1106. Use 255 for not assigned pins. |
-| display.cs | number | Chip Select Pin required for PCD8544. Use 255 for not assigned pins. |
-| display.reset | number | Reset Pin required for PCD8544, optional for all other displays. Use 255 for not assigned pins. |
-| victron.rx | number | Victron Ve.direct Rx pin |
-| victron.tx | number | Victron Ve.direct Tx pin |
-| battery.rx | number | Pylontech CAN bus battery Rx pin |
-| battery.tx | number | Pylontech CAN bus battery Tx pin |
-| huawei.miso | number | MISO Pin for Huawei CAN bus interface |
-| huawei.mosi | number | MOSI Pin for Huawei CAN bus interface |
-| huawei.clk | number | CLK Pin for Huawei CAN bus interface |
-| huawei.cs | number | CS Pin for Huawei CAN bus interface |
-| huawei.irq | number | IRQ Pin for Huawei CAN bus interface |
-| huawei.power | number | Power Pin for Huawei power control (e.g. using slot detect) |
-| led.led0 | number | LED pin for network indication. Blinking = WLAN connected but NTP & MQTT (if enabled) disconnected. On = WLAN, NTP, MQTT connected. Off = Network not connected |
-| led.led1 | number | LED pin for inverter indication. On = All inverters reachable & producing. Blinking = All inverters reachable but not producing. Off = At least one inverter is not reachable. Only inverters with polling enabled are considered. |
+```
\ No newline at end of file
diff --git a/docs/DeviceProfiles/nodemcu_esp32.json b/docs/DeviceProfiles/nodemcu_esp32.json
index d7f6a614..0587dd88 100644
--- a/docs/DeviceProfiles/nodemcu_esp32.json
+++ b/docs/DeviceProfiles/nodemcu_esp32.json
@@ -73,6 +73,25 @@
"clk": 22
}
},
+ {
+ "name": "NRF24 with SSD1309",
+ "nrf24": {
+ "miso": 19,
+ "mosi": 23,
+ "clk": 18,
+ "irq": 16,
+ "en": 4,
+ "cs": 5
+ },
+ "eth": {
+ "enabled": false
+ },
+ "display": {
+ "type": 4,
+ "data": 21,
+ "clk": 22
+ }
+ },
{
"name": "CMT2300A with SSD1306",
"nrf24": {
@@ -127,6 +146,33 @@
"clk": 22
}
},
+ {
+ "name": "CMT2300A with SSD1309",
+ "nrf24": {
+ "miso": -1,
+ "mosi": -1,
+ "clk": -1,
+ "irq": -1,
+ "en": -1,
+ "cs": -1
+ },
+ "cmt": {
+ "clk": 18,
+ "cs": 4,
+ "fcs": 5,
+ "sdio": 23,
+ "gpio2": 19,
+ "gpio3": 16
+ },
+ "eth": {
+ "enabled": false
+ },
+ "display": {
+ "type": 4,
+ "data": 21,
+ "clk": 22
+ }
+ },
{
"name": "NRF24 + CMT2300A",
"nrf24": {
diff --git a/docs/DeviceProfiles/olimex_esp32_poe.json b/docs/DeviceProfiles/olimex_esp32_poe.json
index 27f8242f..e0a81a01 100644
--- a/docs/DeviceProfiles/olimex_esp32_poe.json
+++ b/docs/DeviceProfiles/olimex_esp32_poe.json
@@ -77,5 +77,33 @@
"data": 33,
"clk": 32
}
+ },
+ {
+ "name": "Olimex ESP32-POE with SSD1309",
+ "links": [
+ {"name": "Datasheet", "url": "https://www.olimex.com/Products/IoT/ESP32/ESP32-POE/open-source-hardware"}
+ ],
+ "nrf24": {
+ "miso": 15,
+ "mosi": 2,
+ "clk": 14,
+ "irq": 13,
+ "en": 16,
+ "cs": 5
+ },
+ "eth": {
+ "enabled": true,
+ "phy_addr": 0,
+ "power": 12,
+ "mdc": 23,
+ "mdio": 18,
+ "type": 0,
+ "clk_mode": 3
+ },
+ "display": {
+ "type": 4,
+ "data": 33,
+ "clk": 32
+ }
}
]
\ No newline at end of file
diff --git a/docs/DeviceProfiles/wt32-eth01.json b/docs/DeviceProfiles/wt32-eth01.json
index 388db209..8af11283 100644
--- a/docs/DeviceProfiles/wt32-eth01.json
+++ b/docs/DeviceProfiles/wt32-eth01.json
@@ -49,5 +49,33 @@
"data": 5,
"clk": 17
}
+ },
+ {
+ "name": "WT32-ETH01 with SSD1309",
+ "links": [
+ {"name": "Datasheet", "url": "http://www.wireless-tag.com/portfolio/wt32-eth01/"}
+ ],
+ "nrf24": {
+ "miso": 4,
+ "mosi": 2,
+ "clk": 32,
+ "irq": 33,
+ "en": 14,
+ "cs": 15
+ },
+ "eth": {
+ "enabled": true,
+ "phy_addr": 1,
+ "power": 16,
+ "mdc": 23,
+ "mdio": 18,
+ "type": 0,
+ "clk_mode": 0
+ },
+ "display": {
+ "type": 4,
+ "data": 5,
+ "clk": 17
+ }
}
]
\ No newline at end of file
diff --git a/docs/MQTT_Topics.md b/docs/MQTT_Topics.md
index 204916f7..e9925f87 100644
--- a/docs/MQTT_Topics.md
+++ b/docs/MQTT_Topics.md
@@ -1,88 +1,3 @@
# MQTT Topics
-The base topic, as configured in the web GUI is prepended to all follwing topics.
-
-## General topics
-
-| Topic | R / W | Description | Value / Unit |
-| --------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- |
-| dtu/ip | R | IP address of OpenDTU | IP address |
-| dtu/hostname | R | Current hostname of the dtu (as set in web GUI) | |
-| dtu/rssi | R | WiFi network quality | db value |
-| dtu/status | R | Indicates whether OpenDTU network is reachable | online / offline |
-| dtu/uptime | R | Time in seconds since startup | seconds |
-
-## Inverter total topics
-
-Enabled inverter means, that only inverters with "Poll inverter data" enabled are considered.
-
-| Topic | R / W | Description | Value / Unit |
-| --------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- |
-| ac/power | R | Sum of AC active power of all enabled inverters | W |
-| ac/yieldtotal | R | Sum of energy converted to AC since reset watt hours of all enabled inverters | Kilo watt hours (kWh) |
-| ac/yieldday | R | Sum of energy converted to AC per day in watt hours of all enabled inverters | Watt hours (Wh)
-| ac/is_valid | R | Indicator whether all enabled inverters where reachable | 0 or 1 |
-| dc/power | R | Sum of DC power of all enabled inverters | Watt (W) |
-| dc/irradiation | R | Produced power of all enabled inverter stripes with defined irradiation settings divided by sum of all enabled inverters irradiation | % |
-| dc/is_valid | R | Indicator whether all enabled inverters where reachable | 0 or 1 |
-
-## Inverter specific topics
-
-serial will be replaced with the serial number of the inverter.
-
-| Topic | R / W | Description | Value / Unit |
-| --------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- |
-| [serial]/name | R | Name of the inverter as configured in web GUI | |
-| [serial]/device/bootloaderversion | R | Bootloader version of the inverter | |
-| [serial]/device/fwbuildversion | R | Firmware version of the inverter | |
-| [serial]/device/fwbuilddatetime | R | Build date / time of inverter firmware | |
-| [serial]/device/hwpartnumber | R | Hardware part number of the inverter | |
-| [serial]/device/hwversion | R | Hardware version of the inverter | |
-| [serial]/status/reachable | R | Indicates whether the inverter is reachable | 0 or 1 |
-| [serial]/status/producing | R | Indicates whether the inverter is producing AC power | 0 or 1 |
-| [serial]/status/last_update | R | Unix timestamp of last inverter statistics udpate | seconds since JAN 01 1970 (UTC) |
-
-### AC channel / global specific topics
-
-| Topic | R / W | Description | Value / Unit |
-| --------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- |
-| [serial]/0/current | R | AC current in ampere | Ampere (A) |
-| [serial]/0/efficiency | R | Ratio AC Power over DC Power in percent | % |
-| [serial]/0/frequency | R | AC frequency in hertz | Hertz (Hz) |
-| [serial]/0/power | R | AC active power in watts | Watt (W) |
-| [serial]/0/powerdc | R | DC power in watts | Watt (W) |
-| [serial]/0/powerfactor | R | Power factor in percent | % |
-| [serial]/0/reactivepower | R | AC reactive power in VAr | VAr |
-| [serial]/0/temperature | R | Temperature of inverter in degree celsius | Degree Celsius (°C) |
-| [serial]/0/voltage | R | AC voltage in volt | Volt (V) |
-| [serial]/0/yieldday | R | Energy converted to AC per day in watt hours | Watt hours (Wh) |
-| [serial]/0/yieldtotal | R | Energy converted to AC since reset watt hours | Kilo watt hours (kWh) |
-
-### DC input channel topics
-
-[1-4] represents the different inputs. The amount depends on the inverter model.
-
-| Topic | R / W | Description | Value / Unit |
-| --------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- |
-| [serial]/[1-4]/current | R | DC current of specific input in ampere | Ampere (A) |
-| [serial]/[1-4]/name | R | Name of the DC input channel as configured in web GUI| |
-| [serial]/[1-4]/irradiation | R | Ratio DC Power over set maximum power (in web GUI) | % |
-| [serial]/[1-4]/power | R | DC power of specific input in watt | Watt (W) |
-| [serial]/[1-4]/voltage | R | DC voltage of specific input in volt | Volt (V) |
-| [serial]/[1-4]/yieldday | R | Energy converted to AC per day on specific input | Watt hours (Wh) |
-| [serial]/[1-4]/yieldtotal | R | Energy converted to AC since reset on specific input | Kilo watt hours (kWh) |
-
-### Inverter limit specific topics
-
-cmd topics are used to set values. Status topics are updated from values set in the inverter.
-
-| Topic | R / W | Description | Value / Unit |
-| ----------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- |
-| [serial]/status/limit_relative | R | Current applied production limit of the inverter | % of total possible output |
-| [serial]/status/limit_absolute | R | Current applied production limit of the inverter | Watt (W) |
-| [serial]/cmd/limit_persistent_relative | W | Set the inverter limit as a percentage of total production capability. The value will survive the night without power. The updated value will show up in the web GUI and limit_relative topic immediatly. | % |
-| [serial]/cmd/limit_persistent_absolute | W | Set the inverter limit as a absolute value. The value will survive the night without power. The updated value will set immediatly within the inverter but show up in the web GUI and limit_relative topic after around 4 minutes. If you are using a already known inverter (known Hardware ID), the updated value will show up within a few seconds. | Watt (W) |
-| [serial]/cmd/limit_nonpersistent_relative | W | Set the inverter limit as a percentage of total production capability. The value will reset to the last persistent value at night without power. The updated value will show up in the web GUI and limit_relative topic immediatly. The value must be published non-retained, otherwise it will be ignored! | % |
-| [serial]/cmd/limit_nonpersistent_absolute | W | Set the inverter limit as a absolute value. The value will reset to the last persistent value at night without power. The updated value will set immediatly within the inverter but show up in the web GUI and limit_relative topic after around 4 minutes. If you are using a already known inverter (known Hardware ID), the updated value will show up within a few seconds. The value must be published non-retained, otherwise it will be ignored! | Watt (W) |
-| [serial]/cmd/power | W | Turn the inverter on (1) or off (0) | 0 or 1 |
-| [serial]/cmd/restart | W | Restarts the inverters (also resets YieldDay) | 1 |
+This documentation will has been moved and can be found here:
diff --git a/docs/Web-API.md b/docs/Web-API.md
index 4ada9474..703d89de 100644
--- a/docs/Web-API.md
+++ b/docs/Web-API.md
@@ -1,6 +1,6 @@
# Web API
-Information in JSON format can be obtained through the web API
+This documentation will has been moved and can be found here:
## List of URLs
@@ -8,36 +8,6 @@ This list may be incomplete
| GET/POST | Auth required | URL |
| -------- | --- | -- |
-| Get | yes | /api/config/get |
-| Post | yes | /api/config/delete |
-| Get | yes | /api/config/list |
-| Post | yes | /api/config/upload |
-| Get+Post | yes | /api/device/config |
-| Get | no | /api/devinfo/status |
-| Get+Post | yes | /api/dtu/config |
-| Get | no | /api/eventlog/status?inv=inverter-serialnumber |
-| Post | yes | /api/firmware/update |
-| Get | yes | /api/inverter/list |
-| Post | yes | /api/inverter/add |
-| Post | yes | /api/inverter/del |
-| Post | yes | /api/inverter/edit |
-| Post | yes | /api/limit/config |
-| Get | no | /api/limit/status |
-| Get | no | /api/livedata/status |
-| Post | yes | /api/maintenance/reboot |
-| Get+Post | yes | /api/mqtt/config |
-| Get | no | /api/mqtt/status |
-| Get+Post | yes | /api/network/config |
-| Get | no | /api/network/status |
-| Get+Post | yes | /api/ntp/config |
-| Get | no | /api/ntp/status |
-| Get+Post | yes | /api/ntp/time |
-| Get | no | /api/power/status |
-| Post | yes | /api/power/config |
-| Get | no | /api/prometheus/metrics |
-| Get+Post | yes | /api/security/config |
-| Get | yes | /api/security/authenticate |
-| Get | no | /api/system/status |
| Get | no | /api/vedirectlivedata/status |
| Get | no | /api/vedirect/status |
| Get | no | /api/huawei/status |
@@ -47,455 +17,6 @@ This list may be incomplete
| Get | no | /api/battery/status |
| Get | no | /api/powerlimiter/status |
-## Examples of Use
-
-### Important notes
-
-- IP addresses and serial numbers in this examples are anonymized. Adjust to your own needs.
-- The output from curl is without a linefeed at the end, so please be careful when copying the output - do not accidentally add the shell prompt directly after it.
-- When POSTing config data to OpenDTU, always send all settings back, even if only one setting was changed. Sending single settings is not supported and you will receive a response `{"type":"warning","message":"Values are missing!"}`
-- When POSTing, always put single quotes around the data part. Do not confuse the single quote `'` with the backtick `` ` ``. You have been warned.
-- Some API calls have a single URL for GET and POST - e.g. `/api/ntp/config`
-- Other API calls use e.g. `/api/limit/status` to GET data and a different URL `/api/limit/config` to POST data.
-- If you want to investigate the web api communication, a good tool is [Postman](https://www.postman.com/)
-- Settings API require username and password provided with Basic Authentication credentials
-- If you disable the readonly access to the web API, every endpoint requires authentication
-
-### Get information
-
-You can "talk" to the OpenDTU with a command line tool like `curl`. The output is in plain JSON, without carriage return/linefeed and is therefore not very human readable.
-
-#### Get current livedata
-
-```bash
-$ curl http://192.168.10.10/api/livedata/status
-{"inverters":[{"serial":"11617160xxxx","name":"Meine Solaranlage","data_age":6983,"reachable":false,"producing":false,"limit_relative":0,"limit_absolute":-1,"AC":{"0":{"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"Power DC":{"v":0,"u":"W","d":1},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3},"Frequency":{"v":0,"u":"Hz","d":2},"PowerFactor":{"v":0,"u":"","d":3},"ReactivePower":{"v":0,"u":"var","d":1},"Efficiency":{"v":0,"u":"%","d":3}}},"DC":{"0":{"name":{"u":""},"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3},"Irradiation":{"v":0,"u":"%","d":3}},"1":{"name":{"u":""},"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3},"Irradiation":{"v":0,"u":"%","d":3}},"2":{"name":{"u":""},"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3},"Irradiation":{"v":0,"u":"%","d":3}},"3":{"name":{"u":""},"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3}}},"INV":{"0":{"Temperature":{"v":0,"u":"°C","d":1}}},"events":0},{"serial":"11417160xxxx","name":"test","data_age":6983,"reachable":false,"producing":false,"limit_relative":0,"limit_absolute":-1,"AC":{"0":{"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"Power DC":{"v":0,"u":"W","d":1},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3},"Frequency":{"v":0,"u":"Hz","d":2},"PowerFactor":{"v":0,"u":"","d":3},"ReactivePower":{"v":0,"u":"var","d":1},"Efficiency":{"v":0,"u":"%","d":3}}},"DC":{"0":{"name":{"u":"test 1"},"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3},"Irradiation":{"v":0,"u":"%","d":3}},"1":{"name":{"u":"test 2"},"Power":{"v":0,"u":"W","d":1},"Voltage":{"v":0,"u":"V","d":1},"Current":{"v":0,"u":"A","d":2},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":3},"Irradiation":{"v":0,"u":"%","d":3}}},"INV":{"0":{"Temperature":{"v":0,"u":"°C","d":1}}},"events":0}],"total":{"Power":{"v":0,"u":"W","d":1},"YieldDay":{"v":0,"u":"Wh","d":0},"YieldTotal":{"v":0,"u":"kWh","d":2}},"hints":{"time_sync":false,"radio_problem":false,"default_password":false}}
-```
-
-To enhance readability (and filter information) use the JSON command line processor `jq`.
-
-```bash
-$ curl --no-progress-meter http://192.168.10.10/api/livedata/status | jq
-{
- "inverters": [
- {
- "serial": "116171603546",
- "name": "Meine Solaranlage",
- "data_age": 7038,
- "reachable": false,
- "producing": false,
- "limit_relative": 0,
- "limit_absolute": -1,
- "AC": {
- "0": {
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "Power DC": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- },
- "Frequency": {
- "v": 0,
- "u": "Hz",
- "d": 2
- },
- "PowerFactor": {
- "v": 0,
- "u": "",
- "d": 3
- },
- "ReactivePower": {
- "v": 0,
- "u": "var",
- "d": 1
- },
- "Efficiency": {
- "v": 0,
- "u": "%",
- "d": 3
- }
- }
- },
- "DC": {
- "0": {
- "name": {
- "u": ""
- },
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- },
- "Irradiation": {
- "v": 0,
- "u": "%",
- "d": 3
- }
- },
- "1": {
- "name": {
- "u": ""
- },
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- },
- "Irradiation": {
- "v": 0,
- "u": "%",
- "d": 3
- }
- },
- "2": {
- "name": {
- "u": ""
- },
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- },
- "Irradiation": {
- "v": 0,
- "u": "%",
- "d": 3
- }
- },
- "3": {
- "name": {
- "u": ""
- },
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- }
- }
- },
- "INV": {
- "0": {
- "Temperature": {
- "v": 0,
- "u": "°C",
- "d": 1
- }
- }
- },
- "events": 0
- },
- {
- "serial": "114171603548",
- "name": "test",
- "data_age": 7038,
- "reachable": false,
- "producing": false,
- "limit_relative": 0,
- "limit_absolute": -1,
- "AC": {
- "0": {
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "Power DC": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- },
- "Frequency": {
- "v": 0,
- "u": "Hz",
- "d": 2
- },
- "PowerFactor": {
- "v": 0,
- "u": "",
- "d": 3
- },
- "ReactivePower": {
- "v": 0,
- "u": "var",
- "d": 1
- },
- "Efficiency": {
- "v": 0,
- "u": "%",
- "d": 3
- }
- }
- },
- "DC": {
- "0": {
- "name": {
- "u": "test 1"
- },
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- },
- "Irradiation": {
- "v": 0,
- "u": "%",
- "d": 3
- }
- },
- "1": {
- "name": {
- "u": "test 2"
- },
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "Voltage": {
- "v": 0,
- "u": "V",
- "d": 1
- },
- "Current": {
- "v": 0,
- "u": "A",
- "d": 2
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 3
- },
- "Irradiation": {
- "v": 0,
- "u": "%",
- "d": 3
- }
- }
- },
- "INV": {
- "0": {
- "Temperature": {
- "v": 0,
- "u": "°C",
- "d": 1
- }
- }
- },
- "events": 0
- }
- ],
- "total": {
- "Power": {
- "v": 0,
- "u": "W",
- "d": 1
- },
- "YieldDay": {
- "v": 0,
- "u": "Wh",
- "d": 0
- },
- "YieldTotal": {
- "v": 0,
- "u": "kWh",
- "d": 2
- }
- },
- "hints": {
- "time_sync": false,
- "radio_problem": false,
- "default_password": false
- }
-}
-```
-
-The eventlog can be fetched with the inverter serial number as parameter:
-
-```bash
-$ curl --no-progress-meter http://192.168.10.10/api/eventlog/status?inv=11418186xxxx | jq
-{
- "11418186xxxx": {
- "count": 4,
- "events": [
- {
- "message_id": 1,
- "message": "Inverter start",
- "start_time": 28028,
- "end_time": 28028
- },
- {
- "message_id": 209,
- "message": "PV-1: No input",
- "start_time": 28036,
- "end_time": 0
- },
- {
- "message_id": 2,
- "message": "DTU command failed",
- "start_time": 28092,
- "end_time": 28092
- },
- {
- "message_id": 207,
- "message": "MPPT-A: Input undervoltage",
- "start_time": 28336,
- "end_time": 0
- }
- ]
- }
-}
-```
-
### Victron REST-API (/api/vedirectlivedata/status):
````JSON
{
@@ -520,79 +41,4 @@ $ curl --no-progress-meter http://192.168.10.10/api/eventlog/status?inv=11418186
"H22":{"v":1.43,"u":"kWh"},
"H23":{"v":737,"u":"W"}
}
-````
-
-#### combine curl and jq
-
-`jq` can filter specific fields from json output.
-
-For example, filter out the current total power:
-
-```bash
-$ curl --no-progress-meter http://192.168.10.10/api/livedata/status | jq '.total | .Power.v'
-140.7999878
-```
-
-#### Get information where login is required
-
-When config data is requested, username and password have to be provided to `curl`
-Username is always `admin`, the default password is `openDTU42`. The password is used for both the admin login and the Admin-mode Access Point.
-
-```bash
-$ curl --u admin:openDTU42 http://192.168.10.10/api/ntp/config
-{"ntp_server":"pool.ntp.org","ntp_timezone":"CET-1CEST,M3.5.0,M10.5.0/3","ntp_timezone_descr":"Europe/Berlin"}
-```
-
-### Post information
-
-With HTTP POST commands information can be written to the OpenDTU.
-
-The Web API is designed to allow the web frontend in the web browser to communicate with the OpenDTU software running on the ESP32. It is not designed to be intuitive or user-friendly, so please follow the instructions here.
-
-#### Example 1: change ntp settings
-
-If you want to configure the ntp server setting, first fetch the information from the web API:
-
-```bash
-$ curl -u "admin:password" http://192.168.10.10/api/ntp/config
-{"ntp_server":"pool.ntp.org","ntp_timezone":"CET-1CEST,M3.5.0,M10.5.0/3","ntp_timezone_descr":"Europe/Berlin"}
-```
-
-Then, second step, send your new settings. Use the text output from curl in the first step, add `data=` and enclose the whole data with single quotes.
-
-```bash
-$ curl -u "admin:password" http://192.168.10.10/api/ntp/config -d 'data={"ntp_server":"my.own.ntp.server.home","ntp_timezone":"CET-1CEST,M3.5.0,M10.5.0/3","ntp_timezone_descr":"Europe/Berlin"}'
-{"type":"success","message":"Settings saved!"}
-```
-
-You will receive a json formatted response.
-
-#### Example 2: change power limit
-
-In the second example, I want to change the non persistent power limit of an inverter. Again, first fetch current data:
-
-```bash
-$ curl http://192.168.10.10/api/limit/status
-{"11418186xxxx":{"limit_relative":100,"max_power":600,"limit_set_status":"Ok"},"11418180xxxx":{"limit_relative":100,"max_power":800,"limit_set_status":"Ok"}}
-```
-
-I see data from two configured inverters.
-
-Now I set the relative power limit of inverter with serialnumber `11418180xxxx` to 50%.
-
-```bash
-$ curl -u "admin:password" http://192.168.10.10/api/limit/config -d 'data={"serial":"11418180xxxx", "limit_type":1, "limit_value":50}'
-{"type":"success","message":"Settings saved!"}
-```
-
-Then I read again the limit status. In the first answer the status is `pending`, some seconds later it changed to `OK`.
-
-```bash
-$ curl http://192.168.10.10/api/limit/status
-{"11418186xxxx":{"limit_relative":100,"max_power":600,"limit_set_status":"Ok"},"11418180xxxx":{"limit_relative":100,"max_power":800,"limit_set_status":"Pending"}}
-
-...
-
-$ curl http://192.168.10.10/api/limit/status
-{"11418186xxxx":{"limit_relative":100,"max_power":600,"limit_set_status":"Ok"},"11418180xxxx":{"limit_relative":50,"max_power":800,"limit_set_status":"Ok"}}
-```
+````
\ No newline at end of file
diff --git a/include/Display_Graphic.h b/include/Display_Graphic.h
index 1d620e54..70781227 100644
--- a/include/Display_Graphic.h
+++ b/include/Display_Graphic.h
@@ -11,6 +11,8 @@ enum DisplayType_t {
PCD8544,
SSD1306,
SH1106,
+ SSD1309,
+ DisplayType_Max,
};
class DisplayGraphicClass {
@@ -35,6 +37,7 @@ private:
void printText(const char* text, const uint8_t line);
void calcLineHeights();
void setFont(const uint8_t line);
+ bool isValidDisplay();
Task _loopTask;
diff --git a/platformio.ini b/platformio.ini
index 02e48b99..d7f10e76 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -39,7 +39,7 @@ lib_deps =
bblanchon/ArduinoJson @ ^6.21.4
https://github.com/bertmelis/espMqttClient.git#v1.5.0
nrf24/RF24 @ ^1.4.8
- olikraus/U8g2 @ ^2.35.8
+ olikraus/U8g2 @ ^2.35.9
buelowp/sunset @ ^1.1.7
https://github.com/arkhipenko/TaskScheduler#testing
https://github.com/arkhipenko/TaskScheduler#testing
diff --git a/src/Display_Graphic.cpp b/src/Display_Graphic.cpp
index 94a0de84..feb4ce80 100644
--- a/src/Display_Graphic.cpp
+++ b/src/Display_Graphic.cpp
@@ -12,6 +12,7 @@ std::map
{ DisplayType_t::PCD8544, [](uint8_t reset, uint8_t clock, uint8_t data, uint8_t cs) { return new U8G2_PCD8544_84X48_F_4W_HW_SPI(U8G2_R0, cs, data, reset); } },
{ DisplayType_t::SSD1306, [](uint8_t reset, uint8_t clock, uint8_t data, uint8_t cs) { return new U8G2_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0, reset, clock, data); } },
{ DisplayType_t::SH1106, [](uint8_t reset, uint8_t clock, uint8_t data, uint8_t cs) { return new U8G2_SH1106_128X64_NONAME_F_HW_I2C(U8G2_R0, reset, clock, data); } },
+ { DisplayType_t::SSD1309, [](uint8_t reset, uint8_t clock, uint8_t data, uint8_t cs) { return new U8G2_SSD1309_128X64_NONAME0_F_HW_I2C(U8G2_R0, reset, clock, data); } },
};
// Language defintion, respect order in languages[] and translation lists
@@ -45,20 +46,20 @@ DisplayGraphicClass::~DisplayGraphicClass()
void DisplayGraphicClass::init(Scheduler& scheduler, const DisplayType_t type, const uint8_t data, const uint8_t clk, const uint8_t cs, const uint8_t reset)
{
_display_type = type;
- if (_display_type > DisplayType_t::None) {
+ if (isValidDisplay()) {
auto constructor = display_types[_display_type];
_display = constructor(reset, clk, data, cs);
_display->begin();
setContrast(DISPLAY_CONTRAST);
setStatus(true);
_diagram.init(scheduler, _display);
- }
- scheduler.addTask(_loopTask);
- _loopTask.setCallback(std::bind(&DisplayGraphicClass::loop, this));
- _loopTask.setIterations(TASK_FOREVER);
- _loopTask.setInterval(_period);
- _loopTask.enable();
+ scheduler.addTask(_loopTask);
+ _loopTask.setCallback(std::bind(&DisplayGraphicClass::loop, this));
+ _loopTask.setIterations(TASK_FOREVER);
+ _loopTask.setInterval(_period);
+ _loopTask.enable();
+ }
}
void DisplayGraphicClass::calcLineHeights()
@@ -86,6 +87,11 @@ void DisplayGraphicClass::setFont(const uint8_t line)
}
}
+bool DisplayGraphicClass::isValidDisplay()
+{
+ return _display_type > DisplayType_t::None && _display_type < DisplayType_Max;
+}
+
void DisplayGraphicClass::printText(const char* text, const uint8_t line)
{
uint8_t dispX;
@@ -102,7 +108,7 @@ void DisplayGraphicClass::printText(const char* text, const uint8_t line)
void DisplayGraphicClass::setOrientation(const uint8_t rotation)
{
- if (_display_type == DisplayType_t::None) {
+ if (!isValidDisplay()) {
return;
}
@@ -132,7 +138,7 @@ void DisplayGraphicClass::setLanguage(const uint8_t language)
void DisplayGraphicClass::setStartupDisplay()
{
- if (_display_type == DisplayType_t::None) {
+ if (!isValidDisplay()) {
return;
}
@@ -148,10 +154,6 @@ DisplayGraphicDiagramClass& DisplayGraphicClass::Diagram()
void DisplayGraphicClass::loop()
{
- if (_display_type == DisplayType_t::None) {
- return;
- }
-
_loopTask.setInterval(_period);
_display->clearBuffer();
@@ -215,7 +217,7 @@ void DisplayGraphicClass::loop()
void DisplayGraphicClass::setContrast(const uint8_t contrast)
{
- if (_display_type == DisplayType_t::None) {
+ if (!isValidDisplay()) {
return;
}
_display->setContrast(contrast * 2.55f);
diff --git a/webapp/package.json b/webapp/package.json
index 91bfb181..0b3f4b11 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -18,7 +18,7 @@
"mitt": "^3.0.1",
"sortablejs": "^1.15.1",
"spark-md5": "^3.0.2",
- "vue": "^3.3.13",
+ "vue": "^3.4.3",
"vue-i18n": "^9.8.0",
"vue-router": "^4.2.5"
},
@@ -27,16 +27,16 @@
"@rushstack/eslint-patch": "^1.6.1",
"@tsconfig/node18": "^18.2.2",
"@types/bootstrap": "^5.2.10",
- "@types/node": "^20.10.5",
+ "@types/node": "^20.10.6",
"@types/sortablejs": "^1.15.7",
"@types/spark-md5": "^3.0.4",
- "@vitejs/plugin-vue": "^5.0.0",
+ "@vitejs/plugin-vue": "^5.0.2",
"@vue/eslint-config-typescript": "^12.0.0",
"@vue/tsconfig": "^0.5.1",
"eslint": "^8.56.0",
"eslint-plugin-vue": "^9.19.2",
"npm-run-all": "^4.1.5",
- "sass": "^1.69.5",
+ "sass": "^1.69.6",
"terser": "^5.26.0",
"typescript": "^5.3.3",
"vite": "^5.0.10",
diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json
index 05ab92ff..e6d23683 100644
--- a/webapp/src/locales/fr.json
+++ b/webapp/src/locales/fr.json
@@ -468,7 +468,6 @@
"ApTimeout": "Délai d'attente du point d'accès",
"ApTimeoutHint": "Durée pendant laquelle le point d'accès reste ouvert. Une valeur de 0 signifie infini.",
"Minutes": "minutes",
- "Save": "@:dtuadmin.Save",
"EnableMdns": "Activer mDNS",
"MdnsSettings": "mDNS Settings"
},
@@ -513,8 +512,7 @@
"HassPrefixTopicHint": "Le préfixe de découverte du sujet",
"HassRetain": "Activer du maintien",
"HassExpire": "Activer l'expiration",
- "HassIndividual": "Panneaux individuels",
- "Save": "@:dtuadmin.Save"
+ "HassIndividual": "Panneaux individuels"
},
"vedirectadmin": {
"VedirectSettings": "VE.Direct Settings",
diff --git a/webapp/yarn.lock b/webapp/yarn.lock
index 904b3667..cec8f039 100644
--- a/webapp/yarn.lock
+++ b/webapp/yarn.lock
@@ -17,7 +17,7 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8"
integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==
-"@babel/parser@^7.23.5":
+"@babel/parser@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
@@ -435,10 +435,10 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb"
integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
-"@types/node@^20.10.5":
- version "20.10.5"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2"
- integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==
+"@types/node@^20.10.6":
+ version "20.10.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5"
+ integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==
dependencies:
undici-types "~5.26.4"
@@ -547,10 +547,10 @@
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
-"@vitejs/plugin-vue@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.0.tgz#8e8946548e6dfd9eb0391bbc282ec8e52103e0dd"
- integrity sha512-7x5e8X4J1Wi4NxudGjJBd2OFerAi/0nzF80ojCzvfj347WVr0YSn82C8BSsgwSHzlk9Kw5xnZfj0/7RLnNwP5w==
+"@vitejs/plugin-vue@^5.0.2":
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.2.tgz#8428ec3f446b9c2f7a7ec950f34e3d6f3c665444"
+ integrity sha512-kEjJHrLb5ePBvjD0SPZwJlw1QTRcjjCA9sB5VyfonoXVBxTS7TMnqL6EkLt1Eu61RDeiuZ/WN9Hf6PxXhPI2uA==
"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1":
version "1.11.1"
@@ -584,16 +584,6 @@
estree-walker "^2.0.2"
source-map "^0.6.1"
-"@vue/compiler-core@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.13.tgz#b3d5f8f84caee5de3f31d95cb568d899fd19c599"
- integrity sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==
- dependencies:
- "@babel/parser" "^7.23.5"
- "@vue/shared" "3.3.13"
- estree-walker "^2.0.2"
- source-map-js "^1.0.2"
-
"@vue/compiler-core@3.3.2":
version "3.3.2"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.2.tgz#39567bd15c7f97add97bfc4d44e814df36eb797b"
@@ -604,6 +594,17 @@
estree-walker "^2.0.2"
source-map-js "^1.0.2"
+"@vue/compiler-core@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.3.tgz#8e8f88273f061cf0a49bf958255f5f0621f12d8b"
+ integrity sha512-u8jzgFg0EDtSrb/hG53Wwh1bAOQFtc1ZCegBpA/glyvTlgHl+tq13o1zvRfLbegYUw/E4mSTGOiCnAJ9SJ+lsg==
+ dependencies:
+ "@babel/parser" "^7.23.6"
+ "@vue/shared" "3.4.3"
+ entities "^4.5.0"
+ estree-walker "^2.0.2"
+ source-map-js "^1.0.2"
+
"@vue/compiler-dom@3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz#a0b06caf7ef7056939e563dcaa9cbde30794f305"
@@ -612,13 +613,13 @@
"@vue/compiler-core" "3.2.47"
"@vue/shared" "3.2.47"
-"@vue/compiler-dom@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.13.tgz#d029e222e545e7ab00be35aafd3abed167f962bf"
- integrity sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==
+"@vue/compiler-dom@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.3.tgz#bea8acde9585d5ce92a3f11c062c863fb33e44d7"
+ integrity sha512-oGF1E9/htI6JWj/lTJgr6UgxNCtNHbM6xKVreBWeZL9QhRGABRVoWGAzxmtBfSOd+w0Zi5BY0Es/tlJrN6WgEg==
dependencies:
- "@vue/compiler-core" "3.3.13"
- "@vue/shared" "3.3.13"
+ "@vue/compiler-core" "3.4.3"
+ "@vue/shared" "3.4.3"
"@vue/compiler-dom@^3.3.0":
version "3.3.2"
@@ -628,17 +629,16 @@
"@vue/compiler-core" "3.3.2"
"@vue/shared" "3.3.2"
-"@vue/compiler-sfc@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.13.tgz#7b397acefd5c0c3808701d2855be88c4be60155c"
- integrity sha512-DQVmHEy/EKIgggvnGRLx21hSqnr1smUS9Aq8tfxiiot8UR0/pXKHN9k78/qQ7etyQTFj5em5nruODON7dBeumw==
+"@vue/compiler-sfc@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.3.tgz#a9d35b2deef38576dedd9938851c032fb2ca8617"
+ integrity sha512-NuJqb5is9I4uzv316VRUDYgIlPZCG8D+ARt5P4t5UDShIHKL25J3TGZAUryY/Aiy0DsY7srJnZL5ryB6DD63Zw==
dependencies:
- "@babel/parser" "^7.23.5"
- "@vue/compiler-core" "3.3.13"
- "@vue/compiler-dom" "3.3.13"
- "@vue/compiler-ssr" "3.3.13"
- "@vue/reactivity-transform" "3.3.13"
- "@vue/shared" "3.3.13"
+ "@babel/parser" "^7.23.6"
+ "@vue/compiler-core" "3.4.3"
+ "@vue/compiler-dom" "3.4.3"
+ "@vue/compiler-ssr" "3.4.3"
+ "@vue/shared" "3.4.3"
estree-walker "^2.0.2"
magic-string "^0.30.5"
postcss "^8.4.32"
@@ -668,13 +668,13 @@
"@vue/compiler-dom" "3.2.47"
"@vue/shared" "3.2.47"
-"@vue/compiler-ssr@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.13.tgz#ad8748abff8d738ac9c6a3c47be42020f0fbaa63"
- integrity sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw==
+"@vue/compiler-ssr@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.3.tgz#c3f641a15a04893b5bc3278f3dac65bed44dce1d"
+ integrity sha512-wnYQtMBkeFSxgSSQbYGQeXPhQacQiog2c6AlvMldQH6DB+gSXK/0F6DVXAJfEiuBSgBhUc8dwrrG5JQcqwalsA==
dependencies:
- "@vue/compiler-dom" "3.3.13"
- "@vue/shared" "3.3.13"
+ "@vue/compiler-dom" "3.4.3"
+ "@vue/shared" "3.4.3"
"@vue/devtools-api@^6.5.0":
version "6.5.0"
@@ -716,64 +716,53 @@
estree-walker "^2.0.2"
magic-string "^0.25.7"
-"@vue/reactivity-transform@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.13.tgz#dc8e9be961865dc666e367e1aaaea0716afa5c90"
- integrity sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q==
+"@vue/reactivity@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.3.tgz#95287b5950b328df4a942a7cf14a0e13487f1eac"
+ integrity sha512-q5f9HLDU+5aBKizXHAx0w4whkIANs1Muiq9R5YXm0HtorSlflqv9u/ohaMxuuhHWCji4xqpQ1eL04WvmAmGnFg==
dependencies:
- "@babel/parser" "^7.23.5"
- "@vue/compiler-core" "3.3.13"
- "@vue/shared" "3.3.13"
- estree-walker "^2.0.2"
- magic-string "^0.30.5"
+ "@vue/shared" "3.4.3"
-"@vue/reactivity@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.13.tgz#9b1dff3b523a69997b66cba2f86f83839e8285fb"
- integrity sha512-fjzCxceMahHhi4AxUBzQqqVhuA21RJ0COaWTbIBl1PruGW1CeY97louZzLi4smpYx+CHfFPPU/CS8NybbGvPKQ==
+"@vue/runtime-core@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.3.tgz#fe7649a93d9b20b9b351cd699f69f0e34a26e3ab"
+ integrity sha512-C1r6QhB1qY7D591RCSFhMULyzL9CuyrGc+3PpB0h7dU4Qqw6GNyo4BNFjHZVvsWncrUlKX3DIKg0Y7rNNr06NQ==
dependencies:
- "@vue/shared" "3.3.13"
+ "@vue/reactivity" "3.4.3"
+ "@vue/shared" "3.4.3"
-"@vue/runtime-core@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.13.tgz#e8414218e8c7db94acfcec6fd12044704adda9cf"
- integrity sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA==
+"@vue/runtime-dom@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.3.tgz#54a6115cfba364f20cdf5a44c2ff87337a57def8"
+ integrity sha512-wrsprg7An5Ec+EhPngWdPuzkp0BEUxAKaQtN9dPU/iZctPyD9aaXmVtehPJerdQxQale6gEnhpnfywNw3zOv2A==
dependencies:
- "@vue/reactivity" "3.3.13"
- "@vue/shared" "3.3.13"
-
-"@vue/runtime-dom@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.13.tgz#36b42b479d5a394972f305ca8e95c5f648bf55ef"
- integrity sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ==
- dependencies:
- "@vue/runtime-core" "3.3.13"
- "@vue/shared" "3.3.13"
+ "@vue/runtime-core" "3.4.3"
+ "@vue/shared" "3.4.3"
csstype "^3.1.3"
-"@vue/server-renderer@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.13.tgz#fccdd0787798173be8929f40f23161c17b60ed36"
- integrity sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg==
+"@vue/server-renderer@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.3.tgz#c508f58b9f83f0959085d5aa6854eac9141b4bc6"
+ integrity sha512-BUxt8oVGMKKsqSkM1uU3d3Houyfy4WAc2SpSQRebNd+XJGATVkW/rO129jkyL+kpB/2VRKzE63zwf5RtJ3XuZw==
dependencies:
- "@vue/compiler-ssr" "3.3.13"
- "@vue/shared" "3.3.13"
+ "@vue/compiler-ssr" "3.4.3"
+ "@vue/shared" "3.4.3"
"@vue/shared@3.2.47":
version "3.2.47"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c"
integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==
-"@vue/shared@3.3.13":
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.13.tgz#4cb73cda958d77ffd389c8640cf7d93a10ac676f"
- integrity sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==
-
"@vue/shared@3.3.2", "@vue/shared@^3.3.0":
version "3.3.2"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.2.tgz#774cd9b4635ce801b70a3fc3713779a5ef5d77c3"
integrity sha512-0rFu3h8JbclbnvvKrs7Fe5FNGV9/5X2rPD7KmOzhLSUAiQH5//Hq437Gv0fR5Mev3u/nbtvmLl8XgwCU20/ZfQ==
+"@vue/shared@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.3.tgz#01d54b32b9796c85c853c670d9395a813f23a8c2"
+ integrity sha512-rIwlkkP1n4uKrRzivAKPZIEkHiuwY5mmhMJ2nZKCBLz8lTUlE73rQh4n1OnnMurXt1vcUNyH4ZPfdh8QweTjpQ==
+
"@vue/tsconfig@^0.5.1":
version "0.5.1"
resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.5.1.tgz#3124ec16cc0c7e04165b88dc091e6b97782fffa9"
@@ -1051,6 +1040,11 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
+entities@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -2244,10 +2238,10 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
-sass@^1.69.5:
- version "1.69.5"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde"
- integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==
+sass@^1.69.6:
+ version "1.69.6"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.6.tgz#88ae1f93facc46d2da9b0bdd652d65068bcfa397"
+ integrity sha512-qbRr3k9JGHWXCvZU77SD2OTwUlC+gNT+61JOLcmLm+XqH4h/5D+p4IIsxvpkB89S9AwJOyb5+rWNpIucaFxSFQ==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@@ -2614,16 +2608,16 @@ vue-tsc@^1.8.27:
"@vue/language-core" "1.8.27"
semver "^7.5.4"
-vue@^3.3.13:
- version "3.3.13"
- resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.13.tgz#f03098fa1b4e7cc88c133bef92260b55e3767002"
- integrity sha512-LDnUpQvDgsfc0u/YgtAgTMXJlJQqjkxW1PVcOnJA5cshPleULDjHi7U45pl2VJYazSSvLH8UKcid/kzH8I0a0Q==
+vue@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.3.tgz#e1ba36a64134dcedc12cfb2c28e7cd15ba121f04"
+ integrity sha512-GjN+culMAGv/mUbkIv8zMKItno8npcj5gWlXkSxf1SPTQf8eJ4A+YfHIvQFyL1IfuJcMl3soA7SmN1fRxbf/wA==
dependencies:
- "@vue/compiler-dom" "3.3.13"
- "@vue/compiler-sfc" "3.3.13"
- "@vue/runtime-dom" "3.3.13"
- "@vue/server-renderer" "3.3.13"
- "@vue/shared" "3.3.13"
+ "@vue/compiler-dom" "3.4.3"
+ "@vue/compiler-sfc" "3.4.3"
+ "@vue/runtime-dom" "3.4.3"
+ "@vue/server-renderer" "3.4.3"
+ "@vue/shared" "3.4.3"
webpack-sources@^3.2.3:
version "3.2.3"
diff --git a/webapp_dist/index.html.gz b/webapp_dist/index.html.gz
index be84fc7d..3f62e3dc 100644
Binary files a/webapp_dist/index.html.gz and b/webapp_dist/index.html.gz differ
diff --git a/webapp_dist/js/app.js.gz b/webapp_dist/js/app.js.gz
index 83aad8a2..11c2ab42 100644
Binary files a/webapp_dist/js/app.js.gz and b/webapp_dist/js/app.js.gz differ
diff --git a/webapp_dist/zones.json.gz b/webapp_dist/zones.json.gz
index 02f82db6..6e5a69ea 100644
Binary files a/webapp_dist/zones.json.gz and b/webapp_dist/zones.json.gz differ