mirror of
https://github.com/esphome/esphome.git
synced 2024-12-25 15:04:54 +01:00
CMUX disabled by default
This commit is contained in:
parent
90ec353d85
commit
71725ab4c4
4 changed files with 31 additions and 10 deletions
|
@ -1,3 +1,5 @@
|
|||
import logging
|
||||
|
||||
from esphome.const import (
|
||||
CONF_ID,
|
||||
CONF_USE_ADDRESS,
|
||||
|
@ -17,9 +19,11 @@ from esphome.core import coroutine_with_priority
|
|||
from esphome.components.esp32 import add_idf_component, add_idf_sdkconfig_option
|
||||
from esphome import pins, automation
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
CODEOWNERS = ["@oarcher"]
|
||||
DEPENDENCIES = ["esp32"]
|
||||
AUTO_LOAD = ["network", "binary_sensor", "gpio"]
|
||||
AUTO_LOAD = ["network"]
|
||||
# following should be removed if conflicts are resolved (so we can have a wifi ap using modem)
|
||||
CONFLICTS_WITH = ["wifi", "captive_portal", "ethernet"]
|
||||
|
||||
|
@ -30,6 +34,7 @@ CONF_STATUS_PIN = "status_pin"
|
|||
CONF_POWER_PIN = "power_pin"
|
||||
CONF_INIT_AT = "init_at"
|
||||
CONF_ON_NOT_RESPONDING = "on_not_responding"
|
||||
CONF_ENABLE_CMUX = "enable_cmux"
|
||||
|
||||
MODEM_MODELS = ["BG96", "SIM800", "SIM7000", "SIM7600", "GENERIC"]
|
||||
MODEM_MODELS_POWER = {
|
||||
|
@ -70,6 +75,7 @@ CONFIG_SCHEMA = cv.All(
|
|||
cv.Optional(CONF_USE_ADDRESS): cv.string,
|
||||
cv.Optional(CONF_INIT_AT): cv.All(cv.ensure_list(cv.string)),
|
||||
cv.Optional(CONF_ENABLE_ON_BOOT, default=True): cv.boolean,
|
||||
cv.Optional(CONF_ENABLE_CMUX, default=False): cv.boolean,
|
||||
cv.Optional(CONF_ON_NOT_RESPONDING): automation.validate_automation(
|
||||
{
|
||||
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
||||
|
@ -100,6 +106,12 @@ def _final_validate(config):
|
|||
# raise cv.Invalid(
|
||||
# f"'{CONF_STATUS_PIN}' must be declared if using '{CONF_POWER_PIN}'"
|
||||
# )
|
||||
if config.get(CONF_STATUS_PIN, None):
|
||||
_LOGGER.warning("Using '%s' is experimental", CONF_STATUS_PIN)
|
||||
if config[CONF_ENABLE_CMUX]:
|
||||
_LOGGER.warning("Using '%s: True' is experimental", CONF_ENABLE_CMUX)
|
||||
if not config[CONF_ENABLE_ON_BOOT]:
|
||||
_LOGGER.warning("Using '%s: False' is experimental", CONF_ENABLE_ON_BOOT)
|
||||
if config.get(CONF_POWER_PIN, None):
|
||||
if config[CONF_MODEL] not in MODEM_MODELS_POWER:
|
||||
raise cv.Invalid(
|
||||
|
@ -114,8 +126,8 @@ FINAL_VALIDATE_SCHEMA = _final_validate
|
|||
async def to_code(config):
|
||||
add_idf_component(
|
||||
name="esp_modem",
|
||||
repo="https://github.com/oarcher/esp-protocols.git",
|
||||
ref="dev",
|
||||
repo="https://github.com/espressif/esp-protocols.git",
|
||||
ref="modem-v1.1.0",
|
||||
path="components/esp_modem",
|
||||
)
|
||||
|
||||
|
@ -124,18 +136,23 @@ async def to_code(config):
|
|||
add_idf_sdkconfig_option("CONFIG_LWIP_PPP_SUPPORT", True)
|
||||
add_idf_sdkconfig_option("CONFIG_PPP_PAP_SUPPORT", True)
|
||||
add_idf_sdkconfig_option("CONFIG_LWIP_PPP_PAP_SUPPORT", True)
|
||||
add_idf_sdkconfig_option("CONFIG_ESP_MODEM_CMUX_DEFRAGMENT_PAYLOAD", True)
|
||||
# ("ESP_MODEM_CMUX_USE_SHORT_PAYLOADS_ONLY", True)
|
||||
add_idf_sdkconfig_option("CONFIG_ESP_MODEM_CMUX_DELAY_AFTER_DLCI_SETUP", 0)
|
||||
add_idf_sdkconfig_option("CONFIG_PPP_SUPPORT", True)
|
||||
add_idf_sdkconfig_option("CONFIG_PPP_NOTIFY_PHASE_SUPPORT", True)
|
||||
add_idf_sdkconfig_option("CONFIG_PPP_CHAP_SUPPORT", True)
|
||||
add_idf_sdkconfig_option("CONFIG_LWIP_PPP_VJ_HEADER_COMPRESSION", True)
|
||||
add_idf_sdkconfig_option("CONFIG_LWIP_PPP_NOTIFY_PHASE_SUPPORT", True)
|
||||
|
||||
# commented because cause crash if another UART is defined in the yaml
|
||||
# If enabled, it should increase the reliability and the speed of the connection (TODO: test)
|
||||
# add_idf_sdkconfig_option("CONFIG_UART_ISR_IN_IRAM", True)
|
||||
|
||||
# If Uart queue full message ( A7672 ), those config option might be changed
|
||||
# https://github.com/espressif/esp-protocols/issues/272#issuecomment-1558682967
|
||||
add_idf_sdkconfig_option("CONFIG_ESP_MODEM_CMUX_DEFRAGMENT_PAYLOAD", True)
|
||||
add_idf_sdkconfig_option("ESP_MODEM_USE_INFLATABLE_BUFFER_IF_NEEDED", False)
|
||||
add_idf_sdkconfig_option("ESP_MODEM_CMUX_USE_SHORT_PAYLOADS_ONLY", False)
|
||||
|
||||
cg.add_define("USE_MODEM")
|
||||
|
||||
var = cg.new_Pvariable(config[CONF_ID])
|
||||
|
@ -151,9 +168,11 @@ async def to_code(config):
|
|||
if pin_code := config.get(CONF_PIN_CODE, None):
|
||||
cg.add(var.set_pin_code(pin_code))
|
||||
|
||||
if enable_on_boot := config.get(CONF_ENABLE_ON_BOOT, None):
|
||||
if enable_on_boot:
|
||||
cg.add(var.enable())
|
||||
if config[CONF_ENABLE_ON_BOOT]:
|
||||
cg.add(var.enable())
|
||||
|
||||
if config[CONF_ENABLE_CMUX]:
|
||||
cg.add(var.enable_cmux())
|
||||
|
||||
if init_at := config.get(CONF_INIT_AT, None):
|
||||
for cmd in init_at:
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#include "esphome/core/application.h"
|
||||
#include "esphome/core/defines.h"
|
||||
#include "esphome/components/network/util.h"
|
||||
// #include "esphome/components/gpio/binary_sensor/gpio_binary_sensor.h"
|
||||
|
||||
#include <esp_netif.h>
|
||||
#include <esp_netif_ppp.h>
|
||||
|
@ -112,6 +111,7 @@ void ModemComponent::setup() {
|
|||
ESP_LOGCONFIG(TAG, " Status pin: Not defined");
|
||||
}
|
||||
ESP_LOGCONFIG(TAG, " Enabled : %s", this->enabled_ ? "Yes" : "No");
|
||||
ESP_LOGCONFIG(TAG, " Use CMUX : %s", this->cmux_ ? "Yes" : "No");
|
||||
|
||||
ESP_LOGV(TAG, "PPP netif setup");
|
||||
esp_err_t err;
|
||||
|
@ -272,7 +272,7 @@ void ModemComponent::start_connect_() {
|
|||
ESP_LOGD(TAG, "Modem has correctly entered multiplexed command/data mode");
|
||||
|
||||
} else {
|
||||
ESP_LOGD(TAG, "Unable to enter CMUX mode");
|
||||
ESP_LOGE(TAG, "Unable to enter CMUX mode");
|
||||
this->status_set_error("Unable to enter CMUX mode");
|
||||
}
|
||||
assert(this->modem_ready());
|
||||
|
|
|
@ -60,6 +60,7 @@ class ModemComponent : public Component {
|
|||
void set_pin_code(const std::string &pin_code) { this->pin_code_ = pin_code; }
|
||||
void set_apn(const std::string &apn) { this->apn_ = apn; }
|
||||
void set_not_responding_cb(Trigger<> *not_responding_cb) { this->not_responding_cb_ = not_responding_cb; }
|
||||
void enable_cmux() { this->cmux_ = true; }
|
||||
void add_init_at_command(const std::string &cmd) { this->init_at_commands_.push_back(cmd); }
|
||||
std::string send_at(const std::string &cmd);
|
||||
bool get_imei(std::string &result);
|
||||
|
|
|
@ -12,6 +12,7 @@ modem:
|
|||
apn: orange
|
||||
pin_code: "0000"
|
||||
enable_on_boot: True
|
||||
enable_cmux: False
|
||||
init_at:
|
||||
- AT
|
||||
on_not_responding:
|
||||
|
|
Loading…
Reference in a new issue