예제 #1
0
def delay(seconds):
    time0 = Uptime()
    sleeptime = seconds
    while sleeptime > 0:
        time.sleep(sleeptime)
        time1 = Uptime()
        sleeptime = seconds - time1 + time0
예제 #2
0
def obtain_uptime(show_ver):

    match = re.search(r".* uptime is .*", show_ver)

    if match:
        uptime_str = match.group().strip()
        uptime_obj = Uptime(uptime_str)
        return uptime_obj.uptime_seconds()
    else:
        return None
예제 #3
0
def obtain_uptime(show_ver):

    match = re.search(r".* uptime is .*", show_ver)

    if match:
        uptime_str = match.group().strip()
        uptime_obj = Uptime(uptime_str)
        return uptime_obj.uptime_seconds()
    else:
        return None
예제 #4
0
def obtain_uptime(show_ver):
    '''
    Obtain uptime from show version data
    '''
    match = re.search(r".* uptime is .*", show_ver)
    #print(type(match))
    if match:
        uptime_str = match.group().strip()
        uptime_obj = Uptime(uptime_str)
        return uptime_obj.uptime_seconds()
    else:
        return "None"
예제 #5
0
    def writedata(self):
        localtime = time.localtime()
        with codecs.open(datatempfilename, 'w', encoding='utf8') as f:
            f.write(u'''\
{date}
{time}
{S1Color.rH}
{S1rH}
{S2Color.rH}
{S2rH}
{S1Color.T}
{S1T}
{S2Color.T}
{S2T}
{S1Color.tau}
{S1tau}
{S2Color.tau}
{S2tau}
{fanstatestyle}
{modetxt}{fanstatetxt}
{statusstyle}
{statustxt}
{IPeth0}
{IPwlan0}
{IPwan}
{uptime}
{progtime}
{lastsync}'''.format(date=time.strftime("%d.%m.%Y", localtime),
                     time=time.strftime("%H:%M:%S", localtime),
                     S1rH=prettyPrint(self.S1.rH),
                     S2rH=prettyPrint(self.S2.rH),
                     S1T=prettyPrint(self.S1.T),
                     S2T=prettyPrint(self.S2.T),
                     S1tau=prettyPrint(self.S1.tau),
                     S2tau=prettyPrint(self.S2.tau),
                     S1Color=CSSstyle(self.S1),
                     S2Color=CSSstyle(self.S2),
                     statustxt=self.statustxt,
                     statusstyle=self.statusstyle,
                     modetxt=self.modetxt,
                     fanstatetxt=self.fanstatetxt,
                     fanstatestyle=self.fanstatestyle,
                     IPeth0=get_ip_address('eth0'),
                     IPwlan0=get_ip_address('wlan0'),
                     IPwan=get_wan_ip(),
                     uptime=str(datetime.timedelta(seconds=int(Uptime()))),
                     progtime=str(
                         datetime.timedelta(seconds=int(Uptime() -
                                                        progstart))),
                     lastsync=self.last_sync if self.last_sync else 'None'))
        os.rename(datatempfilename, datafilename)
예제 #6
0
    def _wait(self):
        GPIO.setup(self.pin_data, GPIO.IN, GPIO.PUD_UP)
        #try:
        #    channel = GPIO.wait_for_edge(self.pin_data, GPIO.FALLING, timeout=1000)
        #except RuntimeError as error:
        #    raise ShtCommFailure(*error.args)
        #if channel is None:
        #    raise ShtCommFailure('Wait timeout')

        # Busy wait... more reliable
        t0 = Uptime()
        while self._data_get():
            if Uptime() - t0 > 1:
                raise ShtCommFailure('Wait timeout')
예제 #7
0
 def display(self):
     infolines = (
         ['IP Ethernet/WLAN:'],
         ['', get_ip_address('eth0')],
         ['', get_ip_address('wlan0')],
         ['Bootvorgang vor:'],
         ['', str(datetime.timedelta(seconds=int(Uptime())))],
         ['Programmstart vor:'],
         ['', str(datetime.timedelta(seconds=int(Uptime() - self.progstart)))],
         ['Freies RAM:', getAvailableRAM()],
     )
     self.index = max(min(self.index, len(infolines) - self.displayLines), 0)
     self.messageboard.post(
         'Info',
         infolines[self.index:self.index + self.displayLines])
