Termostat i SVD

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

w oczekiwaniu na "Termostat by Supla" postanowiłem rozpocząć eksperymenty z własnym piecem i sterowaniem ogrzewaniem.

Pierwotna koncepcja wyglądała tak:
1. 5x Xiaomi Mijia LYWSD03MMC + SVD - dane o temperaturze
2. Yunshan + OLED + SHT3x - sterowanie piecem gazowym i lokalny pomiar temperatury na wypadek awarii netu

zacząłem już tworzyć kod termostatu na Yunshana odczytujący temperaturę z SVD za pomocą linków bezpośrednich, ale...

może lepszym rozwiązaniem byłoby wsadzić Pi z SVD pod piec i podłączyć któryś z GPIO do przekaźnika bezpotencjałowego.

Pytanie do rozeznanych w kodzie supla-dev - jest to do ogarnięcia?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Jest to do ogarnięcia ja posiadam SVD i 4 x xiaomi które na razie na biurku sterują 4 rozdzielaczami podłogówki ale z powodu chronicznego braku czasu nie zostało to jeszcze zaimplementowane. Sterowanie przekaźnikami ogarnięte w pytonie, docelowo miała powstać strona web na której można by ustawić temperatury zadane i czytać rzeczywiste i stan przekaźników no i tego jeszcze nie ma bo moi podwładni programiści się ociągają. Do sterowania zaworami wykorzystałem moduł jak na zdjęciu
You do not have the required permissions to view the files attached to this post.
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

czyli przekaźnikami sterujesz oddzielną apką? a nie lepiej rozbudować kod samego SVD?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

vajera wrote: Fri Dec 17, 2021 11:23 am czyli przekaźnikami sterujesz oddzielną apką? a nie lepiej rozbudować kod samego SVD?
Nie , przekaźniki załączane są tylko zależnie od progów termostatu , nie załączam ich s inny sposób nie czuje takiej potrzeby
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

shimano73 wrote: Fri Dec 17, 2021 1:48 pm
vajera wrote: Fri Dec 17, 2021 11:23 am czyli przekaźnikami sterujesz oddzielną apką? a nie lepiej rozbudować kod samego SVD?
Nie , przekaźniki załączane są tylko zależnie od progów termostatu , nie załączam ich s inny sposób nie czuje takiej potrzeby
ale załączasz je bezpośrednio w kodzie SVD? czy masz np. skrypt w pythonie, który odczytuje temperaturę z tych samych plików tekstowych, co SVD?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

vajera wrote: Fri Dec 17, 2021 3:02 pm
shimano73 wrote: Fri Dec 17, 2021 1:48 pm
vajera wrote: Fri Dec 17, 2021 11:23 am czyli przekaźnikami sterujesz oddzielną apką? a nie lepiej rozbudować kod samego SVD?
Nie , przekaźniki załączane są tylko zależnie od progów termostatu , nie załączam ich s inny sposób nie czuje takiej potrzeby
ale załączasz je bezpośrednio w kodzie SVD? czy masz np. skrypt w pythonie, który odczytuje temperaturę z tych samych plików tekstowych, co SVD?
Tak, odczytuję temperaturę z tych samych plików tekstowych za pomocą skryptu
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

a nie chciałbyś się podzielić tym skryptem?...;-)
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Jak pisałem wyżej urządzenie na razie działa tylko na biurku i to nie ukończone.
Skrypt wyglada tak

Code: Select all

import RPi.GPIO as GPIO
import argparse
import os
import re
from time import sleep
import datetime
time_index=0
time_interval = datetime.timedelta(minutes=1)
time_start = datetime.datetime.now()
time_next = time_start + time_index * time_interval




#parser=argparse.ArgumentParser(allow_abbrev=False)
parser=argparse.ArgumentParser()
parser.add_argument("--stemp","-s", help="Set temperature in room", metavar='set-temp-filip.txt',  nargs='?',const=1)
parser.add_argument("--atemp","-a", help="Real temp in room",       metavar='temp.txt',  nargs='?', const=1)
parser.add_argument("--ttemp","-t", help="toleracne temperature",   metavar='tolrance_temp.txt', nargs='?', const=1)
#parser.add_argument("--window","-w" help="Number of gpio - window", metaver='21', type=int, nargs='?', const=1)
parser.add_argument("--relay","-r", help="Number of gpio - relay",  metavar='13' ,type=int, nargs='?', const=1)


args=parser.parse_args()

GPIO.setmode(GPIO.BCM)
#GPIO.setup(args.window, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(args.relay, GPIO.OUT)


