ESPHome externe Komponente, Anfängerfragen

Hallo,

ich habe mich nun entschieden die Rolladensteuerung in ESPHome zu machen.
Dafür nutze ich einen KC868-A16.
Die eigentliche Steuerung soll in einer eigenen Klasse / Komponente laufen.

Zum Entwickeln habe ich mir eine kleine, kurze yaml erstellt.

esphome:
  name: roller-shutter-1
  friendly_name: Roller_Shutter_1

esp32:
  board: esp32dev
  framework:
    type: esp-idf

api:
  encryption:
    key: !secret encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

ethernet:
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk_mode: GPIO17_OUT
  phy_addr: 0
  manual_ip:
    static_ip: !secret ip_rl_1
    gateway: !secret ip_dateway
    subnet: 255.255.255.0

i2c:
  sda: GPIO4
  scl:
    number: GPIO5
    ignore_strapping_warning: true

pcf8574:
  - id: inputs_1_8
    address: 0x22
    pcf8575: false

binary_sensor:
  - platform: gpio
    name: "RL_HAR_I_U"
    id: in_har_u
    pin:
      pcf8574: inputs_1_8
      number: 0
      mode: INPUT
      inverted: true

  - platform: gpio
    name: "RL_HAR_I_D"
    id: in_har_d
    pin:
      pcf8574: inputs_1_8
      number: 1
      mode: INPUT
      inverted: true

switch:
  - platform: gpio
    name: "RL_HAR_O_U"
    id: out_har_u
    pin:
      pcf8574: outputs_1_8
      number: 0
      mode: OUTPUT
      inverted: true

  - platform: gpio
    name: "RL_HAR_O_D"
    id: out_har_d
    pin:
      pcf8574: outputs_1_8
      number: 1
      mode: OUTPUT
      inverted: true

rstimes:
  - id: TIME_NORMAL
    milisecondsup: 20000
    milisecondsdown: 20000
    milisecondsgap: 14000

  - id: TIME_BIGWINDOW
    milisecondsup: 27000
    milisecondsdown: 27000
    milisecondsgap: 17000

  - id: TIME_BIGDOOR
    milisecondsup: 30000
    milisecondsdown: 27000
    milisecondsgap: 11000

rsgroups:
  - id: HOUSE_SOUTH
    name: Haus-Sued
    sundowner:
      monthfrom: 5
      monthto: 9
      gaphour: 8
      gapminute: 0
      uphour: 15
      upminute: 45      

rshutters:
  - id: rs_har
    name: Hausanschlussraum
    rsgroup_id: HOUSE_SOUTH
    rstime_id: TIME_NORMAL
    inputup_id: in_har_u
    inputdown_id: in_har_d
    outputup_id: out_har_u
    outputdown_id: out_har_d

Die oberen Einträge sind aus der KC868-A16 yaml entnommen.
Ab “rstimes” sind meine zusätzlichen Einträge.

Nun die Fragen:

1.) Wenn ich das richtig sollten die Komponenten für "ethernet, i2c, pcf8574, binary_sensor und switch automatisch erzeugt werden? richtig??

2.) Die “rstimes” und die “rsgroups” sollen in c++ struct’s

    /** Struktur für die Speicherung von Fahrzeiten */
    struct struct_RL_Time {
      /** die Id */
      std::string id;
      /** Anzahl Milisekunden für Hochfahren */
      int millisecondUp;
      /** Anzahl Milisekunden für Runterfahren */
      int millisecondDown;
      /** Anzahl Milisekunden für Runterfahren auf Lücke */
      int millisecondGap;
    };

    /** Struktur für die Speicherung von Intervallen zum
     *  Runter- und Hochfahren bei Sonnenbestrahlung*/
    struct struct_RL_SunDowner{
      /** Ab welchem Monat */
      int monthFrom;
      /** Bis welchen Monat */
      int monthTo;
      /** Runterfahren Stunde */
      int gapHour;
      /** Runterfahren Minute */
      int gapMinute;
      /** Hochfahren Stunde */
      int upHoure;
      /** Hochfahren Minute */
      int upMinute;
    };

    /** Struktur für die Gruppe */
    struct struct_RL_Group {
      /** die Id */
      std::string id;
      /** Gruppenname */
      std::string name;
      /** Einstellungen für Sommer */
      struct_RL_SunDowner sundownner;
    };

