Sterowanie pompą różnicowo-temperaturową

Witam chciałem zrobić sterownik pomy różnicowy z tej strony https://community.home-assistant.io/t/pump-control/205511ale nie wiem jak to ugryźć.
Może ma ktoś kod na esp8266 i się podzieli.

A masz jakieś niezerowe doświadczenie z ESPHome i generalnie jakimkolwiek projektowaniem elektroniki (najlepiej na MCU ESP byś mógł samodzielnie rozpoznać wymagane różnice w konfiguracji uwzględniając różnice sprzętowe między ESP32, a ESP8266)?

Bo generalnie będzie tak samo, tylko musisz zmodyfikować definicję platformy sprzętowej (płytki) pod możliwości swojej - konkretnie chodzi głównie o dobór GPIO.

Masz w ogóle działający kod dla ESP32? bo widzę że tam tyko cześć jest realizowana w ESPHome, a reszta w HA.

Jakieś tam pojęcie mam.
Ale z tym kodem sobie nie mogę poradzić.

Z czym konkretnie, pokaż co masz.

To tak pierwszą cześć kodu mam zamiar wgrać ale mam błąd
artur

esphome:
  name: sensor-diff
  friendly_name: sensor_diff

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "I9w6dtiiPSqgseXhxGvSuZDpkLwJjxsQBveZCyKZJgA="

ota:
  password: "fe7a89598b5e445d0af12d4f87fe0138"

wifi:
  ssid: Grzegorz
  password: grzegorz
  manual_ip: 
   static_ip: 192.168.1.102
   gateway: 192.168.5.1
   subnet: 255.255.255.0 

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Sensor-Diff Fallback Hotspot"
    password: "JRtQ7Hs7qvw6"

captive_portal:

web_server:
  port: 80

dallas:
  - pin: GPIO2

# Individual Sensors
sensor:
  - platform: dallas
    address: 0x423cb5f649a5f028
    name: "panel"
    id: "panel"
  - platform: dallas
    address: 0x423cb5f649a5f028
    name: "tank"
    id: "tank"

  - platform: value_template
    id: Temperature Difference
    unit_of_measurement: °C
    update_interval: 60s
    lambda: 'return id(panel).state - id(tank).state;'

Błąd wskazuje na złą definicję platformy sensora template. Powinno być:

- platform: template

A Ty masz:

- platform: value_template

Do tego jest jeszcze błąd w :

id: Temperature Difference 

W identyfikatorze id nie można stosować spacji.

No ja widzę jeszcze jeden błąd - dwukrotnie jest użyty ten sam adres dla 2 oddzielnych Dallasów, ale te błędy wskazane wyżej uniemożliwiają kompilację.

a ja widzę że urządzenie i brama są w różnych sieciach :slight_smile:

1 polubienie

Niekoniecznie :stuck_out_tongue_winking_eye: 255.255.0.0

celnie, ale maskę ma 255.255.255.0

Zwracam honor - nie przewinąłem :+1:

No jak już się mamy czepiać wzajemnie to na podstawie RFC1918 sieci z puli (przestrzeni adresowej) 192.168/16 mają być klasy C, czyli z maską przynajmniej /24 (255.255.255.0), bo ma się tam zmieścić 256 osobnych sieci.

Niektórzy błędnie czytają zalecenia IANA
https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
i stosują szersze maski (wychodząc z założenia, że skoro to działa, to nie ma co się szarpać), ale w tym względzie nie zmieniło się nic od pierwotnego RFC
(więc jeśli komuś potrzebna sieć z większą liczbą hostów to ma do dyspozycji 172.16/12 z 16 sieciami w klasie B lub 10/8 - jedna sieć A; terminologię stosuję nieco niewspółczesną, ale taka była w tamtych czasach)

Ok po poprawie kodu wgrane i co dalej z resztą kodu.

- platform: template
    sensors:
    temp_diff:
      friendly_name: Temperature_Difference
          value_template: >
          {% if ((states.sensor.panel_temperature.state | float ) - (states.sensor.tank_temperature.state | float))
            < (states.input_number.pump_on_offset.state | float ) %} pump_off
          {% elif ((states.sensor.panel_temperature.state | float ) - (states.sensor.tank_temperature.state | float))
            > (states.input_number.pump_on_offset.state | float ) %} pump_on
          {% else %} pending {% endif %}

input_number:
  pump_off_offset:
    name: Pump OFF offset
    initial: 0.1
    min: 0
    max: 2
    step: 0.1

  pump_on_offset:
    name: Pump ON offset
    initial: 3
    min: 0
    max: 2
    step: 0.5

automation:
  - id: ID12
    alias: 'Pump hot water if hotter than tank - stop if not'
    initial_state: 'on'
    trigger:
      platform: state
      entity_id: sensor.temp_diff
    action:
      entity_id: switch.solar_pump
      service_template: >
        {% if is_state ('sensor.temp_diff' , 'pump_on') %} switch.turn_on
        {% else %} switch.turn_off {% endif %}    

Wklejasz do configuration.yaml przecież to jest opisane w wątku, na który się powołujesz
a automatyzacje ewentualnie do automatyzacji (format się zmieni o jedno piętro wcięć)
oczywiście identyfikatory encji się muszą zgadzać.

Edit: tam jest stary format integracji template w YAMLu, ale widzę, że pomoc już się pojawiła.

Wyszło mi cos takiego.

Użyj nowego formatu, zwróć uwagę na wcięcia.

template:
  - sensor:
      - name: "Average temperature"
        unit_of_measurement: "°C"
        state: >
          {% set bedroom = states('sensor.bedroom_temperature') | float %}
          {% set kitchen = states('sensor.kitchen_temperature') | float %}

          {{ ((bedroom + kitchen) / 2) | round(1, default=0) }}
1 polubienie