def __init__(self, screen):
        global port

        self.has_connection_to_birdhouse = False
        self.initializing = True
        self.orig_data = { }

        self.bhserial = None
        self.port = port

        if not port:
            raise Exception("I don't know what port to use!")

        super(Main, self).__init__(screen, 
                                   screen.height * 2 // 3, 
                                   screen.width * 2 // 3, 
                                   hover_focus=True, 
                                   title="Birdhouse Configurator")

        layout = Layout([100], fill_frame=True)
        self.add_layout(layout)
        self.layout = layout    # For use when detecting changes


        # Add some colors to our palette
        self.palette["changed"] = (Screen.COLOUR_RED, Screen.A_NORMAL, Screen.COLOUR_BLUE)

        self._status_msg = Label("Welcome!")

        self.reset_form()


        # Connection info
        layout.add_widget(Text("Birdhouse Number:", "birdhouse_number", validator=r"^\d\d\d$", on_change=self.input_changed))
        self.layout.find_widget("birdhouse_number").value = args.number

        layout.add_widget(RadioButtons([("Red", "Red"), ("Yellow", "Yellow"), ("Green", "Green"), ("Cycle", "all"), ("Off", "off")], "Test LEDs", "led_test", on_change=self.on_test_leds_changed))
        self.layout.find_widget("led_test").value = "off"


        # Parameters
        layout.add_widget(Text("Uptime:", "uptime"))
        layout.find_widget("uptime").disabled=True
        layout.add_widget(Text("Temp Sensor:", "temperatureSensor"))
        layout.find_widget("temperatureSensor").disabled=True
        layout.add_widget(Text("Found Plantower Sensor:", "plantowerSensorDetected"))
        layout.find_widget("plantowerSensorDetected").disabled=True
        layout.add_widget(Text("WiFi Status:", "wifi_status"))
        layout.find_widget("wifi_status").disabled=True
        layout.add_widget(Text("MQTT Status:", "mqtt_status"))
        layout.find_widget("mqtt_status").disabled=True

        layout.add_widget(RadioButtons([("Traditional (R/Y/G)", 'RYG'), ("Traditional, wired backward", 'RYG_REVERSED'), ("Single square LED", 'DOTSTAR'), ("Single round LED", '4PIN')], "LED Style:", "led_style", on_change=self.on_led_style_changed))

        layout.add_widget(Text("Device Token:", "device_token", on_change=self.input_changed))

        layout.add_widget(Text("Local SSID:", "local_ssid", on_change=self.input_changed))
        layout.find_widget("local_ssid").disabled=True

        layout.add_widget(Text("Local Password:"******"local_pass", on_change=self.input_changed))
        layout.add_widget(Text("WiFi SSID:", "wifi_ssid", on_change=self.input_changed))
        layout.add_widget(Text("WiFi Password:"******"wifi_pass", on_change=self.input_changed))
        layout.add_widget(Text("MQTT Url:", "mqtt_url", on_change=self.input_changed))
        layout.add_widget(Text("MQTT Port:", "mqtt_port", on_change=self.input_changed))
        layout.add_widget(Divider())

        # Buttons
        layout2 = Layout([1, 1, 1, 1])
        self.add_layout(layout2)
        layout2.add_widget(Button("Server", self.server_config), 0)
        layout2.add_widget(Button("Commit", self.write_values), 0)
        layout2.add_widget(Button("Refresh", self.reload_values), 1)
        # layout2.add_widget(Button("Rescan Ports", self.scan_ports), 1)
        layout2.add_widget(Button("Reboot Birdhouse", self.reboot), 2)
        layout2.add_widget(Button("Exit", self._quit), 3)


        layout3 = Layout([100])
        self.add_layout(layout3)
        layout3.add_widget(Divider())
        layout3.add_widget(Button("Finalize", self.finalize), 0)
        layout3.add_widget(Button("Get Token from SSID", self.retrieve_token), 0)


        # Status message
        layout4 = Layout([100])
        self.add_layout(layout4)
        layout4.add_widget(Divider())
        layout4.add_widget(self._status_msg)

        self.fix()  # Calculate positions of widgets


        self.initializing = False

        self.bhserial = serial.Serial(port, 115200, timeout=5)
        self.query_birdhouse(port)

        self.port = port
        self.has_connection_to_birdhouse = True


        self.input_changed()
        self.overwrite_params_with_cmd_line_values = False
