Guten Morgen,
das Ziel war die Daten der Procon.IP direkt in Home Assistant einzulesen ohne Hilfe von Zusatzsoftware wie Node-Red.
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 pandasInstalldir: /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/downloadsCode: 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')Code: Alles auswählen
cd [/home/pi/homeassistant/downloads
nano openpool.shCode: Alles auswählen
#!/bin/bash
cd /home/pi/homeassistant/downloads
python convert.py
chmod 777 GetState.jsonCode: Alles auswählen
cd /etc/systemd/systemCode: Alles auswählen
nano openpool.serviceCode: 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.targetDer größe Teil ist jetzt bereits geschaft und im Ordnersystemctl enable openpool
systemctl start openpool
Code: Alles auswählen
/home/pi/homeassistant/downloadsCode: Alles auswählen
GetState.jsonFü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
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 %}
Viele Spaß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.
Basti


