Vanha otsikko: Saako Pythonilla estettyä virran, vaikka kone olisi latauksessa?
Mietin seuraavaa. Onnistuin tekemään läppärilleni Pythonilla akkutestin, joka kirjoittaa kerran sekunnissa tiedostoon, jos kone on päällä. Mutta tässä tulee ihan pieni epävarmuustekijä kun en välttämättä osaa käynnistää ohjelmaa samaan aikaan kuin otan virtajohdon irti koneesta. Voinko estää jotenkin ohjelmallisesti, että konetta ei ladattaisi, vaikka johto olisi kiinni koneessa? Tässä tähän mennessä kyhäämäni akkutesti:
import time from time import sleep print ('Testi alkoi '+str(time.strftime("%H:%M:%S"))) alkuaika = time.time() print('Tulokset tallennetaan tiedostoon aika.txt') while True: nyt = time.time() open('aika.txt','a') with open("aika.txt","r") as file: lines = file.readlines() with open("aika.txt", "w") as file: file.write("Kone ollut paalla: " + str(int(nyt-alkuaika)) + " sekuntia.") sleep(1)
Latautumista ei voi yleensä estää. Joissain koneissa voi Windowsissa olla ajuri, jolla voi pysäyttää latauksen tiettyyn vaiheeseen, mutta yleensä tämä ei silti tarkoita, että akku itsestään kuluisi johdon ollessa kiinni.
Pieni ero siinä, milloin johto irtoaa ja milloin ohjelma käynnistyy, on täysin merkityksetön, koska mittauksessa on paljon suurempia virhetekijöitä. Akun kesto riippuu koneen käytöstä; myös Python-ohjelmasi lisää kulutusta. Tiedostoon kirjoittaminen ei yleensä tapahdu välittömästi, vaan mukana on välimuisti mahdollisesti monellakin tasolla, esim. Pythonissa, tiedostojärjestelmän ajureissa, levyn ajureissa ja fyysisesti levyllä. Jos siis kone tilttaa akun loppumisen takia, dataa voi hävitä sekunteja tai minuuttejakin asetuksista riippuen.
Lisäksi koko kirjoituskoodisi on aika kummallinen: miksi avaat tiedoston silmukassa kolme kertaa, ensin täysin turhaan append-tilassa, sitten täysin turhaan lukemista varten ja lopuksi vasta kirjoittamista varten?
Parempi tapa olisi lähettää data toiselle koneelle, koska silloin data ei vahingossa katoaisi koneen sammuessa ja siirto myös kuluttaisi yleensä vähemmän virtaa kuin kovalevyn käyttö. Siirtoon voisi käyttää esim. UDP-paketteja.
Kun saat edellä mainitut viat ratkaistua, voit miettiä ohjelman käynnistyksen tarkkuutta. Siinä järkevämpi ajatus voisi olla se, että käynnistäisit ohjelman valmiiksi ja ohjelman alussa tunnistaisit, milloin johto irtoaa. Toteutus riippuu käyttöjärjestelmästä; ainakin minulla tieto löytyy tiedostosta /sys/class/power_supply/ADP1/online
.
Metabolix kirjoitti:
Jos siis kone tilttaa akun loppumisen takia, dataa voi hävitä sekunteja tai minuuttejakin asetuksista riippuen.
OK. Mutta kuitenkin minuuttien tarkkuus riittäisi siihen, että ei tarvitsisi koko ajan kytätä koneen sammumista, vaan voisin käydä vaikka ruokatunnilla. Ymmärrän, että koetin optimoida väärää asiaa.
Metabolix kirjoitti:
Lisäksi koko kirjoituskoodisi on aika kummallinen: miksi avaat tiedoston silmukassa kolme kertaa, ensin täysin turhaan append-tilassa, sitten täysin turhaan lukemista varten ja lopuksi vasta kirjoittamista varten?
Niinpä. Tein ohjelmaa yrityksen ja erehdyksen kautta. En vain osaa ajatella selkeästi.
Metabolix kirjoitti:
Parempi tapa olisi lähettää data toiselle koneelle, koska silloin data ei vahingossa katoaisi koneen sammuessa ja siirto myös kuluttaisi yleensä vähemmän virtaa kuin kovalevyn käyttö. Siirtoon voisi käyttää esim. UDP-paketteja.
Toki. Taidot ei vaan riitä. Mulla on testattavassa koneessa Windows XP ja toisessa pöytäkoneessa Xubuntu 14.04. Meneekö tämä suoraan ping-komennolla Ubuntussa?
Okei. Päätin mitata akkukestoa seuraavasti:
#!/bin/bash time ( while [ true ]; do ping -c 1 "$1" > /dev/null || break sleep 1 done )
Hienosti keksitty, tosiaan seurannan voi toteuttaa helposti noin päin eli pingaamalla toiselta koneelta. (Itse ajattelin, että tutkittavalta koneelta aktiivisesti lähetettäisiin tietoja.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.