Home Assistant und Procon.IP without Node-Red

Anbindung des Controllers an externe Hausautomationssysteme.
Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

In Arbeit: Verion1.0



Guten Morgen,
das Ziel war die Daten der Procon.IP direkt in Home Assistant einzulesen ohne Hilfe von Zusatzsoftware wie Node-Red.
pool_ui.jpg
Vorbedingung:
Home Assistant (läuft bei mir auf einem RPI mit docker-compose)
ssh Zugriff
Python
Lokaler Zugriff auf den Poolcontroler (GetState.csv)
Erfahrung mit Console und Home Assistant

Installation:
Per ssh auf dem Home Assistant Rechner ein loggen und Pandas installieren per Befehl (konvertiert csv to json)

Code: Alles auswählen

pip install pandas
Installationspfade dienen als Beispiel und können abweichen und müssen angepasst werden:
Installdir: /home/pi/homeassistant , erstellt dort ein Verzeichnis mit dem Namen downloads und fügt folgenden Code in die configuration.yaml ein:

Code: Alles auswählen

downloader:
  download_dir: /config/downloads
erstellt dort folgende Datei mit dem Namen convert.py und fügt den Code ein und ändert die IP Adresse in die von eurem Controller / Procon.IP ( Die Datei ruft die CSV ab und konvertiert diese in ein json format.

Code: Alles auswählen

import pandas as pd;

df = pd.read_csv('http://192.168.178.55/GetState.csv',header=1, decimal='.', thousands='x', skiprows=[2])
df = df.T
df['123']=df[1]*df[2]+df[0]
df = df.T
df = df.drop([0,1,2])
df.to_json('GetState.json', orient='records')
Bitte jetzt noch das auszuführende Script anlegen das wir später mit Systemd abrufen

Code: Alles auswählen

cd [/home/pi/homeassistant/downloads
nano openpool.sh
Bitte einfügen

Code: Alles auswählen

#!/bin/bash
cd /home/pi/homeassistant/downloads
python convert.py
chmod 777 GetState.json
Jetzt legen wir einen systemd Eintrag an der das obrige Script alle 10 Sekunden ausführt.

Code: Alles auswählen

cd /etc/systemd/system

Code: Alles auswählen

nano openpool.service
Inhalt einfügen

Code: Alles auswählen

[Unit]
Description=OpenPool

[Service]
ExecStart=/home/pi/homeassistant/downloads/openpool.sh
User=root
Type=simple
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
Inhalt speichern und mit folgenden Befehlen aktivieren
systemctl enable openpool
systemctl start openpool
Der größe Teil ist jetzt bereits geschaft und im Ordner

Code: Alles auswählen

/home/pi/homeassistant/downloads
sollte jetzt sich alle 10 Sekunden eine Datei erstellen mit dem Namen

Code: Alles auswählen

GetState.json
Jetzt Legen wir die Sensoren für Home Assistant an. Bitte die configuration.yaml editieren und folgendes Einfügen. Bitte die Namen eurer Relais / Sensoren anpassen und für jeden einen einzellnen Eintrag erstellen.

Für Werte bitte folgendes verweden:

Code: Alles auswählen

- platform: file
    name: Pool_Chlor
    file_path: /config/downloads/GetState.json
    value_template: '{{ value_json[0]["Chlor"] | round(2) }}'
    unit_of_measurement: 'ppm'
    scan_interval: 10
Für Relais mit Status 0/1/2 bitte folgendes verwenden:

Code: Alles auswählen

 
 - platform: file
    name: PoolPumpe1
    file_path: /config/downloads/GetState.json
    value_template: '{{ value_json[0]["Pumpe1"] | round(0) }}'
    unit_of_measurement: ''
    scan_interval: 10

- platform: template
  sensors:
    status_pumpe1:
      entity_id: sensor.poolpumpe1
      value_template: >-
        {% if is_state('sensor.poolpumpe1', '0') %}
          Aus
        {% elif is_state('sensor.poolpumpe1', '1') %}
          Ein
        {% elif is_state('sensor.poolpumpe1', '2') %}
          Stop
        {% else %}
          Unknown
        {% endif %}
   
Ich übernehme keine Haftung für Schäden und an der Richtigkeit der Daten. Dies ist nur ein Bespiel wie so etwas möglich wäre.
Viele Spaß
Basti

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Update Post Nr: 1
Schalten von Relais per Home Assistant:
Bitte die folgenden Befehle in der configuration.yaml einfügen und Daten anpassen ( IP Adresse Controller )
Die Befehle gehen auch wenn Node-Red benutzt wird oder die Anleitung von oben nicht befolgt wurde. ( sind unabhängig )

Code: Alles auswählen

rest_command:
  shuffle_on:
    url: "http://192.168.178.55/SetState.pl?R2=1"
  shuffle_off:
    url: "http://192.168.178.55/SetState.pl?R2=0"
oder

Code: Alles auswählen

switch:
  - platform: command_line
    switches:
      rest_pool_test:
        command_on: curl -s http://192.168.178.55/SetState.pl?R2=1
        command_off: curl -s http://192.168.178.55/SetState.pl?R2=0

Benutzeravatar
DPerak
Beiträge: 404
Registriert: 26. Juni 2016, 13:09

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von DPerak »

Sehr schön! Vielen Dank, muss ich bei nächster Gelegenheit mal ausprobieren 8-)

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Update for Lovelace UI.
ui_pool.jpg
ui_pool.jpg (15.96 KiB) 1172 mal betrachtet
Nur Anzeige, keine Steuerung der Relais: Name und Entity müssen angepasst werden, Symbole nach belieben.
unter HACS foglendes installieren:

Code: Alles auswählen

paper-buttons-row

Code: Alles auswählen

type: custom:paper-buttons-row
buttons:
  - entity: sensor.poolpumpe1
    name: P1
    state_icons:
      '0': mdi:stop
      '1': mdi:play
      '2': mdi:stop
      '3': mdi:refresh-auto
    state_styles:
      '0':
        button:
          color: yellow
      '1':
        button:
          color: green
      '2':
        button:
          color: red

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Bugfix for Error Log:

Code: Alles auswählen

The 'entity_id' option near /config/configuration.yaml:XXX is deprecated, please remove it from your configuration
Bitte auskommentieren oder ändern (Zeile mit Raute):

Code: Alles auswählen

sensor 4:
- platform: template
  sensors:
    status_pumpe1:
#      entity_id: sensor.poolpumpe1
      value_template: >-
        {% if is_state('sensor.poolpumpe1', '0') %}
          Aus
        {% elif is_state('sensor.poolpumpe1', '1') %}
          Ein
        {% elif is_state('sensor.poolpumpe1', '2') %}
          Stop
        {% else %}
          Unknown
        {% endif %}

mcmuller
Beiträge: 14
Registriert: 10. Juli 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von mcmuller »

Hallo und Danke für die Lösung! Ich dachte mir, daß das auch ohne externes pandas gehen müßte und bin für die Auswertung der GetState.csv auf folgende Lösung gekommen (als Beispiel 2 Sensoren und 2 Relais:

Code: Alles auswählen

### PoolDigital #########################################################       
sensor:
      - platform: rest
  	resource: http://192.168.1.14/GetState.csv
  	scan_interval: 10
  	- name: "Pool Controller ph"
          unit_of_measurement: pH
          value_template: "{{ int(value.split(',')[98])  + ( float(value.split(',')[139]) * int(value.split(',')[180]) ) | round(2) }}"
        - name: "Pool Controller Temp"
          unit_of_measurement: °C
          value_template: "{{ int(value.split(',')[99])  + ( float(value.split(',')[140]) * int(value.split(',')[181]) ) | round(2) }}"
        - name: "Pool Controller Filterpump"
          value_template: "{{ int(value.split(',')[189])  }}"
        - name: "Pool Controller Fillvalve"
          value_template: "{{ int(value.split(',')[193])  }}"

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Danke, coole Lösung , muss ich Mal testen . Da spart man sich noch mehr , in die Richtung hab ich gar nicht gedacht. Aber CSV habe ich noch nie gemocht 🙈.
Danke

mcmuller
Beiträge: 14
Registriert: 10. Juli 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von mcmuller »

...vielleicht gelingt ja noch irgendwie ein python-skript innerhalb HA, das dann etwas allgemeingültiger wäre - die https://jinja.palletsprojects.com/en/la ... ers.tojson Template-Engine kennt ein "tojson", da werde ich mal weitermachen....

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

So habe jetzt deins gestestet und musste ein paar Änderungen vornehmen sonst gab es Fehler bei den Werten und Rundungen.

Code: Alles auswählen

rest:
  resource: http://192.168.178.55/GetState.csv
  scan_interval: 10
  sensor:
      - name: "Pool Controller Chlor"
        unit_of_measurement: ppm
        value_template: "{{ (float(value.split(',')[92])  + ( float(value.split(',')[133]) * float(value.split(',')[174]))) | round(2) }}"
Verbesserungen:
- Formatierung
- Klammer setzen wegen Rundung auf 2 Stellen, vor dem ersten float und vor dem | sonst rundet man das falsche
- int gegen float geändert, int wird bei x = 1 verwendet und float bei x = 1.0
- value_template: "{{ (float(value.split(',')[92]) + ( float(value.split(',')[133]) * float(value.split(',')[174]))) | round(2) }}"

Vielleicht liegt es auch nur an mir, dass es anders nicht funktioniert hat.
Trotzdem danke ;-) . Jetzt müssen wir nur noch ein Addon schreiben.
Schönen Abend

mcmuller
Beiträge: 14
Registriert: 10. Juli 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von mcmuller »

Hi Basti,
schön, daß Du dich mit meiner "Lösung" beschäftigst. Ich komme vom Arduino und bin deshalb etwas datensparsam. Der erste FLOAT(Offset) ist nicht variabel "0", außer für die Analogs/TempSensors, also habe ich da mal INT genommen (fest 0 hätte es auch getan). Dein dritter FLOAT(Roh-Messwert) ist lt. PoolController-Anleitung immer INTeger, verstehe also nicht, warum Du da FLOAT brauchst. Wahrscheinlich liegen Deine "anderen" Werte tatsächlich an den Klammern - ich habe wohl nur den dritten Wert gerundet und es ist einfach bei meinen Werten nicht aufgefallen :-)