Exemple #2
0
    def __init__(self, screen, settings, tbapi, serial):

        self.has_connection_to_birdhouse = False
        self.initializing = True
        self.orig_data = {}
        self.tbapi = tbapi
        self.token_ok = False
        self.bhserial = serial
        self.settings = settings

        # For keeping track of threads
        self.busy = False  # Is a thread off doing something?
        self.timeout = 0  # When will that the active thread be considered tardy and marked absent?
        self.active_thread = None

        # if not port:
        #     raise Exception("I don't know what port to use!")

        super(MainMenu, self).__init__(screen,
                                       screen.height * 2 // 3,
                                       screen.width * 2 // 3,
                                       hover_focus=True,
                                       title="Birdhouse Configurator")

        layout = Layout([100], fill_frame=True)
        self.add_layout(layout)
        self.layout = layout  # For use when detecting changes

        # Add some colors to our palette
        self.palette["changed"] = (Screen.COLOUR_RED, Screen.A_NORMAL,
                                   Screen.COLOUR_BLUE)

        self._status_msg = Label("Welcome!")

        # User supplied data:
        layout.add_widget(
            Text("Birdhouse Number:",
                 "birdhouse_number",
                 validator=r'^\d+$',
                 on_change=self.on_birdhouse_number_changed,
                 on_blur=partial(self.on_blurred, "birdhouse_number", True)))
        layout.add_widget(
            Text("Device Token:",
                 "device_token",
                 validator=token_validation_pattern,
                 on_blur=partial(self.on_blurred, "device_token", True)))

        layout.add_widget(
            Text("Local Password:"******"local_pass",
                 on_blur=partial(self.on_blurred, "local_pass", False)))
        layout.add_widget(
            Text("WiFi SSID:",
                 "wifi_ssid",
                 on_blur=partial(self.on_blurred, "wifi_ssid", False)))
        layout.add_widget(
            Text("WiFi Password:"******"wifi_pass",
                 on_blur=partial(self.on_blurred, "wifi_pass", False)))

        layout.add_widget(
            RadioButtons(led_styles,
                         "LED Style:",
                         "led_style",
                         on_change=self.on_led_style_changed))

        # provision.py [<number> --token TOKEN --ledstyle LEDSTYLE --wifissid SSID --wifipass PASSWORD --devicepass PASSWORD]

        # layout.add_widget(RadioButtons([("Red", "Red"), ("Yellow", "Yellow"), ("Green", "Green"), ("Cycle", "all"), ("Off", "off")], "Test LEDs", "led_test", on_change=self.on_test_leds_changed))
        # self.layout.find_widget("led_test").value = "off"

        # Parameters
        layout.add_widget(Text("Using device on Port:", "port"))
        layout.find_widget("port").disabled = True
        # layout.find_widget("port").value = settings.portname or "Device not found! Please plug it in!"

        layout.add_widget(
            Text("Local SSID:", "local_ssid", on_change=self.input_changed))
        layout.find_widget("local_ssid").disabled = True

        layout.add_widget(Divider())

        # Buttons
        layout2 = Layout([1, 1])
        self.add_layout(layout2)
        layout2.add_widget(
            Button("[Install firmware]", self.install_firmware, add_box=False),
            0)
        layout2.add_widget(Button("[Exit]", self._quit, add_box=False), 1)

        layout3 = Layout([16, 15, 8])
        self.add_layout(layout3)
        layout3.add_widget(
            Button("[Write settings]",
                   self.save_values_to_device,
                   add_box=False), 0)
        layout3.add_widget(
            Button("[Load settings]",
                   self.load_values_from_device,
                   add_box=False), 1)
        layout3.add_widget(Button("[Reboot]", self.reboot, add_box=False), 2)

        # Status message
        layout_status = Layout([100])
        self.add_layout(layout_status)
        layout_status.add_widget(self._status_msg)

        self.fix()  # Calculate positions of widgets

        self.initializing = False

        self.has_connection_to_birdhouse = False

        self.input_changed()
        self.overwrite_params_with_cmd_line_values = False

        self.set_widgets_from_settings()