My build is cooler than yours

LambidEt kõik ausalt ära rääkida tuleb alustada algusest….. või tegelikult. Päris algusest peale hakates läheks jutt kindlasti liiga pikaks, seepärast alustame parem sellest kohast kui ma sattusin lambipoodi. Täpsemalt sattusin ma küll lattu, kus ostetud lampe kätte sai aga õigupoolest see polegi ju nii tähtis. Oluline on aga see, et seal, laopidajanna kõrval laual, hõõgus punane laavalamp.

Kui nüüd laavalampidest rääkida, siis veel ca aasta või kaks tagasi oli laavalambi Eestist leidmine suht ületamatu ülesanne ning kõik heietused teemal “küll teeks oma automatiseeritud buildile XFD aga pagan laavalampe pole müüa” devalveerusid hoobilt. Mõeldes, et kui ma nüüd head võimalust ei kasuta jäävadki lambid ostmata soetasin endale kaks võrdlemisi macho-fallilist valgustit: punase ja rohelise. Valida oli veel ka sinst värvi aga otsustasin, et jään vanale heale valgusfoorile truuks.

Automaatne nightly build on meil juba mõnda aega jooksnud nii et nüüd oli vaid tarvis leida moodus, kuidas lampe vastavalt vajadusele süüdata ning kustutada. Pragmatic Automation pakub lahendusna välja X10 kontrolleri aga kuna Eestis on need seadmed võrdlemisi kirve hinnaga mõtlesin, et pöördun kõrvaltuppa, kus meestel on tinutuskolb sõna otseses mõttes programmeerija käepikendus. Üsna eksprompt leppisime Taaviga kokku sobiva COM pordi kaudu juhitava releede kontrolleri nõuete speki. Taavi sukeldus elektroonikakomponentide veebipoodide krüptilisse maailma aga mina tundsin seni rõõmu roheliste ning punaste laavamullide subakvaarsest põkkumisest.

Ei kulunud nädalatki kui ühel hommikul avastasin oma lauanurgalt APC Back-UPSi, mis releede kontrollerina taaskasutusse oli läinud. Soovin talle selles ametis pikemat iga kui katkematu toitepingeallikana.

Kontroller

Taavi tuli ja seletas kuhu midagi plugida, mida eksupsile öelda tuleb ja pani mulle südamele, et ma sellega soojapuhureid juhtima ei hakkaks. Niiviisi olingi ennast varustanud arvuti kaudu juhitava pikendusjuhtmega. Nüüd jäi veel kirjutada väike jupp programmi mis CruiseControli RSSi lugemise ning tulede lülitamisega tegeleks. Kuna ma Pythonit progeda ei oska siis kirjutasin ligikaudu tunniga umbes sellise koleda, kuid asja ära ajava programmikese meie projekti, nimetagem seda siin tinglikult “Nightly”, igaöise buildi õnnestumise/mitteõnnestumise tagasisidestamiseks. Aga küllap suudate ise vajadusel parema valmis nikerdada.

import serial, feedparser, time

RED = "rel1"
GREEN = "rel2"
COM1 = 0

URL = "http://buildserver/cruisecontrol/rss"

def read_line(port):
	ch = ''
	while( ch != '\\r' ):
		ch=port.read()

def switch(red, green):
	com = serial.Serial(COM1, 38400, timeout=1)
	com.open()
	if com.isOpen():
		com.write(RED+red+"\\r")
		read_line(com)
		com.write(GREEN+green+"\\r")
		com.close()

def succeed():
	switch(red="off", green="on")

def fail():
	switch(red="on", green="off")

def update_status():
	feed = feedparser.parse(URL)

	if str(feed.feed.title) == 'CruiseControl Results':
		for entry in feed['entries']:
			if str(entry.title[:7]) == 'Nightly':
				if  str(entry.summary_detail['value']) == 'Build passed':
					succeed()
				else:
					fail()

while True:
	update_status()
	time.sleep(60)

CruiseControli RSS ütleb siis meile kas “Build passed” või midagi muud. Sellest olenevalt paneme põlema kas punase või rohelise laavalambi. Releekontrolleriga räägitav protokoll on lihtne koosnedes 4 käsust (rel1on, rel1off, rel2on, rel2off). OK tegelt on käsk “ident” ka olemas aga see pole antud kontekstis oluline. Kuna mind kontrolleri poolt käsule vastatav ACK/NACK tegelikult ei huvita siis loen selle collisioni vältimiseks enne järgmise käsu saatmist lihtsalt pordist välja. Ja nüüd meil ongi eXtreme Feedback Device. Hommikuti on kohe tore kontorisse saabuda kui rohelised laavamullid sind juba ukselt tervitavad.

Lahang

Minieelarve:

Lambid: 2tk ca 330.-
Elektroonikajupid ca 300.-
Katkine Back-UPS: tasuta
Kokku: ~ 650.-

Releekontrolleri ehitamisest koos skeemidega lubas Taavi ise peatselt kirjutada, nii et stei tjuund.

Leave a Reply

Your email address will not be published. Required fields are marked *