Vielleicht hast Du ja noch eine elegante Idee, wie ich aus

Code: Alles auswählen

- name: "Pool Controller Filterpump"
  value_template: "{{ int(value.split(',')[189])  }}"
das eine 0,1,2,3 zurückliefert, einen deskriptiven Zustand erzeugen kann. Die rest: Platform kennt kein state-template :-(
Grüße, Gregor

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Meinst du das? Gibt statt 0,1,2 halt Aus Ein Stop aus.
Danach solltete man das mit "template switch" abfragen können.

Code: Alles auswählen

- platform: template
  sensors:
    status_pool_controller_filterpump:
      value_template: >-
        {% if is_state('sensor.pool_controller_filterpump', '0') %}
          Aus
        {% elif is_state('sensor.pool_controller_filterpump', '1') %}
          Ein
        {% elif is_state('sensor.pool_controller_filterpump', '2') %}
          Stop
        {% else %}
          Unknown
        {% endif %}

mcmuller
Beiträge: 14
Registriert: 10. Juli 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von mcmuller »

ja, genau das, aber ich habe versucht, das direkt im Sensor zu machen - bei einigen Platformen geht das offenbar.

Benutzeravatar
DPerak
Beiträge: 404
Registriert: 26. Juni 2016, 13:09

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von DPerak »

Hallo zusammen, ich wollte das Ganze jetzt auch mal ausprobieren.
Frage: warum pollt ihr alle 10 Sekunden? Das ist das 90 fache der Datenmenge, die der Controller aufzeichnet.

Und dennoch kann es sein, daß ihr Ereignisse wie z.B. das Auslösen einer Regel oder das Schließen eines IOs nicht mitbekommt. Hier probiere ich gerade mit pushover zu arbeiten. Allerdings habe ich bislang nur eine Integration gefunden mit der HASS selbst pushover Nachrichten erzeugt und noch keine Idee, wie er welche empfangen kann.

Oder könnte man eine Email abfangen..?

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Hi,
sorry für die späte Antwort. Theoretisch kannst du nach belieben die Werte abfragen. Ich hab die Werte jetzt auf 90 Sekunden geändert. Die kleinen Werte kamen damals zum Stande damit beim testen sich die Werte schneller ändern.
Was möchtest du denn gerne mit Pushover oder Email erreichen? Schalten des Controllers?
Ich habe das über die Nabucasa Cloud gelöst und über HA direkt, damit kann ich steuern wenn nötig auch ohne VPN.

VG
Basti

Habe nur ein Problem mit der Antsrömung, die Werte stimmen nicht, hab ich einen Denkfehler ?

Code: Alles auswählen

- name: "Pool Anströmung"
        unit_of_measurement: cm/s
        value_template: "{{ (int(value.split(',')[115])  + ( float(value.split(',')[157]) * int(value.split(',')[197]))) | round(2) }}"

bsanders
Beiträge: 1
Registriert: 30. März 2021, 23:14

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von bsanders »

Servus zusammen und ein gesundes neues Jahr Euch allen,

ich steige gerade von FHEM auf Home-Assistant um und bin sehr dankbar für Eure Arbeit in diese Richtung.
Unter FHEM lief das auch mit dem geparsten CSV sehr zuverlässig insofern versuche ich das jetzt auch gleich Mal auf diese Art mit Home-Assistant.

großes Danke und Viele Grüße,
Bo

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Viel Spaß, und gerne Fragen ;-)

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Guten Morgen,

