=====================ivtlogger.py=======================
import serial #pip3 install pyserial
# https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3-4/
import csv
INFLUXDB_TOKEN="ixSkaffaEgetTokenPåInfluxdbLKJQWELRKJQWLERJKQWLERJQWLKERJ=="
import influxdb_client, os, time
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS

token = INFLUXDB_TOKEN
org = "per@lengquist.se"
url = "https://westeurope-1.azure.cloud2.influxdata.com"
client = influxdb_client.InfluxDBClient(url=url, token=token, org=org)
bucket="ivt"
write_api = client.write_api(write_options=SYNCHRONOUS)

field_names=['To radiators GT1','Outdoor GT2','Tap water top GT3-1','Warm water mid GT3-2','Warm water bottom GT3-3','field6','Hot gas GT6','field8','Pressure guard defrost','High pressure','Low pressure','Vacation state on','Compressor active','Schunt Opening SV1','Schunt Closing SV1','Radiator pump P1','Fan','Alarm','Extern P2','LLT GT1','LL GT1','Target Radiator out GT1','UL GT1','LL GT3:2','ULT GT3:2','UL GT3:2','LL GT3:3','BV GT3:3','SV3 BV Foerskj','Effekt ink vit VV behov','Tillskotstimer VV behov','Tappv prio','Elpatron varme','Tillskott rad','Elpatron extra vv','Default SV2 Open']

