Ejemplo n.º 1
0
 def test6_0_get_id(self):
     """
     Pin >6_0> Get identifier for sorting pin-list in GpioCtrl
     """
     test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
     pin1 = SlavePin(self.opt, test1_file)
     self.assertTrue(pin1.get_id() == "1")
Ejemplo n.º 2
0
 def test0_1_init_cfg(self):
     """
     Pin >0_1> check items in initial __dict__ from test1.cfg
     """
     test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
     pin1 = SlavePin(self.opt, test1_file)
     pin1.init_pin(True)
         
     exp_items = {
         'crypt': '8c34222d580d60b98fe73a05eeca0d3d',
         'pin_nr': '1',
         'cfg_file': test1_file,
         'name': 'Front',
         'prio': '0',
         'mode': 'time',
         'groups': 'garden',
         'start': '01:00',
         'duration': '60',
         'sun_delay': '0',
         'state': '0',
         'dow': 'Wed,Sun',
         'gpio_base': "%spackaged/sys/class/gpio" % PREFIX,
         'pin_base': "%spackaged/sys/class/gpio/gpio1" % PREFIX,
     }
     self.check_dict(pin1, exp_items)
Ejemplo n.º 3
0
    def test0_3_flip(self):
        """
        Web >0_3> press flip button
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        pin1.init_pin(True)
        pin1.set_cfg({"dow": "Mon,Tue,Wed,Fri,Sat,Sun"})

        web = Web(self.opt)
        web.add_pin(pin1)
        web.update_slave(send="flip", gpio="1")
        exp = [line for line in self.exp_head]
        exp.extend([line for line in self.exp_pin1])
        exp.extend([line for line in self.exp_tail])
        exp[36] = "<input type='checkbox' name='dow_Mon' value='Mon' checked>Mon"
        exp[37] = "<input type='checkbox' name='dow_Tue' value='Tue' checked>Tue"
        exp[39] = "<input type='checkbox' name='dow_Thu' value='Thu'>Thu"
        exp[40] = "<input type='checkbox' name='dow_Fri' value='Fri' checked>Fri"
        exp[41] = "<input type='checkbox' name='dow_Sat' value='Sat' checked>Sat"
        exp[42] = "<input type='checkbox' name='dow_Sun' value='Sun' checked>Sun"
        self.check_web(web.html, exp)
        web.update_slave(send="flip", gpio="1")
        exp[20] = "<td style='background-color:red'>"
        self.check_web(web.html, exp)
Ejemplo n.º 4
0
 def test0_3_init(self):
     """
     Pin >0_3> change cfg of init_pin
     """
     pin = SlavePin(self.opt)
     exp_items = {
         'crypt': None,
         'pin_nr': '0',
         'cfg_file': None,
         'name': 'None',
         'prio': '0',
         'mode': 'off',
         'groups': '',
         'start': '00:00',
         'duration': '0',
         'sun_delay': '0',
         'state': '0',
         'dow': 'Mon,Tue,Wed,Thu,Fr,Sat,Sun',
         'gpio_base': "%spackaged/sys/class/gpio" % PREFIX,
         'pin_base': "%spackaged/sys/class/gpio/gpio0" % PREFIX,
     }
     exp1 = exp_items.copy()
     self.check_dict(pin, exp1)
     cfg = {
         'pin_nr': '1',
         'name': 'Front',
     }
     pin.set_cfg(cfg)
     pin.change_mode('time')
     exp_items['name'] = 'Front'
     exp_items['mode'] = 'time'
     pin_base = "%spackaged/sys/class/gpio/gpio1" % PREFIX
     exp_items['pin_base'] = pin_base
     exp_items['pin_nr'] = '1'
     self.check_dict(pin, exp_items)
Ejemplo n.º 5
0
 def test3_1_pin(self):
     """
     Pin >3_1> read_real_life()
     """
     test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
     pin1 = SlavePin(self.opt, test1_file)
     self.assertTrue("0" == pin1.read_real_life())
     pin1.flip()
     self.assertTrue("1" == pin1.read_real_life())
Ejemplo n.º 6
0
 def test2_0_save_cfg(self):
     """
     Pin >2_0> Write empty pin0
     """
     cfg_file = '%s/misc/tmp_test.cfg' % PREFIX
     if os.path.exists(cfg_file):
         os.remove(cfg_file)
     pin = SlavePin(self.opt)
     pin.write_cfg(cfg_file)
     self.assertTrue(pin.crypt == '9ec78ec1ae354d5cd568a90ab2f1493a',
                     "CRYPT: %s" % pin.crypt)
     os.remove(cfg_file)
Ejemplo n.º 7
0
 def run_scenario(self):
     """
     run scenario w/o config files
     """
     if self.opt['--test'] == 'test1':
         pin1 = SlavePin(self.opt)
         cfg = {
             'dow': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun',
             'duration': '60',
             'groups': 'grpA',
             'name': 'TestPin1',
             'pin_nr': '1',
             'start': '01:00',
         }
         pin1.set_cfg(cfg)
         pin1.set_pin(0)
         pin1.change_mode('time')
         pin1.val_path = "%s/gpio%s/value" % (pin1.gpio_base, 1)
         self.add_pin(pin1)
         pin5 = MainPin(self.opt)
         cfg = {
             'groups': 'grpA',
             'name': 'MainPin5',
             'pin_nr': '5',
             'crypt': 'eaa491247883b9b1cd0760bae439a253'
             }
         pin5.set_cfg(cfg, True)
         pin5.val_path = "%s/gpio%s/value" % (pin1.gpio_base, 5)
         pin5.cfg_file = "%s/packaged/etc/raspigpioctrl/main5.cfg" % (os.environ["WORKSPACE"])
         pin5.change_mode('off')
         pin5.set_pin(0)
         self.add_pin(pin5)
Ejemplo n.º 8
0
    def test0_4_sun(self):
        """
        Web >0_4> change mod to sun
        """
        exp = ""

        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        pin1.init_pin(True)
        pin1.set_cfg({"dow": "Mon,Tue,Wed,Thu,Fri,Sat,Sun"})

        web = Web(self.opt)
        web.add_pin(pin1)
        web.update_slave(send="change", mode="sun", gpio="1")
        self.assertTrue(web.gctrl.gpio_pins["1"].get_json()["mode"] == "sun")
Ejemplo n.º 9
0
 def test3_0_pin(self):
     """
     Pin >3_0> init dry-run pin
     """
     test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
     pin1 = SlavePin(self.opt, test1_file)
     gpio_sys = "%s/packaged/sys/class/gpio/" % PREFIX
     if os.path.exists("%s/packaged/sys" % PREFIX):
         print os.system("rm -rf %s/packaged/sys" % PREFIX)
         pin1.deb("'%s' removed")
         self.assertFalse(os.path.exists(gpio_sys), "")
     pin1.init_pin()
     filed = open("%s/gpio1/value" % gpio_sys, "r")
     cont = filed.read().strip()
     self.assertTrue(cont == "0", cont)
Ejemplo n.º 10
0
 def setUp(self):
     self.opt = {
         "-r":"packaged",
         "--dry-run":True,
         '-d':1,
     }
     self.pin0 = SlavePin(self.opt)
     self.skip_keys = ['opt']
Ejemplo n.º 11
0
 def test5_0_change_mode(self):
     """
     Pin >5_0> Change mode to time, manual, sun
     """
     pin = SlavePin(self.opt)
     pin.change_mode("time")
     self.assertTrue(pin.mode == "time")
     pin.change_mode("man")
     self.assertTrue(pin.mode == "man")
     pin.change_mode("sun")
     with self.assertRaises(ValueError):
         pin.change_mode("buh")
     self.assertTrue(pin.mode == "sun")
     self.assertTrue(get_mode_id("buh") is None)
Ejemplo n.º 12
0
    def test0_1_init_flip(self):
        """
        Web >0_1> show green status
        """

        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        pin1.init_pin(True)
        pin1.flip()

        web = Web(self.opt)
        web.add_pin(pin1)
        web.index()
        exp = [line for line in self.exp_head]
        exp.extend([line for line in self.exp_pin1])
        exp.extend([line for line in self.exp_tail])
        exp[20] = "<td style='background-color:green'>"
        self.assertEqual(web.html, exp)
Ejemplo n.º 13
0
 def test4_1_datetime(self):
     """
     Pin >4_1> check datetime for runtime including midnight
     """
     pin = SlavePin(self.opt)
     pin.set_cfg({'start': '23:30', 'duration': '60'})
     now = datetime.datetime.now()
     exp_on = datetime.datetime(year=now.year,
                     month=now.month,
                     day=now.day,
                     hour=23,
                     minute=30)
     exp_off = datetime.datetime(year=now.year,
                     month=now.month,
                     day=now.day+1,
                     hour=0,
                     minute=30)
     self.assertTrue(exp_on == pin.get_dt_on())
     self.assertTrue(exp_off == pin.get_dt_off())
Ejemplo n.º 14
0
    def test0_0_init(self):
        """
        Web >0_0> fire up web class
        """
        exp = ""

        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        print test1_file
        pin1 = SlavePin(self.opt, test1_file)
        pin1.init_pin(True)

        web = Web(self.opt)
        web.add_pin(pin1)
        web.index()
        exp = [line for line in self.exp_head]
        exp.extend([line for line in self.exp_pin1])
        exp.extend([line for line in self.exp_tail])
        exp[20] = "<td style='background-color:red'>"
        got = web.html
        self.check_web(got, exp)
Ejemplo n.º 15
0
    def test1_0_main(self):
        """
        Web >1_0> main pin plus pin1
        """
        pin1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, pin1_file)
        pin1.init_pin(True)
        pin1.set_pin(0)
        pin1.set_cfg({"dow": "Mon,Tue,Wed,Thu,Fri,Sat,Sun"})
        self.assertTrue(pin1.isstate(0))
        pin5_file = "%s/packaged/etc/raspigpioctrl/main5.cfg" % PREFIX
        pin5 = MainPin(self.opt, pin5_file)
        pin5.init_pin(True)
        pin5.set_cfg({"groups": "garden"})
        pprint(pin5.get_json())
        pin5.change_mode("off")
        pin5.set_pin(0)
        self.assertTrue(pin5.isstate(0))

        web = Web(self.opt)
        web.add_pin(pin1)
        web.add_pin(pin5)
        web.index()
        exp = [line for line in self.exp_head]
        exp.extend([line for line in self.exp_pin1])
        exp.extend([line for line in self.exp_main5])
        exp.extend([line for line in self.exp_tail])
        exp[20] = "<td style='background-color:red'>"
        exp[36] = "<input type='checkbox' name='dow_Mon' value='Mon' checked>Mon"
        exp[37] = "<input type='checkbox' name='dow_Tue' value='Tue' checked>Tue"
        exp[39] = "<input type='checkbox' name='dow_Thu' value='Thu' checked>Thu"
        exp[40] = "<input type='checkbox' name='dow_Fri' value='Fri' checked>Fri"
        exp[41] = "<input type='checkbox' name='dow_Sat' value='Sat' checked>Sat"
        exp[42] = "<input type='checkbox' name='dow_Sun' value='Sun' checked>Sun"
        exp[52] = "<td><b>MainPin5</b></td>"
        got = web.html
        self.check_web(got, exp)
        pin5.change_mode("auto")
        web.index()
        exp[55] = "<td style='background-color:red'>"
        exp[57] = "<td style='background-color:green'>"
        got = web.html
        self.check_web(got, exp)
Ejemplo n.º 16
0
 def test3_4_flip(self):
     """
     Pin >3_4> init dry-run pin and flip twice with main-pin
     """
     test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
     pin1 = SlavePin(self.opt, test1_file)
     test5_file = "%s/packaged/etc/raspigpioctrl/main5.cfg" % PREFIX
     pin5 = MainPin(self.opt, test5_file)
     gpio_sys = "%s/packaged/sys/class/gpio/" % PREFIX
     if os.path.exists("%s/packaged/sys" % PREFIX):
         print os.system("rm -rf %s/packaged/sys" % PREFIX)
         pin1.deb("'%s' removed")
         self.assertFalse(os.path.exists(gpio_sys), "")
     pin1.init_pin()
     pin5.init_pin()
     pin1.set_pin(0)
     pin5.set_pin(0)
     pin5.change_mode('auto')
     pin1.flip()
     filed = open("%s/gpio1/value" % gpio_sys, "r")
     cont = filed.read().strip()
     filed.close()
     self.assertTrue(cont == "1", cont)
Ejemplo n.º 17
0
 def test2_1_save_cfg(self):
     """
     Pin >2_1> Write real pin1 cfg
     """
     test1_cfg = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
     pin = SlavePin(self.opt, test1_cfg)
     pin.start = "10:00"
     pin.duration = "30"
     pin.dow = "Fri,Sat,Sun"
     cfg_file = '%s/misc/tmp_test.cfg' % PREFIX
     if os.path.exists(cfg_file):
         os.remove(cfg_file)
     pin.write_cfg(cfg_file)
     self.assertTrue(pin.crypt == '80a913b6297d386cd72b9f9fd9172c34',
                     "CRYPT: %s" % pin.crypt)
     os.remove(cfg_file)
Ejemplo n.º 18
0
 def test2_2_failed_save_cfg(self):
     """
     Pin >2_2> Write cfg with changed cfg-file in background (IOError)
     """
     test1_cfg = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
     pin = SlavePin(self.opt, test1_cfg)
     cfg = {
         'start': "10:00",
         'duration': "30",
         'dow': "Fri,Sat,Sun"
     }
     pin.set_cfg(cfg)
     cfg_file = '%s/misc/tmp_test.cfg' % PREFIX
     if os.path.exists(cfg_file):
         os.remove(cfg_file)
     pin.write_cfg(cfg_file)
     self.assertTrue(pin.crypt == '80a913b6297d386cd72b9f9fd9172c34',
                     "CRYPT: %s" % pin.crypt)
     
     cfg = {'start': "10:30"}
     pin.set_cfg(cfg)
     os.system("echo FooBar >> %s" % cfg_file)
     self.assertRaises(IOError, pin.write_cfg, (cfg_file))
     os.remove(cfg_file)
Ejemplo n.º 19
0
 def test8_1_trigger(self):
     """
     Pin >8_1> trigger on
     """
     pin = SlavePin(self.opt)
     now = datetime.datetime.now()
     delay = datetime.timedelta(seconds=60)
     temp_on = now + delay
     cfg = {
         'start': now.strftime("%H:%M"),
         'duration': '5',
         'pin_nr': '1',
     }
     pin.set_cfg(cfg)
     pin.change_mode('time')
     pin.init_pin()
     pin.trigger_on()
     self.assertTrue("1" == pin.read_real_life())
     pin.set_pin(0)
     self.assertTrue("0" == pin.read_real_life())
     pin.trigger_on()
     self.assertTrue("1" == pin.read_real_life())
Ejemplo n.º 20
0
 def test7_5_ge(self):
     """
     Pin >7_5> self.__ge__(other)
     """
     lst = []
     pin0 = SlavePin(self.opt)
     pin0.set_cfg({
         'groups':'garden',
         'pin_nr': '4',
         'start': '00:00',
         'prio': '0',
         'duration': '10',
     })
     pin1 = SlavePin(self.opt)
     pin1.set_cfg({
         'groups':'garden',
         'pin_nr': '3',
         'start': '00:10',
         'prio': '0',
         'duration': '10',
     })
     pin2 = SlavePin(self.opt)
     pin2.set_cfg({
         'groups':'garden',
         'pin_nr': '3',
         'start': '00:00',
         'prio': '1',
         'duration': '10',
     })
     pin3 = SlavePin(self.opt)
     pin3.set_cfg({
         'groups':'garden',
         'pin_nr': '3',
         'start': '00:00',
         'prio': '0',
         'duration': '20',
     })
     pin4 = SlavePin(self.opt)
     pin4.set_cfg({
         'groups':'garden',
         'pin_nr': '4',
         'start': '00:00',
         'prio': '0',
         'duration': '10',
     })
     amsg = "\n%s\n>\n%s" % (pin1.get_json(), pin0.get_json())
     self.assertTrue(pin1.__ge__(pin0), amsg)
     amsg = "\n%s\n>\n%s" % (pin2.get_json(), pin0.get_json())
     self.assertTrue(pin2.__ge__(pin0), amsg)
     amsg = "\n%s\n>\n%s" % (pin0.get_json(), pin0.get_json())
     self.assertTrue(pin3.__ge__(pin0), amsg)
     amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin1.get_json())
     self.assertFalse(pin0.__ge__(pin1), amsg)
     amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin0.get_json())
     self.assertTrue(pin0.__ge__(pin0), amsg)
     amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin1.get_json())
     self.assertFalse(pin0.__ge__(pin1), amsg)
     amsg = "\n%s\n__ge__\n%s" % (pin3.get_json(), pin4.get_json())
     self.assertTrue(pin3.__ge__(pin4), amsg)
     amsg = "\n%s\n!__ge__\n%s" % (pin3.get_json(), pin2.get_json())
     self.assertFalse(pin3.__ge__(pin2), amsg)
     amsg = "\n%s\n!__ge__\n%s" % (pin4.get_json(), pin3.get_json())
     self.assertFalse(pin4.__ge__(pin3), amsg)
Ejemplo n.º 21
0
 def test7_1_ne(self):
     """
     Pin >7_1> self.__ne__(other) True
     """
     lst = []
     pin0 = SlavePin(self.opt)
     pin0.set_cfg({
         'groups':'garden',
         'pin_nr': '4',
         'start': '00:10',
         'prio': '0',
         'duration': '10',
     })
     pin1 = SlavePin(self.opt)
     pin1.set_cfg({
         'groups':'garden',
         'pin_nr': '3',
         'start': '00:10',
         'prio': '0',
         'duration': '10',
     })
     pin2 = SlavePin(self.opt)
     pin2.set_cfg({
         'groups':'garden',
         'pin_nr': '3',
         'start': '00:20',
         'prio': '0',
         'duration': '10',
     })
     amsg = "\n%s\n!=\n%s" % (pin0.get_json(), pin1.get_json())
     self.assertFalse(pin0.__ne__(pin1), amsg)
     amsg = "\n%s\n==\n%s" % (pin0.get_json(), pin2.get_json())
     self.assertTrue(pin0.__ne__(pin2))
Ejemplo n.º 22
0
 def test3_0_check_arrangement(self):
     """
     GpioCtrl >3_0> Pins are not grouped
     """
     ctrl = GpioCtrl(self.opt)
     ctrl.read_cfg()
     ctrl.set_pin_cfg('1', {'groups':'grp1'})
     ctrl.set_pin_cfg('2', {'groups':'grp2'})
     ctrl.set_pin_cfg('3', {'groups':'grp3'})
     ctrl.set_pin_cfg('4', {'groups':'grp4'})
     pincfg_path = "%s/%s/etc/raspigpioctrl/" % (PREFIX, self.opt['-r'])
     pin1 = SlavePin(self.opt, "%s/pin1.cfg" % pincfg_path)
     pin1.set_cfg({'groups':'grp1'})
     pin2 = SlavePin(self.opt, "%s/pin2.cfg" % pincfg_path)
     pin2.set_cfg({'groups':'grp2'})
     pin3 = SlavePin(self.opt, "%s/pin3.cfg" % pincfg_path)
     pin3.set_cfg({'groups':'grp3'})
     pin4 = SlavePin(self.opt, "%s/pin4.cfg" % pincfg_path)
     pin4.set_cfg({'groups':'grp4'})
     exp_items = {
         'gpio_pins': {
             '1': pin1,
             '2': pin2,
             '3': pin3,
             '4': pin4,
         }
     }
     self.check(ctrl, exp_items)
Ejemplo n.º 23
0
 def test3_1_check_arrangement_group_collision(self):
     """
     GpioCtrl >3_1> Pins are grouped, times are equal, rpio differ
     """
     ctrl = GpioCtrl(self.opt)
     ctrl.read_cfg()
     ctrl.set_pin_cfg('1', {'groups':'a',
                   'start':'00:00',
                   'prio':'0',
                   'duration':'10',
                   })
     ctrl.set_pin_cfg('2', {'groups':'a',
                   'start':'00:00',
                   'prio':'1',
                   'duration':'10',
                   })
     ctrl.set_pin_cfg('3', {'groups':'a',
                   'start':'00:00',
                   'prio':'2',
                   'duration':'10',
                   })
     ctrl.set_pin_cfg('4', {'groups':'b',
                   'start':'00:00',
                   'prio':'0',
                   'duration':'10',
                   })
     ctrl.set_pin_cfg('5', {'groups':'b'})
     pincfg_path = "%s/%s/etc/raspigpioctrl/" % (PREFIX, self.opt['-r'])
     pin1 = SlavePin(self.opt, "%s/pin1.cfg" % pincfg_path)
     pin1.set_cfg({'groups':'a',
                   'start':'00:00',
                   'prio':'0',
                   'duration':'10',
                   })
     pin2 = SlavePin(self.opt, "%s/pin2.cfg" % pincfg_path)
     pin2.set_cfg({'groups':'a',
                   'start':'00:10',
                   'prio':'1',
                   'duration':'10',
                   })
     pin3 = SlavePin(self.opt, "%s/pin3.cfg" % pincfg_path)
     pin3.set_cfg({'groups':'a',
                   'start':'00:20',
                   'prio':'2',
                   'duration':'10',
                   })
     pin4 = SlavePin(self.opt, "%s/pin4.cfg" % pincfg_path)
     pin4.set_cfg({'groups':'b',
                   'start':'00:00',
                   'prio':'0',
                   'duration':'10',
                   })
     pin5 = MainPin(self.opt, "%s/main5.cfg" % pincfg_path)
     pin5.set_cfg({'groups':'b'})
     exp_items = {
         'gpio_pins': {
             '1': pin1,
             '2': pin2,
             '3': pin3,
             '4': pin4,
             '5': pin5,
         }
     }
     ctrl.arrange_pins()
     self.check(ctrl, exp_items)
Ejemplo n.º 24
0
class TestRaspiPin(unittest.TestCase):
    def setUp(self):
        self.opt = {
            "-r":"packaged",
            "--dry-run":True,
            '-d':1,
        }
        self.pin0 = SlavePin(self.opt)
        self.skip_keys = ['opt']

    def check_dict(self, pin, exp_items):
        """
        check __dict__ for expected items
        """
        exp = exp_items.copy()
        for key, val in pin.__dict__.items():
            if key in self.skip_keys:
                continue
            amsg = "%s not in %s" % (key, '/'.join(exp.keys()))
            self.assertTrue(key in exp.keys(), amsg)
            amsg = "\nEXP '%s' (%s) \n%s\n" % (key, type(exp[key]),
                                             exp[key])
            amsg += "GOT '%s' (%s) \n%s\n" % (key, type(val), val)
            self.assertTrue(val == exp[key], amsg)
            del exp[key]
        amsg = "instance has items left: %s" % ','.join(exp)
        self.assertTrue(len(exp) == 0, amsg)

    def test0_0_init(self):
        """
        Pin >0_0> check items in initial __dict__
        """
        exp_items = {
            'crypt': None,
            'pin_nr': '0',
            'cfg_file': None,
            'name': 'None',
            'prio': '0',
            'mode': 'off',
            'groups': '',
            'start': '00:00',
            'duration': '0',
            'sun_delay': '0',
            'state': '0',
            'dow': 'Mon,Tue,Wed,Thu,Fr,Sat,Sun',
            'gpio_base': "%spackaged/sys/class/gpio" % PREFIX,
            'pin_base': "%spackaged/sys/class/gpio/gpio0" % PREFIX,
        }
        self.check_dict(self.pin0, exp_items)

    def test0_1_init_cfg(self):
        """
        Pin >0_1> check items in initial __dict__ from test1.cfg
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        pin1.init_pin(True)
            
        exp_items = {
            'crypt': '8c34222d580d60b98fe73a05eeca0d3d',
            'pin_nr': '1',
            'cfg_file': test1_file,
            'name': 'Front',
            'prio': '0',
            'mode': 'time',
            'groups': 'garden',
            'start': '01:00',
            'duration': '60',
            'sun_delay': '0',
            'state': '0',
            'dow': 'Wed,Sun',
            'gpio_base': "%spackaged/sys/class/gpio" % PREFIX,
            'pin_base': "%spackaged/sys/class/gpio/gpio1" % PREFIX,
        }
        self.check_dict(pin1, exp_items)

    def test0_3_init(self):
        """
        Pin >0_3> change cfg of init_pin
        """
        pin = SlavePin(self.opt)
        exp_items = {
            'crypt': None,
            'pin_nr': '0',
            'cfg_file': None,
            'name': 'None',
            'prio': '0',
            'mode': 'off',
            'groups': '',
            'start': '00:00',
            'duration': '0',
            'sun_delay': '0',
            'state': '0',
            'dow': 'Mon,Tue,Wed,Thu,Fr,Sat,Sun',
            'gpio_base': "%spackaged/sys/class/gpio" % PREFIX,
            'pin_base': "%spackaged/sys/class/gpio/gpio0" % PREFIX,
        }
        exp1 = exp_items.copy()
        self.check_dict(pin, exp1)
        cfg = {
            'pin_nr': '1',
            'name': 'Front',
        }
        pin.set_cfg(cfg)
        pin.change_mode('time')
        exp_items['name'] = 'Front'
        exp_items['mode'] = 'time'
        pin_base = "%spackaged/sys/class/gpio/gpio1" % PREFIX
        exp_items['pin_base'] = pin_base
        exp_items['pin_nr'] = '1'
        self.check_dict(pin, exp_items)

    def test0_2_md5(self):
        """
        Pin >0_2> check md5 of default test-file
        """
        crypt = self.pin0.get_md5("%s/misc/md5_check" % PREFIX)
        self.assertTrue("8c77efd73d331fb65bef594e2c854894" == crypt)

    def test1_0_get_json(self):
        """
        Pin >1_0> get initial json
        """
        json = self.pin0.get_json()
        exp = {
                'pin_nr': '0',
                'groups': '',
                'name': 'None',
                'mode': 'off',
                'prio': '0',
                'start': "00:00",
                'duration': '0',
                'sun_delay': '0',
                'state': '0',
                'dow': 'Mon,Tue,Wed,Thu,Fr,Sat,Sun',
             }
        amsg = "EXP\n%s\n!=\nGOT\n%s\n" % (exp, json)
        self.assertTrue(json == exp, amsg)

    def test2_0_save_cfg(self):
        """
        Pin >2_0> Write empty pin0
        """
        cfg_file = '%s/misc/tmp_test.cfg' % PREFIX
        if os.path.exists(cfg_file):
            os.remove(cfg_file)
        pin = SlavePin(self.opt)
        pin.write_cfg(cfg_file)
        self.assertTrue(pin.crypt == '9ec78ec1ae354d5cd568a90ab2f1493a',
                        "CRYPT: %s" % pin.crypt)
        os.remove(cfg_file)

    def test2_1_save_cfg(self):
        """
        Pin >2_1> Write real pin1 cfg
        """
        test1_cfg = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin = SlavePin(self.opt, test1_cfg)
        pin.start = "10:00"
        pin.duration = "30"
        pin.dow = "Fri,Sat,Sun"
        cfg_file = '%s/misc/tmp_test.cfg' % PREFIX
        if os.path.exists(cfg_file):
            os.remove(cfg_file)
        pin.write_cfg(cfg_file)
        self.assertTrue(pin.crypt == '80a913b6297d386cd72b9f9fd9172c34',
                        "CRYPT: %s" % pin.crypt)
        os.remove(cfg_file)

    def test2_2_failed_save_cfg(self):
        """
        Pin >2_2> Write cfg with changed cfg-file in background (IOError)
        """
        test1_cfg = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin = SlavePin(self.opt, test1_cfg)
        cfg = {
            'start': "10:00",
            'duration': "30",
            'dow': "Fri,Sat,Sun"
        }
        pin.set_cfg(cfg)
        cfg_file = '%s/misc/tmp_test.cfg' % PREFIX
        if os.path.exists(cfg_file):
            os.remove(cfg_file)
        pin.write_cfg(cfg_file)
        self.assertTrue(pin.crypt == '80a913b6297d386cd72b9f9fd9172c34',
                        "CRYPT: %s" % pin.crypt)
        
        cfg = {'start': "10:30"}
        pin.set_cfg(cfg)
        os.system("echo FooBar >> %s" % cfg_file)
        self.assertRaises(IOError, pin.write_cfg, (cfg_file))
        os.remove(cfg_file)

    def test3_0_pin(self):
        """
        Pin >3_0> init dry-run pin
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        gpio_sys = "%s/packaged/sys/class/gpio/" % PREFIX
        if os.path.exists("%s/packaged/sys" % PREFIX):
            print os.system("rm -rf %s/packaged/sys" % PREFIX)
            pin1.deb("'%s' removed")
            self.assertFalse(os.path.exists(gpio_sys), "")
        pin1.init_pin()
        filed = open("%s/gpio1/value" % gpio_sys, "r")
        cont = filed.read().strip()
        self.assertTrue(cont == "0", cont)

    def test3_0_1_pin(self):
        """
        Pin >3_0_1> init main pin
        """
        test_file = "%s/packaged/etc/raspigpioctrl/main5.cfg" % PREFIX
        pin = MainPin(self.opt, test_file)
        gpio_sys = "%s/packaged/sys/class/gpio/" % PREFIX
        if os.path.exists("%s/packaged/sys" % PREFIX):
            print os.system("rm -rf %s/packaged/sys" % PREFIX)
            pin.deb("'%s' removed")
            self.assertFalse(os.path.exists(gpio_sys), "")
        pin.init_pin()
        filed = open("%s/gpio5/value" % gpio_sys, "r")
        cont = filed.read().strip()
        self.assertTrue(cont == "0", cont)
        pin.flip()
        filed = open("%s/gpio5/value" % gpio_sys, "r")
        cont = filed.read().strip()
        self.assertTrue(cont == "1", cont)
        pin.flip()
        filed = open("%s/gpio5/value" % gpio_sys, "r")
        cont = filed.read().strip()
        self.assertTrue(cont == "0", cont)
        pin.change_mode('auto')
        pin.flip()
        filed = open("%s/gpio5/value" % gpio_sys, "r")
        cont = filed.read().strip()
        self.assertTrue(cont == "1", cont)
        pprint(pin.get_json())
        self.assertTrue(pin.ismode('off'))

    def test3_1_pin(self):
        """
        Pin >3_1> read_real_life()
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        self.assertTrue("0" == pin1.read_real_life())
        pin1.flip()
        self.assertTrue("1" == pin1.read_real_life())

    def test3_2_pin(self):
        """
        Pin >3_2> init dry-run pin and set_pin(1) / set_pin(0)
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        gpio_sys = "%s/packaged/sys/class/gpio/" % PREFIX
        if os.path.exists("%s/packaged/sys" % PREFIX):
            print os.system("rm -rf %s/packaged/sys" % PREFIX)
            pin1.deb("'%s' removed")
            self.assertFalse(os.path.exists(gpio_sys), "")
        pin1.init_pin()
        pin1.set_pin(1)
        filed = open("%s/gpio1/value" % gpio_sys, "r")
        cont = filed.read().strip()
        filed.close()
        self.assertTrue(cont == "1", cont)
        pin1.set_pin(0)
        filed = open("%s/gpio1/value" % gpio_sys, "r")
        cont = filed.read().strip()
        filed.close()
        self.assertTrue(cont == "0", cont)
    
    def test3_3_flip(self):
        """
        Pin >3_3> init dry-run pin and flip twice
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        gpio_sys = "%s/packaged/sys/class/gpio/" % PREFIX
        if os.path.exists("%s/packaged/sys" % PREFIX):
            print os.system("rm -rf %s/packaged/sys" % PREFIX)
            pin1.deb("'%s' removed")
            self.assertFalse(os.path.exists(gpio_sys), "")
        pin1.init_pin()
        pin1.flip()
        filed = open("%s/gpio1/value" % gpio_sys, "r")
        cont = filed.read().strip()
        filed.close()
        self.assertTrue(cont == "1", cont)
        pin1.flip()
        filed = open("%s/gpio1/value" % gpio_sys, "r")
        cont = filed.read().strip()
        filed.close()
        self.assertTrue(cont == "0", cont)

    def test3_4_flip(self):
        """
        Pin >3_4> init dry-run pin and flip twice with main-pin
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        test5_file = "%s/packaged/etc/raspigpioctrl/main5.cfg" % PREFIX
        pin5 = MainPin(self.opt, test5_file)
        gpio_sys = "%s/packaged/sys/class/gpio/" % PREFIX
        if os.path.exists("%s/packaged/sys" % PREFIX):
            print os.system("rm -rf %s/packaged/sys" % PREFIX)
            pin1.deb("'%s' removed")
            self.assertFalse(os.path.exists(gpio_sys), "")
        pin1.init_pin()
        pin5.init_pin()
        pin1.set_pin(0)
        pin5.set_pin(0)
        pin5.change_mode('auto')
        pin1.flip()
        filed = open("%s/gpio1/value" % gpio_sys, "r")
        cont = filed.read().strip()
        filed.close()
        self.assertTrue(cont == "1", cont)

    def test4_0_datetime(self):
        """
        Pin >4_0> check datetime for 00:00 + 0min
        """
        now = datetime.datetime.now()
        exp_dt = datetime.datetime(year=now.year,
                        month=now.month,
                        day=now.day,
                        hour=0,
                        minute=0)
        self.assertTrue(exp_dt == self.pin0.get_dt_on())
        self.assertTrue(exp_dt == self.pin0.get_dt_off())

    def test4_1_datetime(self):
        """
        Pin >4_1> check datetime for runtime including midnight
        """
        pin = SlavePin(self.opt)
        pin.set_cfg({'start': '23:30', 'duration': '60'})
        now = datetime.datetime.now()
        exp_on = datetime.datetime(year=now.year,
                        month=now.month,
                        day=now.day,
                        hour=23,
                        minute=30)
        exp_off = datetime.datetime(year=now.year,
                        month=now.month,
                        day=now.day+1,
                        hour=0,
                        minute=30)
        self.assertTrue(exp_on == pin.get_dt_on())
        self.assertTrue(exp_off == pin.get_dt_off())

    def test5_0_change_mode(self):
        """
        Pin >5_0> Change mode to time, manual, sun
        """
        pin = SlavePin(self.opt)
        pin.change_mode("time")
        self.assertTrue(pin.mode == "time")
        pin.change_mode("man")
        self.assertTrue(pin.mode == "man")
        pin.change_mode("sun")
        with self.assertRaises(ValueError):
            pin.change_mode("buh")
        self.assertTrue(pin.mode == "sun")
        self.assertTrue(get_mode_id("buh") is None)

    def test5_1_change_false_mode(self):
        """
        Pin >5_0> Change mode to FooBar, expecting ValueError
        """
        pin = SlavePin(self.opt)
        self.assertRaises(ValueError, pin.change_mode, ("FooBar"))

    def test6_0_get_id(self):
        """
        Pin >6_0> Get identifier for sorting pin-list in GpioCtrl
        """
        test1_file = "%s/packaged/etc/raspigpioctrl/pin1.cfg" % PREFIX
        pin1 = SlavePin(self.opt, test1_file)
        self.assertTrue(pin1.get_id() == "1")

    def test7_0_eq(self):
        """
        Pin >7_0> self.__eq__(other) True
        """
        lst = []
        pin0 = SlavePin(self.opt)
        pin0.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin1 = SlavePin(self.opt)
        pin1.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin2 = SlavePin(self.opt)
        pin2.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:20',
            'prio': '0',
            'duration': '10',
        })
        amsg = "\n%s\n!=\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertTrue(pin0.__eq__(pin1), amsg)
        amsg = "\n%s\n==\n%s" % (pin0.get_json(), pin2.get_json())
        self.assertFalse(pin0.__eq__(pin2))

    def test7_1_ne(self):
        """
        Pin >7_1> self.__ne__(other) True
        """
        lst = []
        pin0 = SlavePin(self.opt)
        pin0.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin1 = SlavePin(self.opt)
        pin1.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin2 = SlavePin(self.opt)
        pin2.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:20',
            'prio': '0',
            'duration': '10',
        })
        amsg = "\n%s\n!=\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertFalse(pin0.__ne__(pin1), amsg)
        amsg = "\n%s\n==\n%s" % (pin0.get_json(), pin2.get_json())
        self.assertTrue(pin0.__ne__(pin2))

    def test7_2_lt(self):
        """
        Pin >7_2> self.__lt__(other)
        """
        lst = []
        pin0 = SlavePin(self.opt)
        pin0.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:00',
            'prio': '0',
            'duration': '10',
        })
        pin1 = SlavePin(self.opt)
        pin1.set_cfg({
            'pin_nr': '3',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin2 = SlavePin(self.opt)
        pin2.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '1',
            'duration': '10',
        })
        pin3 = SlavePin(self.opt)
        pin3.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '0',
            'duration': '20',
        })
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertTrue(pin0.__lt__(pin1), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin2.get_json())
        self.assertTrue(pin0.__lt__(pin2), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin3.get_json())
        self.assertTrue(pin0.__lt__(pin3), amsg)
        amsg = "\n%s\n>\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertFalse(pin1.__lt__(pin0), amsg)
        amsg = "\n%s\n>\n%s" % (pin0.get_json(), pin2.get_json())
        self.assertFalse(pin2.__lt__(pin0), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin3.get_json())
        self.assertFalse(pin3.__lt__(pin0), amsg)

    def test7_3_le(self):
        """
        Pin >7_3> self.__le__(other)
        """
        lst = []
        pin0 = SlavePin(self.opt)
        pin0.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:00',
            'prio': '0',
            'duration': '10',
        })
        pin1 = SlavePin(self.opt)
        pin1.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin2 = SlavePin(self.opt)
        pin2.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '1',
            'duration': '10',
        })
        pin3 = SlavePin(self.opt)
        pin3.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '0',
            'duration': '20',
        })
        pin4 = SlavePin(self.opt)
        pin4.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:00',
            'prio': '0',
            'duration': '30',
        })
        amsg = "\n%s\n<=\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertTrue(pin0.__le__(pin1), amsg)
        amsg = "\n%s\n<=\n%s" % (pin0.get_json(), pin2.get_json())
        self.assertTrue(pin0.__le__(pin2), amsg)
        amsg = "\n%s\n<=\n%s" % (pin0.get_json(), pin3.get_json())
        self.assertTrue(pin0.__le__(pin3), amsg)
        amsg = "\n%s\n<=\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertTrue(pin1.__le__(pin1), amsg)
        amsg = "\n%s\n<=\n%s" % (pin0.get_json(), pin2.get_json())
        self.assertTrue(pin2.__le__(pin2), amsg)
        amsg = "\n%s\n<=\n%s" % (pin0.get_json(), pin3.get_json())
        self.assertTrue(pin3.__le__(pin3), amsg)
        amsg = "\n%s\n>=\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertFalse(pin1.__le__(pin0), amsg)
        amsg = "\n%s\n>\n%s" % (pin0.get_json(), pin2.get_json())
        self.assertFalse(pin2.__le__(pin0), amsg)
        amsg = "\n%s\n>\n%s" % (pin0.get_json(), pin3.get_json())
        self.assertFalse(pin3.__le__(pin0), amsg)
        amsg = "\n%s\n !__le__ \n%s" % (pin4.get_json(), pin3.get_json())
        self.assertFalse(pin4.__le__(pin3), amsg)

    def test7_4_gt(self):
        """
        Pin >7_4> self.__gt__(other)
        """
        lst = []
        pin0 = SlavePin(self.opt)
        pin0.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:00',
            'prio': '0',
            'duration': '10',
        })
        pin1 = SlavePin(self.opt)
        pin1.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin2 = SlavePin(self.opt)
        pin2.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '1',
            'duration': '10',
        })
        pin3 = SlavePin(self.opt)
        pin3.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '0',
            'duration': '20',
        })
        pin4 = SlavePin(self.opt)
        pin4.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:00',
            'prio': '1',
            'duration': '20',
        })
        amsg = "\n%s\n>\n%s" % (pin1.get_json(), pin0.get_json())
        self.assertTrue(pin1.__gt__(pin0), amsg)
        amsg = "\n%s\n>\n%s" % (pin2.get_json(), pin0.get_json())
        self.assertTrue(pin2.__gt__(pin0), amsg)
        amsg = "\n%s\n>\n%s" % (pin0.get_json(), pin0.get_json())
        self.assertTrue(pin3.__gt__(pin0), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertFalse(pin0.__gt__(pin1), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin0.get_json())
        self.assertFalse(pin0.__gt__(pin0), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertFalse(pin0.__gt__(pin1), amsg)
        amsg = "\n%s\n!__gt__\n%s" % (pin3.get_json(), pin4.get_json())
        self.assertFalse(pin3.__gt__(pin4), amsg)

    def test7_5_ge(self):
        """
        Pin >7_5> self.__ge__(other)
        """
        lst = []
        pin0 = SlavePin(self.opt)
        pin0.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:00',
            'prio': '0',
            'duration': '10',
        })
        pin1 = SlavePin(self.opt)
        pin1.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:10',
            'prio': '0',
            'duration': '10',
        })
        pin2 = SlavePin(self.opt)
        pin2.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '1',
            'duration': '10',
        })
        pin3 = SlavePin(self.opt)
        pin3.set_cfg({
            'groups':'garden',
            'pin_nr': '3',
            'start': '00:00',
            'prio': '0',
            'duration': '20',
        })
        pin4 = SlavePin(self.opt)
        pin4.set_cfg({
            'groups':'garden',
            'pin_nr': '4',
            'start': '00:00',
            'prio': '0',
            'duration': '10',
        })
        amsg = "\n%s\n>\n%s" % (pin1.get_json(), pin0.get_json())
        self.assertTrue(pin1.__ge__(pin0), amsg)
        amsg = "\n%s\n>\n%s" % (pin2.get_json(), pin0.get_json())
        self.assertTrue(pin2.__ge__(pin0), amsg)
        amsg = "\n%s\n>\n%s" % (pin0.get_json(), pin0.get_json())
        self.assertTrue(pin3.__ge__(pin0), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertFalse(pin0.__ge__(pin1), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin0.get_json())
        self.assertTrue(pin0.__ge__(pin0), amsg)
        amsg = "\n%s\n<\n%s" % (pin0.get_json(), pin1.get_json())
        self.assertFalse(pin0.__ge__(pin1), amsg)
        amsg = "\n%s\n__ge__\n%s" % (pin3.get_json(), pin4.get_json())
        self.assertTrue(pin3.__ge__(pin4), amsg)
        amsg = "\n%s\n!__ge__\n%s" % (pin3.get_json(), pin2.get_json())
        self.assertFalse(pin3.__ge__(pin2), amsg)
        amsg = "\n%s\n!__ge__\n%s" % (pin4.get_json(), pin3.get_json())
        self.assertFalse(pin4.__ge__(pin3), amsg)

    def test8_0_trigger(self):
        """
        Pin >8_0> trigger off
        """
        pin = SlavePin(self.opt)
        now = datetime.datetime.now()
        delay = datetime.timedelta(seconds=600)
        temp_on = now - delay
        cfg = {
            'start': temp_on.strftime("%H:%M"),
            'duration': '5',
            'pin_nr': '1',
        }
        pin.set_cfg(cfg)
        pin.change_mode('time')
        pin.init_pin()
        pin.set_pin(1)
        self.assertTrue("1" == pin.read_real_life())
        pin.trigger_off()
        self.assertTrue("0" == pin.read_real_life())
        pin.trigger_off()
        self.assertTrue("0" == pin.read_real_life())
        pin.set_pin(1)
        self.assertTrue("1" == pin.read_real_life())
        pin.trigger_off()
        self.assertTrue("0" == pin.read_real_life())

    def test8_1_trigger(self):
        """
        Pin >8_1> trigger on
        """
        pin = SlavePin(self.opt)
        now = datetime.datetime.now()
        delay = datetime.timedelta(seconds=60)
        temp_on = now + delay
        cfg = {
            'start': now.strftime("%H:%M"),
            'duration': '5',
            'pin_nr': '1',
        }
        pin.set_cfg(cfg)
        pin.change_mode('time')
        pin.init_pin()
        pin.trigger_on()
        self.assertTrue("1" == pin.read_real_life())
        pin.set_pin(0)
        self.assertTrue("0" == pin.read_real_life())
        pin.trigger_on()
        self.assertTrue("1" == pin.read_real_life())