Go to file
2023-11-04 15:34:46 +01:00
addons continue working on websocket implementation 2023-11-03 02:07:53 +01:00
assets add banner 2023-11-04 14:23:57 +01:00
scenes finally fix websockets and add sensor entity 2023-11-03 22:00:05 +01:00
src finally fix websockets and add sensor entity 2023-11-03 22:00:05 +01:00
.editorconfig load devices, show menu, view entities 2023-10-30 01:21:50 +01:00
.gitattributes update gitattributes 2023-10-29 23:23:40 +01:00
.gitignore add base files 2023-10-16 19:10:02 +02:00
main.gd start implementing ws support 2023-11-02 23:13:55 +01:00
main.tscn start implementing ws support 2023-11-02 23:13:55 +01:00
openxr_action_map.tres do some testing 2023-10-22 23:01:06 +02:00
project.godot load devices, show menu, view entities 2023-10-30 01:21:50 +01:00
README.md Update README.md 2023-11-04 15:34:46 +01:00

logo

🏠 Introduction

Immersive Home is project to bring Smart Home and Mixed Reality technologies together for an intuitive and immersive experience.

Features

  • Fast and Intuitive control over IoT devices
  • Live overview over your smart home
  • Simple way for creating automations
  • Comfortable way of consuming virtual media unobstructed
  • Advanced automations based on position in room

Supported Devices

Smart Home Platforms

Mixed Reality Headsets

  • Meta Quest 2 / Pro / 3

Development

In order to contribute to this project, you need the following to be setup before you can start working:

  • Godot 4.1.3 installed

Fundamentals

Communication with the Smart Home Environment is done using the HomeAdapters global. Each environment is made up of devices and entities. A device is a collection of different entities and entities can represent many different things in a smart home. For example, the entity of name lights.smart_lamp_1 would control the kitchen lamps while state.smart_lamp_1_temp would show the current temperature of the lamp.

Home Adapters

The HomeAdapters global allows to communicate with different backends and offers a set of fundamental functions allowing communication with the Smart Home.

Device {
	"id": String,
	"name": String,
	"entities": Array[Entity]
}

Entity {
	"state": String
	"attributes": Dictionary
}

# Get a list of all devices
func get_devices() -> Signal[Array[Device]]

# Get a single device by id
func get_device(id: String) -> Signal[Device]

# Returns the current state of an entity.
func get_state(entity: String) -> Signal[Entity]

# Updates the state of the entity and returns the resulting state
func set_state(entity: String, state: String, attributes: Dictionary) -> Signal[Entity]

# Watches the state and each time it changes, calls the callback with the changed state, returns a function to stop watching the state
func watch_state(entity: String, callback: Callable[entity: Entity]) -> Callable

Interaction Events

Each time a button is pressed on the primary controller, a raycast is done to be able to interact with devices or the UI.

InteractionEvent

{
	position: Vector3,
	rotation: Vector3
}
Function called Args Description
_click [event: InteractionEvent] The back trigger button has been pressed and released
_dbl_click [event: InteractionEvent] The back trigger button has been pressed and released twice in a row
_long_click [event: InteractionEvent] The back trigger button has been pressed, then hold still for a short period, then released
_press_down [event: InteractionEvent] The back trigger button has been pressed down
_press_move [event: InteractionEvent] The back trigger button has been moved while pressed down
_press_up [event: InteractionEvent] The back trigger button has been released
_grab_down [event: InteractionEvent] The side grap button been pressed down
_grab_move [event: InteractionEvent] The side grap button been pressed down
_grab_up [event: InteractionEvent] The side grap button been released

Testing without a VR Headset

In order to test without a headset, press the run project (F5) button in Godot and ignore the prompt that OpenXR failed to start. To simulate the headset and controller movement, we're using the XR Input Simulator asset. Click at the link to get a list of the supported controlls.