From 38244cb6f1e9a157401fc0b94016e5fafbd12f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20J=C3=A4ger?= Date: Mon, 26 Jun 2023 12:51:03 +0200 Subject: [PATCH] Update outdated information --- docs/.vuepress/config.ts | 1 - docs/about/contact.md | 2 +- docs/software/README.md | 6 +- docs/software/bms.md | 2 +- docs/software/esp32-edge.md | 41 - .../images/communication_channels.png | Bin 30786 -> 0 bytes docs/software/images/esp32-edge-gateway.svg | 460 ------ docs/software/images/esp32-integrated.svg | 376 ----- .../images/thingset-network-topology.svg | 1243 +++++++++++++++++ docs/software/images/zephyr-platformio.png | Bin 34942 -> 0 bytes docs/software/thingset.md | 20 +- 11 files changed, 1252 insertions(+), 899 deletions(-) delete mode 100644 docs/software/esp32-edge.md delete mode 100644 docs/software/images/communication_channels.png delete mode 100644 docs/software/images/esp32-edge-gateway.svg delete mode 100644 docs/software/images/esp32-integrated.svg create mode 100644 docs/software/images/thingset-network-topology.svg delete mode 100644 docs/software/images/zephyr-platformio.png diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index eaa44b4..e4485ce 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -79,7 +79,6 @@ export default defineUserConfig({ children: [ { text: 'Charge Controller', link: '/software/charge-controller.md' }, { text: 'Battery Management', link: '/software/bms.md' }, - { text: 'ESP32 Edge', link: '/software/esp32-edge.md' }, ], }, /*{ diff --git a/docs/about/contact.md b/docs/about/contact.md index aa117c4..d49fa77 100644 --- a/docs/about/contact.md +++ b/docs/about/contact.md @@ -8,7 +8,7 @@ Libre Solar Technologies GmbH
Caffamacherreihe 43
20355 Hamburg
-Telefon: +49 (0) 160 94179007
+Telefon: +49 (0) 40 88190988
E-Mail: info at libre dot solar
*Remark:* We don't answer technical questions via E-Mail. Please use the [community platform](https://talk.libre.solar) instead, so that others with similar questions can also find the information. diff --git a/docs/software/README.md b/docs/software/README.md index bad138c..9144563 100644 --- a/docs/software/README.md +++ b/docs/software/README.md @@ -1,8 +1,6 @@ # Firmware and Software -We are using state-of-the-art [Zephyr RTOS](https://www.zephyrproject.org/) for most of our firmware, combined with [PlatformIO](https://platformio.org/) to make it easily accessible even for beginners. - -![Zephyr + PlatformIO](./images/zephyr-platformio.png) +We are using [Zephyr RTOS](https://www.zephyrproject.org/) for most of our firmware. These are the some of the key advantages of Zephyr compared to other embedded operating systems: @@ -12,8 +10,6 @@ These are the some of the key advantages of Zephyr compared to other embedded op Libre Solar is also actively contributing to upstream Zephyr. -Devices based on ESP32 are currently programmed using the [ESP-IDF](https://github.com/espressif/esp-idf), as full Zephyr support for ESP32 is still [work in progress](https://github.com/zephyrproject-rtos/zephyr/issues/29394). A switch to Zephyr is a very likely option for the future. - ## Further information The C/C++ coding style for our firmware development is described [here](https://github.com/LibreSolar/coding-style). diff --git a/docs/software/bms.md b/docs/software/bms.md index ccf2073..80093de 100644 --- a/docs/software/bms.md +++ b/docs/software/bms.md @@ -40,7 +40,7 @@ The chips currently supported by the firmware are listed below. | Texas Instruments | bq76920 | 3s-5s | full support | [link](https://www.ti.com/lit/ds/symlink/bq76920.pdf) | Texas Instruments | bq76930 | 6s-10s | full support | [link](https://www.ti.com/lit/ds/symlink/bq76930.pdf) | Texas Instruments | bq76940 | 9s-15s | full support | [link](https://www.ti.com/lit/ds/symlink/bq76940.pdf) -| Texas Instruments | BQ76952 | 3s-16s | support planned | [link](https://www.ti.com/lit/ds/symlink/bq76952.pdf) +| Texas Instruments | BQ76952 | 3s-16s | full support | [link](https://www.ti.com/lit/ds/symlink/bq76952.pdf) | Renesas / Intersil | ISL94202 | 3s-8s | full support | [link](https://www.renesas.com/us/en/document/dst/isl94202-datasheet) diff --git a/docs/software/esp32-edge.md b/docs/software/esp32-edge.md deleted file mode 100644 index fa09c0e..0000000 --- a/docs/software/esp32-edge.md +++ /dev/null @@ -1,41 +0,0 @@ -# ESP32 Edge Firmware - -Firmware for CAN and UART to WiFi or Bluetooth gateway based on ESP32-IDF. - -![example workflow](https://github.com/LibreSolar/esp32-edge-firmware/actions/workflows/platformio.yml/badge.svg) - -GitHub repository: [LibreSolar/esp32-edge-firmware](https://github.com/LibreSolar/esp32-edge-firmware) - -## Concept Overview - -The firmware supports multiple use-cases to connect devices implementing the [ThingSet Protocol](thingset.md) with other networks like the internet. - -### ESP32 acting as an Edge Gateway to the cloud - -In this application, the ESP32 is integrated in a separate device (like the Libre Solar [Data Manager](https://github.com/LibreSolar/data-manager)) and communicates with the other devices like the charge controller via CAN bus. - -The ThingSet protocol on the CAN bus can translated to MQTT in order to push data to a cloud. For local access, the ESP32 can directly serve a website or provide a Bluetooth Low Energy interface for a mobile phone app. - -![Edge Gateway Application](./images/esp32-edge-gateway.svg) - -### ESP32 integrated in device (e.g. charge controller) - -The ESP32 board can also be directly integrated in a charge controller or other devices and communicate with the host device via UART interface (again using the ThingSet protocol). - -The data can be accessed in the same way as described above. - -![Application with ESP32 integrated in device](./images/esp32-integrated.svg) - -## Firmware features - -- Written in C using ESP-IDF and PlatformIO -- Data input from Libre Solar devices via - - [LS.bus](ls-bus.md) (CAN bus) - - [LS.one](ls-one.md) (UART serial) -- Local communication via [ThingSet Protocol](thingset.md) -- Data access via HTTP JSON API -- Publishing of monitoring data via WiFi to - - Open Energy Monitor [Emoncms](https://emoncms.org/) - - MQTT broker -- Data logging on SD card (ToDo) -- Bluetooth interface (ToDo) diff --git a/docs/software/images/communication_channels.png b/docs/software/images/communication_channels.png deleted file mode 100644 index ed43ac42de9e017d77dc771db68c77e91afbfe01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30786 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 diff --git a/docs/software/images/esp32-edge-gateway.svg b/docs/software/images/esp32-edge-gateway.svg deleted file mode 100644 index 7a9cabc..0000000 --- a/docs/software/images/esp32-edge-gateway.svg +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - Martin Jäger - - - - - - - - - - - - - - - - - Device 1 - - Device n - - Edge Gateway - - ESP32 - - Cloud - - Web UI - - - - Router - MQTT - EmonCMS - - pub/sub - req/resp - - - - Web UI - - App - - HTTP - WiFi - BLE - HTTP - - - - - - - CAN - ... - - diff --git a/docs/software/images/esp32-integrated.svg b/docs/software/images/esp32-integrated.svg deleted file mode 100644 index a1d7d75..0000000 --- a/docs/software/images/esp32-integrated.svg +++ /dev/null @@ -1,376 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - Martin Jäger - - - - - - - - - - - - - - - - - Device - - ESP32 - - Cloud - - Web UI - - - - Router - MQTT - - pub/sub - req/resp - - - - Web UI - - App - - HTTP - WiFi - BLE - HTTP - UART - - diff --git a/docs/software/images/thingset-network-topology.svg b/docs/software/images/thingset-network-topology.svg new file mode 100644 index 0000000..e504104 --- /dev/null +++ b/docs/software/images/thingset-network-topology.svg @@ -0,0 +1,1243 @@ + +DeviceDeviceGatewayState DBMobile App...DeviceBluetoothDeviceGatewayMQTTBrokerTime SeriesDatabaseGrafanaThingSet BackendSerial / CAN /LoRaWANIP networkWebSocketServerDeviceDevice...Modbus / ...WebFrontendThingSet NodeForeign Protocol/Service IntegrationCoAPServiceGatewayDesktopApp / CLISerial / CANNative ThingSet Service/ApplicationDirection to initiate connection diff --git a/docs/software/images/zephyr-platformio.png b/docs/software/images/zephyr-platformio.png deleted file mode 100644 index 7e05c7bb9163195e261029b1bb25e61e1b7ca331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34942 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