Алексей
в логах он есть
Yuriy
https://esphome.io/api/structesphome_1_1ethernet_1_1_manual_i_p.html
Yuriy
Yuriy
но это для назначения блин
Алексей
да
Алексей
с отображением не робит
Алексей
возвращает неправильный метод при указании IPAddress
Yuriy
возвращает неправильный метод при указании IPAddress
это структуру надо саму заполнять - она для этого - как параметр используется
romanetz
Ну вон же в фотке есть правильная строка
romanetz
Откуда в лог берётся
romanetz
Yuriy
Откуда в лог берётся
так она вне контекста (скопирована) - там нет ip - в том месте Вот надо посмотреть откуда - и там посмотреть где заполняется ip
romanetz
Вон он выше берётся
romanetz
Структура объявляется, метод дёргается и её заполняет
romanetz
А потом её в лог красивенько запихивают
Алексей
it.printf(0, 26, id(my_font), id(the_ethernet).IPAddress(ip.gw.addr).toString().c_str());
Yuriy
it.printf(0, 26, id(my_font), id(the_ethernet).IPAddress(ip.gw.addr).toString().c_str());
выше 3,4 строки на скрине tcpip_adapter...
Yuriy
[вставить сюда 3 и 4 строку со скрина] + it.printf(0, 26, id(my_font),"Gateway: %s", IPAddress(ip.gw.addr).toString().c_str());
Yuriy
Алексей
о скомпилилось без ошибок
Алексей
большое спасибо
Алексей
ща залью проверю
Resident
Вам нужны выходы или входы?
Уже работает как выходы как вы выразились
Resident
Всё на реле ушло, вся настройка через веб
Resident
Кому если вдруг либо под tca9539 надо скину реп свой ибо рабочей не нашлось и пришлось децл допиливать
Алексей
[вставить сюда 3 и 4 строку со скрина] + it.printf(0, 26, id(my_font),"Gateway: %s", IPAddress(ip.gw.addr).toString().c_str());
залил робит. теперь загвоздка получить full duplex инфу. пробую: it.printf(0, 53, id(my_font), "Is Full Duplex: %s", YESNO(this->eth_config.phy_get_duplex_mode())); возвращает: src/main.cpp:181:61: error: 'this' was not captured for this lambda function
Алексей
нашел в том методе EthernetComponent::EthernetComponent() { global_eth_component = this; }
Алексей
пробовал ставить перед вызовом тоже ошибку возвращает
romanetz
Вспомнил.88 подсеть микротик же раздаёт
Алексей
да
Алексей
ну это для теста пока дома
romanetz
This - указатель на ЭТОТ экземпляр
romanetz
Он, есс-но, внутри класса будет применяться только
romanetz
Если методы объекта дёргаешь, возьми указатель на него или сам объект
romanetz
И вызови метод объекта через точку(object.method()) или object_ptr-> method ()
romanetz
this-> убери там совсем
Алексей
it.printf(0, 53, id(my_font), "Is Full Duplex: %s", YESNO(eth_config.phy_get_duplex_mode()));
Алексей
попробовать так?
romanetz
it.printf(0, 53, id(my_font), "Is Full Duplex: %s", YESNO(eth_config.phy_get_duplex_mode()));
Yuriy
This - указатель на ЭТОТ экземпляр
немаловажно что при этом внутри "этого" надо находится - а не "того" :)
Алексей
хорошо спасибо сейчас попробую
romanetz
Ну я просто хз, чё такое eth_config
Yuriy
Ну да, это ссылка на самого себя
да я не тебе (уверен у тебя с этим норм всё) просто Алексей мог не правильно понять - донести до него, что копировать и вставлять не сработает
Алексей
src/main.cpp:181:61: error: 'eth_config' was not declared in this scope
romanetz
если рассматривать плюсы как надстройку к си, очень логично и доходчиво получается
Алексей
в том файле который скидывал eth_config неопределён
romanetz
Алексей
сейчас еще раз поищу
Yuriy
сейчас еще раз поищу
какая IDE? можно поставить нормальную и мышкой клик клик- готово - и где и откуда и сколько раз вызвался кем видно
romanetz
Указатель на что-то, или как extern объявить...
Yuriy
покажи конфиг yaml - ту часть где пишешь - secrets не надо :) ты лямбду пишешь? тогда в нее надо захватить объект - даже если он глобальная переменная - что может быть
Resident
Алексей
Алексей
у меня там никаких секретов нет :D
Yuriy
tcpip_adapter_ip_info_t ip; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_ETH, &ip); ESP_LOGCONFIG(TAG, " IP Address: %s", IPAddress(ip.ip.addr).toString().c_str()); ESP_LOGCONFIG(TAG, " Hostname: '%s'", App.get_name().c_str()); ESP_LOGCONFIG(TAG, " Subnet: %s", IPAddress(ip.netmask.addr).toString().c_str()); ESP_LOGCONFIG(TAG, " Gateway: %s", IPAddress(ip.gw.addr).toString().c_str()); ip_addr_t dns_ip = dns_getserver(0); ESP_LOGCONFIG(TAG, " DNS1: %s", IPAddress(dns_ip.u_addr.ip4.addr).toString().c_str()); dns_ip = dns_getserver(1); ESP_LOGCONFIG(TAG, " DNS2: %s", IPAddress(dns_ip.u_addr.ip4.addr).toString().c_str()); uint8_t mac[6]; esp_eth_get_mac(mac); ESP_LOGCONFIG(TAG, " MAC Address: %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); ESP_LOGCONFIG(TAG, " Is Full Duplex: %s", YESNO(this->eth_config.phy_get_duplex_mode())); ESP_LOGCONFIG(TAG, " Link Up: %s", YESNO(this->eth_config.phy_check_link())); ESP_LOGCONFIG(TAG, " Link Speed: %u", this->eth_config.phy_get_speed_mode() ? 100 : 10); } void EthernetComponent::set_phy_addr(uint8_t phy_addr) { this->phy_addr_ = phy_addr; } void EthernetComponent::set_power_pin(GPIOPin *power_pin) { this->power_pin_ = power_pin; } void EthernetComponent::set_mdc_pin(uint8_t mdc_pin) { this->mdc_pin_ = mdc_pin; } void EthernetComponent::set_mdio_pin(uint8_t mdio_pin) { this->mdio_pin_ = mdio_pin; } void EthernetComponent::set_type(EthernetType type) { this->type_ = type; } void EthernetComponent::set_clk_mode(eth_clock_mode_t clk_mode) { this->clk_mode_ = clk_mode; } void EthernetComponent::set_manual_ip(ManualIP manual_ip) { this->manual_ip_ = manual_ip; } std::string EthernetComponent::get_use_address() const { if (this->use_address_.empty()) { return App.get_name() + ".local"; } return this->use_address_; }
Yuriy
бери отсюда - сейчас напишу момент - проверю
romanetz
Какой адский микс этот yaml
Алексей
tcpip_adapter_ip_info_t ip; tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_ETH, &ip); ESP_LOGCONFIG(TAG, " IP Address: %s", IPAddress(ip.ip.addr).toString().c_str()); ESP_LOGCONFIG(TAG, " Hostname: '%s'", App.get_name().c_str()); ESP_LOGCONFIG(TAG, " Subnet: %s", IPAddress(ip.netmask.addr).toString().c_str()); ESP_LOGCONFIG(TAG, " Gateway: %s", IPAddress(ip.gw.addr).toString().c_str()); ip_addr_t dns_ip = dns_getserver(0); ESP_LOGCONFIG(TAG, " DNS1: %s", IPAddress(dns_ip.u_addr.ip4.addr).toString().c_str()); dns_ip = dns_getserver(1); ESP_LOGCONFIG(TAG, " DNS2: %s", IPAddress(dns_ip.u_addr.ip4.addr).toString().c_str()); uint8_t mac[6]; esp_eth_get_mac(mac); ESP_LOGCONFIG(TAG, " MAC Address: %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); ESP_LOGCONFIG(TAG, " Is Full Duplex: %s", YESNO(this->eth_config.phy_get_duplex_mode())); ESP_LOGCONFIG(TAG, " Link Up: %s", YESNO(this->eth_config.phy_check_link())); ESP_LOGCONFIG(TAG, " Link Speed: %u", this->eth_config.phy_get_speed_mode() ? 100 : 10); } void EthernetComponent::set_phy_addr(uint8_t phy_addr) { this->phy_addr_ = phy_addr; } void EthernetComponent::set_power_pin(GPIOPin *power_pin) { this->power_pin_ = power_pin; } void EthernetComponent::set_mdc_pin(uint8_t mdc_pin) { this->mdc_pin_ = mdc_pin; } void EthernetComponent::set_mdio_pin(uint8_t mdio_pin) { this->mdio_pin_ = mdio_pin; } void EthernetComponent::set_type(EthernetType type) { this->type_ = type; } void EthernetComponent::set_clk_mode(eth_clock_mode_t clk_mode) { this->clk_mode_ = clk_mode; } void EthernetComponent::set_manual_ip(ManualIP manual_ip) { this->manual_ip_ = manual_ip; } std::string EthernetComponent::get_use_address() const { if (this->use_address_.empty()) { return App.get_name() + ".local"; } return this->use_address_; }
хм отсюда и брал
Yuriy
я правильно понял что ты хочешь вывести их на дисплей?
Алексей
мне осталось вывести только два значения, full duplex и link speed
Yuriy
походу не получить их от туда - готовыми - protected , он их получает при инициализации как ответ и хранит в себе -а свойств методов public нет получить err = esp_eth_init(&this->eth_config); if (err != ESP_OK) { ESP_LOGE(TAG, "ETH init error: %d", err); this->mark_failed(); return; можно запросить повторно https://docs.espressif.com/projects/esp-idf/en/release-v3.1/api-reference/ethernet/esp_eth.html
Dmitriy
Народ, спрошу кощунственную вещь, но все же. Кто-нибудь пробовал на esp MQTT _*брокер*_ поднимать?
Yuriy
это все что он может
Алексей
typedef eth_duplex_mode_t (*eth_phy_get_duplex_mode_func)(void)
Алексей
это не оно?
Yuriy
нет это объявляеть тип указатель на функцию
Алексей
ок
Yuriy
public - доступ к ним есть, protected, private - не получишь от туда dump_config() - по хорошему бы , но он захардкоден в лог