Automation lokal auf ESP8266 Balkonbewässerung

Hallo,
wie ich schon mal geschrieben habe, versuche ich gerade meine Balkonbewässerungssteuerung von einem Atmega, der mal mit Bascom programmiert wurde, auf einen ESP 8266 D1 Mini pro mit esphome umzustellen. Kurze Beschreibung: Wasserspeicher ist ein KG Rohr, dass in Wandfarbe gestrichen in einer Ecke steht. Da gehen inzwischen ca. 70l Wasser rein, das reicht für 3 Wochen Urlaub. Das hat 2 Schwimmerschalter, Säule oben und Säule unten. Der Abstand der beiden ist ca 20cm, die sollen nur eine Hysterese erzeugen zwischen voll und nachfüllen nötig. Dann gibt es unten einen kleinen Behälter, den ich mit der Giesskanne nachfülle. Der hat einen Schwimmerschalter nachfüllen leer als Trockenlaufschutz für die Pumpe, die aus dem Nachfüllbehälter das Wasser in die Säule hochpumpt. Dazu gehört dann noch die (primitive) Ladesteuerung. Ein 10W Solarpanel lädt einen 12,8V/7Ah LiFePo4 Akku mit eigenem BMS, der das ganze versorgt. Ich überwache da nur, dass er nicht überladen wird und nicht in die Unterspannung läuft. Dann gibt es noch ein LC-Display, dass einige grobe Werte anzeigt, wie Solarspannung, Batteriespannung, Laden ein/aus und den Zustand der Schwimmerschalter. Das alles ist auf dem Balkon.
Diverse Sensoren und Aktoren habe ich schon definiert. Die funktionieren auch. Wenn ich die Automationen in Home Asisstant anlege, geht das auch. Ich möchte aber, dass das Ganze auch autark auf dem ESP ohne WIFI/WLAN- Verbindung funktioniert. Da habe ich ernsthafte Schwierigkeiten. So Dinge wie alias: condition: trigger: scheint der ESP ohne Unterstützung von Homeassistant nicht zu verstehen, oder ich mache noch was falsch. Hier mal mein biheriges Machwerk:

captive_portal:
  # i²c Businitialisierung
i2c:
  sda: 4
  scl: 5
  scan: true
  frequency: 100kHz
  #sensor Strom und Spannung
sensor:
  - platform: ina3221
    address: 0x40
    channel_1:
      shunt_resistance: 0.1 ohm
      current:
        name: "Solarstrom"
        id: solar_cur
      power:
        name: "Solarleistung"
        id: solar_pow
      bus_voltage:
        name: "Solarspannung"
        id: solar_volt
      shunt_voltage:
        name: "INA3221 Channel 1 Shunt Voltage"
    channel_2:
      shunt_resistance: 0.1 ohm
      current:
        name: "Batteriestrom"
        id: bat_cur
      power:
        name: "Batterieleistung"
        id: bat_pow
      bus_voltage:
        name: "Batteriespannung"    
        id: bat_voltage
      shunt_voltage:
        name: "INA3221 Channel 2 Shunt Voltage"
    channel_3:
      shunt_resistance: 0.1 ohm
      current:
        name: "Steuerungsstrom"
        id: cont_cur
      power:
        name: "Steuerungsleistung"
        id: cont_pow
      bus_voltage:
        name: "Steuerungsspannung"
        id: cont_volt
      shunt_voltage:
        name: "INA3221 Channel 3 Shunt Voltage"
    update_interval: 1s  
 #Displayansteuerung   
display:
  - platform: lcd_pcf8574
    dimensions: 16x2
    address: 0x27
    lambda: |-
      it.printf(8,0,"B:%0.2fV", id(bat_voltage).state);
      it.printf(0,0,"S:%0.2fV", id(solar_volt).state);
      it.print(0, 1, "L:");
      it.printf(2, 1, "%s", id(laden).state ? "E" : "A");
      it.print(5, 1, "NF");
      it.printf(7, 1, "%s", id(nf_leer).state ? "V" : "L");
      it.print(9, 1, "SU");
      it.printf(11, 1, "%s", id(s_unten).state ? "V" : "L");
      it.print(13, 1, "SO");
      it.printf(15, 1, "%s", id(s_oben).state ? "V" : "L");
 #Abfrage Schwimmerschalter     