Wie bekomme ich die Daten in die struct?

3.) Wie komme ich bei dem Erzeugen des “Rolladen” z.B. an den Pin mit der ID “in_har_u”?

Beste Grüße Mario

Die Rollläden laufen bei mir mit Netzspannung. Die Leistung der Mosfets von dem Board (maximal 12Watt) wird nicht reichen, um Rollläden zu betreiben. Da wirst du noch zusätzliche Relais benötigen.

Alles unter “rstimes:” sagt mir erst mal spontan nichts, da müsste ich selber googel und in alten Projekten suchen. Ich habe schon C++ Strukturen in ESPHome Programmen verwendet aber was möchtest du in diesem Fall damit machen?

Der PCF8574 ist ein 8-GPIO’s Port Extender, d.h. er verschafft dem ESP 8 zusätzlich GPIO’s, die als Eingang oder Ausgang genutzt werden können. Das KC868-A16 Board hat vier davon, zwei (also 16 GPIOs) auf EINGANG und zwei weitere auf Ausgang (16 Ausgänge). Der ESP kommuniziert mit allen vier PCF8574 über den I2C-Bus, welcher bei dir an den beiden GPIOs “GPIO4” und “GPIO5” hängt. Durch die PCF8574’s kann der ESP also über nur zwei seiner eigenen GPIOs insgesamt 32 an den PCF8574 angeschlossene GPIOs steuern.
Ich gehe davon aus, dass die Inputs und Outputs, die in dem Programm auf der Seite KinCony KC868-A16 | devices.esphome.io definiert werden. Mit den Inputs und Outputs auf der Abbildung vom Board übereinstimmen.
Wenn du z.B. die Outputs 1-8 verwenden möchtest, dann musst du pcf8574 wie folgt ändern:

pcf8574:
  - id: inputs_1_8
    address: 0x22
    pcf8575: false
  - id: outputs_1_8
    address: 0x24
    pcf8575: false

und über

switch:
  - platform: gpio
    name: "KC868-A16-Y01"
    id: out_y01
    pin:
      pcf8574: outputs_1_8
      number: 0
      mode: OUTPUT
      inverted: true

  - platform: gpio
    name: "KC868-A16-Y02"
    id: out_y02
    pin:
      pcf8574: outputs_1_8
      number: 1
      mode: OUTPUT
      inverted: true

.
.
.

schaltest du dann die Ausgangspins.

In diesem Video wird gezeigt, wie man Rollläden (einen Rollladen) unter ESPhome programmiert. Anstelle des einen Shellys hast du halt viele GPIOs vom KC868-A16 Board.

1 „Gefällt mir“

Hallo LutzHB,

Die Rollläden laufen bei mir mit Netzspannung

Ja, bei mir auch, bisher betreibe ich die Rolläden mit einer MöllerSPS und 24-V-Relais. Die MöllerSPS möchte ich ersetzten. Daher sind die Mosfets kein Problem.


Wenn du z.B. die Outputs 1-8 verwenden möchtest

… upps Sorry, ich habe die yaml gekürzt und den Output-Teil weggeschnitten.


Alles unter “rstimes:” sagt mir erst mal spontan nichts,

== Frage 2.)

2.) Die “rstimes” und die “rsgroups” sollen in c++ struct’s


In diesem Video wird gezeigt, wie man Rollläden (einen Rollladen) unter ESPhome programmiert.

Ich möchte das Projekt als externe Komponente erstellen, und nicht vorhandene nutzen, damit ich mir für andere Projekte weitere eigene Komponenten erstellen kann.

Beste Grüße Mario