Löin tuossa UPSin kiinni iMaciin ja totesin että virranhallintapaneelin kautta saa kyllä pakotettua *sammutuksen* kun akun tila on joku tietty, mutta halusin itse homman toimivan niin, että Mac menee nukkumaan, kun UPS siirtyy akulle (todennäköisyys sille, että UPS jaksaa pidätellä Macia "päällä" katkon yli monikymmenkertaistuu [Stetson-Harrison, 2009]).
KVG-menetelmä saatika foorumihaku aiheesta ei tuottanut tulosta kuin sen verran, että CoreFoundation tarjoaa kivan näkymän tietoihin, joiden avulla homman voi toteuttaa ohjelmallisesti. Siispä ei kun koodaamaan.
Parin illan tuloksena pikkukikkare, joka pollaa halutun virtalähteen tilaa säännöllisin väliajoin ja havaitessaan akkuvirralle siirtymisen, näyttää dialogin jossa varoitetaan unitilaan siirtymisestä. Dialogissa on peruutusnappi jolla unitilaan siirtymisen voi peruuttaa, tai vaihtoehtoisesti siirtyä välittömästi unille. Jos mitään ei tehdä, dialogi timeouttaa ja nukkumatti kutsuu.
Vaatimuksena voinee pitää sitä, että OS X tunnistaa UPSin konstilla tai toisella (hyvä indikaattori tästä on se, että virranhallintapaneelissa näkyvät UPSin tiedot). Itselläni on käytössä varsin vaatimaton APC Back-UPS CS500, sikäli mikäli se jotakuta kiinnostaa.
Koodin laadusta voi varmastikin inistä loputtomiin, sen verran tiedän ettei tuo nykyisellään pahemmin tarkistele, oliko haluttuja tietoja itseasiassa saatavilla vai ei jne, mutta kaikki suunnitellut toiminnot se toteuttaa halutulla tavalla, ja se riittää ainakin minulle näin kotikäytössä. Parannusehdotuksia toki otetaan vastaan.

Lähdekoodi löytyy täältä: http://users.tkk.fi/~veimmone/UPSsleeper.c
Voin tuosta toki binäärinkin (Intel-10.5.7:lla käännetyn) pistää jakoon mikäli kysyntää on.
Jaa niin, mitään automaattista taustaforkkausta saatika käynnistystä tietokoneen käynnistyksen yhteydessä tuossa ei ole, ne pitää itse kunkin viritellä haluamallaan tavalla. Massiiviset käyttöohjeet näkee lähdekoodista tai ajamalla pulikan ilman argumentteja. XCoden projektipohjaksi valitsin Command Line Utilityn, sieltä sen CoreFoundation Utilityn ja lisäsin vielä IOKit.framework:n tuohon External Frameworks -listaan.
Että näin. Hyviä unia! (voi tosin olla hankalaa saada unta upsin piipittäessä...)