• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266.Проблема с написанием Telegram бота

Nikitoz

New member
Добрый день, господа!Пожалуйста , помогите пофиксить код:стабильно ловлю ошибку при написании скрипта в Micropython:

Traceback (most recent call last):
File "<stdin>", line 50, in <module>
File "<stdin>", line 39, in send_telegram_message
OSError: -40

>>>

Вот сам код:

Python:
import network
import usocket as socket
import ussl

# Настройка параметров Wi-Fi
WIFI_SSID = "WiFi_name"
WIFI_PASSWORD = "myWifiPas"

# Подключение к Wi-Fi
def connect_to_wifi(ssid, password):
    sta_if = network.WLAN(network.STA_IF)
    if not sta_if.isconnected():
        print("Подключение к Wi-Fi...")
        sta_if.active(True)
        sta_if.connect(ssid, password)
        while not sta_if.isconnected():
            pass
    print("Подключено к Wi-Fi")
    print("IP адрес:", sta_if.ifconfig()[0])

# Вызов функции для подключения к Wi-Fi
connect_to_wifi(WIFI_SSID, WIFI_PASSWORD)

bot_token = "MyToken"
chat_id = "mychatID"
message_text = "Привет от ESP8266!"

def send_telegram_message(bot_token, chat_id, text):
    host = "api.telegram.org"
    port = 443  # HTTPS порт
    url = "/bot{}/sendMessage".format(bot_token)
    message = "chat_id={}&text={}".format(chat_id, text)
    content_length = len(message)
    
    sock = socket.socket()
    addr = socket.getaddrinfo(host, port)[0][-1]
    sock.connect(addr)
    
    ssl_sock = ussl.wrap_socket(sock)
    
    request = "POST {} HTTP/1.1\r\nHost: {}\r\nContent-Length: {}\r\n\r\n{}".format(url, host, content_length, message)
    ssl_sock.write(request)
    
    response = ssl_sock.read(4096)
    print(response)
    
    ssl_sock.close()
    sock.close()

send_telegram_message(bot_token, chat_id, message_text)
 

fps

Active member
Не будет это нормально работать на 8266

На esp32 или esp32с3 без проблем
С использованием штатной библиотеки requests код получится еще проще:

Python:
import requests

def send_telegram_message(bot_token, chat_id, text):
    api_url = f"https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text={text}"
    return requests.get(api_url)
 

Nikitoz

New member
Не видно, чтобы использовались сертификаты для соединения по https
Кто то уже получал такую ошибку
https://stackoverflow.com/questions/74718313/https-get-request-with-micropython-on-a-esp8266-failing
На С есть рабочие библиотеки.
На с все завелось без проблем я хочу сделать как здесь кнопку APP который открывает сайт внутри телеги без перехода в браузер
 

Вложения

Сверху Снизу