oxan / esphome-stream-server Goto Github PK
View Code? Open in Web Editor NEWStream server (serial-to-wifi bridge) for ESPHome
License: Other
Stream server (serial-to-wifi bridge) for ESPHome
License: Other
Hello, any chance that the socket version will be finished? That would be very nice. Actual version doesn't start (but compile).
Christoph
When trying to add stream server to an ESP32-C3, I got this error:
esphome clean esp32c3-basic.yaml
INFO Reading configuration esp32c3-basic.yaml...
Failed config
async_tcp: None
{}
&&
esphome run esp32c3-basic.yaml
INFO Reading configuration esp32c3-basic.yaml...
Failed config
async_tcp: None
{}
The config I use:
esphome:
name: esp32c3-basic
comment: "esp32c3-basic"
platformio_options:
board_build.f_flash: 40000000L
board_build.flash_mode: dio
board_build.flash_size: 4MB
esp32:
variant: ESP32C3
board: esp32-c3-devkitm-1
framework:
type: esp-idf
version: recommended
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
wifi:
ssid: "********"
password: "********"
uart:
id: uart_tcp
rx_pin: GPIO20
tx_pin: GPIO21
baud_rate: 115200
data_bits: 8
parity: NONE
stop_bits: 1
external_components:
- source: github://oxan/esphome-stream-server
stream_server:
uart_id: uart_tcp
port: 23
Hello, I'm using the espHome to communicate with a device using the serial port, specially a STM32 device.
I'm able to listen the RX/TX with screen:
socat -v -d -d pty,raw,echo=0 tcp:192.168.2.105:1234
then
screen /dev/ttys005 115200
And it seems to work very nice here, I`m able read all the msgs, except sometimes it seems to lag a bit.
Now I'm tryng to use it with stm32flash:
sudo stm32flash -b 115200 /dev/ttys005
socat debug:
https://pastebin.com/baxDTWL2
Could someone give a tip if I can improve and make it work for this purpose?
YAML settings:
external_components:
- source: github://oxan/esphome-stream-server
logger:
baud_rate: 0
uart:
id: uart_bus
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 115200
rx_buffer_size: 4096
stream_server:
uart_id: uart_bus
port: 1234
custom_component:
- lambda: |-
auto stream_server = new StreamServerComponent(id(uart_bus));
return {stream_server};
Hi, i'm using your component to connect a zigbee coordinator (cc2652p) with zigbee2mqtt over wifi using an esp8266 (esp01-s). After i upgraded to latest version it simpy not connect to zigbee2mqtt (its log don't say nothing useful to understand why).
Using the async-tcp branch it works well.
There is a known reason that i missed for this issue?
When i use the DSMR component of ESPhome, this serial stream server doesn't work anymore. Nothing is posted on port 8088 in this case. This is the used config:
external_components:
- source: github://oxan/esphome-stream-server
- source:
type: git
url: https://github.com/esphome/esphome
ref: dev
components: [ "dsmr" ]
refresh: 60s
*SNIP*
# Custom uart settings for DSMR v2.2
uart:
debug:
direction: RX
after:
delimiter: "\r\n"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
id: uart_bus
rx_pin: GPIO3
#tx_pin: D0
baud_rate: 9600
data_bits: 7
parity: Even
stop_bits: 1
stream_server:
uart_id: uart_bus
port: 8088
dsmr:
crc_check: false
Without the DSMR component everything works great. Can we do anything to fix this? I would like to use them together.
Serial connections are very unreliable when using this component with any ESPHome Version greater than 2021.9. By unreliable I mean the connection resets every few hours.
Thanks @oxan , the project saves my day :)
I'm using this component to remote access another linux embedded device. It would be great if telnet option things can be supported.
I've searched on the github and found this: https://github.com/yasheena/telnetspy/blob/master/TelnetSpy.cpp
I have little c++ and telnet knowledges, is it hard to migrate to this project? If anything I can help, please let me know.
Thanks again, really appreciate it.
I've noticed that whenever Wi-Fi is lost unexpectedly the following loop occurs:
May 31 22:13:22 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:22 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:22 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:22 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:22 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:22 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
May 31 22:13:23 esp32 stream_server [W][stream_server:168]: Failed to read from client 192.168.0.122 with error 128!
I was running into a similar issue as #11. Is there already a fix or feasible workaround available for this issue?
Asking because we are slightly past the 6+ months 😉 mentioned there and maybe there is a workaround that I haven't found yet.
The use case is that I have a "SlimmeLezer" hooked up to my meter. I'd like this to do two things:
Is it possible to reverse the stream of data. 1 device exposing UART data to ethernet, which is what is already possible. And then another device reading UART data via ethernet and streaming it to a local UART output. This way bridges between UART-ethernet-UART could be build over ethernet / Wi-Fi
I've connected my vBUS2TTY circuit (from the original project) to this via an ESPHOME connected board. Will start looking at the code, however when telnet'ing to the device I get the following.
(Is there a correct polarity for the vbus to be connected...I receive data on both but differing output)
fprowse-a01:Downloads fprowse$ telnet 192.168.0.141 1234
Trying 192.168.0.141...
Connected to 192.168.0.141.
Escape character is '^]'.
� Q8"�s
��
ii��i�{B
v��
u
sQ�
s�
� qQ8"{B �{B Q8"�s
��
ii��i�{B
v��
u
sQ�
s�
� qQ8"{B �{B Q8"�s
��
ii��i�{B
v��
u
sQ�
ymal:
esphome:
name: tube_zb_gw_cc2652p2
platform: ESP32
board: esp-wrover-kit
external_components:
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
Dependency Graph
|-- 1.2.2
|-- 1.0
|-- 1.0
|-- 1.0
|-- 2.0.0
| |-- 1.2.2
|-- 5.13.3
|-- 1.0
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/api_connection.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/api_frame_helper.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/api_pb2.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/api_server.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/list_entities.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/proto.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/user_services.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/api/util.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/esp32/core.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/esp32/gpio_arduino.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/esp32/gpio_idf.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/esp32/preferences.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/ethernet/ethernet_component.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/gpio/switch/gpio_switch.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/json/json_util.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/logger/logger.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/md5/md5.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/mdns/mdns_component.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/mdns/mdns_esp32_arduino.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/mdns/mdns_esp8266.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/mdns/mdns_esp_idf.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/network/util.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/ota/ota_backend_arduino_esp32.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/ota/ota_backend_arduino_esp8266.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/ota/ota_backend_esp_idf.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/ota/ota_component.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/restart/restart_switch.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/script/script.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/socket/bsd_sockets_impl.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/socket/lwip_raw_tcp_impl.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/switch/automation.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/switch/switch.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/template/switch/template_switch.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/uart/uart.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/uart/uart_component.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/uart/uart_component_esp32_arduino.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/uart/uart_component_esp8266.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/uart/uart_component_esp_idf.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/web_server/web_server.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/components/web_server_base/web_server_base.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/application.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/color.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/component.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/controller.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/entity_base.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/helpers.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/log.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/scheduler.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/esphome/core/util.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/main.cpp.o
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/stream_server.cpp.o
In file included from /piolibs/AsyncTCP-esphome/src/AsyncTCP.h:29:0,
from src/stream_server.h:29,
from src/stream_server.cpp:17:
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/semphr.h:74:3: error: #error "include FreeRTOS.h" must appear in source files before "include semphr.h"
#error "include FreeRTOS.h" must appear in source files before "include semphr.h"
^
In file included from /data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/semphr.h:77:0,
from /piolibs/AsyncTCP-esphome/src/AsyncTCP.h:29,
from src/stream_server.h:29,
from src/stream_server.cpp:17:
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:75:3: error: #error "include FreeRTOS.h" must appear in source files before "include queue.h"
#error "include FreeRTOS.h" must appear in source files before "include queue.h"
^
Generating partitions /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/partitions.bin
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/lib528/AsyncTCP-esphome/AsyncTCP.cpp.o
In file included from /data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/semphr.h:77:0,
from /piolibs/AsyncTCP-esphome/src/AsyncTCP.h:29,
from src/stream_server.h:29,
from src/stream_server.cpp:17:
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:613:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:725:1: error: 'BaseType_t' does not name a type
BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:906:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeek ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:917:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:930:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:940:43: error: expected initializer before 'PRIVILEGED_FUNCTION'
void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1267:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1268:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1347:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1354:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1355:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1356:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1374:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueAltGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, BaseType_t xCopyPosition );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1375:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueAltGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, BaseType_t xJustPeeking );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1390:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1391:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1392:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1393:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1400:62: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1401:67: error: 'StaticQueue_t' has not been declared
QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1401:98: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1402:52: error: 'UBaseType_t' does not name a type
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1402:82: error: 'UBaseType_t' does not name a type
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1402:111: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:58: error: 'UBaseType_t' does not name a type
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/lib64d/WiFi/ETH.cpp.o
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:88: error: 'UBaseType_t' does not name a type
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:116: error: 'StaticQueue_t' has not been declared
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:147: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1404:56: error: expected initializer before 'PRIVILEGED_FUNCTION'
void xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1410:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1411:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1548:41: error: 'UBaseType_t' does not name a type
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1548:74: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1572:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1591:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1627:79: error: 'TickType_t' does not name a type
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1627:105: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1632:81: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1636:60: error: 'TickType_t' has not been declared
void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1636:86: error: expected initializer before 'PRIVILEGED_FUNCTION'
void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1637:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION;
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/lib64d/WiFi/WiFi.cpp.o
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1638:50: error: 'UBaseType_t' has not been declared
void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1638:78: error: expected initializer before 'PRIVILEGED_FUNCTION'
void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1639:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1640:53: error: expected initializer before 'PRIVILEGED_FUNCTION'
uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
src/stream_server.cpp: In member function 'void StreamServerComponent::read()':
src/stream_server.cpp:59:65: error: 'min' was not declared in this scope
size_t read = this->stream_->readBytes(buf, min(len, 128));
^
src/stream_server.cpp:59:65: note: suggested alternative:
In file included from /data/cache/platformio/packages/toolchain-xtensa32/xtensa-esp32-elf/include/c++/5.2.0/algorithm:62:0,
from src/esphome/core/optional.h:19,
from src/esphome/core/component.h:7,
from src/stream_server.h:19,
from src/stream_server.cpp:17:
/data/cache/platformio/packages/toolchain-xtensa32/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_algo.h:3451:5: note: 'std::min'
min(initializer_list<_Tp> __l, Compare comp)
^
In file included from src/stream_server.cpp:19:0:
src/stream_server.cpp: In member function 'virtual void StreamServerComponent::dump_config()':
src/stream_server.cpp:75:64: error: 'network_get_address' was not declared in this scope
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port);
^
src/esphome/core/log.h:97:90: note: in definition of macro 'esph_log_config'
esp_log_printf(ESPHOME_LOG_LEVEL_CONFIG, tag, LINE, ESPHOME_LOG_FORMAT(format), ##VA_ARGS)
^
src/stream_server.cpp:75:5: note: in expansion of macro 'ESP_LOGCONFIG'
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port);
^
Compiling /data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/lib64d/WiFi/WiFiAP.cpp.o
*** [/data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/stream_server.cpp.o] Error 1
/config/esphome/tube-zb-gw-cc2652p2.yaml: In lambda function:
/config/esphome/tube-zb-gw-cc2652p2.yaml:89:32: error: expected type-specifier before 'StreamServerComponent'
auto stream_server = new StreamServerComponent(id(uart_bus));
^
/config/esphome/tube-zb-gw-cc2652p2.yaml:90:28: error: could not convert '{stream_server}' from '' to 'std::vectoresphome::Component*'
return {stream_server};
^
*** [/data/tube_zb_gw_cc2652p2/.pioenvs/tube_zb_gw_cc2652p2/src/main.cpp.o] Error 1
========================== [FAILED] Took 8.61 seconds ==========================
Hi, I'm using zigbee coordinator with ESP32 and Ethernet, like this one. Lately I upgraded esphome on the device, and esphome-stream-server was also upgraded. The changes from your commits from 22.03.2023 made me unable to connect to my esphome device. I could only ping it but couldn't connect to web_server on port 80 nor api on port 6053
WARNING Can't connect to ESPHome API for device-name.my.domain: Error connecting to ('192.168.1.10', 6053): [Errno 111] Connect call failed ('192.168.1.10', 6053)
This is my configuration:
substitutions:
device_name: cc2652p01
friendly_name: ${device_name} over LAN
esphome:
name: ${device_name}
comment: ${friendly_name}
platform: ESP32
board: esp-wrover-kit
web_server:
port: 80
ethernet:
type: LAN8720
mdc_pin: GPIO23
mdio_pin: GPIO18
clk_mode: GPIO0_IN
phy_addr: 1
power_pin: GPIO16
external_components:
- source: github://oxan/esphome-stream-server
stream_server:
uart_id: uart_bus
uart:
id: uart_bus
rx_pin: GPIO5
tx_pin: GPIO17
baud_rate: 115200
I forked your repository and created a tag at a commit 53a7260e0158f99f57763a7e41eb76afac309506
from 07.02.2023, then set up external_components.source
pointing to my repository with reference to the tag I created and everything works perfectly:
external_components:
- source: github://teklabania/[email protected]
Hi all,
Before I buy a M5Stack ESP32 with POE (POESP32), do you know I anyone already figured out if this steam server software would work on it?
regards Marco
I have a reproducible situation with esphome (sha256:6e659021515743b3d0d988084edcf31a777829f23e2d1c13b87901fa899bbce6) where the Socket of esphome stops receiving data. I'm not sure if this a esphome, or a socket setup issue. After reconnecting I was able to continue to send the next 256kb where it again stop receiving.
Hey!
Any thoughts on how it might be best for even superficial security for this?
ideally wrap the socket in client+server TLS but I suspect that might be a reach with the hardware ;)
Maybe a combination of limiting what IP source addresses connections will be listened to and maybe port knocking?
Is there a way to know the expected performance for this on an ESP8266? It seems to cap out at 19200 baud...
So I've noticed that a newer ESPHome build using the most recent code here for the serial is not allowing successful flashes of the cc2652 over the network. I have tested this on several Olimex ESP32-PoE devices and have yet to get one to flash cleanly.
I re-flashed an older binary based on earlier code from the gist, and it completes the flash with no problem. Not sure if there is something from the update for ESPHome that is significant in the serial connection, but wanted to mention it here.
Current ESPHome (v2021.11.4) fails to build your streamserver component with the following error:
Compiling /data/p1/.pioenvs/p1/src/stream_server.cpp.o
src/stream_server.cpp: In member function 'void StreamServerComponent::read()':
src/stream_server.cpp:59:65: error: 'min' was not declared in this scope
size_t read = this->stream_->readBytes(buf, min(len, 128));
^
src/stream_server.cpp:59:65: note: suggested alternative:
In file included from /data/cache/platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/4.8.2/algorithm:62:0,
from src/esphome/core/optional.h:19,
from src/esphome/core/component.h:7,
from src/stream_server.h:19,
from src/stream_server.cpp:17:
/data/cache/platformio/packages/toolchain-xtensa/xtensa-lx106-elf/include/c++/4.8.2/bits/stl_algo.h:4226:5: note: 'std::min'
min(initializer_list<_Tp> __l, _Compare __comp)
^
In file included from src/stream_server.cpp:19:0:
src/stream_server.cpp: In member function 'virtual void StreamServerComponent::dump_config()':
src/stream_server.cpp:75:64: error: 'network_get_address' was not declared in this scope
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port_);
^
src/esphome/core/log.h:97:90: note: in definition of macro 'esph_log_config'
esp_log_printf_(ESPHOME_LOG_LEVEL_CONFIG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
^
src/stream_server.cpp:75:5: note: in expansion of macro 'ESP_LOGCONFIG'
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port_);
^
*** [/data/p1/.pioenvs/p1/src/stream_server.cpp.o] Error 1
========================= [FAILED] Took 19.15 seconds =========================
It would be great if you could implement a binary sensor to monitor the serial connection status. Similar functionality is implemented here
I use the stream server on esphome to readout the dsmr meter and monitor my water usage with an inductive sensor.
The stream server is hooked up to the dsmr reader docker what I use for logging my electricity consumption
However since I updated to esphome 2023.2 I get many CRC errors on the dsmr communication
I'm not exactly sure if it is caused by the updated esphome or if by updating the firmware I also updated the stream-server
After some debugging I found that the first x minutes after a reflash/reboot the crc errors do not appear, after ~10 minutes they start to appear.
I also tried the update to esphome 2023.3 but this did not fix the problem
`api:
logger:
level: NONE
baud_rate: 0
ota:
external_components:
source: github://oxan/esphome-stream-server
uart:
stream_server:
uart_id: p1_bus
port: 8088`
Based on my understanding of this library data passed by the TCP server is in the clear. Is there a way to encrypt it? I believe there is a SSH library would there be a way to tunnel it over that? Thanks.
Hello, i posted issue in esphome issues tracker but i made more configurations to find more scenarios while stream server is not working. Currently i have configuration while sttream server is not working while is declared more than 3 uarts (including logger on uart) on ESP32. I think it was connected with software uart implementation on ESP32 but i'm don't know how to check if uart is currently software or hardware.
Can anyone confirm that stream server is not working on this config?
external_components:
- source: github://oxan/esphome-stream-server
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
logger:
level: very_verbose
stream_server:
uart_id: uart_bus3
port: 1234
uart:
- id: uart_bus1
rx_pin: GPIO13
tx_pin: GPIO14
baud_rate: 115200
- id: uart_bus2
rx_pin: GPIO15
tx_pin: GPIO16
baud_rate: 115200
- id: uart_bus3
rx_pin: GPIO4
tx_pin: GPIO5
baud_rate: 115200
Can this stream server work bi-directionally e.g. serial <-> wifi? Its for a modbus like comms system that uses a usb. I would like to expose the usb to wifi.
ESP32 have 3 uart
can use
uart1 port:5000
uart2 port:5001???
The connected binary sensor and connection count sensor both report a value of Unknown
until the first client is connected. I would have expect the binary sensor to report False
and the regular sensor to report a count of 0
. This seems to happen because StreamServerComponent::publish_sensor
is only called from StreamServerComponent::accept
and StreamServerComponent::cleanup
.
Can you update this repo with License? The best one that is compatible with ESPHome: https://github.com/esphome/esphome/blob/dev/LICENSE?
Since ESPHome 2023.4 the stream_server
component doesn't listen on the specified port. I think this was broken by esphome/esphome#4574.
Does this stream server custom component have support for UART hardware flow control (serial data flow control)?
This feature has also been requested here -> esphome/feature-requests#1126
Some devices require flow control when communicating via UART. In this case, it will be useful to add the ability to configure flow control in the UART component. ESP8266 has a hardware implementation of flow control(RTS, CTS, DTR, DSR), which is enabled through the UARTCONF register.
This improvement will make it possible to use MAX485 for communication under the RS485 protocol.
PS: Example of MCU serial devices that can support hardware flow control with the correct firmware is Zigbee SMD modules. Ex:
https://github.com/tube0013/tube_gateways
Hello.
Sorry for my english.
Zigbee Gateway visits, also modbus - can you filter which data is transmitted and which is not?
Hello,
Is there a way to bridge 2 UART ports in the server, so what's received on one - is sent to the other, and vice versa?
The idea is to connect Paradox EVO192 Serial <-> ESP32 (to Paradox alarm interface for HA) <-> IP150
Below minimal configuration file fails validation and build on my ESPHome instance:.
INFO Reading configuration /config/esphome/test123.yaml...
Failed config
stream_server: [source /config/esphome/test123.yaml:14]
Component not found: stream_server.
test123.yaml:
---
substitutions:
devicename: test123
upper_devicename: "TEST123"
esphome:
name: ${devicename}
platform: ESP8266
board: esp01_1m
external_components:
- source: github://oxan/esphome-stream-server
stream_server:
I am using the following installation:
version | core-2022.2.9 |
---|---|
installation_type | Home Assistant OS |
dev | false |
hassio | true |
docker | true |
user | root |
virtualenv | false |
python_version | 3.9.7 |
os_name | Linux |
os_version | 5.10.98 |
arch | x86_64 |
timezone | Europe/Amsterdam |
logged_in | false |
---|---|
can_reach_cert_server | ok |
can_reach_cloud_auth | ok |
can_reach_cloud | ok |
host_os | Home Assistant OS 7.4 |
---|---|
update_channel | stable |
supervisor_version | supervisor-2022.01.1 |
docker_version | 20.10.9 |
disk_total | 30.8 GB |
disk_used | 8.2 GB |
healthy | true |
supported | true |
board | ova |
supervisor_api | ok |
version_api | ok |
installed_addons | SSH & Web Terminal (10.0.2), Studio Code Server (4.1.0), Portainer (2.11.0-3), ESPHome (2022.2.5) |
dashboards | 1 |
---|---|
resources | 0 |
mode | auto-gen |
Could you create official releases or at least tags? That way it is easier to pin streamserver to a specific commit.
In my case it seems my local ESP device is not working with the current tip of master, but it is very hard to downgrade streamserver.
External components only tage branches or tags apparently if I consult the docs at https://esphome.io/components/external_components.html#external-components-git
Hi
Thanks for taking the time to create a package for this.
I am moving from an Serial2Wifi Bridge as per
https://github.com/ParadoxAlarmInterface/pai/wiki/Connection-methods#serial-over-ip-esp32
I originally just used the https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino
But since i enjoy breaking thigs I'm trying to move onto ESPhome for this.
I cant really see why this wont work.
If i connect to the streaming port thou, i get some interesting data, from recollection, if i used to telnet to the other port, i used to get text data.
external_components:
- source: github://oxan/esphome-stream-server
uart:
id: uart_bus
# add further configuration for the UART here
baud_rate: 9600
tx_pin: 17
rx_pin: 16
# tx2 and rx2
stream_server:
uart_id: uart_bus
# port: 1234
So my quesitons are as follows:
I believe this should be #ifdef USE_SENSOR
First of all thanks for writing this component. Some years ago I found an older version and I've been putting it to great use since.
While reading through the code, I couldn't help but notice the comments of "ESPHome doesn't know the Stream abstraction yet, so hardcode to use a UART for now."
Somewhere around the same time, I stumbled upon this from the Midea component:
https://www.esphome.io/api/appliance__base_8h_source.html
It implements a UARTStream class that takes the UARTcomponent and wraps the Stream class around it. Although it wouldn't change the functionality, it might be more in line with what you envisioned when you wrote this component.
the stream-server component no longer builds in esphome 2021.10.0:
INFO Reading configuration /config/esphome/serial-over-ip.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing serial-over-ip (board: esp-wrover-kit; framework: arduino; platform: espressif32 @ 3.3.2)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
PACKAGES:
- framework-arduinoespressif32 3.10006.210326 (1.0.6)
- tool-esptoolpy 1.30100.210531 (3.1.0)
- toolchain-xtensa32 2.50200.97 (5.2.0)
LDF Modes: Finder ~ off, Compatibility ~ soft
Dependency Graph
|-- <AsyncTCP-esphome> 1.2.2
|-- <WiFi> 1.0
|-- <FS> 1.0
|-- <Update> 1.0
|-- <ESPAsyncWebServer-esphome> 1.3.0
| |-- <AsyncTCP-esphome> 1.2.2
|-- <ArduinoJson-esphomelib> 5.13.3
|-- <ESPmDNS> 1.0
Compiling /data/serial-over-ip/.pioenvs/serial-over-ip/src/esphome/components/stream_server/stream_server.cpp.o
In file included from /data/serial-over-ip/.piolibdeps/serial-over-ip/AsyncTCP-esphome/src/AsyncTCP.h:29:0,
from src/esphome/components/stream_server/stream_server.h:30,
from src/esphome/components/stream_server/stream_server.cpp:17:
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/semphr.h:74:3: error: #error "include FreeRTOS.h" must appear in source files before "include semphr.h"
#error "include FreeRTOS.h" must appear in source files before "include semphr.h"
^
In file included from /data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/semphr.h:77:0,
from /data/serial-over-ip/.piolibdeps/serial-over-ip/AsyncTCP-esphome/src/AsyncTCP.h:29,
from src/esphome/components/stream_server/stream_server.h:30,
from src/esphome/components/stream_server/stream_server.cpp:17:
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:75:3: error: #error "include FreeRTOS.h" must appear in source files before "include queue.h"
#error "include FreeRTOS.h" must appear in source files before "include queue.h"
^
Compiling /data/serial-over-ip/.pioenvs/serial-over-ip/src/main.cpp.o
Compiling /data/serial-over-ip/.pioenvs/serial-over-ip/src/stream_server.cpp.o
In file included from /data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/semphr.h:77:0,
from /data/serial-over-ip/.piolibdeps/serial-over-ip/AsyncTCP-esphome/src/AsyncTCP.h:29,
from src/esphome/components/stream_server/stream_server.h:30,
from src/esphome/components/stream_server/stream_server.cpp:17:
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:613:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:725:1: error: 'BaseType_t' does not name a type
BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:906:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeek ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:917:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:930:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:940:43: error: expected initializer before 'PRIVILEGED_FUNCTION'
void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1267:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1268:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1347:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1354:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1355:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1356:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1374:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueAltGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, BaseType_t xCopyPosition );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1375:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueAltGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, BaseType_t xJustPeeking );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1390:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1391:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1392:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1393:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait );
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1400:62: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1401:67: error: 'StaticQueue_t' has not been declared
QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1401:98: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1402:52: error: 'UBaseType_t' does not name a type
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1402:82: error: 'UBaseType_t' does not name a type
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1402:111: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:58: error: 'UBaseType_t' does not name a type
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:88: error: 'UBaseType_t' does not name a type
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:116: error: 'StaticQueue_t' has not been declared
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1403:147: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1404:56: error: expected initializer before 'PRIVILEGED_FUNCTION'
void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1410:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1411:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1548:41: error: 'UBaseType_t' does not name a type
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1548:74: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1572:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1591:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1627:79: error: 'TickType_t' does not name a type
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1627:105: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1632:81: error: expected initializer before 'PRIVILEGED_FUNCTION'
QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1636:60: error: 'TickType_t' has not been declared
void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1636:86: error: expected initializer before 'PRIVILEGED_FUNCTION'
void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1637:1: error: 'BaseType_t' does not name a type
BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1638:50: error: 'UBaseType_t' has not been declared
void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1638:78: error: expected initializer before 'PRIVILEGED_FUNCTION'
void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1639:1: error: 'UBaseType_t' does not name a type
UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
/data/cache/platformio/packages/framework-arduinoespressif32/tools/sdk/include/freertos/freertos/queue.h:1640:53: error: expected initializer before 'PRIVILEGED_FUNCTION'
uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
^
In file included from src/esphome/components/stream_server/stream_server.cpp:17:0:
src/esphome/components/stream_server/stream_server.h: In member function 'void StreamServerComponent::set_uart_parent(esphome::uart::UARTComponent*)':
src/esphome/components/stream_server/stream_server.h:37:80: error: cannot convert 'esphome::uart::UARTComponent*' to 'Stream*' in assignment
void set_uart_parent(esphome::uart::UARTComponent *parent) { this->stream_ = parent; }
^
src/esphome/components/stream_server/stream_server.cpp: In member function 'void StreamServerComponent::read()':
src/esphome/components/stream_server/stream_server.cpp:59:65: error: 'min' was not declared in this scope
size_t read = this->stream_->readBytes(buf, min(len, 128));
^
src/esphome/components/stream_server/stream_server.cpp:59:65: note: suggested alternative:
In file included from /data/cache/platformio/packages/toolchain-xtensa32/xtensa-esp32-elf/include/c++/5.2.0/algorithm:62:0,
from src/esphome/core/optional.h:19,
from src/esphome/core/component.h:7,
from src/esphome/components/stream_server/stream_server.h:19,
from src/esphome/components/stream_server/stream_server.cpp:17:
/data/cache/platformio/packages/toolchain-xtensa32/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_algo.h:3451:5: note: 'std::min'
min(initializer_list<_Tp> __l, _Compare __comp)
^
In file included from src/esphome/components/uart/uart.h:6:0,
from src/esphome/components/stream_server/stream_server.h:20,
from src/esphome/components/stream_server/stream_server.cpp:17:
src/esphome/components/stream_server/stream_server.cpp: In member function 'virtual void StreamServerComponent::dump_config()':
src/esphome/components/stream_server/stream_server.cpp:75:64: error: 'network_get_address' was not declared in this scope
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port_);
^
src/esphome/core/log.h:97:90: note: in definition of macro 'esph_log_config'
esp_log_printf_(ESPHOME_LOG_LEVEL_CONFIG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
^
src/esphome/components/stream_server/stream_server.cpp:75:5: note: in expansion of macro 'ESP_LOGCONFIG'
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port_);
^
src/stream_server.cpp: In member function 'void StreamServerComponent::read()':
src/stream_server.cpp:60:65: error: 'min' was not declared in this scope
size_t read = this->stream_->readBytes(buf, min(len, 128));
^
src/stream_server.cpp:60:65: note: suggested alternative:
In file included from /data/cache/platformio/packages/toolchain-xtensa32/xtensa-esp32-elf/include/c++/5.2.0/algorithm:62:0,
from src/esphome/core/optional.h:19,
from src/esphome/core/component.h:7,
from src/stream_server.h:19,
from src/stream_server.cpp:18:
/data/cache/platformio/packages/toolchain-xtensa32/xtensa-esp32-elf/include/c++/5.2.0/bits/stl_algo.h:3451:5: note: 'std::min'
min(initializer_list<_Tp> __l, _Compare __comp)
^
In file included from src/stream_server.cpp:20:0:
src/stream_server.cpp: In member function 'virtual void StreamServerComponent::dump_config()':
src/stream_server.cpp:76:64: error: 'network_get_address' was not declared in this scope
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port_);
^
src/esphome/core/log.h:97:90: note: in definition of macro 'esph_log_config'
esp_log_printf_(ESPHOME_LOG_LEVEL_CONFIG, tag, __LINE__, ESPHOME_LOG_FORMAT(format), ##__VA_ARGS__)
^
src/stream_server.cpp:76:5: note: in expansion of macro 'ESP_LOGCONFIG'
ESP_LOGCONFIG(TAG, " Address: %s:%u", network_get_address().c_str(), this->port_);
^
Archiving /data/serial-over-ip/.pioenvs/serial-over-ip/lib915/libESPmDNS.a
Compiling /data/serial-over-ip/.pioenvs/serial-over-ip/FrameworkArduino/FunctionalInterrupt.cpp.o
*** [/data/serial-over-ip/.pioenvs/serial-over-ip/src/esphome/components/stream_server/stream_server.cpp.o] Error 1
Compiling /data/serial-over-ip/.pioenvs/serial-over-ip/FrameworkArduino/HardwareSerial.cpp.o
*** [/data/serial-over-ip/.pioenvs/serial-over-ip/src/stream_server.cpp.o] Error 1
In file included from src/esphome.h:37:0,
from src/main.cpp:3:
src/esphome/components/stream_server/stream_server.h: In member function 'void StreamServerComponent::set_uart_parent(esphome::uart::UARTComponent*)':
src/esphome/components/stream_server/stream_server.h:37:80: error: cannot convert 'esphome::uart::UARTComponent*' to 'Stream*' in assignment
void set_uart_parent(esphome::uart::UARTComponent *parent) { this->stream_ = parent; }
^
*** [/data/serial-over-ip/.pioenvs/serial-over-ip/src/main.cpp.o] Error 1
========================== [FAILED] Took 6.41 seconds ==========================
Good day gentlemen,
I'm having a blocking issue with the latest ESPHome and latest version of the stream-server. All was working good and stable with my initial setup I did an year ago (spring of 2022). I upgraded the other day my HomeAssistant (2023.3.1) with latest ESPHome 2023.2.4 and the issue popped-up. Hence, I am attributing it to the version of ESPHome framework and the stream-server component.
My use case is: ADSB receiver decoding airplane positions and providing data as uart stream (one direction Tx only) at 921600 bps. The UART is hardwired to GPIO1 and 3 on ESP8266 (nodemcuv2) and oxan/esphome-stream-server serving the data as TCP stream. Then I have a client app READSB connecting to ESP over WiFi and taking the data for further processing. HomeAssistant has nothing to do with the stream-server, I just use ESPhome framework as a handy tool for programming the ESP.
The issue:
I observe a lot of garbage in the stream, which does not come from the ADSB receiver uart, but definitely comes from the esp8266 memory. The garbage is predominantly full of zeros but it has fragments of SSID list of nearby WiFi networks (heard by the ESP).
I suspect something's wrong with the buffer handling. The issue is directly related to the amount of data coming from the UART. When there is no data or small amount of data - everything is OK (clean TCP stream), but when the UART data is huge the garbage is very pronounced leading to impossibility to further processing. The other observation is that when I increase the UART rx_buffer_size from the default 256 to 512 or 1024 the TCP stream is almost full of garbage and when I decrease it to 64 it gets almost clean, but lots of incoming data gets dropped (so not usable either).
The other observation is: I reboot the ESP, connect to the TCP stream and the stream is clean. Then I disconnect and reconnect and the stream is immediately garbled.
Oxan, Joshua, Bojan, can you help me investigate the issue and diagnose it, please?
Here is my config:
ADSB.txt
And here is a capture of the TCP stream.
capture.txt
Lines 1-6 are normal ADSB messages.
Lines 7-18 are garbage.
Lines 19-22 are normal ADSB messages.
I am available to provide further information or give you access to my system for live investigation.
Thank you in advance,
Kiril
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.