Ero sivun ”Varaajan ohjaus minimi hinnoin” versioiden välillä

PenaPedia
Siirry navigaatioonSiirry hakuun
(Ak: Uusi sivu: Tässä on yksi osa uudelleen kirjoitettua kotinäyttöversiota johon aloin miettiä vielä parempaa ja ohjelmallisesti järkevänpää mekanismia. * Todennäköisesti käyttämäni tietorakenteet jo alkuunsa ovat aivan surkeasti valittuja eikä kontekstista irroitettu koodi varmasti monelle kerro mitään, mutta en ole vaan missään enkä koskaan muualla törmännyt varaajan ohjaamiseen sähkön hinnalla siten, että <b>todellinen lämmityksen tarve huomioidaan</b> ja sen...)
 
Ei muokkausyhteenvetoa
 
Rivi 17: Rivi 17:


def suunnittele_varaaja():
def suunnittele_varaaja():
#hinnat.append({'tunti' : x, 'hinta' : random.randrange(3, 49)})
hinnat = []
suunnitelma = {}
#Jos edes tämän päiväisiä sähkönhintoja ei ole, niin turha tehdä mitään
if data['pvmTanaan'] not in data["sahkonHinta"]:
return 0
for x in range(data['nykyinenTunti'], 24):
hinnat.append({'tunti' : x, 'hinta' : data['sahkonHinta'][data['pvmTanaan']]['hinta'][x]})
print(x)
huominen = (datetime.datetime.today()+datetime.timedelta(days=+1)).strftime('%Y-%m-%d')
if huominen in data["sahkonHinta"]:
for i in range(0, len(data["sahkonHinta"][huominen]['hinta'])):
hinnat.append({'tunti' : i + x, 'hinta' : data['sahkonHinta'][huominen]['hinta'][i]})
#print(hinnat)
myMin = min(d['hinta'] for d in hinnat)
myMin = min(d['hinta'] for d in hinnat)
#print(myMin)
#print(myMin)




kapasiteetti = data['lvesi']['varaajanKap']   # MONTAKO PULSSIA ON 150 LITRAA
kapasiteetti = data['lvesi']['varaajanKap']
lammitysteho = data['lvesi']['varaajanTeho'] # (kW)
lammitysteho = data['lvesi']['varaajanTeho']
havioteho =  data['lvesi']['varaajanHavioteho'] # (kW)
havioteho =  data['lvesi']['varaajanHavioteho']
# 85 - 4 = veden lämpötilan noston määrä  4c ---> 85 c
# luku 11 on vesimittarin mukana tullut kerroin f/11 vai oliko se 11/f, 4.2 = veden ominaislämpökapasiteetti
haviotehoPulssia = ((havioteho * 60) / (85 - 4) / 4.2) * 11 * 60 * 60
haviotehoPulssia = ((havioteho * 60) / (85 - 4) / 4.2) * 11 * 60 * 60
 
print(haviotehoPulssia)
time.sleep(1)
status = data['lvesi']['varaajanStatus']
status = data['lvesi']['varaajanStatus']


heatPulsesPerHour = ((lammitysteho * 60) / (85 - 4) / 4.2) * 11 * 60 * 60
heatPulsesPerHour = ((lammitysteho * 60) / (85 - 4) / 4.2) * 11 * 60 * 60
lammitysTarvePulssia = kapasiteetti - status
lammitysTarvePulssia = kapasiteetti - status
lammitysTarveTuntia = round(lammitysTarvePulssia / heatPulsesPerHour)
lammitysTarveTuntia = round(lammitysTarvePulssia / heatPulsesPerHour)+1


hinnat = sorted(hinnat, key=saatana)
hinnat = sorted(hinnat, key=saatana)


i = 0
i = 0
for x in hinnat:
for x, val in enumerate(hinnat):
print(x)
print(i)
tila = False
tila = False
status -= haviotehoPulssia
#status -= haviotehoPulssia  
# SALLITAAN KAIKKI HINNAT KÄYTTÖÖN, JOTKA OVAT ALLE 1.5 x PIENIN HINTA
#status -= 500
# KÄYTÄNNÖN KOKEMUS AUTTAA HIERTOMAAN HARD LIMITTEJÄ KUNTOON SITTEN PAREMMIN
#or x['hinta'] < myMin * 1.1
if i < lammitysTarveTuntia or x['hinta'] < myMin * 1.5:
if i <= lammitysTarveTuntia:
tila = True
tila = True
#status += heatPulsesPerHour
status += heatPulsesPerHour
tmpArr = {'hinta' : x['hinta'], 'status' : round(status), 'tila' : tila}
#i += 1
suunnitelma[x['tunti']] = tmpArr
if status > kapasiteetti:
status = kapasiteetti
tmpArr = {'hinta' : val['hinta'], 'tunti' : val['tunti'], 'status' : round(status), 'tila' : tila}
suunnitelma[val['tunti']] = tmpArr
i += 1
i += 1
 
