def test_relay_state(self):
		with tempfile.NamedTemporaryFile(mode='wt') as relay_path_fd:
			gpio1_dir = tempfile.mkdtemp()
			gpio1_state = os.path.join(gpio1_dir, 'value')
			gpio2_dir = tempfile.mkdtemp()
			gpio2_state = os.path.join(gpio2_dir, 'value')
			try:
				with file(relay_path_fd.name, 'wt') as f:
					f.write('{} {}'.format(gpio1_dir, gpio2_dir))
				with file(gpio1_state, 'wt') as f:
					f.write('1')
				with file(gpio2_state, 'wt') as f:
					f.write('0')
				RelayState.RELAY_PATH = relay_path_fd.name

				rs = RelayState()
				rs.set_sources(self._monitor, self._system_calc._settings, self._service)

				self._update_values(5000)
				self.assertEqual(self._service['/Relay/0/State'], 1)

				self._service.set_value('/Relay/0/State', 0)
				self.assertEqual(file(gpio1_state, 'rt').read(), '0')
				self.assertEqual(self._service['/Relay/0/State'], 0)

				self._service.set_value('/Relay/0/State', 1)
				self.assertEqual(file(gpio1_state, 'rt').read(), '1')
				self.assertEqual(self._service['/Relay/0/State'], 1)
			finally:
				os.remove(gpio1_state)
				os.removedirs(gpio1_dir)
				os.remove(gpio2_state)
				os.removedirs(gpio2_dir)
    def test_relay_state(self):
        with tempfile.NamedTemporaryFile(mode='wt') as relay_path_fd:
            gpio1_dir = tempfile.mkdtemp()
            gpio1_state = os.path.join(gpio1_dir, 'value')
            gpio2_dir = tempfile.mkdtemp()
            gpio2_state = os.path.join(gpio2_dir, 'value')
            try:
                with file(relay_path_fd.name, 'wt') as f:
                    f.write('{} {}'.format(gpio1_dir, gpio2_dir))
                with file(gpio1_state, 'wt') as f:
                    f.write('1')
                with file(gpio2_state, 'wt') as f:
                    f.write('0')
                RelayState.RELAY_PATH = relay_path_fd.name

                rs = RelayState()
                rs.set_sources(self._monitor, self._system_calc._settings,
                               self._service)

                self._update_values(5000)
                self.assertEqual(self._service['/Relay/0/State'], 1)

                self._service.set_value('/Relay/0/State', 0)
                self.assertEqual(file(gpio1_state, 'rt').read(), '0')
                self.assertEqual(self._service['/Relay/0/State'], 0)

                self._service.set_value('/Relay/0/State', 1)
                self.assertEqual(file(gpio1_state, 'rt').read(), '1')
                self.assertEqual(self._service['/Relay/0/State'], 1)
            finally:
                os.remove(gpio1_state)
                os.removedirs(gpio1_dir)
                os.remove(gpio2_state)
                os.removedirs(gpio2_dir)
	def test_relay_init_no_manual(self):
		rs = RelayState()
		rs.set_sources(self._monitor, self._system_calc._settings, self._service)

		self._monitor.set_value('com.victronenergy.settings',
			'/Settings/Relay/Function', 0) # Alarms

		self._set_setting('/Settings/Relay/0/InitialState', 0)
		self._update_values(5000)
		self.assertEqual(self._service['/Relay/0/State'], 1) # Unaffected
		self.assertEqual(file(self.gpio1_state, 'rt').read(), '1') # Unaffected
    def test_stored_state(self):
        rs = RelayState()
        rs.set_sources(self._monitor, self._system_calc._settings,
                       self._service)

        self._service.set_value('/Relay/0/State', 0)
        self._service.set_value('/Relay/1/State', 1)
        self._check_settings({'/Relay/0/State': 0, '/Relay/1/State': 1})

        self._service.set_value('/Relay/0/State', 1)
        self._service.set_value('/Relay/1/State', 0)
        self._check_settings({'/Relay/0/State': 1, '/Relay/1/State': 0})
	def test_relay_state(self):
		rs = RelayState()
		rs.set_sources(self._monitor, self._system_calc._settings, self._service)

		self._update_values(6000)
		self.assertEqual(self._service['/Relay/0/State'], 1)

		self._service.set_value('/Relay/0/State', 0)
		self.assertEqual(file(self.gpio1_state, 'rt').read(), '0')
		self.assertEqual(self._service['/Relay/0/State'], 0)

		self._service.set_value('/Relay/0/State', 1)
		self.assertEqual(file(self.gpio1_state, 'rt').read(), '1')
		self.assertEqual(self._service['/Relay/0/State'], 1)
    def test_relay_init(self):
        rs = RelayState()
        rs.set_sources(self._monitor, self._system_calc._settings,
                       self._service)

        self._monitor.set_value('com.victronenergy.settings',
                                '/Settings/Relay/Function', 2)  # Manual

        self._set_setting('/Settings/Relay/0/InitialState', 0)
        self._set_setting('/Settings/Relay/1/InitialState', 1)

        self._update_values(5000)
        self.assertEqual(self._service['/Relay/0/State'], 0)
        self.assertEqual(self._service['/Relay/1/State'], 1)
        self.assertEqual(open(self.gpio1_state, 'rt').read(), '0')
        self.assertEqual(open(self.gpio2_state, 'rt').read(), '1')
	def test_relay_function(self):
		rs = RelayState()
		rs.set_sources(self._monitor, self._system_calc._settings, self._service)
		self.assertEqual(rs.relay_function, 1)