forked from OpenPDU/openpdu
startpower and config separation
This commit is contained in:
parent
ca716802d8
commit
c27e242007
3
APKBUILD
3
APKBUILD
@ -20,7 +20,8 @@ build() {
|
|||||||
|
|
||||||
package() {
|
package() {
|
||||||
mkdir -p "$pkgdir"
|
mkdir -p "$pkgdir"
|
||||||
install -Dm644 etc/openpdu/openpdu.conf "$pkgdir"/etc/openpdu/openpdu.conf
|
install -Dm644 etc/openpdu/boards.conf "$pkgdir"/etc/openpdu/boards.conf
|
||||||
|
install -Dm644 etc/openpdu/outlets.conf "$pkgdir"/etc/openpdu/outlets.conf
|
||||||
install -Dm755 etc/local.d/openpdu.start "$pkgdir"/etc/local.d/openpdu.start
|
install -Dm755 etc/local.d/openpdu.start "$pkgdir"/etc/local.d/openpdu.start
|
||||||
|
|
||||||
install -Dm755 openpdu "$pkgdir"/usr/bin/openpdu
|
install -Dm755 openpdu "$pkgdir"/usr/bin/openpdu
|
||||||
|
@ -1,21 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
OUT1=1
|
/usr/bin/openpdu initboards
|
||||||
OUT2=2
|
/usr/bin/openpdu initoutlets
|
||||||
OUT3=3
|
|
||||||
OUT4=7
|
|
||||||
OUT5=8
|
|
||||||
OUT6=9
|
|
||||||
OUT7=11
|
|
||||||
OUT8=12
|
|
||||||
|
|
||||||
for n in $(seq 1 8) ; do
|
|
||||||
eval "echo \$OUT$n > /sys/class/gpio/export"
|
|
||||||
eval "echo out > /sys/class/gpio/gpio\$OUT$n/direction"
|
|
||||||
|
|
||||||
# 0=on 1=off :)
|
|
||||||
VAL=0
|
|
||||||
|
|
||||||
eval "echo $VAL > /sys/class/gpio/gpio\$OUT$n/value"
|
|
||||||
sleep 0.2
|
|
||||||
done
|
|
||||||
|
29
etc/openpdu/outlets.conf
Normal file
29
etc/openpdu/outlets.conf
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
description = Generic outlet
|
||||||
|
startpower = 1
|
||||||
|
|
||||||
|
# [outlet0]
|
||||||
|
# board = 0
|
||||||
|
# channel = 0
|
||||||
|
# description = Router
|
||||||
|
|
||||||
|
# [outlet1]
|
||||||
|
# board = 0
|
||||||
|
# channel = 1
|
||||||
|
# description = NAS
|
||||||
|
|
||||||
|
# [outlet2]
|
||||||
|
# board = 1
|
||||||
|
# channel = 0
|
||||||
|
# description = Switch
|
||||||
|
|
||||||
|
# [outlet3]
|
||||||
|
# board=1
|
||||||
|
# channel=1
|
||||||
|
# description = MailServer
|
||||||
|
|
||||||
|
# [outlet4]
|
||||||
|
# board=1
|
||||||
|
# channel=2
|
||||||
|
# description = Extra Fan
|
||||||
|
# startpower = 0
|
58
openpdu
58
openpdu
@ -12,7 +12,8 @@ import ConfigParser
|
|||||||
import json as JSON
|
import json as JSON
|
||||||
|
|
||||||
VERSION = 0.1
|
VERSION = 0.1
|
||||||
defaults = {}
|
boardsDefaults = {}
|
||||||
|
outletsDefaults = {'description': 'Generic outlet','startpower':0}
|
||||||
_boards = []
|
_boards = []
|
||||||
_outlets = []
|
_outlets = []
|
||||||
|
|
||||||
@ -40,6 +41,11 @@ def initboards():
|
|||||||
board.init()
|
board.init()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def initoutlets():
|
||||||
|
'initialize outlets'
|
||||||
|
for outlet in _outlets:
|
||||||
|
outlet.init()
|
||||||
|
return
|
||||||
|
|
||||||
@arg('-j', '--json', help="output in json")
|
@arg('-j', '--json', help="output in json")
|
||||||
def outlets(json=False):
|
def outlets(json=False):
|
||||||
@ -187,19 +193,25 @@ class BoardGpioOut(object):
|
|||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
for gpio in self.gpios:
|
for gpio in self.gpios:
|
||||||
open('/sys/class/gpio/export','w').write(str(gpio))
|
if not os.path.isdir('/sys/class/gpio/gpio%s/' % gpio):
|
||||||
|
open('/sys/class/gpio/export','w').write(str(gpio))
|
||||||
fn = '/sys/class/gpio/gpio%s/direction' % gpio
|
fn = '/sys/class/gpio/gpio%s/direction' % gpio
|
||||||
open(fn,'w').write('out')
|
open(fn,'w').write('out')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
class Outlet(object):
|
class Outlet(object):
|
||||||
def __init__(self, outletnum, boardnum, channel):
|
def __init__(self, outletnum, boardnum, channel, startpower=False):
|
||||||
self.outletnum = int(outletnum)
|
self.outletnum = int(outletnum)
|
||||||
b = [b for b in _boards if b.boardnum==int(boardnum)]
|
b = [b for b in _boards if b.boardnum==int(boardnum)]
|
||||||
self.board = b[0]
|
self.board = b[0]
|
||||||
self.channel = int(channel)
|
self.channel = int(channel)
|
||||||
self.description = 'Outlet # %s' % self.outletnum
|
self.description = 'Outlet # %s' % self.outletnum
|
||||||
|
self.startpower = startpower
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
self.setpower(self.startpower)
|
||||||
|
return
|
||||||
|
|
||||||
def setpower(self, power):
|
def setpower(self, power):
|
||||||
self.board.setpower(self.channel,power)
|
self.board.setpower(self.channel,power)
|
||||||
@ -229,38 +241,46 @@ class Outlet(object):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
configParser = ConfigParser.SafeConfigParser(defaults=defaults)
|
boardsConfigParser = ConfigParser.SafeConfigParser(defaults=boardsDefaults)
|
||||||
|
boardsConfigFile = '/etc/openpdu/boards.conf'
|
||||||
|
if os.path.isfile(boardsConfigFile) and os.access(boardsConfigFile, os.R_OK):
|
||||||
|
boardsConfigParser.read(boardsConfigFile)
|
||||||
|
|
||||||
configFile = '/etc/openpdu/openpdu.conf'
|
for s in boardsConfigParser.sections():
|
||||||
if os.path.isfile(configFile) and os.access(configFile, os.R_OK):
|
|
||||||
configParser.read(configFile)
|
|
||||||
|
|
||||||
for s in configParser.sections():
|
|
||||||
if re.match('^board.*',s):
|
if re.match('^board.*',s):
|
||||||
bType = configParser.get(s, 'type')
|
bType = boardsConfigParser.get(s, 'type')
|
||||||
num = int(re.sub(r'^board','',s))
|
num = int(re.sub(r'^board','',s))
|
||||||
if bType=='gpio-out':
|
if bType=='gpio-out':
|
||||||
channels = int(configParser.get(s, 'channels'))
|
channels = int(boardsConfigParser.get(s, 'channels'))
|
||||||
gpios = []
|
gpios = []
|
||||||
for g in range(0,channels):
|
for g in range(0,channels):
|
||||||
gpios.append(int(configParser.get(s, 'channel%s' % g)))
|
gpios.append(int(boardsConfigParser.get(s, 'channel%s' % g)))
|
||||||
b = BoardGpioOut(boardnum=num, channels=channels, gpios=gpios)
|
b = BoardGpioOut(boardnum=num, channels=channels, gpios=gpios)
|
||||||
_boards.append(b)
|
_boards.append(b)
|
||||||
elif bType=='i2c-out':
|
elif bType=='i2c-out':
|
||||||
channels = int(configParser.get(s, 'channels'))
|
channels = int(boardsConfigParser.get(s, 'channels'))
|
||||||
address = configParser.get(s, 'address')
|
address = boardsConfigParser.get(s, 'address')
|
||||||
bus = configParser.get(s, 'bus')
|
bus = boardsConfigParser.get(s, 'bus')
|
||||||
b = BoardI2COut(boardnum=num, channels=channels, address=address, bus=bus)
|
b = BoardI2COut(boardnum=num, channels=channels, address=address, bus=bus)
|
||||||
_boards.append(b)
|
_boards.append(b)
|
||||||
|
|
||||||
|
outletsConfigParser = ConfigParser.SafeConfigParser(defaults=outletsDefaults)
|
||||||
|
outletsConfig = '/etc/openpdu/outlets.conf'
|
||||||
|
if os.path.isfile(outletsConfig) and os.access(outletsConfig, os.R_OK):
|
||||||
|
outletsConfigParser.read(outletsConfig)
|
||||||
|
for s in outletsConfigParser.sections():
|
||||||
if re.match('^outlet.*',s):
|
if re.match('^outlet.*',s):
|
||||||
num = int(re.sub(r'^outlet','',s))
|
num = int(re.sub(r'^outlet','',s))
|
||||||
description = configParser.get(s, 'description')
|
description = outletsConfigParser.get(s, 'description')
|
||||||
boardnum = configParser.get(s, 'board')
|
boardnum = outletsConfigParser.get(s, 'board')
|
||||||
channel = configParser.get(s, 'channel')
|
channel = outletsConfigParser.get(s, 'channel')
|
||||||
o = Outlet(outletnum=num, boardnum=boardnum, channel=channel)
|
startpower = outletsConfigParser.get(s, 'startpower') == 1
|
||||||
|
o = Outlet(outletnum=num, boardnum=boardnum, channel=channel, startpower=startpower)
|
||||||
o.description = description
|
o.description = description
|
||||||
_outlets.append(o)
|
_outlets.append(o)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
parser = argh.ArghParser()
|
parser = argh.ArghParser()
|
||||||
parser.add_commands([setpower, getpower, outlets, boards, initboards, version])
|
parser.add_commands([setpower, getpower, outlets, boards, initboards, version])
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user