data['lvesi']['varaajanSuunnitelma'] = suunnitelma
#print(pprint.pformat(suunnitelma, indent=1,sort_dicts=False))
#print(pprint.pformat(suunnitelma, indent=1,sort_dicts=False))
</pre>
</pre>



Nykyinen versio 4. tammikuuta 2025 kello 04.20

Tässä on yksi osa uudelleen kirjoitettua kotinäyttöversiota johon aloin miettiä vielä parempaa ja ohjelmallisesti järkevänpää mekanismia.

  • Todennäköisesti käyttämäni tietorakenteet jo alkuunsa ovat aivan surkeasti valittuja eikä kontekstista irroitettu koodi varmasti monelle kerro mitään, mutta en ole vaan missään enkä koskaan muualla törmännyt varaajan ohjaamiseen sähkön hinnalla siten, että todellinen lämmityksen tarve huomioidaan ja sen mukaan mennään halvimpien tuntien (tai varttien) mukaan.
  • Koska veden poistuvaa määrää varaajasta mitataan pulssittavalla vesimittarilla, saadaan siten tietää kauanko varaajaan on syötettävä tietyllä sähköteholla energiaa, jotta se saavuttaisi termostaatin pyytämän lämpötilan (= varaaja täynnä).
  • Tätä on toistaiseksi testailtu ja kehitetty vain simuloimalla, tässä vaiheessa oli sopiva hetki tulla selvittämään ajatuksia PenaPedian puolelle...
  • Etenkin tuo mittarilta saatujen pulssien ja tehon välinen suhde voi ehkä jota kuta auttaa. Muistan kun pari vuotta aiemmin pähkäilin pääni puhki ja simuloin monella eri tavalla varmistaakseni että kaava on oikein
  • Toiminta on ajateltu niin, että tuota kutsutaan vaikka kerran minuutissa ja se päättää varaajan päälläoloajasta niin monen tunnin (tai vartin) tiedoilla kuin onkaan saatavilla.


Tätä kannattaa ajatella ohjeellisena pseudokoodina kaikenkaikkiaan


def saatana(e):
	return e['hinta']


def suunnittele_varaaja():
	#hinnat.append({'tunti' : x, 'hinta' : random.randrange(3, 49)})
	
	hinnat = []
	suunnitelma = {}
	#Jos edes tämän päiväisiä sähkönhintoja ei ole, niin turha tehdä mitään
	if data['pvmTanaan'] not in data["sahkonHinta"]:
		return 0
	
	
	for x in range(data['nykyinenTunti'], 24):
		hinnat.append({'tunti' : x, 'hinta' : data['sahkonHinta'][data['pvmTanaan']]['hinta'][x]})
		print(x)
	
	huominen = (datetime.datetime.today()+datetime.timedelta(days=+1)).strftime('%Y-%m-%d')
	if huominen in data["sahkonHinta"]:
		for i in range(0, len(data["sahkonHinta"][huominen]['hinta'])):
			hinnat.append({'tunti' : i + x, 'hinta' : data['sahkonHinta'][huominen]['hinta'][i]})
	#print(hinnat)
	
	myMin = min(d['hinta'] for d in hinnat)
	#print(myMin)


	kapasiteetti = data['lvesi']['varaajanKap']
	lammitysteho = data['lvesi']['varaajanTeho']
	havioteho =  data['lvesi']['varaajanHavioteho']
	haviotehoPulssia = ((havioteho * 60) / (85 - 4) / 4.2) * 11 * 60 * 60
	print(haviotehoPulssia)
	time.sleep(1)
	status = data['lvesi']['varaajanStatus']

	heatPulsesPerHour = ((lammitysteho * 60) / (85 - 4) / 4.2) * 11 * 60 * 60
	lammitysTarvePulssia = kapasiteetti - status
	lammitysTarveTuntia = round(lammitysTarvePulssia / heatPulsesPerHour)+1

	hinnat = sorted(hinnat, key=saatana)

	i = 0
	for x, val in enumerate(hinnat):
		print(i)
		tila = False
		#status -= haviotehoPulssia 
		#status -= 500
		#or x['hinta'] < myMin * 1.1
		if i <= lammitysTarveTuntia:
			tila = True
			status += heatPulsesPerHour
			#i += 1
		if status > kapasiteetti:
			status = kapasiteetti
		tmpArr = {'hinta' : val['hinta'], 'tunti' : val['tunti'], 'status' : round(status), 'tila' : tila}
		suunnitelma[val['tunti']] = tmpArr
		i += 1
	
	data['lvesi']['varaajanSuunnitelma'] = suunnitelma
	#print(pprint.pformat(suunnitelma, indent=1,sort_dicts=False))

Katso myös