예제 #8
0
    def onAverage(self, message):
        with self.lock:
            uptime0 = Uptime()
            timespan = message

            T1 = 0
            rH1 = 0
            tau1 = 0
            count1 = 0
            T2 = 0
            rH2 = 0
            tau2 = 0
            count2 = 0

            for uptime, S1Data, S2Data in self.deque:
                assert uptime <= uptime0
                if uptime0 - uptime > timespan:
                    break
                if not S1Data.Error:
                    T1 += S1Data.T
                    rH1 += S1Data.rH
                    tau1 += S1Data.tau
                    count1 += 1
                if not S2Data.Error:
                    T2 += S2Data.T
                    rH2 += S2Data.rH
                    tau2 += S2Data.tau
                    count2 += 1
            if count1 > 0:
                T1 /= count1
                rH1 /= count1
                tau1 /= count1
            Error1 = count1 < max(1, timespan / 20)
            if count2 > 0:
                T2 /= count2
                rH2 /= count2
                tau2 /= count2
            Error2 = count2 < max(1, timespan / 20)
            return (Bunch(rH=rH1, T=T1, tau=tau1, Error=Error1),
                    Bunch(rH=rH2, T=T2, tau=tau2, Error=Error2))
예제 #9
0
class InfoScreen:
    progstart = Uptime()
    displayLines = 7

    def __init__(self, messageboard):
        self.messageboard = messageboard
        self.index = 0

    def display(self):
        infolines = (
            ['IP Ethernet/WLAN:'],
            ['', get_ip_address('eth0')],
            ['', get_ip_address('wlan0')],
            ['Bootvorgang vor:'],
            ['', str(datetime.timedelta(seconds=int(Uptime())))],
            ['Programmstart vor:'],
            ['', str(datetime.timedelta(seconds=int(Uptime() - self.progstart)))],
            ['Freies RAM:', getAvailableRAM()],
        )
        self.index = max(min(self.index, len(infolines) - self.displayLines), 0)
        self.messageboard.post(
            'Info',
            infolines[self.index:self.index + self.displayLines])

    def forward(self):
        self.index += 1
        self.display()

    def back(self):
        self.index -= 1
        self.display()

    def select(self, pin):
        pass

    def leave(self):
        pass
예제 #10
0
logger.info('Startup')

signals_handler = signals_handler(messageboard)

with Display(), \
     Sensor(), \
     Status(), \
     HtmlWriter(), \
     Fan(), \
     Menu(), \
     Devices(), \
     DCF77(), \
     Average(), \
     RestartWLAN(), \
     CheckNetwork():
    time0 = Uptime()
    while messageboard.query('ExitThread') is None:
        exception = messageboard.query('Exception')
        if exception is not None:
            raise exception
        messageboard.post('Time', (Uptime(), time.localtime()))
        time1 = Uptime()
        if not time1 >= time0:
            logger.warning('Error in uptime: {} < {}.'.format(time1, time0))
            time0 = time1
        sleeptime = 1 - time1 + time0
        if sleeptime <= 0:
            logger.warning(u'Zero sleep time: {} < {}, Δ={:.1f}s.'.format(
                time0, time1, time1 - time0))
        while sleeptime > 0:
            time.sleep(sleeptime)
예제 #11
0
 def __init__(self):
     ComponentWithThread.__init__(self, 'check_wlan')
     self.event = Event()
     self.lastmeasurement = Uptime()
