Dnes jsem resil problem s vypinanim domaciho serveru – nepotrebuju aby bezel porad (akorat zere elektrinu). Nechce se mi kvuli vypnuti po siti zapinat jiny PC. Proto jsem si udelal tlacitko, ktere kdyz podrzim tak vypnu server.
Kvuli jednoduchosti se to pripojuje na seriovy port (RS-232C). Samotne vypnuti je realizovano uzemnenim vstupni linky DSR (pin 6) proti zemi GND (pin 5) po stanoveny cas.Na pocitaci bezi nasledujici program (/usr/local/bin/vypnout-rs232.py):
Kvuli jednoduchosti se to pripojuje na seriovy port (RS-232C). Samotne vypnuti je realizovano uzemnenim vstupni linky DSR (pin 6) proti zemi GND (pin 5) po stanoveny cas.Na pocitaci bezi nasledujici program (/usr/local/bin/vypnout-rs232.py):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#! /usr/local/bin/python # VYZADUJE python-serial from serial import * from os import system from time import sleep ##################################################### port = "/dev/ttyS0" # jmeno serioveho portu cas = 2 # jak dlouho je potreba drzet tlacitko, # aby doslo k vypnuti PC [s] 0.2 => 0,2s #################################################### com = Serial(port) print "Port ", com.portstr, "otevren." print "Cekam na stisknuti tlacitka ..." while 1 : sleep(cas) stav = com.getDSR() if stav == 1 : system ("halt") com.Close() |
Instalace:
- Nainstalovat python-serial
- Do /usr/local/bin/ nakopirovat soubor s programem a pojmenovat ho vypnout-rs232.py
- V souboru vypnout-rs232.py nastavit pozadovany port a dobu drzeni tlacitka (kdyz nastavim 10s, tak musim tlacitko drzet 10s nez se PC vypne) CAS MUSI BYT ALESPON 0,1s, JINAK JE PROCESOR VYTIZEN NA 100%
- Do /etc/rc.local pridat pred exit 0 radek: nohup python /usr/local/bin/vypnout-rs232.py &>/dev/null &
Testovano na: Debian GNU/Linux 4.0 2.6.18-4-486 i686
Dobrý den pane Vancl, dá se obdobným způsobem použít port COM i jako jednoduché tlačítko pro Windows? Abych propojením dvou pinu na seriovém portu dokázal detekovat v .NET aplikaci jako klávesu. Děkuji a přeji vše nejlepší.
Dobry den,
ano, urcite pujde na Windows vycitat stav vstupni linky serioveho portu.
Pyserial a python by sel zprovoznit i pod Windows. Pomoci cythonu by pak sel vytvorit i exe soubor z python aplikace.
v .NET jsem nikdy nic nedelal. Nasel jsem vsak nejaky navod http://xanthium.in/Serial-Programming-using-Csharp-on-Windows
a z neho https://gist.github.com/tuxmartin/2e065e09592729372e1cd19faa258888 – v tomto programu bych zkusil pouzit „SerialPort.DsrHolding“ https://msdn.microsoft.com/cs-cz/library/system.io.ports.serialport.dsrholding(v=vs.110).aspx a teoreticky by to melo bez problemu fungovat.
Jen pro info – za dolar se da sehnat USB-RS232 prevodnik: http://www.ebay.com/itm/252127285665
Kdybyste u cinskych prevodniku narazil na problem s ovladaci, staci napsat. Mam sbirku ovladacu na vetsinu cinskych USB-RS232 prevodniku.
Dobrý den,
podle mého názoru lze vyřešit tuto úlohu ještě o něco elegantněji. Mám doma starší PC bez připojeného monitoru, klávesnice a myši, které využívám jako souborový server k občasnému zálohování. Běží na něm nějaká starší verze Mandrivy. V nastavení napájení mám na stisknutí tlačítka napájení nastavenou činnost „Vypnout počítač“. Funguje to skvěle, při krátkém stisku tlačítka napájení dojde ke korektnímu ukončení OS a vypnutí PC.
Tuto funkci využívám i na ostatních PC, kde je užitečná v případě, že dojde z nějaké příčiny k pádu X serveru a ovládání z klávesnice a myši je nemožné, tak mám v záloze ještě tuto možnost korektního vypnutí PC přes tlačítko napájení.