es hat sich mal wieder was getan am Dashboard. Die Symbole ändern sich jetzt je nach Zustand des Wertes in 5 er Schritten. Der Pumpenschalter zeigt jetzt den Status an und schaltet die Pumpe ( Anzeige noch verzögert je nach Abfrageintervall - hier 90 Sekunden ). Das Überlaufbecken wird jetzt in % berechnet oder in Liter wie voll uvm. Wenn Ihr interesse habt helfe ich euch gerne. P.s. Der Pool schläft deswegen sind nicht alle Werte real ;-)

BildBild
Bild

VG
Basti

pcmaster_f
Beiträge: 1
Registriert: 17. August 2022, 22:51

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von pcmaster_f »

Hallo Basti,

das schaut ja sehr gut aus.
Wie hast du die Symbole so hinbekommen?
Würde das auch gern bei einem bekannten so umsetzen und Ihm eine kleine freude damit machen.

Basti
Beiträge: 270
Registriert: 9. Juni 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von Basti »

Hi,

Hier der Lovelace Code, die Symbole / Gif's musst du dir im Internet suchen und im HA Ordner ablegen

Wasserstand:

Code: Alles auswählen

square: false
columns: 1
type: grid
cards:
  - square: false
    columns: 1
    type: grid
    cards:
      - type: custom:mushroom-title-card
        title: Messwerte
      - square: true
        columns: 4
        type: grid
        cards:
          - type: custom:mushroom-template-card
            primary: '{{ states(entity) }} %'
            secondary: Füllstand
            icon: none
            layout: vertical
            entity: sensor.pool_tank_level_percent
            tap_action:
              action: none
            hold_action:
              action: none
            double_tap_action:
              action: none
            icon_color: ''
            badge_color: ''
            card_mod:
              style:
                mushroom-shape-icon$: |
                  .shape {
                    {% set water_level = states(config.entity) | int %}
                    {% if water_level > 80 %} 
                      background: url("/local/my-icons/Water 5.png") no-repeat center;
                    {% elif water_level > 60 %}
                      background: url("/local/my-icons/Water 4.png") no-repeat center;
                    {% elif water_level > 40 %}
                      background: url("/local/my-icons/Water 3.png") no-repeat center;
                    {% elif water_level > 20 %}
                      background: url("/local/my-icons/Water 2.png") no-repeat center;
                    {% else %}
                      background: url("/local/my-icons/Water 1.png") no-repeat center;
                    {% endif %}
                    background-size: contain;
                    --shape-color: none;
                  }
Pumpe:

Code: Alles auswählen

type: vertical-stack
cards:
  - type: custom:mushroom-title-card
    title: Pumpe
    columns: 2
  - type: horizontal-stack
    columns: 2
    cards:
      - type: custom:mushroom-entity-card
        entity: switch.pool_pumpe_1
        primary_info: name
        name: P1
        secondary_info: state
        icon_color: amber
        tap_action:
          action: toggle
        icon: mdi:pump

mcmuller
Beiträge: 14
Registriert: 10. Juli 2015, 09:31

Re: Home Assistant und Procon.IP without Node-Red

Beitrag von mcmuller »

Hallo aus Portugal!
Sieht Klasse aus @Basti ! Poolsaison beginnt hier gerade, da werde ich da noch Mal an Deine Arbeit anknüpfen! Die Idee einer eigenen Integration habe ich verworfen, da in die "Neue" Steuerung wohl direkt json spricht und wir nur CSV lesen dürfen..