예제 #12
0
    def write(self):
        localtime = time.localtime()
        with codecs.open(pagetempfilename, 'w', encoding='utf8') as f:
            f.write(u'''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Fan control</title>
<meta name="author" content="Daniel Müllner">
<script type="text/JavaScript">
function timedRefresh(timeoutPeriod) {{ setTimeout("location.reload(true);",timeoutPeriod); }}
window.onload = timedRefresh(10000);
</script>
</head>
<style>
body {{font-family: sans-serif;}}
h1 {{font-size: 125%;}}
table {{border:1px solid grey;
border-collapse:collapse;}}
            td{{padding:4px 8px}}
tr.bg {{background-color:#ffb;}}
tr.hr {{border-bottom:1px solid black}}
td.l {{text-align:left;}}
td.c {{text-align:center;}}
td.r {{text-align:right;}}
</style>
<body>
<h1>Fan control</h1>
<table>
  <tr>
    <td colspan="3">
      {date}<span style="float:right">{time}</span>
    </td>
  </tr>
  <tr class="hr">
    <td>
    </td>
    <td class="c">
      Indoors
    </td>
    <td class="c">
      Outdoors
    </td>
  </tr>
  <tr class="bg">
    <td>
      Relative humidity in %
    </td>
    <td class="c" style="{S1Color.rH}">
      {S1rH}
    </td>
    <td class="c" style="{S2Color.rH}">
      {S2rH}
    </td>
  </tr>
  <tr>
    <td>
      Temperature in °C
    </td>
    <td class="c" style="{S1Color.T}">
      {S1T}
    </td>
    <td class="c" style="{S2Color.T}">
      {S2T}
    </td>
  </tr>
  <tr class="bg">
    <td>
      Dew point in °C
    </td>
    <td class="c" style="{S1Color.tau}">
      {S1tau}
    </td>
    <td class="c" style="{S2Color.tau}">
      {S2tau}
    </td>
  </tr>
  <tr>
    <td colspan="3" style="{fanstatestyle}">
      {modetxt}{fanstatetxt}
    </td>
  </tr>
  <tr class="bg hr">
    <td colspan="3" style="{statusstyle}">
      {statustxt}
    </td>
  </tr>
  <tr>
    <td colspan="3">
      IP Ethernet:&nbsp;<span style="float:right">{IPeth0}</span>
    </td>
  </tr>
  <tr class="bg">
    <td colspan="3">
      IP WLAN:&nbsp;<span style="float:right">{IPwlan0}</span>
    </td>
  </tr>
  <tr>
    <td colspan="3">
      IP WAN:&nbsp;<span style="float:right">{IPwan}</span>
    </td>
  </tr>
  <tr class="bg">
    <td colspan="3">
      OS uptime:&nbsp;<span style="float:right">{uptime}</span>
    </td>
  </tr>
  <tr>
    <td colspan="3">
      Controller uptime:&nbsp;<span style="float:right">{progtime}</span>
    </td>
  </tr>
  <tr class="bg">
    <td colspan="3">
      Last DCF77 signal:&nbsp;<span style="float:right">{lastsync}</span>
    </td>
  </tr>
</table>
</body>
</html>
'''.format(date=time.strftime("%d.%m.%Y", localtime),
            time=time.strftime("%H:%M:%S", localtime),
            S1rH=prettyPrint(self.S1.rH),
            S2rH=prettyPrint(self.S2.rH),
            S1T=prettyPrint(self.S1.T),
            S2T=prettyPrint(self.S2.T),
            S1tau=prettyPrint(self.S1.tau),
            S2tau=prettyPrint(self.S2.tau),
            S1Color=CSSstyle(self.S1),
            S2Color=CSSstyle(self.S2),
            statustxt=self.statustxt,
            statusstyle=self.statusstyle,
            modetxt=self.modetxt,
            fanstatetxt=self.fanstatetxt,
            fanstatestyle=self.fanstatestyle,
            IPeth0=get_ip_address('eth0'),
            IPwlan0=get_ip_address('wlan0'),
            IPwan=get_wan_ip(),
            uptime=str(datetime.timedelta(seconds=int(Uptime()))),
            progtime=str(datetime.timedelta(seconds=int(Uptime() - progstart))),
            lastsync=self.last_sync if self.last_sync else 'None'))
        os.rename(pagetempfilename, pagefilename)
예제 #13
0
    from ConfigParser import RawConfigParser
    import Queue
else:
    from configparser import RawConfigParser
    import queue
import codecs
import datetime
import os
import shutil
import time

from ip import get_ip_address, get_wan_ip
from uptime import Uptime
from component import Component

progstart = Uptime()

DEBUG = False

config = RawConfigParser()
config.read('fancontrol.cfg')
pagefilename = config.get('webserver', 'page')
pagetempfilename = config.get('webserver', 'temppage')
datafilename = config.get('webserver', 'data')
datatempfilename = config.get('webserver', 'tempdata')

indexsource = config.get('webserver', 'indexsource')
indextarget = config.get('webserver', 'indextarget')
shutil.copyfile(indexsource, indextarget)

예제 #14
0
 def __init__(self):
     ComponentWithThread.__init__(self, 'sensor')
     self.S1 = sht75.Sensor(clock1, data1)
     self.S2 = sht75.Sensor(clock2, data2)
     self.event = Event()
     self.lastmeasurement = Uptime()