with open('ivtdata.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(field_names)
ser = serial.Serial ("/dev/ttyS0", 9600) #Use raspi-config to enable serial and disable serial console.
# https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3-4/
while True:
received_data = ser.readline()
print(received_data)
s = received_data.decode('ascii')
#print(s)
values=[]
for x in s.split(';'):
values.append(int(x.strip()))
#print (values)
writer.writerow(values)
f.flush()
write_api.write(bucket=bucket, org=org, record=[
Point("Heating").field("heating", values[1]/10),
Point("Outdoor").field("outdoor", values[2]/10),
Point("Compressor").field("compressor", values[7]/10),
Point("Compresson On").field("comp_on", values[13]),
Point("SV1 Open").field("sv1_open", values[14]),
Point("SV1 Close").field("sv1_close", values[15]),
Point("DesiredHeating").field("desired_heating", values[22]/10)])

write_api.write(bucket=bucket, org=org, record=[
Point("Heatpump").field("Sekvensnr", values[0]),
Point("Heatpump").field("To radiators GT1", values[1]),
Point("Heatpump").field("Outdoor GT2", values[2]),
Point("Heatpump").field("Tap water top GT3-1", values[3]),
Point("Heatpump").field("Warm water mid GT3-2", values[4]),
Point("Heatpump").field("Warm water bottom GT3-3", values[5]),
Point("Heatpump").field("field6", values[6]),
Point("Heatpump").field("Hot gas GT6", values[7]),
Point("Heatpump").field("field8", values[8]),
Point("Heatpump").field("Pressure guard defrost", values[9]),
Point("Heatpump").field("High pressure", values[10]),
Point("Heatpump").field("Low pressure", values[11]),
Point("Heatpump").field("Vacation state on", values[12]),
Point("Heatpump").field("Compressor active", values[13]),
Point("Heatpump").field("Shunt Opening SV1", values[14]),
Point("Heatpump").field("Shunt Closing SV1", values[15]),
Point("Heatpump").field("Radiator pump P1", values[16]),
Point("Heatpump").field("Fan", values[17]),
Point("Heatpump").field("Alarm", values[18]),
Point("Heatpump").field("Extern P2", values[19]),
Point("Heatpump").field("LLT GT1", values[20]),
Point("Heatpump").field("LL GT1", values[21]),
Point("Heatpump").field("Target Radiator out GT1", values[22]),
Point("Heatpump").field("UL GT1", values[23]),
Point("Heatpump").field("LL GT3:2", values[24]),
Point("Heatpump").field("ULT GT3:2", values[25]),
Point("Heatpump").field("UL GT3:2", values[26]),
Point("Heatpump").field("LL GT3:3", values[27]),
Point("Heatpump").field("BV GT3:3", values[28]),
Point("Heatpump").field("SV3 BV Foerskj", values[29]),
Point("Heatpump").field("Effekt ink vit VV behov", values[30]),
Point("Heatpump").field("Tillskotstimer VV behov", values[31]),
Point("Heatpump").field("Tappv prio", values[32]),
Point("Heatpump").field("Elpatron varme", values[33]),
Point("Heatpump").field("Tillskott rad", values[34]),
Point("Heatpump").field("Elpatron extra vv", values[35]),
Point("Heatpump").field("Default SV2 Open", values[36]) ])
print("Posted!")


======================ivtlogger.service================================
[Unit]
Description=Read IVT log data over UART and post to InfluxDB
After=network.target

[Service]
User=pi
ExecStart=/usr/bin/python3 /home/pi/ivt_logger.py
Restart=always
WorkingDirectory=/home/pi/


[Install]
WantedBy=multi-user.target


## located in /lib/systemd/system/ivt_logger.service
 
Redigerat:
  • Gilla
Sp1nd3l och 1 till
  • Laddar…
Jag behövde konvertera spänningsnivåerna för den seriella kommunikationen mellan värmepumpens kontrollerkort och Raspberryins GPIO-ingång. Löste det med en transistor och två resistorer.
Minns inte exakt hur jag kopplade, men prata med någon som kan lite om transistorer och seriella protokoll (tex skillnad mellan RS-232 och UART). Det var inte avancerat.


Här är lite blandade anteckningar jag gjorde när jag konfigurerade raspberryn och skrev koden:


https://manpages.debian.org/testing/systemd/systemd.service.5.en.html

journalctl -u ivt_logger
sudo service ivt_logger restart





pip install pyserial
sudo pip3 install pyserial
sudo pip3 install wiringpi
pip3 install influxdb-client
nohup python3 serial_readline.py > nohup2.out &

export INFLUXDB_TOKEN=ixqSkaffaEnEgenTokenPåInfluxdbLKJWROIWUEROIUAWDFIAWECCJOQWEEFIJ==

sudo service ivt_logger restart


https://blog.usedbytes.com/2019/11/run-at-startup-without-rc.local/
https://github.com/raspberrypi/docu...22fb56b30e4d62c5ccba24/linux/usage/systemd.md
 
  • Närbild av en GPIO-anslutning med flerledarkabel ansluten till kretskortet på värmepumpens kontrollerkort.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
  • Närbild på Raspberry Pi Zero med anslutna kablar, en transistor och en resistor, använd vid kommunikation med en värmepumpskontroller.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
  • Seriell kabel ansluten till värmepumpens styrenhet med handskriven etikett som beskriver reservcirkulationspumpens placering, oktober 2020.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
  • En hand håller i ett Raspberry Pi-kort med anslutna kablar, en resistor och en mikro-SD-kortlösning.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
  • Närbild av en hand som håller ett kopplingsschema med en transistor och två resistorer anslutna till ett grönt kretskort.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
  • Gilla
Sp1nd3l
  • Laddar…
Om du sparar data på SD-kortet så kommer det inte att överleva längre än något år. Jag har därför en ESP i min IVT (ren spänningsdelning från 5V till 3,3V). Sedan läser jag in all data till en Raspberry pi med SSD centralt istället. Och skaffar du dig en ESP på har du två saker att styra med reläer också:
- sommardrift (kortslutning av två skruvplintar). Undviker att dra igång värmen i onödan.
- gt 3:2 (tempsensor i tanken) som du kan växla mellan 65°C och verklig temperatur. Det är denna som styr när kompressorn går igång. Perfekt om man vill styra kompressorn till billiga timmar.

Läs mer om hur du gör detta tidigare i tråden...
 
Redigerat:
pacman42 pacman42 skrev:
Om du sparar data på SD-kortet så kommer det inte att överleva längre än något år.
Om du syftar på min kod är det bara att ta bort raden:
writer.writerow(values)
så sparas mätdata bara på Influxdb. Det är en molntjänst så då används SD-kortet minimalt.

Intressant att styra om tempsensorer för att få IVTn att dra mindre el när det är dyrt. Måste man inte styra om både GT3:2 och utomhussensorn, så att den tror att varken varmvatten eller värmevatten behövs? Jag ska leta upp den diskussionen tidigare i tråden, låter intressant.

För övrigt gissar jag att det som går att styra med en ESP32 även går att styra med en Raspberrrys GPIO. Jag gillar egentligen microcontrollers bättre än Raspberry, men en Rasp kändes lättare att använda när man ska anropa ett API över HTTP.
 
Värmen styrs via semesterläge, dvs kortslutning av två skruvplintar. Så man behöver inte styra utetemperaturen.

Det finns bra http-bibliotek till ESP också. Jag har dock en central hjärna på en Raspberry som styr hela huset. Jag gillar att ha dumma klienter
 
  • Gilla
p70
  • Laddar…
Produkter som diskuteras i tråden
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.