Servus
Ich habe genau das gerade hinter mir:
Aufgabe: Original Fernbedienung in HA/ESPHome einlernen um die Befehle dann später per HA Button wieder zu senden.
Wie beschrieben war es kein Honiglecken und gespickt mit Fallstricken. Ohne ständige Kontrolle der Protokolls per Oszilloscope hätte ich es nie geschafft.
Hier mein ESPHome code als Referenz: Die gesendeten Daten und das Timing wird bei dir natürlich nicht passen, aber evtl. hilft es dir als Ausgangsbasis
esphome:
name: esp-dachfenster
friendly_name: ESP_Dachfenster
esp32:
board: esp32dev
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "123"
ota:
- platform: esphome
password: "123"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 10.0.0.157
gateway: 10.0.0.138
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp-Dachfenster Fallback Hotspot"
password: "123"
captive_portal:
script:
- id: sende_raw_paket
mode: parallel
parameters:
bits: string # Das Skript erwartet jetzt nur noch den 41-Bit Text!
then:
- remote_transmitter.transmit_raw:
carrier_frequency: 38kHz
code: !lambda |-
std::vector<long int> raw_signal;
for (int i = 0; i < 10; i++) {
raw_signal.push_back(1650); raw_signal.push_back(-350);
size_t bit_index = 0;
for (char b : bits) {
bit_index++;
bool is_last_bit = (bit_index == bits.length());
if (b == '1') {
raw_signal.push_back(705); raw_signal.push_back(is_last_bit ? -705 : -305);
} else if (b == '0') {
raw_signal.push_back(305); raw_signal.push_back(-705);
}
}
raw_signal.push_back(5000); raw_signal.push_back(-2500);
}
return raw_signal;
spi:
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
cc1101:
id: my_cc1101
cs_pin: GPIO05
frequency: 433.92MHz
remote_receiver:
pin: GPIO02
tolerance: 50%
filter: 250us
idle: 60ms
buffer_size: 10kb # Drastisch erhöht von der Standardgröße (erlaubt riesige Telegramme)
dump:
- rc_switch
remote_transmitter:
pin: GPIO04
carrier_duty_percent: 100%
on_transmit:
then:
- cc1101.begin_tx
on_complete:
then:
- cc1101.begin_rx
button:
- platform: template
name: "Dachfenster Rechts Auf"
icon: "mdi:window-maximize"
on_press:
- script.execute:
id: sende_raw_paket
bits: "10010111111010101000100010000000111101011"
- platform: template
name: "Dachfenster Rechts Stop"
icon: "mdi:window-maximize"
on_press:
- script.execute:
id: sende_raw_paket
bits: "10010111111010101000101010000000111101101"
- platform: template
name: "Dachfenster Rechts Zu"
icon: "mdi:window-maximize"
on_press:
- script.execute:
id: sende_raw_paket
bits: "10010111111010101000001110000000111111111"