#print(args.window)
#print(args.gpio)
try:
    while True:
        time_now = datetime.datetime.now()
        if(time_now>=time_next):
               time_index = time_index+1
               time_next = time_start + time_index *time_interval

               # odczyt temperatury zadanej
               f=open(args.stemp,'r')
               stemp = f.readline()
               f.close()

               def is_float(v):
                   try:
                       float(v)
                       return True
                   except ValueError:
                       return False
               if is_float(stemp):
                   set_temp = float(stemp)
               else:
                   set_temp = set_temp_old

               # odczyt temperatury aktualnej
               f=open(args.atemp,'r')
               atemp = f.readline()
               f.close()

               def is_float_a(v):
                   try:
                      float(v)
                      return True
                   except ValueError:
                      return False
               if is_float_a(atemp):
                   actual_temp = float(atemp)
               else:
                   actual_temp = actual_temp_old

               # odczyt tolerancji  temperatury
               f=open(args.ttemp,'r')
               ttemp = f.readline()
               f.close()
        
               def is_float_t(v):
                   try:
                      float(v)
                      return True
                   except valueError:
                      return False
               if is_float_t(ttemp):
                   tolerance_temp = float (ttemp)
               else:
                   tolerance_temp = tolerance_temp_old

               # regulacja temperatury
               if   actual_temp <  set_temp :
		    GPIO.output(args.relay, GPIO.LOW,)
                    print('grzanie aktywne ')
               elif actual_temp >=  (set_temp - tolerance_temp):
                    GPIO.output(args.relay,GPIO.HIGH)
                    print('grzanie nieaktywne')
               print(set_temp)
               print(actual_temp)


               set_temp_old = set_temp
               actual_temp_old = actual_temp
               tolerance_temp_old = tolerance_temp
except KeyboardInterrupt:
    GPIO.cleanup();


Gdy uruchomie go w ten sposób :

Code: Select all

 python2 heating.py --stemp stemp-filip.txt --atemp ~/supla-mi-th/sensor_th2.txt --ttemp tolerance_temp.txt --relay 13
to działa , pojawia sie np

Code: Select all

heating.py:28: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(args.relay, GPIO.OUT)
grzanie nieaktywne    <- stan przekaznika
22.0				<- temp. zadana 
22.3				<- temp. aktualna

Niestety gdy utworzyłem plik konfiguracyjny heating_th2.conf

Code: Select all


[program:heating-th-2]
command=python2 heating.py --stemp stemp-filip.txt --atemp ~/supla-mi-th/sensor_th2.txt --ttemp tolerance_temp.txt --relay 13
directory=/home/pi/supla-heating
autostart=true
autorestart=true
user=pi

To po restarcie supervisora dostaję

Code: Select all

cpu-temp                         RUNNING   pid 18467, uptime 0:15:16
heating-th-2                     FATAL     Exited too quickly (process log may have details)
mi-th-0                          RUNNING   pid 18466, uptime 0:15:16
mi-th-1                          RUNNING   pid 18465, uptime 0:15:16
mi-th-2                          RUNNING   pid 18464, uptime 0:15:16
mi-th-3                          RUNNING   pid 18463, uptime 0:15:16
supla-pushover                   RUNNING   pid 18459, uptime 0:15:16
supla-virtual-device             RUNNING   pid 18462, uptime 0:15:16
supla-window-dach                RUNNING   pid 18461, uptime 0:15:16
supla-window-filip               RUNNING   pid 18460, uptime 0:15:16
supla-window-maks                RUNNING   pid 18470, uptime 0:15:16


Niestety nie wiem ( jeszcze ) dlaczego tak się dzieje :(
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Niestety moja wiedza z pythona i Raspberry pi się wyczerpała czy jakiś specjalista rzuciłby okiem na moje wypociny i wykazał błąd lub pomysł na rozwiązanie
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

No a od czego jest internet :D , poszperałem i znalazłem .
W moim przypadku superwizor wychodził bardzo szybko, ponieważ kończył się przed startsecs, a ponieważ startsecs nie został zdefiniowany, używa wartości domyślnej, która wynosi 1.

Ustawienie startsecs=0 naprawiło mój problem.
Teaz plik konfiguracyjny wygląda tak

Code: Select all

[program:heating-th-2]
command=python2 heating.py --stemp stemp-th2.txt --atemp ~/supla-mi-th/sensor_th2.txt --ttemp tolerance_temp.txt --relay 13
directory=/home/pi/supla-heating
startsecs=0
autostart=true
autorestart=true
user=pi
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)

Return to “Pomysły i koncepcje”