RasPi does the Home Automation (Part III): ‘Let’s Put It All Together’
Hi,
now it’s time to put it all together:
1st: a mini Custom Control for each gear, looking like this:
Its controller takes a Device
to trigger DeviceControl
to switch the radio controlled gears:
public class DevicePane extends AnchorPane { @FXML private Button offButton; @FXML private Button onButton; @FXML private Text deviceNameText; public DevicePane(Device device) { init(device); } private void init(final Device device) { FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/DevicePane.fxml")); fxmlLoader.setRoot(this); fxmlLoader.setController(this); try { fxmlLoader.load(); } catch (IOException ex) { Logger.getLogger(DevicePane.class.getName()).log(Level.SEVERE, null, ex); } deviceNameText.setText(device.getName()); offButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { DeviceControl.get().turnOff(device); } }); onButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { DeviceControl.get().turnOn(device); } }); } }
Finally the main controller HomeControlBoardController
creates DevicePane
s based on the configuration:
public class HomeControlBoardController { @FXML private Button exitButton; @FXML private AnchorPane root; @FXML private VBox devicesPane; public HomeControlBoardController() { } @FXML void initialize() { assert devicesPane != null : "fx:id=\"devicesPane\" was not injected: check your FXML file 'HomeControlBoard.fxml'."; assert exitButton != null : "fx:id=\"exitButton\" was not injected: check your FXML file 'HomeControlBoard.fxml'."; assert root != null : "fx:id=\"root\" was not injected: check your FXML file 'HomeControlBoard.fxml'."; // Running on RasPi always provide a way out instead of kill command final EventHandler<KeyEvent> exitOnCrtlCEventHandler = new EventHandler<KeyEvent>() { @Override public void handle(final KeyEvent keyEvent) { if (keyEvent.isControlDown() && KeyCode.C.equals(keyEvent.getCode())) { Platform.exit(); keyEvent.consume(); } } }; root.setOnKeyPressed(exitOnCrtlCEventHandler); List<Device> devices = DeviceLoader.load(); for (Device device : devices) { addDevice(device); } } private void addDevice(Device device) { DevicePane devicePane = new DevicePane(device); devicesPane.getChildren().add(devicePane); } @FXML public void exit() { Platform.exit(); } }
So finally (by now) it looks like this:
Next: RasPi does the Home Automation (Part IV): Cut the ‘rope’
Leave a Reply