Varaajan ohjaus minimi hinnoin

PenaPedia
Versio hetkellä 4. tammikuuta 2025 kello 04.20 – tehnyt 192.168.0.104 (keskustelu)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioonSiirry hakuun

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