1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-01 23:51:47 +00:00

Compare commits

...

13 Commits

Author SHA1 Message Date
Jesse Hills
6c132be24c Merge branch 'dev' into jesserockz-2023-232 2024-09-13 08:51:46 +12:00
Paulus Schoutsen
323c641ecd Update codeql.yml 2024-09-12 00:09:25 -04:00
Paulus Schoutsen
6207510279 Update codeql.yml 2024-09-12 00:05:40 -04:00
Paulus Schoutsen
95a340d7a3 Update codeql.yml 2024-09-12 00:04:25 -04:00
Paulus Schoutsen
6f9e725a2c Update codeql.yml 2024-09-11 23:58:57 -04:00
Paulus Schoutsen
43f6793ad9 Create codeql.yml 2024-09-11 23:58:15 -04:00
Jesse Hills
cb7b4d9365 [voice-assistant] Dont error on `no_wake_word` timeout error with streaming wake word (#7435) 2024-09-11 21:08:41 -05:00
Jesse Hills
af1a909c27 Merge branch 'beta' into dev 2024-09-11 20:53:32 +12:00
Jesse Hills
664b219387 Bump version to 2024.10.0-dev 2024-09-11 17:37:41 +12:00
Jesse Hills
08480d24f0 Update esphome/components/wled/wled_light_effect.cpp 2023-12-20 09:52:36 +09:00
Jesse Hills
41eb178f5a Merge branch 'dev' into jesserockz-2023-232 2023-12-20 09:50:43 +09:00
Jesse Hills
d7b0060265 Merge branch 'dev' into jesserockz-2023-232 2023-09-21 10:27:33 +12:00
Jesse Hills
e07f9a5b9c Convert wled light effect to use socket instead of WiFiUDP 2023-06-19 13:40:46 +12:00
6 changed files with 138 additions and 41 deletions

91
.github/workflows/codeql.yml vendored Normal file
View File

@@ -0,0 +1,91 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL Advanced"
on:
workflow_dispatch:
schedule:
- cron: "30 18 * * 4"
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
# - language: c-cpp
# build-mode: autobuild
- language: python
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"

View File

@@ -755,7 +755,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
message = std::move(arg.value);
}
}
if (code == "wake-word-timeout" || code == "wake_word_detection_aborted") {
if (code == "wake-word-timeout" || code == "wake_word_detection_aborted" || code == "no_wake_word") {
// Don't change state here since either the "tts-end" or "run-end" events will do it.
return;
} else if (code == "wake-provider-missing" || code == "wake-engine-missing") {

View File

@@ -7,7 +7,9 @@ from esphome.const import CONF_NAME, CONF_PORT
wled_ns = cg.esphome_ns.namespace("wled")
WLEDLightEffect = wled_ns.class_("WLEDLightEffect", AddressableLightEffect)
CONFIG_SCHEMA = cv.All(cv.Schema({}), cv.only_with_arduino)
AUTO_LOAD = ["socket"]
CONFIG_SCHEMA = cv.Schema({})
CONF_SYNC_GROUP_MASK = "sync_group_mask"
CONF_BLANK_ON_START = "blank_on_start"

View File

@@ -1,17 +1,7 @@
#ifdef USE_ARDUINO
#include "wled_light_effect.h"
#include "esphome/core/log.h"
#include "esphome/core/helpers.h"
#ifdef USE_ESP32
#include <WiFi.h>
#endif
#ifdef USE_ESP8266
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#endif
#include "esphome/core/log.h"
#ifdef USE_BK72XX
#include <WiFiUdp.h>
@@ -43,9 +33,9 @@ void WLEDLightEffect::start() {
void WLEDLightEffect::stop() {
AddressableLightEffect::stop();
if (udp_) {
udp_->stop();
udp_.reset();
if (this->socket_) {
this->socket_->close();
this->socket_.reset();
}
}
@@ -58,27 +48,48 @@ void WLEDLightEffect::blank_all_leds_(light::AddressableLight &it) {
void WLEDLightEffect::apply(light::AddressableLight &it, const Color &current_color) {
// Init UDP lazily
if (!udp_) {
udp_ = make_unique<WiFiUDP>();
if (this->socket_ == nullptr) {
this->socket_ = socket::socket_ip(SOCK_DGRAM, IPPROTO_IP);
if (!udp_->begin(port_)) {
ESP_LOGW(TAG, "Cannot bind WLEDLightEffect to %d.", port_);
int enable = 1;
int err = this->socket_->setsockopt(SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int));
if (err != 0) {
ESP_LOGW(TAG, "Socket unable to set reuseaddr: errno %d", err);
// we can still continue
}
err = this->socket_->setblocking(false);
if (err != 0) {
ESP_LOGW(TAG, "Socket unable to set nonblocking mode: errno %d", err);
return;
}
struct sockaddr_storage server;
socklen_t sl = socket::set_sockaddr_any((struct sockaddr *) &server, sizeof(server), this->port_);
if (sl == 0) {
ESP_LOGW(TAG, "Socket unable to set sockaddr: errno %d", errno);
return;
}
err = this->socket_->bind((struct sockaddr *) &server, sizeof(server));
if (err != 0) {
ESP_LOGW(TAG, "Socket unable to bind: errno %d", errno);
return;
}
}
std::vector<uint8_t> payload;
while (uint16_t packet_size = udp_->parsePacket()) {
payload.resize(packet_size);
uint8_t buf[1460];
if (!udp_->read(&payload[0], payload.size())) {
continue;
}
ssize_t len = this->socket_->read(buf, sizeof(buf));
if (len == -1) {
return;
}
payload.resize(len);
memmove(&payload[0], buf, len);
if (!this->parse_frame_(it, &payload[0], payload.size())) {
ESP_LOGD(TAG, "Frame: Invalid (size=%zu, first=0x%02X).", payload.size(), payload[0]);
continue;
}
if (!this->parse_frame_(it, &payload[0], payload.size())) {
ESP_LOGD(TAG, "Frame: Invalid (size=%zu, first=0x%02X).", payload.size(), payload[0]);
}
// FIXME: Use roll-over safe arithmetic
@@ -283,5 +294,3 @@ bool WLEDLightEffect::parse_dnrgb_frame_(light::AddressableLight &it, const uint
} // namespace wled
} // namespace esphome
#endif // USE_ARDUINO

View File

@@ -1,15 +1,12 @@
#pragma once
#ifdef USE_ARDUINO
#include "esphome/core/component.h"
#include "esphome/components/light/addressable_light_effect.h"
#include "esphome/components/socket/socket.h"
#include "esphome/core/component.h"
#include <vector>
#include <memory>
class UDP;
namespace esphome {
namespace wled {
@@ -34,7 +31,7 @@ class WLEDLightEffect : public light::AddressableLightEffect {
bool parse_dnrgb_frame_(light::AddressableLight &it, const uint8_t *payload, uint16_t size);
uint16_t port_{0};
std::unique_ptr<UDP> udp_;
std::unique_ptr<socket::Socket> socket_;
uint32_t blank_at_{0};
uint32_t dropped_{0};
uint8_t sync_group_mask_{0};
@@ -43,5 +40,3 @@ class WLEDLightEffect : public light::AddressableLightEffect {
} // namespace wled
} // namespace esphome
#endif // USE_ARDUINO

View File

@@ -1,6 +1,6 @@
"""Constants used by esphome."""
__version__ = "2024.9.0b1"
__version__ = "2024.10.0-dev"
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
VALID_SUBSTITUTIONS_CHARACTERS = (