=====================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…
S
A ArttuP skrev:
Vilken typ och hur många kanalrelä har du? Jag har ESP-baserat Sonoff-relä och jag använder 1 kanal för att styra GT3 temperatursensor. I teorin bör anslutningar av bifogad bild fungera. Men rent praktiskt är jag inte säker.
Vågade du gå vidare med den här lösningen? Min fläkt stod inställd på 150V. Testade både 180V och 230V manuellt genom att flytta kabeln men det blev ingen märkbar skillnad så för mig skulle det inte förbättra något att kunna styra hastigheten. Det kan ju vara värt för dig att testa manuellt först för att se om du märker någon skillnad, annars antar jag att fläkten i IVT 490 helt enkelt är för klen för att kunna forcera ventilationen rejält som man skulle vilja ibland.
 
S Sp1nd3l skrev:
Vågade du gå vidare med den här lösningen? Min fläkt stod inställd på 150V. Testade både 180V och 230V manuellt genom att flytta kabeln men det blev ingen märkbar skillnad så för mig skulle det inte förbättra något att kunna styra hastigheten. Det kan ju vara värt för dig att testa manuellt först för att se om du märker någon skillnad, annars antar jag att fläkten i IVT 490 helt enkelt är för klen för att kunna forcera ventilationen rejält som man skulle vilja ibland.
Jag tänker ju tvärtom, dvs att jag ställer ned den när ingen är hemma och om det är tillräckligt torrt i badrummen.
 
S
pacman42 pacman42 skrev:
Jag tänker ju tvärtom, dvs att jag ställer ned den när ingen är hemma och om det är tillräckligt torrt i badrummen.
Ja, åt det hållet verkar det ju fungera.
 
Produkter som diskuteras i tråden
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.