def _gpio_callback(self, gpio):
        """
        Gets triggered whenever the the gpio state changes

        :param gpio: Number of gpio that changed
        :type gpio: int
        :rtype: None
        """
        self.debug(u"Triggered #{}".format(gpio))
        try:
            index = self.gpios.index(gpio)
        except ValueError:
            self.error(u"{} not present in GPIO list".format(gpio))
            return
        with self._people_lock:
            person = self.people[index]
            read_val = GPIO.input(gpio)
            if read_val == person.sitting:
                # Nothing changed?
                time.sleep(self.gpio_bouncetime_sleep)
                # Really sure?
                read_val = GPIO.input(gpio)
            if person.sitting != read_val:
                person.sitting = read_val
                self.debug(u"Person is now {}sitting".format(
                    "" if person.sitting else "not ")
                )
                try:
                    self.changer.on_person_update(self.people)
                except:
                    self.exception(
                        u"Failed to update people (Person: {})".format(person)
                    )
            else:
                self.warning(u"Nothing changed on {}".format(gpio))
Gets triggered whenever the the gpio state changes

        :param gpio: Number of gpio that changed
        :type gpio: int
        :rtype: None