binary_sensor:
  - platform: status
    name: "Balkonbewässerung"         
  - platform: gpio
    pin: D0
    name: "Nachfüllen_leer"
    id: nf_leer
    filters:
      - delayed_on_off: 4s              
  - platform: gpio
    pin: D5
    name: "Säule unten"
    id: s_unten
    filters:
      - delayed_on_off: 20ms  
  - platform: gpio
    pin: D6
    name: "Säule oben"
    id: s_oben
    filters:
      - delayed_on_off: 20ms  
   #Tag oder Nacht?   
  - platform: template
    name: "tag"
    id: tag
    lambda: |-
      if (id(solar_volt).state > 9.0) {
        // es ist tag.
        return true;
      } else {
        // es ist nacht.
        return false;
      }   
   #ist laden möglich?
  - platform: template
    name: "laden sinnvoll"
    id: lad_sinn
    lambda: |-
      if (id(solar_volt).state > id(bat_voltage).state) {
         // laden ist sinnvoll.
        return true;
      } else {
          // vergiss es
        return false;
      }
# Entladegrenze der Batterie erreicht?
  - platform: template
    name: "battspannung reicht"
    id: batvolt_ok
    lambda: |-
      if (id(bat_voltage).state > 12.0) {
        //Batterie gut.
        return true;
      } else {
        // Batterie an Untergrenze.
        return false;
      }    
switch:
# Ansteuerung Laden 
  - platform: gpio
    pin: 3
    name: "Laden"  
    id: laden
# Ansteuerung Pumpe    
  - platform: gpio
    pin: 15
    name: "Pumpe"  
    id: pumpe  

Ich möchte jetzt gern auf dem ESP, ohne WIFI/WLAN folgende Funktionen realisieren:
wenn laden sinnvoll ein ist und die Batteriespannung unter einem bestimmten Wert, laden ein
wenn die Batterie 14,50 Volt erreicht hat, laden aus
wenn Tag ist, die Batterie voll genug ist, nachfüllen voll und säule oben und unten aus, Pumpe ein
wenn batterie leer oder nachfüllen leer oder säule oben voll pumpe aus
Wie gesagt, ich habe schon mehrere Beispiele aus dem Netz durchsucht und auch versucht, die Automation aus HA auf den ESP zu übertragen, aber es gelingt mir einfach nicht.
Sorry für die lange Prosa, Gruß Micha

Wow… was für ein schön komplexes DIY Projekt :+1: :muscle:

Ich bin mir nicht sicher aber ich glaube nicht, dass du mit ESP-Home überhaupt eine autarke (ohne Host) Funktion erreichen kannst.

Schau dir doch mal ESPEASY an, hier geht es auf jeden Fall mit den „Rules“ und die Kommunikation mit HA läuft dann via Mqtt.

Nachtrag: Auszug von meinem Wasserzähler-ESP und dessen „Rules“. Hier rechnet der ESP „autark“ und veröffentlicht die Wert an HA


//### Systemstart ###

on System#Boot do
 let,1,[Wasserzaehler#Total]                                              //Variable_1 auf Wasserverbrauch_total setzen
endon


//### Wasserverbrauch berechnen ###

on Wasserzaehler#Total do
 TaskValueSet,2,1,[Wasserzaehler#Count]                                  //l_min berechnen
 TaskValueSet,2,2,[Wasserzaehler#Total]-[Var#1]                          //l_tag berechnen
 TaskValueSet,2,4,[Wasserzaehler#Total]*0.001                            //qqm_total berechnen
endon


//### Reset & Tagesverbrauch (täglich um 00:00Uhr ausführen) ###

on Clock#Time=All,00:00 do 
 TaskValueSet,2,3,[Wasserverbrauch#l_tag]                                //l_vortag setzen
 let,1,[Wasserzaehler#Total]                                             //Variable_1 auf Wasserverbrauch_total setzen
endon

Hallo,
danke für den Hinweis, aber ich wollte mit ESPEASY nicht noch eine neue Baustelle aufmachen. Laut Beschreibung von Esphome sollten Automationen auch autark laufen, ich bekomme nur die Syntax noch nicht hin. Vielleicht poste ich am Wochenende mal ein paar gescheiterte Versuche.