├── .all-contributorsrc
├── .devcontainer
└── devcontainer.json
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── config.yml
├── PULL_REQUEST_TEMPLATE.md
├── SUPPORT.md
├── stale.yml
└── workflows
│ ├── build-apidoc-documentation.yml
│ ├── build-demo-website.yml
│ ├── docker-dev-build.yml
│ ├── docker-master-test.yml
│ ├── docker-pr-build.yml
│ ├── docker-release-build.yml
│ ├── publish-gladys-plus-production.yml
│ └── relative-ci.yaml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── SECURITY.md
├── codecov.yml
├── docker
├── Dockerfile
├── Dockerfile.buildx
└── docker-compose.yml
├── front
├── .babelrc
├── .eslintrc.json
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── README.md
├── cli
│ └── check_translations.js
├── cypress
│ ├── cypress.config.js
│ ├── e2e
│ │ └── routes
│ │ │ ├── 0-signup
│ │ │ └── SignUp.cy.js
│ │ │ ├── dashboard
│ │ │ ├── Dashboard.cy.js
│ │ │ ├── DashboardHumidityBox.cy.js
│ │ │ └── DashboardTemperatureBox.cy.js
│ │ │ ├── integration
│ │ │ ├── bluetooth
│ │ │ │ ├── BluetoothDisabled.cy.js
│ │ │ │ ├── devices
│ │ │ │ │ ├── BluetoothDeviceEdit.cy.js
│ │ │ │ │ └── BluetoothDeviceList.cy.js
│ │ │ │ ├── discover
│ │ │ │ │ ├── BluetoothDiscover.cy.js
│ │ │ │ │ ├── BluetoothDiscovered.cy.js
│ │ │ │ │ ├── BluetoothStateChange.cy.js
│ │ │ │ │ └── create
│ │ │ │ │ │ ├── BluetoothCreateDevice.cy.js
│ │ │ │ │ │ └── BluetoothNoDevice.cy.js
│ │ │ │ └── scanner
│ │ │ │ │ ├── BluetoothScanner.cy.js
│ │ │ │ │ └── BluetoothStateChange.cy.js
│ │ │ ├── broadlink
│ │ │ │ ├── devices
│ │ │ │ │ ├── BroadlinkDeviceList.cy.js
│ │ │ │ │ ├── BroadlinkEditDevice.cy.js
│ │ │ │ │ ├── BroadlinkEditRemote.cy.js
│ │ │ │ │ ├── BroadlinkEditRemoteLearnAll.cy.js
│ │ │ │ │ └── BroadlinkEditRemoteSkipAll.cy.js
│ │ │ │ └── peripherals
│ │ │ │ │ └── BroadlinkPeripheralList.cy.js
│ │ │ └── zigbee2mqtt
│ │ │ │ └── setup
│ │ │ │ ├── Zigbee2MqttSetupLocalContainers.cy.js
│ │ │ │ └── Zigbee2MqttSetupRemoteGladys.cy.js
│ │ │ ├── login
│ │ │ └── Login.cy.js
│ │ │ ├── maps
│ │ │ └── Maps.cy.js
│ │ │ └── scene
│ │ │ └── Scene.cy.js
│ ├── fixtures
│ │ └── integration
│ │ │ └── routes
│ │ │ └── integration
│ │ │ ├── bluetooth
│ │ │ ├── peripherals.json
│ │ │ ├── status_not_ready.json
│ │ │ ├── status_ready.json
│ │ │ └── status_scanning.json
│ │ │ ├── broadlink
│ │ │ └── peripherals.json
│ │ │ ├── usb
│ │ │ └── get_available_usb_ports.json
│ │ │ └── zigbee2mqtt
│ │ │ ├── status_not_ready_to_setup.json
│ │ │ └── status_ready_to_setup.json
│ └── support
│ │ ├── commands.js
│ │ └── e2e.js
├── netlify.toml
├── old-sw.js
├── package-lock.json
├── package.json
├── preact.config.js
├── relativeci.config.js
└── src
│ ├── actions
│ ├── calendar.js
│ ├── createScene.js
│ ├── dashboard
│ │ ├── boxActions.js
│ │ ├── boxes
│ │ │ ├── humidityInRoom.js
│ │ │ ├── temperatureInRoom.js
│ │ │ └── weather.js
│ │ └── index.js
│ ├── device.js
│ ├── edit-device.js
│ ├── gateway.js
│ ├── gatewayLinkUser.js
│ ├── house.js
│ ├── integration.js
│ ├── login
│ │ ├── login.js
│ │ └── loginGateway.js
│ ├── main.js
│ ├── map.js
│ ├── message.js
│ ├── profile.js
│ ├── profilePicture.js
│ ├── resetPassword.js
│ ├── scene.js
│ ├── session.js
│ ├── signup
│ │ ├── signupConfigureHouse.js
│ │ ├── signupCreateLocalAccount.js
│ │ ├── signupSetPreferences.js
│ │ └── welcome.js
│ └── system.js
│ ├── assets
│ ├── favicon.ico
│ ├── icons
│ │ ├── android-icon-144x144.png
│ │ ├── android-icon-192x192-round.png
│ │ ├── android-icon-192x192.png
│ │ ├── android-icon-36x36.png
│ │ ├── android-icon-48x48.png
│ │ ├── android-icon-512x512-round.png
│ │ ├── android-icon-512x512.png
│ │ ├── android-icon-72x72.png
│ │ ├── android-icon-96x96.png
│ │ ├── apple-icon-114x114.png
│ │ ├── apple-icon-120x120.png
│ │ ├── apple-icon-144x144.png
│ │ ├── apple-icon-152x152.png
│ │ ├── apple-icon-180x180.png
│ │ ├── apple-icon-57x57.png
│ │ ├── apple-icon-60x60.png
│ │ ├── apple-icon-72x72.png
│ │ ├── apple-icon-76x76.png
│ │ ├── apple-icon-precomposed.png
│ │ ├── apple-icon.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon-96x96.png
│ │ └── icon-sprite.svg
│ ├── images
│ │ ├── home-icon.png
│ │ ├── undraw_credit_card_payments.svg
│ │ ├── undraw_personalization.svg
│ │ ├── undraw_typing.svg
│ │ └── welcome.jpg
│ ├── integrations
│ │ ├── cover
│ │ │ ├── airplay.jpg
│ │ │ ├── alexa.jpg
│ │ │ ├── bluetooth.jpg
│ │ │ ├── broadlink.jpg
│ │ │ ├── caldav.jpg
│ │ │ ├── callmebot.jpg
│ │ │ ├── darksky.jpg
│ │ │ ├── enedis.jpg
│ │ │ ├── ewelink.jpg
│ │ │ ├── free-mobile.jpg
│ │ │ ├── google-cast.jpg
│ │ │ ├── google-home.jpg
│ │ │ ├── homekit.jpg
│ │ │ ├── lan-manager.jpg
│ │ │ ├── matter.jpg
│ │ │ ├── melcloud.jpg
│ │ │ ├── mqtt.jpg
│ │ │ ├── netatmo.jpg
│ │ │ ├── nextcloud-talk.jpg
│ │ │ ├── node-red.jpg
│ │ │ ├── openai.jpg
│ │ │ ├── openweather.jpg
│ │ │ ├── owntracks.jpg
│ │ │ ├── philips-hue.jpg
│ │ │ ├── rtsp-camera.jpg
│ │ │ ├── sonos.jpg
│ │ │ ├── tasmota.jpg
│ │ │ ├── telegram.jpg
│ │ │ ├── tp-link.jpg
│ │ │ ├── tuya.jpg
│ │ │ ├── wemo.jpg
│ │ │ ├── xiaomi.jpg
│ │ │ ├── zigbee2mqtt.jpg
│ │ │ └── zwave-js-ui.jpg
│ │ ├── devices
│ │ │ └── netatmo
│ │ │ │ ├── netatmo-NAMain.jpg
│ │ │ │ ├── netatmo-NAModule1.jpg
│ │ │ │ ├── netatmo-NAModule2.jpg
│ │ │ │ ├── netatmo-NAModule3.jpg
│ │ │ │ ├── netatmo-NAModule4.jpg
│ │ │ │ ├── netatmo-NAPlug.jpg
│ │ │ │ ├── netatmo-NATherm1.jpg
│ │ │ │ └── netatmo-NRV.jpg
│ │ ├── logos
│ │ │ ├── logo_mqtt.png
│ │ │ ├── logo_node-red.png
│ │ │ └── logo_zigbee2mqtt.png
│ │ └── zwavejs-ui
│ │ │ ├── zwavejs-ui-gateway-configuration.jpg
│ │ │ └── zwavejs-ui-mqtt-configuration.jpg
│ ├── leaflet
│ │ ├── layers-2x.png
│ │ ├── layers.png
│ │ ├── marker-icon-2x.png
│ │ ├── marker-icon.png
│ │ └── marker-shadow.png
│ └── splash
│ │ ├── apple-splash-1125-2436.jpg
│ │ ├── apple-splash-1136-640.jpg
│ │ ├── apple-splash-1170-2532.jpg
│ │ ├── apple-splash-1242-2208.jpg
│ │ ├── apple-splash-1242-2688.jpg
│ │ ├── apple-splash-1284-2778.jpg
│ │ ├── apple-splash-1334-750.jpg
│ │ ├── apple-splash-1536-2048.jpg
│ │ ├── apple-splash-1620-2160.jpg
│ │ ├── apple-splash-1668-2224.jpg
│ │ ├── apple-splash-1668-2388.jpg
│ │ ├── apple-splash-1792-828.jpg
│ │ ├── apple-splash-2048-1536.jpg
│ │ ├── apple-splash-2048-2732.jpg
│ │ ├── apple-splash-2160-1620.jpg
│ │ ├── apple-splash-2208-1242.jpg
│ │ ├── apple-splash-2224-1668.jpg
│ │ ├── apple-splash-2388-1668.jpg
│ │ ├── apple-splash-2436-1125.jpg
│ │ ├── apple-splash-2532-1170.jpg
│ │ ├── apple-splash-2688-1242.jpg
│ │ ├── apple-splash-2732-2048.jpg
│ │ ├── apple-splash-2778-1284.jpg
│ │ ├── apple-splash-640-1136.jpg
│ │ ├── apple-splash-750-1334.jpg
│ │ └── apple-splash-828-1792.jpg
│ ├── components
│ ├── app.jsx
│ ├── boxs
│ │ ├── SelectBoxType.jsx
│ │ ├── alarm
│ │ │ ├── Alarm.jsx
│ │ │ ├── Coutdown.jsx
│ │ │ ├── EditAlarm.jsx
│ │ │ ├── countdown.css
│ │ │ └── style.css
│ │ ├── baseEditBox.jsx
│ │ ├── camera
│ │ │ ├── Camera.jsx
│ │ │ ├── EditCamera.jsx
│ │ │ └── style.css
│ │ ├── chart
│ │ │ ├── ApexChartAreaOptions.js
│ │ │ ├── ApexChartBarOptions.js
│ │ │ ├── ApexChartComponent.jsx
│ │ │ ├── ApexChartLineOptions.js
│ │ │ ├── ApexChartStepLineOptions.js
│ │ │ ├── ApexChartTimelineOptions.js
│ │ │ ├── Chart.jsx
│ │ │ ├── EditChart.jsx
│ │ │ ├── style.css
│ │ │ └── yAxisFormatter.js
│ │ ├── clock
│ │ │ ├── Clock.jsx
│ │ │ ├── ClockTypes.js
│ │ │ ├── EditClock.jsx
│ │ │ └── style.css
│ │ ├── device-in-room
│ │ │ ├── DeviceCard.jsx
│ │ │ ├── DeviceRow.jsx
│ │ │ ├── DevicesBox.jsx
│ │ │ ├── DevicesInRoomsBox.jsx
│ │ │ ├── EditDeviceInRoom.jsx
│ │ │ ├── EditDevices.jsx
│ │ │ ├── SupportedFeatureTypes.jsx
│ │ │ ├── device-features
│ │ │ │ ├── AirConditioningModeDeviceFeature.jsx
│ │ │ │ ├── BinaryDeviceFeature.jsx
│ │ │ │ ├── ColorDeviceFeature.jsx
│ │ │ │ ├── CoverDeviceFeature.jsx
│ │ │ │ ├── LMHVolumeDeviceFeature.jsx
│ │ │ │ ├── LightTemperatureDeviceFeature.jsx
│ │ │ │ ├── MultiLevelDeviceFeature.jsx
│ │ │ │ ├── NumberDeviceFeature.jsx
│ │ │ │ ├── PilotWireModeDeviceFeature.jsx
│ │ │ │ ├── PushDeviceFeature.jsx
│ │ │ │ ├── ThermostatDeviceFeature.jsx
│ │ │ │ ├── sensor-value
│ │ │ │ │ ├── BadgeNumberDeviceValue.jsx
│ │ │ │ │ ├── BinaryDeviceValue.jsx
│ │ │ │ │ ├── ButtonClickDeviceValue.jsx
│ │ │ │ │ ├── IconBinaryDeviceValue.jsx
│ │ │ │ │ ├── LastSeenDeviceValue.jsx
│ │ │ │ │ ├── LevelSensorDeviceValue.jsx
│ │ │ │ │ ├── MotionSensorDeviceValue.jsx
│ │ │ │ │ ├── NoRecentValueBadge.jsx
│ │ │ │ │ ├── RawDeviceValue.jsx
│ │ │ │ │ ├── SensorDeviceFeature.jsx
│ │ │ │ │ ├── SignalQualityDeviceValue.jsx
│ │ │ │ │ ├── TemperatureSensorDeviceValue.jsx
│ │ │ │ │ └── TextDeviceValue.jsx
│ │ │ │ └── style.css
│ │ │ └── style.css
│ │ ├── ecowatt
│ │ │ ├── Ecowatt.jsx
│ │ │ └── EditEcowatt.jsx
│ │ ├── edf-tempo
│ │ │ ├── EdfTempo.jsx
│ │ │ ├── EditEdfTempo.jsx
│ │ │ └── style.css
│ │ ├── gauge
│ │ │ ├── EditGaugeBox.jsx
│ │ │ └── GaugeBox.jsx
│ │ ├── music
│ │ │ ├── EditMusicBox.jsx
│ │ │ └── MusicBox.jsx
│ │ ├── room-humidity
│ │ │ ├── EditRoomHumidityBox.jsx
│ │ │ └── RoomHumidity.jsx
│ │ ├── room-temperature
│ │ │ ├── EditRoomTemperatureBox.jsx
│ │ │ └── RoomTemperature.jsx
│ │ ├── scene
│ │ │ ├── EditSceneBox.jsx
│ │ │ ├── SceneBox.jsx
│ │ │ ├── SceneRow.jsx
│ │ │ └── style.css
│ │ ├── user-presence
│ │ │ ├── EditUserPresenceBox.jsx
│ │ │ └── UserPresence.jsx
│ │ └── weather
│ │ │ ├── EditWeatherBox.jsx
│ │ │ └── WeatherBox.jsx
│ ├── device
│ │ ├── ColorPicker.jsx
│ │ ├── RelativeTime.jsx
│ │ ├── SelectDeviceFeature.jsx
│ │ ├── SelectPilotWireMode.jsx
│ │ ├── ShutterButtons.jsx
│ │ ├── UpdateDevice.jsx
│ │ ├── UpdateDeviceFeature.jsx
│ │ ├── UpdateDeviceForm.jsx
│ │ ├── index.js
│ │ └── view
│ │ │ ├── BatteryLevelFeature.jsx
│ │ │ ├── DeviceFeature.jsx
│ │ │ └── DeviceFeatures.jsx
│ ├── documentation
│ │ └── DeviceConfigurationLink.jsx
│ ├── drag-and-drop
│ │ ├── AutoScrollMobile.jsx
│ │ ├── DeviceListWithDragAndDrop.jsx
│ │ └── style.css
│ ├── gateway
│ │ ├── GatewayAccountExpired.jsx
│ │ ├── GatewayLoginForm.jsx
│ │ └── style.css
│ ├── header
│ │ └── index.jsx
│ ├── house
│ │ ├── EditHouse.jsx
│ │ ├── EditHouseComponent.jsx
│ │ ├── EditRoom.jsx
│ │ ├── Map.jsx
│ │ └── RoomSelector.jsx
│ ├── icons
│ │ └── SvgIcon.jsx
│ ├── layout
│ │ ├── CardFilter.jsx
│ │ └── index.jsx
│ ├── router
│ │ ├── Redirect.js
│ │ └── ScrollToTopLink.jsx
│ ├── scene
│ │ └── TextWithVariablesInjected.jsx
│ └── user
│ │ ├── EditableProfilePicture.jsx
│ │ └── profile.jsx
│ ├── config.js
│ ├── config
│ ├── demo.js
│ ├── i18n
│ │ ├── de.json
│ │ ├── en.json
│ │ ├── fr.json
│ │ └── index.js
│ ├── integrations
│ │ ├── calendars.json
│ │ ├── communications.json
│ │ ├── devices.json
│ │ ├── index.js
│ │ └── weathers.json
│ └── timezones.js
│ ├── index.js
│ ├── manifest.json
│ ├── routes
│ ├── calendar
│ │ └── index.js
│ ├── chat
│ │ ├── ChatItems.js
│ │ ├── ChatPage.js
│ │ ├── EmptyChat.jsx
│ │ ├── index.js
│ │ └── style.css
│ ├── dashboard
│ │ ├── Box.jsx
│ │ ├── BoxColumns.jsx
│ │ ├── DashboardPage.jsx
│ │ ├── EmptyState.jsx
│ │ ├── SetTabletMode.jsx
│ │ ├── edit-dashboard
│ │ │ ├── BottomDropZone.jsx
│ │ │ ├── EditActions.jsx
│ │ │ ├── EditBox.jsx
│ │ │ ├── EditBoxColumns.jsx
│ │ │ ├── EditDashboard.jsx
│ │ │ ├── EmptyColumnDropZone.jsx
│ │ │ ├── ReorderDashbordList.jsx
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ ├── index.js
│ │ ├── new-dashboard
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ └── style.css
│ ├── error
│ │ └── index.jsx
│ ├── forgot-password
│ │ ├── ForgotPasswordPage.jsx
│ │ └── index.js
│ ├── gateway-configure-two-factor
│ │ ├── ConfigureTwoFactorForm.js
│ │ └── index.js
│ ├── gateway-confirm-email
│ │ ├── ConfirmEmail.js
│ │ └── index.js
│ ├── gateway-forgot-password
│ │ ├── ForgotPassword.js
│ │ └── index.js
│ ├── gateway-reset-password
│ │ ├── ResetPassword.js
│ │ ├── ResetPasswordForm.js
│ │ └── index.js
│ ├── gateway-setup
│ │ ├── LinkGatewayUser.jsx
│ │ └── index.js
│ ├── integration
│ │ ├── IntegrationCategory.jsx
│ │ ├── IntegrationMenu.jsx
│ │ ├── IntegrationPage.jsx
│ │ ├── all
│ │ │ ├── airplay
│ │ │ │ ├── AirplayDeviceBox.jsx
│ │ │ │ ├── AirplayPage.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ └── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ ├── alexa-gateway
│ │ │ │ ├── Layout.jsx
│ │ │ │ ├── index.js
│ │ │ │ ├── style.css
│ │ │ │ └── welcome.jsx
│ │ │ ├── bluetooth
│ │ │ │ ├── BluetoothPage.js
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── commons
│ │ │ │ │ ├── CheckBluetoothPanel.js
│ │ │ │ │ └── actions.js
│ │ │ │ ├── device-page
│ │ │ │ │ ├── BluetoothDevice.jsx
│ │ │ │ │ ├── BluetoothDeviceTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── edit-page
│ │ │ │ │ └── index.js
│ │ │ │ ├── settings-page
│ │ │ │ │ ├── BluetoothPresenceScanner.jsx
│ │ │ │ │ ├── BluetoothSettingsTab.jsx
│ │ │ │ │ └── index.js
│ │ │ │ ├── setup-page
│ │ │ │ │ ├── BluetoothPeripheral.jsx
│ │ │ │ │ ├── BluetoothPeripheralFeatures.jsx
│ │ │ │ │ ├── BluetoothPeripheralTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── setup-peripheral
│ │ │ │ │ │ ├── ConfigurePeripheral.jsx
│ │ │ │ │ │ ├── ConfigurePeripheralForm.jsx
│ │ │ │ │ │ ├── ConfigurePeripheralSuccess.jsx
│ │ │ │ │ │ ├── PeripheralNotFound.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ └── style.css
│ │ │ ├── broadlink
│ │ │ │ ├── BroadlinkPage.js
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceBox.jsx
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── peripheral-page
│ │ │ │ │ ├── Peripheral.jsx
│ │ │ │ │ ├── PeripheralTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── remote-page
│ │ │ │ │ ├── DeviceNotFound.jsx
│ │ │ │ │ ├── RemoteCreation.jsx
│ │ │ │ │ ├── RemoteFeatureEditionPanel.jsx
│ │ │ │ │ ├── edition
│ │ │ │ │ │ ├── RemoteFeatureEdition.jsx
│ │ │ │ │ │ └── RemoteFeatureTag.jsx
│ │ │ │ │ ├── features.js
│ │ │ │ │ └── index.js
│ │ │ │ └── style.css
│ │ │ ├── caldav
│ │ │ │ ├── CalDAV.js
│ │ │ │ ├── account-page
│ │ │ │ │ ├── AccountTab.css
│ │ │ │ │ ├── AccountTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── share-page
│ │ │ │ │ ├── ShareTab.css
│ │ │ │ │ ├── ShareTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ │ └── sync-page
│ │ │ │ │ ├── SyncTab.css
│ │ │ │ │ ├── SyncTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ ├── callmebot
│ │ │ │ ├── CallMeBot.jsx
│ │ │ │ └── setup-page
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ └── index.js
│ │ │ ├── enedis-gateway
│ │ │ │ ├── EnedisPage.jsx
│ │ │ │ ├── UsagePoints.jsx
│ │ │ │ ├── Welcome.jsx
│ │ │ │ ├── consts.js
│ │ │ │ └── enedis-button.png
│ │ │ ├── ewelink
│ │ │ │ ├── EweLinkDeviceBox.jsx
│ │ │ │ ├── EweLinkPage.jsx
│ │ │ │ ├── actions.js
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── edit-page
│ │ │ │ │ └── index.js
│ │ │ │ └── setup-page
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ └── index.js
│ │ │ ├── free-mobile
│ │ │ │ ├── FreeMobile.jsx
│ │ │ │ ├── actions.js
│ │ │ │ └── index.js
│ │ │ ├── google-cast
│ │ │ │ ├── GoogleCastDeviceBox.jsx
│ │ │ │ ├── GoogleCastPage.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ └── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ ├── google-home-gateway
│ │ │ │ ├── Layout.jsx
│ │ │ │ ├── index.js
│ │ │ │ ├── style.css
│ │ │ │ └── welcome.jsx
│ │ │ ├── homekit
│ │ │ │ ├── HomeKit.jsx
│ │ │ │ ├── actions.js
│ │ │ │ ├── index.js
│ │ │ │ └── style.css
│ │ │ ├── lan-manager
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── LANManagerPage.js
│ │ │ │ ├── device-page
│ │ │ │ │ ├── LANManagerDevice.jsx
│ │ │ │ │ ├── LANManagerDeviceTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── discover-page
│ │ │ │ │ ├── LANManagerDiscoverDevice.jsx
│ │ │ │ │ ├── LANManagerDiscoverTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── settings-page
│ │ │ │ │ ├── LANManagerIPLine.jsx
│ │ │ │ │ ├── LANManagerIPRange.jsx
│ │ │ │ │ ├── LANManagerPresenceScanner.jsx
│ │ │ │ │ ├── LANManagerSettingsTab.jsx
│ │ │ │ │ └── index.js
│ │ │ │ └── style.css
│ │ │ ├── matter
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── MatterDeviceBox.jsx
│ │ │ │ ├── MatterDevices.jsx
│ │ │ │ ├── MatterDiscoverPage.jsx
│ │ │ │ ├── MatterPage.jsx
│ │ │ │ ├── MatterSettingsPage.jsx
│ │ │ │ └── style.css
│ │ │ ├── melcloud
│ │ │ │ ├── MELCloudDeviceBox.jsx
│ │ │ │ ├── MELCloudPage.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── edit-page
│ │ │ │ │ └── index.js
│ │ │ │ └── setup-page
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ └── index.js
│ │ │ ├── mqtt
│ │ │ │ ├── MqttPage.js
│ │ │ │ ├── commons
│ │ │ │ │ ├── CheckMqttPanel.js
│ │ │ │ │ └── actions.js
│ │ │ │ ├── debug-page
│ │ │ │ │ └── Debug.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── Device.jsx
│ │ │ │ │ ├── DeviceForm.jsx
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── setup
│ │ │ │ │ │ ├── Feature.jsx
│ │ │ │ │ │ ├── FeatureTab.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ │ └── style.css
│ │ │ │ └── setup-page
│ │ │ │ │ ├── SetupBrokerContainer.jsx
│ │ │ │ │ ├── SetupForm.jsx
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ └── index.js
│ │ │ ├── netatmo
│ │ │ │ ├── NetatmoDeviceBox.jsx
│ │ │ │ ├── NetatmoPage.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── StateConnection.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── StateConnection.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── setup-page
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ ├── StateConnection.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ └── style.css
│ │ │ ├── nextcloud-talk
│ │ │ │ ├── NextcloudTalk.jsx
│ │ │ │ ├── actions.js
│ │ │ │ └── index.js
│ │ │ ├── node-red
│ │ │ │ ├── NodeRedPage.js
│ │ │ │ └── setup-page
│ │ │ │ │ ├── CheckStatus.js
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ ├── openai
│ │ │ │ ├── Layout.jsx
│ │ │ │ └── index.js
│ │ │ ├── openweather
│ │ │ │ ├── OpenWeather.jsx
│ │ │ │ ├── actions.js
│ │ │ │ └── index.js
│ │ │ ├── owntracks
│ │ │ │ └── welcome.jsx
│ │ │ ├── philips-hue
│ │ │ │ ├── PhilipsHuePage.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── Device.jsx
│ │ │ │ │ ├── DeviceForm.jsx
│ │ │ │ │ ├── DevicePage.jsx
│ │ │ │ │ ├── FoundDevices.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ └── setup-page
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ ├── rtsp-camera
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── RtspCamera.jsx
│ │ │ │ ├── RtspCameraBox.jsx
│ │ │ │ ├── actions.js
│ │ │ │ ├── index.js
│ │ │ │ └── style.css
│ │ │ ├── sonos
│ │ │ │ ├── SonosDeviceBox.jsx
│ │ │ │ ├── SonosPage.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ └── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ ├── tasmota
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── TasmotaDeviceBox.jsx
│ │ │ │ ├── TasmotaPage.js
│ │ │ │ ├── actions.js
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── discover-http
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── SearchForm.jsx
│ │ │ │ │ └── index.js
│ │ │ │ ├── discover-mqtt
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ └── index.js
│ │ │ │ ├── edit-page
│ │ │ │ │ └── index.js
│ │ │ │ └── style.css
│ │ │ ├── telegram
│ │ │ │ ├── Telegram.jsx
│ │ │ │ ├── actions.js
│ │ │ │ └── index.js
│ │ │ ├── tp-link
│ │ │ │ ├── TpLinkPage.jsx
│ │ │ │ └── device-page
│ │ │ │ │ ├── Device.jsx
│ │ │ │ │ ├── DeviceForm.jsx
│ │ │ │ │ ├── DevicePage.jsx
│ │ │ │ │ ├── FoundDevices.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ ├── tuya
│ │ │ │ ├── TuyaDeviceBox.jsx
│ │ │ │ ├── TuyaPage.jsx
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── edit-page
│ │ │ │ │ └── index.js
│ │ │ │ └── setup-page
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ └── index.js
│ │ │ ├── xiaomi
│ │ │ │ ├── Device.jsx
│ │ │ │ ├── DevicePanel.jsx
│ │ │ │ ├── SetupPanel.jsx
│ │ │ │ ├── XiaomiLayout.jsx
│ │ │ │ ├── XiaomiSensor.jsx
│ │ │ │ ├── actions.js
│ │ │ │ ├── edit-page
│ │ │ │ │ ├── EditPage.jsx
│ │ │ │ │ └── index.js
│ │ │ │ ├── index.js
│ │ │ │ └── style.css
│ │ │ ├── zigbee2mqtt
│ │ │ │ ├── Zigbee2mqttPage.js
│ │ │ │ ├── commons
│ │ │ │ │ ├── CheckStatus.js
│ │ │ │ │ └── actions.js
│ │ │ │ ├── device-page
│ │ │ │ │ ├── DeviceTab.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── Zigbee2mqttBox.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── discover-page
│ │ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ │ ├── DiscoveredBox.jsx
│ │ │ │ │ ├── EmptyState.jsx
│ │ │ │ │ ├── actions.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── style.css
│ │ │ │ ├── edit-page
│ │ │ │ │ └── index.js
│ │ │ │ └── setup-page
│ │ │ │ │ ├── SetupModePanel.jsx
│ │ │ │ │ ├── SetupPanel.jsx
│ │ │ │ │ ├── SetupTab.jsx
│ │ │ │ │ ├── components
│ │ │ │ │ ├── ContainerLinkStatus.jsx
│ │ │ │ │ ├── ContainerStatus.jsx
│ │ │ │ │ ├── InstallationCard.jsx
│ │ │ │ │ ├── Requirement.jsx
│ │ │ │ │ └── SubmitConfiguration.jsx
│ │ │ │ │ ├── constants.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── local
│ │ │ │ │ ├── SetupLocalMode.jsx
│ │ │ │ │ ├── SetupLocalModeCard.jsx
│ │ │ │ │ ├── SetupLocalOptions.jsx
│ │ │ │ │ └── SetupLocalSummary.jsx
│ │ │ │ │ ├── remote
│ │ │ │ │ ├── SetupRemoteMode.jsx
│ │ │ │ │ ├── SetupRemoteModeCard.jsx
│ │ │ │ │ ├── SetupRemoteOptions.jsx
│ │ │ │ │ └── SetupRemoteSummary.jsx
│ │ │ │ │ └── status
│ │ │ │ │ ├── EnableStatus.jsx
│ │ │ │ │ └── RunningStatus.jsx
│ │ │ └── zwavejs-ui
│ │ │ │ ├── ZwaveJSUIDeviceBox.jsx
│ │ │ │ ├── ZwaveJSUIPage.jsx
│ │ │ │ ├── device-page
│ │ │ │ ├── DeviceTab.jsx
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── index.js
│ │ │ │ └── style.css
│ │ │ │ ├── discover-page
│ │ │ │ ├── DiscoverTab.jsx
│ │ │ │ ├── EmptyState.jsx
│ │ │ │ ├── index.js
│ │ │ │ └── style.css
│ │ │ │ └── setup-page
│ │ │ │ └── index.js
│ │ └── index.js
│ ├── locked
│ │ ├── index.js
│ │ └── style.css
│ ├── login-gateway
│ │ ├── LoginGatewayPage.jsx
│ │ └── index.js
│ ├── login
│ │ ├── LoginPage.jsx
│ │ └── index.js
│ ├── map
│ │ ├── ColorPicker.jsx
│ │ ├── Map.jsx
│ │ ├── NewArea.jsx
│ │ ├── NewAreaMap.jsx
│ │ ├── index.jsx
│ │ └── style.css
│ ├── profile
│ │ ├── DashboardProfilePage.jsx
│ │ ├── EditProfile.jsx
│ │ └── index.js
│ ├── reset-password
│ │ ├── ResetPasswordForm.jsx
│ │ ├── ResetPasswordPage.jsx
│ │ ├── ResetPasswordSuccess.jsx
│ │ └── index.js
│ ├── scene
│ │ ├── EmptyState.jsx
│ │ ├── SceneCard.jsx
│ │ ├── SceneCards.jsx
│ │ ├── ScenePage.jsx
│ │ ├── SceneTagFilter.jsx
│ │ ├── constant.js
│ │ ├── duplicate-scene
│ │ │ ├── DuplicateScenePage.jsx
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ ├── edit-scene
│ │ │ ├── ActionCard.jsx
│ │ │ ├── ActionGroup.jsx
│ │ │ ├── EditActions.jsx
│ │ │ ├── EditScenePage.jsx
│ │ │ ├── EmptyDropZone.jsx
│ │ │ ├── Settings.jsx
│ │ │ ├── TriggerCard.jsx
│ │ │ ├── TriggerGroup.jsx
│ │ │ ├── actions
│ │ │ │ ├── AskAI.jsx
│ │ │ │ ├── BlinkLightParams.jsx
│ │ │ │ ├── CalendarIsEventRunning.css
│ │ │ │ ├── CalendarIsEventRunning.jsx
│ │ │ │ ├── CheckAlarmMode.jsx
│ │ │ │ ├── CheckTime.css
│ │ │ │ ├── CheckTime.jsx
│ │ │ │ ├── CheckUserPresence.jsx
│ │ │ │ ├── ChooseActionTypeCard.jsx
│ │ │ │ ├── ConditionIfElseThen.jsx
│ │ │ │ ├── DelayActionParams.jsx
│ │ │ │ ├── DeviceGetValueParams.jsx
│ │ │ │ ├── DeviceSetValue.css
│ │ │ │ ├── DeviceSetValue.jsx
│ │ │ │ ├── EcowattCondition.jsx
│ │ │ │ ├── EdfTempoCondition.jsx
│ │ │ │ ├── HouseEmptyOrNotCondition.jsx
│ │ │ │ ├── HttpRequest.jsx
│ │ │ │ ├── PlayNotification.jsx
│ │ │ │ ├── SendMessageCameraParams.jsx
│ │ │ │ ├── SendMessageParams.jsx
│ │ │ │ ├── SendMqttMessage.jsx
│ │ │ │ ├── SendSms.jsx
│ │ │ │ ├── SendZigbee2MqttMessage.jsx
│ │ │ │ ├── SetAlarmMode.jsx
│ │ │ │ ├── StartSceneParams.jsx
│ │ │ │ ├── TurnOnOffLightParams.jsx
│ │ │ │ ├── TurnOnOffSwitchParams.jsx
│ │ │ │ ├── UserPresence.jsx
│ │ │ │ └── only-continue-if
│ │ │ │ │ ├── Condition.css
│ │ │ │ │ ├── Condition.jsx
│ │ │ │ │ └── OnlyContinueIfParams.jsx
│ │ │ ├── index.js
│ │ │ ├── sceneUtils.js
│ │ │ ├── style.css
│ │ │ └── triggers
│ │ │ │ ├── AlarmModeTrigger.jsx
│ │ │ │ ├── CalendarEventIsComing.jsx
│ │ │ │ ├── ChooseTriggerTypeCard.jsx
│ │ │ │ ├── DeviceFeatureState.jsx
│ │ │ │ ├── GladysStartTrigger.jsx
│ │ │ │ ├── HouseEmptyOrNot.jsx
│ │ │ │ ├── MQTTReceivedTrigger.jsx
│ │ │ │ ├── ScheduledTrigger.jsx
│ │ │ │ ├── SunriseSunsetTrigger.jsx
│ │ │ │ ├── UserEnteredOrLeftArea.jsx
│ │ │ │ ├── UserPresenceTrigger.jsx
│ │ │ │ ├── device-states
│ │ │ │ ├── BinaryDeviceState.jsx
│ │ │ │ ├── ButtonClickDeviceState.jsx
│ │ │ │ ├── DefaultDeviceState.jsx
│ │ │ │ ├── LevelSensorDeviceState.jsx
│ │ │ │ ├── PilotWireModeDeviceState.jsx
│ │ │ │ ├── PresenceSensorDeviceState.jsx
│ │ │ │ └── ThresholdDeviceState.jsx
│ │ │ │ └── style.css
│ │ ├── index.js
│ │ ├── new-scene
│ │ │ ├── NewScenePage.jsx
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ └── style.css
│ ├── settings
│ │ ├── SettingsLayout.jsx
│ │ ├── settings-background-jobs
│ │ │ ├── JobList.jsx
│ │ │ ├── SettingsBackgroundJobs.jsx
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ ├── settings-backup
│ │ │ ├── GatewayBackupList.jsx
│ │ │ ├── GatewayBackupPage.jsx
│ │ │ ├── GatewayBackupRow.jsx
│ │ │ ├── GatewayNotConfigured.jsx
│ │ │ ├── GatewayRestoreInProgress.jsx
│ │ │ ├── UpgradePlan.jsx
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ ├── settings-billing
│ │ │ ├── GatewayBilling.jsx
│ │ │ └── index.js
│ │ ├── settings-gateway-open-api
│ │ │ ├── OpenApi.js
│ │ │ ├── OpenApiKey.js
│ │ │ └── index.js
│ │ ├── settings-gateway-users
│ │ │ ├── UserList.js
│ │ │ ├── UserRow.js
│ │ │ └── index.js
│ │ ├── settings-gateway
│ │ │ ├── GatewayBackupKey.jsx
│ │ │ ├── GatewayConfigured.jsx
│ │ │ ├── GatewayConnectedSuccess.jsx
│ │ │ ├── GatewayDisconnect.jsx
│ │ │ ├── GatewayPage.jsx
│ │ │ ├── GatewayPricing.jsx
│ │ │ ├── GatewayUserRow.jsx
│ │ │ ├── GatewayUsersList.jsx
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ ├── settings-house
│ │ │ ├── EmptySearch.jsx
│ │ │ ├── House.jsx
│ │ │ ├── HousePage.jsx
│ │ │ └── index.js
│ │ ├── settings-service
│ │ │ ├── ServiceItem.jsx
│ │ │ ├── ServicesPage.jsx
│ │ │ └── index.js
│ │ ├── settings-session
│ │ │ ├── SessionDevice.jsx
│ │ │ ├── SessionDeviceLabel.jsx
│ │ │ ├── SessionsPage.jsx
│ │ │ └── index.js
│ │ ├── settings-system
│ │ │ ├── SettingsSystemBatteryLevelWarning.jsx
│ │ │ ├── SettingsSystemContainers.jsx
│ │ │ ├── SettingsSystemDatabaseCleaning.jsx
│ │ │ ├── SettingsSystemDuckDbMigration.jsx
│ │ │ ├── SettingsSystemKeepDeviceHistory.jsx
│ │ │ ├── SettingsSystemOperations.jsx
│ │ │ ├── SettingsSystemPage.jsx
│ │ │ ├── SettingsSystemTimeExpiryState.jsx
│ │ │ ├── SettingsSystemTimezone.jsx
│ │ │ ├── index.js
│ │ │ └── style.css
│ │ └── settings-users
│ │ │ ├── UserCard.jsx
│ │ │ ├── UserPage.jsx
│ │ │ ├── create-user
│ │ │ ├── CreateUserPage.js
│ │ │ └── index.js
│ │ │ ├── edit-user
│ │ │ ├── EditUserPage.jsx
│ │ │ ├── ResetPassword.jsx
│ │ │ └── index.js
│ │ │ └── index.js
│ ├── signup-gateway
│ │ ├── SignupBase.js
│ │ ├── SignupForm.js
│ │ ├── SignupGeneratingKeys.js
│ │ ├── index.js
│ │ └── spinner.css
│ └── signup
│ │ ├── 1-welcome
│ │ ├── WelcomeTab.jsx
│ │ └── index.js
│ │ ├── 2-create-account-gladys-gateway
│ │ ├── RestoreBackup.jsx
│ │ ├── RestoreBackupRow.jsx
│ │ ├── RestoreInProgress.jsx
│ │ ├── SetRestoreKey.jsx
│ │ └── index.js
│ │ ├── 2-create-account-local
│ │ ├── CreateAccountLocalTab.jsx
│ │ └── index.js
│ │ ├── 3-preferences
│ │ ├── PreferencesTab.jsx
│ │ └── index.js
│ │ ├── 4-configure-house
│ │ ├── ConfigureHouseTab.jsx
│ │ └── index.js
│ │ ├── 5-success
│ │ ├── SuccessTab.jsx
│ │ └── index.js
│ │ ├── layout.jsx
│ │ └── style.css
│ ├── style
│ └── index.css
│ ├── template.html
│ └── utils
│ ├── DemoHttpClient.js
│ ├── DemoSession.js
│ ├── Dispatcher.js
│ ├── GatewayHttpClient.js
│ ├── GatewaySession.js
│ ├── HttpClient.js
│ ├── Session.js
│ ├── bytesFormat.js
│ ├── color.js
│ ├── consts.js
│ ├── date.js
│ ├── device.js
│ ├── getDefaultState.js
│ ├── keyValueStore.js
│ ├── mergeArray.js
│ ├── picture.js
│ ├── slugify.js
│ ├── url.js
│ ├── validateEmail.js
│ ├── validator.js
│ └── withIntlAsProp.js
├── insomnia.json
├── package-lock.json
├── package.json
└── server
├── .eslintignore
├── .eslintrc.json
├── .prettierignore
├── .prettierrc.json
├── api
├── controllers
│ ├── area.controller.js
│ ├── calendar.controller.js
│ ├── camera.controller.js
│ ├── dashboard.controller.js
│ ├── device.controller.js
│ ├── gateway.controller.js
│ ├── house.controller.js
│ ├── http.controller.js
│ ├── job.controller.js
│ ├── light.controller.js
│ ├── location.controller.js
│ ├── message.controller.js
│ ├── ping.controller.js
│ ├── room.controller.js
│ ├── scene.controller.js
│ ├── service.controller.js
│ ├── session.controller.js
│ ├── system.controller.js
│ ├── user.controller.js
│ ├── variable.controller.js
│ └── weather.controller.js
├── index.js
├── middlewares
│ ├── adminMiddleware.js
│ ├── asyncMiddleware.js
│ ├── authMiddleware.js
│ ├── corsMiddleware.js
│ ├── errorMiddleware.js
│ ├── isInstanceConfigured.js
│ ├── notFoundMiddleware.js
│ └── rateLimitMiddleware.js
├── routes.js
├── setupGateway.js
├── setupRoutes.js
└── websockets
│ └── index.js
├── cli
└── install_service_dependencies.js
├── config
├── brain
│ ├── backup
│ │ ├── answers.en.json
│ │ └── answers.fr.json
│ ├── battery-threshold
│ │ ├── answers.en.json
│ │ └── answers.fr.json
│ ├── calendar
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── camera
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── chat
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── humidity-sensor
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── index.js
│ ├── light
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── openai
│ │ ├── answers.en.json
│ │ └── answers.fr.json
│ ├── scene
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── switch
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── system
│ │ ├── answers.en.json
│ │ └── answers.fr.json
│ ├── taxi
│ │ └── questions.en.json
│ ├── temperature-sensor
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
│ ├── user
│ │ ├── answers.en.json
│ │ └── answers.fr.json
│ └── weather
│ │ ├── answers.en.json
│ │ ├── answers.fr.json
│ │ ├── questions.en.json
│ │ └── questions.fr.json
├── config.js
├── default-profile-picture.b64
├── icons.json
└── scheduler-jobs.js
├── index.js
├── jsconfig.json
├── lib
├── area
│ ├── area.checkNewLocation.js
│ ├── area.create.js
│ ├── area.destroy.js
│ ├── area.get.js
│ ├── area.getBySelector.js
│ ├── area.init.js
│ ├── area.update.js
│ └── index.js
├── brain
│ ├── brain.addNamedEntity.js
│ ├── brain.classify.js
│ ├── brain.getEntityIdByName.js
│ ├── brain.getReply.js
│ ├── brain.load.js
│ ├── brain.removeNamedEntity.js
│ ├── brain.train.js
│ └── index.js
├── calendar
│ ├── calendar.create.js
│ ├── calendar.createEvent.js
│ ├── calendar.destroy.js
│ ├── calendar.destroyEvent.js
│ ├── calendar.destroyEvents.js
│ ├── calendar.findCurrentlyRunningEvent.js
│ ├── calendar.get.js
│ ├── calendar.getEvents.js
│ ├── calendar.update.js
│ ├── calendar.updateEvent.js
│ └── index.js
├── dashboard
│ ├── dashboard.create.js
│ ├── dashboard.destroy.js
│ ├── dashboard.get.js
│ ├── dashboard.getBySelector.js
│ ├── dashboard.update.js
│ ├── dashboard.updateOrder.js
│ └── index.js
├── device
│ ├── camera
│ │ ├── camera.command.js
│ │ ├── camera.get.js
│ │ ├── camera.getImage.js
│ │ ├── camera.getImagesInRoom.js
│ │ ├── camera.getLiveImage.js
│ │ ├── camera.setImage.js
│ │ └── index.js
│ ├── device.add.js
│ ├── device.addFeature.js
│ ├── device.addParam.js
│ ├── device.checkBatteries.js
│ ├── device.create.js
│ ├── device.destroy.js
│ ├── device.get.js
│ ├── device.getBySelector.js
│ ├── device.getDeviceFeaturesAggregates.js
│ ├── device.getDeviceFeaturesAggregatesMulti.js
│ ├── device.getDuckDbMigrationState.js
│ ├── device.init.js
│ ├── device.migrateFromSQLiteToDuckDb.js
│ ├── device.newStateEvent.js
│ ├── device.notify.js
│ ├── device.onPurgeStatesEvent.js
│ ├── device.poll.js
│ ├── device.pollAll.js
│ ├── device.purgeAllSqliteStates.js
│ ├── device.purgeStates.js
│ ├── device.purgeStatesByFeatureId.js
│ ├── device.saveHistoricalState.js
│ ├── device.saveState.js
│ ├── device.saveStringState.js
│ ├── device.setParam.js
│ ├── device.setValue.js
│ ├── device.setupPoll.js
│ ├── humidity-sensor
│ │ ├── humidity-sensor.command.js
│ │ ├── humidity-sensor.getHumidityInRoom.js
│ │ └── index.js
│ ├── index.js
│ ├── light
│ │ ├── index.js
│ │ ├── light.buildLightObject.js
│ │ ├── light.command.js
│ │ ├── light.getLightsInRoom.js
│ │ ├── light.init.js
│ │ ├── light.turnOff.js
│ │ └── light.turnOn.js
│ ├── switch
│ │ ├── index.js
│ │ └── switch.command.js
│ └── temperature-sensor
│ │ ├── index.js
│ │ ├── temperature-sensor.command.js
│ │ └── temperature-sensor.getTemperatureInRoom.js
├── event
│ └── index.js
├── gateway
│ ├── enedis
│ │ ├── gateway.enedisGetConsumptionLoadCurve.js
│ │ ├── gateway.enedisGetDailyConsumption.js
│ │ └── gateway.enedisGetDailyConsumptionMaxPower.js
│ ├── gateway.backup.js
│ ├── gateway.checkIfBackupNeeded.js
│ ├── gateway.disconnect.js
│ ├── gateway.downloadBackup.js
│ ├── gateway.forwardDeviceStateToAlexa.js
│ ├── gateway.forwardDeviceStateToGoogleHome.js
│ ├── gateway.forwardMessageToOpenAI.js
│ ├── gateway.forwardWebsockets.js
│ ├── gateway.getBackups.js
│ ├── gateway.getEcowattSignals.js
│ ├── gateway.getEdfTempo.js
│ ├── gateway.getInstanceKeysFingerprint.js
│ ├── gateway.getLatestGladysVersion.js
│ ├── gateway.getStatus.js
│ ├── gateway.getTTSApiUrl.js
│ ├── gateway.getUsersKeys.js
│ ├── gateway.handleAlexaMessage.js
│ ├── gateway.handleGoogleHomeMessage.js
│ ├── gateway.handleNewMessage.js
│ ├── gateway.init.js
│ ├── gateway.login.js
│ ├── gateway.loginTwoFactor.js
│ ├── gateway.openAIAsk.js
│ ├── gateway.refreshUserKeys.js
│ ├── gateway.restoreBackup.js
│ ├── gateway.restoreBackupEvent.js
│ ├── gateway.saveUsersKeys.js
│ └── index.js
├── house
│ ├── house.arm.js
│ ├── house.create.js
│ ├── house.destroy.js
│ ├── house.disarm.js
│ ├── house.disarmWithCode.js
│ ├── house.get.js
│ ├── house.getBySelector.js
│ ├── house.getRooms.js
│ ├── house.getUsersAtHome.js
│ ├── house.isEmpty.js
│ ├── house.panic.js
│ ├── house.partialArm.js
│ ├── house.update.js
│ ├── house.userLeft.js
│ ├── house.userSeen.js
│ └── index.js
├── http
│ ├── http.request.js
│ └── index.js
├── index.js
├── job
│ ├── index.js
│ ├── job.finish.js
│ ├── job.get.js
│ ├── job.init.js
│ ├── job.purge.js
│ ├── job.start.js
│ ├── job.updateProgress.js
│ └── job.wrapper.js
├── location
│ ├── index.js
│ ├── location.create.js
│ ├── location.get.js
│ ├── location.getLast.js
│ └── location.handleNewGatewayOwntracksLocation.js
├── message
│ ├── index.js
│ ├── message.create.js
│ ├── message.get.js
│ ├── message.handleEvent.js
│ ├── message.purge.js
│ ├── message.reply.js
│ ├── message.replyByIntent.js
│ └── message.sendToUser.js
├── room
│ ├── index.js
│ ├── room.create.js
│ ├── room.destroy.js
│ ├── room.get.js
│ ├── room.getAll.js
│ ├── room.getBySelector.js
│ ├── room.init.js
│ └── room.update.js
├── scene
│ ├── index.js
│ ├── scene.actions.js
│ ├── scene.addScene.js
│ ├── scene.cancelTriggers.js
│ ├── scene.checkCalendarTriggers.js
│ ├── scene.checkTrigger.js
│ ├── scene.command.js
│ ├── scene.create.js
│ ├── scene.dailyUpdate.js
│ ├── scene.destroy.js
│ ├── scene.duplicate.js
│ ├── scene.execute.js
│ ├── scene.executeActions.js
│ ├── scene.executeSingleAction.js
│ ├── scene.get.js
│ ├── scene.getBySelector.js
│ ├── scene.getTag.js
│ ├── scene.init.js
│ ├── scene.triggers.js
│ └── scene.update.js
├── scheduler
│ ├── index.js
│ ├── scheduler.cancelJob.js
│ ├── scheduler.init.js
│ └── scheduler.scheduleJob.js
├── service
│ ├── index.js
│ ├── service.getAll.js
│ ├── service.getByName.js
│ ├── service.getLocalServiceByName.js
│ ├── service.getMessageServices.js
│ ├── service.getService.js
│ ├── service.getServiceById.js
│ ├── service.getServices.js
│ ├── service.getUsage.js
│ ├── service.load.js
│ ├── service.start.js
│ ├── service.startAll.js
│ └── service.stop.js
├── session
│ ├── index.js
│ ├── session.create.js
│ ├── session.createApiKey.js
│ ├── session.get.js
│ ├── session.getAccessToken.js
│ ├── session.getTabletMode.js
│ ├── session.revoke.js
│ ├── session.setTabletMode.js
│ ├── session.setTabletModeLocked.js
│ ├── session.unlockTabletMode.js
│ ├── session.validateAccessToken.js
│ └── session.validateApiKey.js
├── state
│ ├── Store.js
│ └── index.js
├── system
│ ├── index.js
│ ├── system.checkIfGladysUpgraded.js
│ ├── system.createContainer.js
│ ├── system.exec.js
│ ├── system.getContainerMounts.js
│ ├── system.getContainers.js
│ ├── system.getDiskSpace.js
│ ├── system.getGladysBasePath.js
│ ├── system.getGladysContainerId.js
│ ├── system.getInfos.js
│ ├── system.getNetworkMode.js
│ ├── system.init.js
│ ├── system.inspectContainer.js
│ ├── system.installUpgrade.js
│ ├── system.isDocker.js
│ ├── system.pull.js
│ ├── system.removeContainer.js
│ ├── system.restartContainer.js
│ ├── system.saveLatestGladysVersion.js
│ ├── system.shutdown.js
│ ├── system.stopContainer.js
│ └── system.vacuum.js
├── user
│ ├── index.js
│ ├── user.create.js
│ ├── user.destroy.js
│ ├── user.forgotPassword.js
│ ├── user.get.js
│ ├── user.getById.js
│ ├── user.getByRole.js
│ ├── user.getBySelector.js
│ ├── user.getByTelegramUserId.js
│ ├── user.getPicture.js
│ ├── user.getUserCount.js
│ ├── user.init.js
│ ├── user.login.js
│ ├── user.update.js
│ ├── user.updateBySelector.js
│ └── user.updatePassword.js
├── variable
│ ├── index.js
│ ├── variable.destroy.js
│ ├── variable.getValue.js
│ ├── variable.getVariables.js
│ └── variable.setValue.js
└── weather
│ ├── index.js
│ ├── weather.command.js
│ ├── weather.error.js
│ └── weather.get.js
├── migrations
├── 20190205063641-create-user.js
├── 20190206102938-create-location.js
├── 20190206114851-create-house.js
├── 20190211033038-create-life-event.js
├── 20190211034727-create-room.js
├── 20190211035101-create-device.js
├── 20190211035238-create-device-feature.js
├── 20190211041243-create-device-feature-state.js
├── 20190211042223-create-calendar.js
├── 20190211042644-create-calendar-event.js
├── 20190211043231-create-pod.js
├── 20190211043515-create-service.js
├── 20190211043957-create-variable.js
├── 20190211044205-create-script.js
├── 20190211044442-create-area.js
├── 20190211044839-create-dashboard.js
├── 20190211045110-create-scene.js
├── 20190211045641-create-trigger.js
├── 20190211050844-trigger_scene.js
├── 20190211051215-create-message.js
├── 20190212043623-create-session.js
├── 20190318084429-create-device-param.js
├── 20200123094438-add-triggers-attribute.js
├── 20200201125436-add-caldav-data.js
├── 20200207214849-add-calendar-event-url.js
├── 20200513195013-session-with-useragent.js
├── 20201018084535-service-with-status.js
├── 20201031091221-service-reword-status.js
├── 20201128203008-add-color-caldav.js
├── 20201220100508-service-remove-not-configured-status.js
├── 20210129155044-multi-user.js
├── 20210705025615-add-active-in-scene.js
├── 20210723014058-add-device-feature-state-aggregate.js
├── 20210726050004-add-jobs-table.js
├── 20211023172755-share-calendars.js
├── 20211204080815-clean-nan-device-states.js
├── 20220322170955-clean-nan-device-states-again.js
├── 20220503155531-clean-nan-device-states-aggregate.js
├── 20220513204058-add-calendar-type-event-desc.js
├── 20220912140232-add-index-device-feature-state.js
├── 20230102171731-update-tasmota-energy-features.js
├── 20230130044921-add-position-dashboard.js
├── 20230410123029-broadlink-change-volume-feature.js
├── 20230414020652-enedis-unit-is-watt-hour.js
├── 20230428064822-translate-enedis-name.js
├── 20230511161620-description-scene.js
├── 20230518062954-enedis-reset-aggregate.js
├── 20230628144609-change-rotation-camera.js
├── 20230928144012-add-tag-scene.js
├── 20230929085337-alarm-mode.js
├── 20231115163530-default-system-variable-device-battery.js
├── 20240211093530-default-netatmo-variable-api.js
├── 20240513141123-dashboard-visibility.js
├── 20241105200700-update-lixee-tic-features.js
└── 20241111211825-update-lixee-tic-selector_externalId.js
├── models
├── area.js
├── calendar.js
├── calendar_event.js
├── dashboard.js
├── device.js
├── device_feature.js
├── device_feature_state.js
├── device_feature_state_aggregate.js
├── device_param.js
├── house.js
├── index.js
├── job.js
├── life_event.js
├── location.js
├── message.js
├── pod.js
├── room.js
├── scene.js
├── script.js
├── service.js
├── session.js
├── tag_scene.js
├── user.js
└── variable.js
├── package-lock.json
├── package.json
├── seeders
├── 20190205070000-house.js
├── 20190205071039-demo-user.js
├── 20190211053203-demo-location.js
├── 20190219041452-message.js
├── 20190226025926-service.js
├── 20190226025931-variable.js
├── 20190227043234-scene.js
├── 20190227081653-room.js
├── 20190227081656-device.js
├── 20190227081700-device-feature.js
├── 20190401042124-session.js
├── 20190403081927-calendar.js
├── 20190403081933-calendar-event.js
├── 20190416085240-device-param.js
├── 20190506074218-dashboard.js
├── 20190507083413-area.js
└── 20231002113233-tag-scene.js
├── services
├── airplay
│ ├── api
│ │ └── airplay.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── airplay.init.js
│ │ ├── airplay.scan.js
│ │ ├── airplay.setValue.js
│ │ └── index.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ │ └── convertToGladysDevice.js
├── alexa
│ ├── index.js
│ ├── lib
│ │ ├── alexa.constants.js
│ │ ├── alexa.onDiscovery.js
│ │ ├── alexa.onExecute.js
│ │ ├── alexa.onReportState.js
│ │ ├── deviceMappings.js
│ │ ├── index.js
│ │ └── syncDeviceConverter.js
│ ├── package-lock.json
│ └── package.json
├── bluetooth
│ ├── README.md
│ ├── api
│ │ └── bluetooth.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── commands
│ │ │ ├── bluetooth.applyOnPeripheral.js
│ │ │ ├── bluetooth.completeDevice.js
│ │ │ ├── bluetooth.getCharacteristic.js
│ │ │ ├── bluetooth.getDiscoveredDevice.js
│ │ │ ├── bluetooth.getDiscoveredDevices.js
│ │ │ ├── bluetooth.getPeripheral.js
│ │ │ ├── bluetooth.getStatus.js
│ │ │ ├── bluetooth.readDevice.js
│ │ │ ├── bluetooth.scan.js
│ │ │ ├── bluetooth.scanDevice.js
│ │ │ ├── bluetooth.scanPresence.js
│ │ │ ├── bluetooth.start.js
│ │ │ ├── bluetooth.stop.js
│ │ │ ├── bluetooth.stopScanPresence.js
│ │ │ ├── bluetooth.subscribeDevice.js
│ │ │ ├── bluetooth.unsubscribeDevice.js
│ │ │ └── bluetooth.writeDevice.js
│ │ ├── config
│ │ │ ├── bluetooth.getConfiguration.js
│ │ │ ├── bluetooth.initPresenceScanner.js
│ │ │ └── bluetooth.saveConfiguration.js
│ │ ├── device
│ │ │ ├── bluetooth.information.js
│ │ │ └── bluetooth.transformToDevice.js
│ │ ├── events
│ │ │ ├── bluetooth.broadcastStatus.js
│ │ │ ├── bluetooth.discover.js
│ │ │ ├── bluetooth.scanStart.js
│ │ │ ├── bluetooth.scanStop.js
│ │ │ └── bluetooth.stateChange.js
│ │ ├── index.js
│ │ └── utils
│ │ │ ├── bluetooth.constants.js
│ │ │ ├── characteristic
│ │ │ ├── bluetooth.read.js
│ │ │ ├── bluetooth.subscribe.js
│ │ │ ├── bluetooth.unsubscribe.js
│ │ │ └── bluetooth.write.js
│ │ │ ├── peripheral
│ │ │ ├── bluetooth.connect.js
│ │ │ └── bluetooth.discoverServices.js
│ │ │ └── service
│ │ │ └── bluetooth.discoverCharacteristics.js
│ ├── package-lock.json
│ └── package.json
├── broadlink
│ ├── api
│ │ └── broadlink.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── commands
│ │ │ ├── broadlink.addPeripheral.js
│ │ │ ├── broadlink.buildPeripheral.js
│ │ │ ├── broadlink.getDevice.js
│ │ │ ├── broadlink.getPeripherals.js
│ │ │ ├── broadlink.init.js
│ │ │ ├── broadlink.loadMapper.js
│ │ │ ├── broadlink.poll.js
│ │ │ ├── broadlink.setValue.js
│ │ │ ├── broadlink.stop.js
│ │ │ └── features
│ │ │ │ ├── broadlink.light.js
│ │ │ │ ├── broadlink.remote.js
│ │ │ │ ├── broadlink.sensor.js
│ │ │ │ ├── broadlink.switch.js
│ │ │ │ └── index.js
│ │ ├── index.js
│ │ ├── learn
│ │ │ ├── broadlink.cancelLearn.js
│ │ │ ├── broadlink.checkData.js
│ │ │ ├── broadlink.learn.js
│ │ │ └── broadlink.send.js
│ │ └── utils
│ │ │ └── broadlink.constants.js
│ ├── package-lock.json
│ └── package.json
├── caldav
│ ├── api
│ │ └── caldav.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── calendar
│ │ │ ├── calendar.cleanUp.js
│ │ │ ├── calendar.disableCalendar.js
│ │ │ ├── calendar.enableCalendar.js
│ │ │ ├── calendar.formaters.js
│ │ │ ├── calendar.requests.js
│ │ │ ├── calendar.syncUserCalendars.js
│ │ │ └── calendar.syncUserWebcals.js
│ │ ├── config
│ │ │ └── index.js
│ │ └── index.js
│ ├── package-lock.json
│ └── package.json
├── callmebot
│ ├── index.js
│ ├── lib
│ │ ├── index.js
│ │ └── message.send.js
│ ├── package-lock.json
│ └── package.json
├── ecowatt
│ ├── controllers
│ │ └── ecowatt.controller.js
│ ├── index.js
│ ├── package-lock.json
│ └── package.json
├── edf-tempo
│ ├── controllers
│ │ └── edf-tempo.controller.js
│ ├── index.js
│ ├── package-lock.json
│ └── package.json
├── enedis
│ ├── api
│ │ └── enedis.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── enedis.init.js
│ │ ├── enedis.sync.js
│ │ └── index.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ │ └── parser.js
├── ewelink
│ ├── api
│ │ └── ewelink.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── device
│ │ │ ├── connect.js
│ │ │ ├── discover.js
│ │ │ ├── index.js
│ │ │ ├── poll.js
│ │ │ ├── setValue.js
│ │ │ └── status.js
│ │ ├── features
│ │ │ ├── binary.js
│ │ │ ├── humidity.js
│ │ │ ├── index.js
│ │ │ └── temperature.js
│ │ └── utils
│ │ │ ├── constants.js
│ │ │ └── externalId.js
│ ├── package-lock.json
│ └── package.json
├── example
│ ├── README.md
│ ├── index.js
│ ├── lib
│ │ └── light
│ │ │ ├── index.js
│ │ │ ├── light.getState.js
│ │ │ ├── light.setValue.js
│ │ │ ├── light.turnOff.js
│ │ │ └── light.turnOn.js
│ ├── package-lock.json
│ └── package.json
├── free-mobile
│ ├── index.js
│ ├── package-lock.json
│ └── package.json
├── google-actions
│ ├── index.js
│ ├── lib
│ │ ├── deviceTypes
│ │ │ ├── googleActions.curtain.type.js
│ │ │ ├── googleActions.light.type.js
│ │ │ ├── googleActions.shutter.type.js
│ │ │ ├── googleActions.switch.type.js
│ │ │ └── index.js
│ │ ├── index.js
│ │ ├── smarthome
│ │ │ ├── googleActions.onExecute.js
│ │ │ ├── googleActions.onQuery.js
│ │ │ └── googleActions.onSync.js
│ │ ├── traits
│ │ │ ├── googleActions.brightness.trait.js
│ │ │ ├── googleActions.colorSetting.trait.js
│ │ │ ├── googleActions.onOff.trait.js
│ │ │ ├── googleActions.openClose.trait.js
│ │ │ └── index.js
│ │ └── utils
│ │ │ ├── googleActions.determineTrait.js
│ │ │ ├── googleActions.determineTypeAndTraits.js
│ │ │ ├── googleActions.queryDeviceConverter.js
│ │ │ └── googleActions.syncDeviceConverter.js
│ ├── package-lock.json
│ └── package.json
├── google-cast
│ ├── api
│ │ └── google_cast.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── google_cast.init.js
│ │ ├── google_cast.scan.js
│ │ ├── google_cast.setValue.js
│ │ └── index.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ │ └── convertToGladysDevice.js
├── homekit
│ ├── api
│ │ └── homekit.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── buildAccessory.js
│ │ ├── buildService.js
│ │ ├── createBridge.js
│ │ ├── deviceMappings.js
│ │ ├── index.js
│ │ ├── newPinCode.js
│ │ ├── newUsername.js
│ │ ├── notifyChange.js
│ │ ├── resetBridge.js
│ │ └── sendState.js
│ ├── package-lock.json
│ └── package.json
├── index.js
├── lan-manager
│ ├── api
│ │ └── lan-manager.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── index.js
│ │ ├── lan-manager.constants.js
│ │ ├── lan-manager.getConfiguration.js
│ │ ├── lan-manager.getDiscoveredDevices.js
│ │ ├── lan-manager.getStatus.js
│ │ ├── lan-manager.init.js
│ │ ├── lan-manager.initPresenceScanner.js
│ │ ├── lan-manager.loadConfiguration.js
│ │ ├── lan-manager.mergeWithExistingDevice.js
│ │ ├── lan-manager.saveConfiguration.js
│ │ ├── lan-manager.scan.js
│ │ ├── lan-manager.scanPresence.js
│ │ ├── lan-manager.stop.js
│ │ └── lan-manager.transformDevice.js
│ ├── package-lock.json
│ └── package.json
├── matter
│ ├── api
│ │ └── matter.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── index.js
│ │ ├── matter.backupController.js
│ │ ├── matter.checkIpv6.js
│ │ ├── matter.decommission.js
│ │ ├── matter.getDevices.js
│ │ ├── matter.getNodes.js
│ │ ├── matter.handleNode.js
│ │ ├── matter.init.js
│ │ ├── matter.listenToStateChange.js
│ │ ├── matter.pairDevice.js
│ │ ├── matter.refreshDevices.js
│ │ ├── matter.restoreBackup.js
│ │ ├── matter.setValue.js
│ │ └── matter.stop.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ │ ├── constants.js
│ │ └── convertToGladysDevice.js
├── melcloud
│ ├── api
│ │ └── melcloud.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── device
│ │ │ ├── air-to-air.device.js
│ │ │ └── melcloud.convertDevice.js
│ │ ├── index.js
│ │ ├── melcloud.connect.js
│ │ ├── melcloud.disconnect.js
│ │ ├── melcloud.discoverDevices.js
│ │ ├── melcloud.getConfiguration.js
│ │ ├── melcloud.init.js
│ │ ├── melcloud.loadDevices.js
│ │ ├── melcloud.poll.js
│ │ ├── melcloud.saveConfiguration.js
│ │ ├── melcloud.setValue.js
│ │ └── utils
│ │ │ └── melcloud.constants.js
│ ├── package-lock.json
│ └── package.json
├── mqtt
│ ├── api
│ │ └── mqtt.controller.js
│ ├── docker
│ │ └── eclipse-mosquitto-container.json
│ ├── index.js
│ ├── lib
│ │ ├── checkDockerNetwork.js
│ │ ├── configureContainer.js
│ │ ├── connect.js
│ │ ├── constants.js
│ │ ├── disconnect.js
│ │ ├── getConfiguration.js
│ │ ├── handleNewMessage.js
│ │ ├── handler
│ │ │ ├── handleDeviceCustomTopicMessage.js
│ │ │ └── handleGladysMessage.js
│ │ ├── index.js
│ │ ├── init.js
│ │ ├── installContainer.js
│ │ ├── listenToCustomMqttTopicIfNeeded.js
│ │ ├── publish.js
│ │ ├── saveConfiguration.js
│ │ ├── setDebugMode.js
│ │ ├── setValue.js
│ │ ├── status.js
│ │ ├── subscribe.js
│ │ ├── unListenToCustomMqttTopic.js
│ │ ├── unsubscribe.js
│ │ └── updateContainer.js
│ ├── package-lock.json
│ └── package.json
├── netatmo
│ ├── .eslintrc.json
│ ├── api
│ │ └── netatmo.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── device
│ │ │ ├── netatmo.buildFeaturesCommon.js
│ │ │ ├── netatmo.buildFeaturesCommonTemp.js
│ │ │ ├── netatmo.buildFeaturesSpecifEnergy.js
│ │ │ ├── netatmo.buildFeaturesSpecifWeather.js
│ │ │ ├── netatmo.convertDeviceEnergy.js
│ │ │ ├── netatmo.convertDeviceNotSupported.js
│ │ │ ├── netatmo.convertDeviceWeather.js
│ │ │ ├── netatmo.deviceMapping.js
│ │ │ └── netatmo.updateNRV.js
│ │ ├── index.js
│ │ ├── netatmo.connect.js
│ │ ├── netatmo.disconnect.js
│ │ ├── netatmo.discoverDevices.js
│ │ ├── netatmo.getAccessToken.js
│ │ ├── netatmo.getConfiguration.js
│ │ ├── netatmo.getRefreshToken.js
│ │ ├── netatmo.getStatus.js
│ │ ├── netatmo.init.js
│ │ ├── netatmo.loadDeviceDetails.js
│ │ ├── netatmo.loadDevices.js
│ │ ├── netatmo.loadThermostatDetails.js
│ │ ├── netatmo.loadWeatherStationDetails.js
│ │ ├── netatmo.pollRefreshingToken.js
│ │ ├── netatmo.pollRefreshingValues.js
│ │ ├── netatmo.refreshingTokens.js
│ │ ├── netatmo.retrieveTokens.js
│ │ ├── netatmo.saveConfiguration.js
│ │ ├── netatmo.saveStatus.js
│ │ ├── netatmo.setTokens.js
│ │ ├── netatmo.setValue.js
│ │ ├── netatmo.updateValues.js
│ │ ├── update
│ │ │ ├── netatmo.updateNAMain.js
│ │ │ ├── netatmo.updateNAModule1.js
│ │ │ ├── netatmo.updateNAModule2.js
│ │ │ ├── netatmo.updateNAModule3.js
│ │ │ ├── netatmo.updateNAModule4.js
│ │ │ ├── netatmo.updateNAPlug.js
│ │ │ ├── netatmo.updateNATherm1.js
│ │ │ └── netatmo.updateNRV.js
│ │ └── utils
│ │ │ ├── netatmo.buildScopesConfig.js
│ │ │ └── netatmo.constants.js
│ ├── package-lock.json
│ └── package.json
├── nextcloud-talk
│ ├── index.js
│ ├── lib
│ │ ├── bot
│ │ │ ├── bot.poll.js
│ │ │ ├── bot.startPolling.js
│ │ │ └── bot.stopPolling.js
│ │ ├── index.js
│ │ └── message
│ │ │ ├── message.connect.js
│ │ │ ├── message.disconnect.js
│ │ │ ├── message.new.js
│ │ │ └── message.send.js
│ ├── package-lock.json
│ └── package.json
├── node-red
│ ├── api
│ │ └── node-red.controller.js
│ ├── docker
│ │ ├── gladys-node-red-container.json
│ │ └── settings.txt
│ ├── index.js
│ ├── lib
│ │ ├── checkForContainerUpdates.js
│ │ ├── configureContainer.js
│ │ ├── constants.js
│ │ ├── disconnect.js
│ │ ├── getConfiguration.js
│ │ ├── index.js
│ │ ├── init.js
│ │ ├── installContainer.js
│ │ ├── isEnabled.js
│ │ ├── saveConfiguration.js
│ │ └── status.js
│ ├── package-lock.json
│ └── package.json
├── openweather
│ ├── index.js
│ ├── lib
│ │ └── formatResults.js
│ ├── package-lock.json
│ └── package.json
├── philips-hue
│ ├── api
│ │ └── hue.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── light
│ │ │ ├── index.js
│ │ │ ├── light.activateScene.js
│ │ │ ├── light.configureBridge.js
│ │ │ ├── light.getBridges.js
│ │ │ ├── light.getLights.js
│ │ │ ├── light.getScenes.js
│ │ │ ├── light.init.js
│ │ │ ├── light.poll.js
│ │ │ ├── light.setValue.js
│ │ │ └── light.syncWithBridge.js
│ │ ├── models
│ │ │ ├── color.js
│ │ │ ├── colorWithTemperature.js
│ │ │ ├── plugOnOff.js
│ │ │ ├── white.js
│ │ │ └── whiteWithTemperature.js
│ │ └── utils
│ │ │ ├── consts.js
│ │ │ └── parseExternalId.js
│ ├── package-lock.json
│ └── package.json
├── rtsp-camera
│ ├── api
│ │ └── rtspCamera.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── checkIfLiveActive.js
│ │ ├── convertLocalStreamToGateway.js
│ │ ├── getImage.js
│ │ ├── index.js
│ │ ├── liveActivePing.js
│ │ ├── onNewCameraFile.js
│ │ ├── poll.js
│ │ ├── sendCameraFileToGateway.js
│ │ ├── startStreaming.js
│ │ ├── startStreamingIfNotStarted.js
│ │ └── stopStreaming.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ │ └── validateStreamParams.js
├── sonos
│ ├── api
│ │ └── sonos.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── index.js
│ │ ├── sonos.init.js
│ │ ├── sonos.onAvTransportEvent.js
│ │ ├── sonos.onVolumeEvent.js
│ │ ├── sonos.scan.js
│ │ └── sonos.setValue.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ │ └── convertToGladysDevice.js
├── tasmota
│ ├── api
│ │ └── tasmota.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── features
│ │ │ ├── colorChannel.js
│ │ │ ├── colorScheme.js
│ │ │ ├── colorSpeed.js
│ │ │ ├── colorTemperature.js
│ │ │ ├── counter.js
│ │ │ ├── device_temperature.js
│ │ │ ├── dimmer.js
│ │ │ ├── distance.js
│ │ │ ├── energy.apparentPower.js
│ │ │ ├── energy.current.js
│ │ │ ├── energy.power.js
│ │ │ ├── energy.reactivePower.js
│ │ │ ├── energy.today.js
│ │ │ ├── energy.total.js
│ │ │ ├── energy.voltage.js
│ │ │ ├── energy.yesterday.js
│ │ │ ├── humidity.js
│ │ │ ├── index.js
│ │ │ ├── modules.js
│ │ │ ├── power.js
│ │ │ └── temperature.js
│ │ ├── http
│ │ │ ├── index.js
│ │ │ ├── tasmota.http.connect.js
│ │ │ ├── tasmota.http.constants.js
│ │ │ ├── tasmota.http.disconnect.js
│ │ │ ├── tasmota.http.getDiscoveredDevices.js
│ │ │ ├── tasmota.http.getValue.js
│ │ │ ├── tasmota.http.request.js
│ │ │ ├── tasmota.http.scan.js
│ │ │ ├── tasmota.http.setValue.js
│ │ │ ├── tasmota.http.status.js
│ │ │ └── tasmota.http.subStatus.js
│ │ ├── index.js
│ │ ├── mqtt
│ │ │ ├── index.js
│ │ │ ├── tasmota.mqtt.connect.js
│ │ │ ├── tasmota.mqtt.disconnect.js
│ │ │ ├── tasmota.mqtt.getDiscoveredDevices.js
│ │ │ ├── tasmota.mqtt.handleMessage.js
│ │ │ ├── tasmota.mqtt.scan.js
│ │ │ ├── tasmota.mqtt.setValue.js
│ │ │ ├── tasmota.mqtt.status.js
│ │ │ └── tasmota.mqtt.subStatus.js
│ │ ├── tasmota.connect.js
│ │ ├── tasmota.constants.js
│ │ ├── tasmota.disconnect.js
│ │ ├── tasmota.getDiscoveredDevices.js
│ │ ├── tasmota.getHandler.js
│ │ ├── tasmota.getProtocolFromDevice.js
│ │ ├── tasmota.mergeWithExistingDevice.js
│ │ ├── tasmota.notifyNewDevice.js
│ │ ├── tasmota.poll.js
│ │ ├── tasmota.scan.js
│ │ ├── tasmota.setValue.js
│ │ └── utils
│ │ │ └── tasmota.featureStatus.js
│ ├── package-lock.json
│ └── package.json
├── telegram
│ ├── api
│ │ └── telegram.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── index.js
│ │ ├── message.connect.js
│ │ ├── message.disconnect.js
│ │ ├── message.getCustomLink.js
│ │ ├── message.linkUser.js
│ │ ├── message.new.js
│ │ └── message.send.js
│ ├── package-lock.json
│ └── package.json
├── tp-link
│ ├── api
│ │ └── tp-link.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── models
│ │ │ ├── bulb.js
│ │ │ ├── device.js
│ │ │ └── plug.js
│ │ ├── smart-device
│ │ │ ├── index.js
│ │ │ ├── smart-device.getDevices.js
│ │ │ ├── smart-device.poll.js
│ │ │ └── smart-device.setValue.js
│ │ └── utils
│ │ │ ├── consts.js
│ │ │ └── parseExternalId.js
│ ├── package-lock.json
│ └── package.json
├── tuya
│ ├── api
│ │ └── tuya.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── device
│ │ │ ├── tuya.convertDevice.js
│ │ │ ├── tuya.convertFeature.js
│ │ │ ├── tuya.convertUnit.js
│ │ │ └── tuya.deviceMapping.js
│ │ ├── index.js
│ │ ├── tuya.connect.js
│ │ ├── tuya.disconnect.js
│ │ ├── tuya.discoverDevices.js
│ │ ├── tuya.getAccessToken.js
│ │ ├── tuya.getConfiguration.js
│ │ ├── tuya.getRefreshToken.js
│ │ ├── tuya.init.js
│ │ ├── tuya.loadDeviceDetails.js
│ │ ├── tuya.loadDevices.js
│ │ ├── tuya.poll.js
│ │ ├── tuya.saveConfiguration.js
│ │ ├── tuya.setTokens.js
│ │ ├── tuya.setValue.js
│ │ └── utils
│ │ │ └── tuya.constants.js
│ ├── package-lock.json
│ └── package.json
├── usb
│ ├── api
│ │ └── usb.controller.js
│ ├── index.js
│ ├── package-lock.json
│ └── package.json
├── xiaomi
│ ├── api
│ │ └── xiaomi.controller.js
│ ├── index.js
│ ├── lib
│ │ ├── commands
│ │ │ ├── xiaomi.getSensors.js
│ │ │ ├── xiaomi.listen.js
│ │ │ └── xiaomi.setValue.js
│ │ ├── event
│ │ │ ├── xiaomi.addDevice.js
│ │ │ ├── xiaomi.listening.js
│ │ │ ├── xiaomi.newValueCube.js
│ │ │ ├── xiaomi.newValueDuplexWiredSwitch.js
│ │ │ ├── xiaomi.newValueDuplexWiredSwitchNeutral.js
│ │ │ ├── xiaomi.newValueDuplexWirelessSwitch.js
│ │ │ ├── xiaomi.newValueGateway.js
│ │ │ ├── xiaomi.newValueLeak.js
│ │ │ ├── xiaomi.newValueMagnetSensor.js
│ │ │ ├── xiaomi.newValueMotionSensor.js
│ │ │ ├── xiaomi.newValuePlug.js
│ │ │ ├── xiaomi.newValueSingleWiredSwitch.js
│ │ │ ├── xiaomi.newValueSingleWiredSwitchNeutral.js
│ │ │ ├── xiaomi.newValueSingleWirelessSwitch.js
│ │ │ ├── xiaomi.newValueSmoke.js
│ │ │ ├── xiaomi.newValueSwitch.js
│ │ │ ├── xiaomi.newValueTemperatureSensor.js
│ │ │ ├── xiaomi.newValueVibration.js
│ │ │ └── xiaomi.onMessage.js
│ │ ├── index.js
│ │ └── utils
│ │ │ ├── deviceStatus.js
│ │ │ ├── generateGatewayKey.js
│ │ │ └── getBatteryPercent.js
│ ├── package-lock.json
│ └── package.json
├── zigbee2mqtt
│ ├── adapters
│ │ └── index.js
│ ├── api
│ │ └── zigbee2mqtt.controller.js
│ ├── docker
│ │ ├── gladys-z2m-mqtt-container.json
│ │ ├── gladys-z2m-zigbee2mqtt-container.json
│ │ └── mosquitto.conf
│ ├── exposes
│ │ ├── binaryType.js
│ │ ├── compositeType.js
│ │ ├── enumType.js
│ │ ├── index.js
│ │ └── numericType.js
│ ├── index.js
│ ├── lib
│ │ ├── backup.js
│ │ ├── checkForContainerUpdates.js
│ │ ├── configureContainer.js
│ │ ├── connect.js
│ │ ├── constants.js
│ │ ├── disconnect.js
│ │ ├── events
│ │ │ └── emitStatusEvent.js
│ │ ├── findMatchingExpose.js
│ │ ├── getConfiguration.js
│ │ ├── getDiscoveredDevices.js
│ │ ├── getManagedAdapters.js
│ │ ├── getPermitJoin.js
│ │ ├── getSetup.js
│ │ ├── handleMqttMessage.js
│ │ ├── index.js
│ │ ├── init.js
│ │ ├── installMqttContainer.js
│ │ ├── installZ2mContainer.js
│ │ ├── isEnabled.js
│ │ ├── publish.js
│ │ ├── readValue.js
│ │ ├── restoreZ2mBackup.js
│ │ ├── saveConfiguration.js
│ │ ├── saveOrDestroyVariable.js
│ │ ├── saveZ2mBackup.js
│ │ ├── setPermitJoin.js
│ │ ├── setValue.js
│ │ ├── setup.js
│ │ ├── status.js
│ │ └── subscribe.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ │ ├── convertDevice.js
│ │ ├── convertFeature.js
│ │ └── features
│ │ ├── buildFeatures.js
│ │ ├── completeFeature.js
│ │ ├── mapDefinition.js
│ │ ├── mapExpose.js
│ │ └── mapUnit.js
└── zwavejs-ui
│ ├── api
│ └── zwaveJSUI.controller.js
│ ├── index.js
│ ├── lib
│ ├── constants.js
│ ├── index.js
│ ├── zwaveJSUI.connect.js
│ ├── zwaveJSUI.disconnect.js
│ ├── zwaveJSUI.getConfiguration.js
│ ├── zwaveJSUI.getDevice.js
│ ├── zwaveJSUI.getZwaveJsDevice.js
│ ├── zwaveJSUI.handleNewMessage.js
│ ├── zwaveJSUI.init.js
│ ├── zwaveJSUI.onNewDeviceDiscover.js
│ ├── zwaveJSUI.onNodeValueUpdated.js
│ ├── zwaveJSUI.publish.js
│ ├── zwaveJSUI.saveConfiguration.js
│ ├── zwaveJSUI.scan.js
│ └── zwaveJSUI.setValue.js
│ ├── package-lock.json
│ ├── package.json
│ └── utils
│ ├── cleanNames.js
│ ├── convertToGladysDevice.js
│ ├── getDeviceFeatureName.js
│ ├── getProperty.js
│ └── refineCategory.js
├── test
├── benchmark
│ ├── scenes.js
│ └── triggers.js
├── bootstrap.test.js
├── controllers
│ ├── area
│ │ └── area.controller.test.js
│ ├── calendar
│ │ └── calendar.test.js
│ ├── camera
│ │ └── camera.controller.test.js
│ ├── dashboard
│ │ └── dashboard.controller.test.js
│ ├── device
│ │ └── device.controller.test.js
│ ├── gateway
│ │ ├── gateway.controller.test.js
│ │ └── srpFixture.json
│ ├── gatway.test.js
│ ├── house
│ │ ├── house.alarm.test.js
│ │ └── house.test.js
│ ├── http
│ │ └── http.test.js
│ ├── job
│ │ └── job.test.js
│ ├── light
│ │ └── light.turnOn.test.js
│ ├── location
│ │ └── location.test.js
│ ├── message
│ │ └── message.test.js
│ ├── notFound.test.js
│ ├── ping
│ │ └── ping.controller.test.js
│ ├── request.test.js
│ ├── room
│ │ └── room.test.js
│ ├── scene
│ │ └── scene.test.js
│ ├── service
│ │ └── service.controller.test.js
│ ├── session
│ │ └── session.test.js
│ ├── system
│ │ └── system.controller.test.js
│ ├── user
│ │ ├── user.create.test.js
│ │ ├── user.delete.test.js
│ │ ├── user.forgotPassword.test.js
│ │ ├── user.get.test.js
│ │ ├── user.getAccessToken.test.js
│ │ ├── user.getBySelector.test.js
│ │ ├── user.getMySelf.test.js
│ │ ├── user.getPicture.test.js
│ │ ├── user.getSetupState.test.js
│ │ ├── user.login.test.js
│ │ ├── user.resetPassword.test.js
│ │ ├── user.update.test.js
│ │ └── user.updateMySelf.test.js
│ ├── variable
│ │ └── variable.test.js
│ └── weather
│ │ └── weather.test.js
├── helpers
│ └── db.test.js
├── lib
│ ├── area
│ │ ├── area.checkNewLocation.test.js
│ │ └── area.test.js
│ ├── brain
│ │ ├── brain.e2e.test.js
│ │ └── brain.test.js
│ ├── calendar
│ │ ├── calendar.event.test.js
│ │ └── calendar.test.js
│ ├── dashboard
│ │ ├── dashboard.create.test.js
│ │ ├── dashboard.destroy.test.js
│ │ ├── dashboard.get.test.js
│ │ ├── dashboard.getBySelector.test.js
│ │ ├── dashboard.update.test.js
│ │ └── dashboard.updateOrder.test.js
│ ├── device
│ │ ├── camera
│ │ │ ├── camera.command.test.js
│ │ │ ├── camera.get.test.js
│ │ │ ├── camera.getImage.test.js
│ │ │ ├── camera.getImageInRoom.test.js
│ │ │ ├── camera.getLiveImage.test.js
│ │ │ └── camera.setImage.test.js
│ │ ├── device.addFeature.test.js
│ │ ├── device.addParam.test.js
│ │ ├── device.checkBatteries.test.js
│ │ ├── device.create.test.js
│ │ ├── device.destroy.test.js
│ │ ├── device.get.test.js
│ │ ├── device.getBySelector.test.js
│ │ ├── device.getDeviceFeaturesAggregates.test.js
│ │ ├── device.getDeviceFeaturesAggregatesMulti.test.js
│ │ ├── device.getDuckDbMigrationState.test.js
│ │ ├── device.init.test.js
│ │ ├── device.migrateFromSQLiteToDuckDb.test.js
│ │ ├── device.newStateEvent.test.js
│ │ ├── device.notify.test.js
│ │ ├── device.onPurgeStatesEvent.test.js
│ │ ├── device.poll.test.js
│ │ ├── device.purgeAllSqliteStates.test.js
│ │ ├── device.purgeStates.test.js
│ │ ├── device.purgeStatesByFeatureId.test.js
│ │ ├── device.saveHistoricalState.test.js
│ │ ├── device.saveState.test.js
│ │ ├── device.setValue.test.js
│ │ ├── device.setupPoll.test.js
│ │ ├── humidity-sensor
│ │ │ └── humidity-sensor.test.js
│ │ ├── light
│ │ │ ├── light.buildLightObject.test.js
│ │ │ ├── light.command.test.js
│ │ │ ├── light.init.test.js
│ │ │ ├── light.turnOff.test.js
│ │ │ └── light.turnOn.test.js
│ │ ├── switch
│ │ │ └── switch.command.test.js
│ │ └── temperature-sensor
│ │ │ └── temperature-sensor.test.js
│ ├── event
│ │ └── event.test.js
│ ├── gateway
│ │ ├── GladysGatewayClientMock.test.js
│ │ ├── encoded-gladys-db-and-duckdb-backup.tar.gz.enc
│ │ ├── encoded-old-gladys-db-backup.db.gz.enc
│ │ ├── gateway.backup.test.js
│ │ ├── gateway.checkIfBackupNeeded.test.js
│ │ ├── gateway.disconnect.test.js
│ │ ├── gateway.downloadBackup.test.js
│ │ ├── gateway.enedis.test.js
│ │ ├── gateway.forwardDeviceStateToAlexa.test.js
│ │ ├── gateway.forwardDeviceStateToGoogleHome.test.js
│ │ ├── gateway.forwardMessageToOpenAI.test.js
│ │ ├── gateway.forwardWebsockets.test.js
│ │ ├── gateway.getBackups.test.js
│ │ ├── gateway.getEcowattSignals.test.js
│ │ ├── gateway.getEdfTempo.test.js
│ │ ├── gateway.getLatestGladysVersion.test.js
│ │ ├── gateway.getTTSApiUrl.test.js
│ │ ├── gateway.getUsersKeys.test.js
│ │ ├── gateway.handleAlexaMessage.test.js
│ │ ├── gateway.handleNewMessage.test.js
│ │ ├── gateway.init.test.js
│ │ ├── gateway.login.test.js
│ │ ├── gateway.openAi.test.js
│ │ ├── gateway.restoreBackup.test.js
│ │ ├── gateway.restoreBackupEvent.test.js
│ │ ├── gladys_backup_parquet_folder
│ │ │ ├── load.sql
│ │ │ ├── schema.sql
│ │ │ └── t_device_feature_state.parquet
│ │ ├── real-gladys-db-backup.db.gz.dbfile
│ │ ├── this_db_has_no_users.dbfile
│ │ ├── this_file_has_no_user_table.dbfile
│ │ └── this_file_is_not_a_valid_db.dbfile
│ ├── house
│ │ ├── house.arm.test.js
│ │ ├── house.disarm.test.js
│ │ ├── house.disarmWithCode.test.js
│ │ ├── house.panic.test.js
│ │ ├── house.partialArm.test.js
│ │ └── house.test.js
│ ├── http
│ │ ├── AxiosMock.test.js
│ │ └── http.test.js
│ ├── job
│ │ └── job.test.js
│ ├── location
│ │ └── location.test.js
│ ├── message
│ │ ├── message.create.test.js
│ │ ├── message.get.test.js
│ │ ├── message.handleMessage.test.js
│ │ ├── message.purge.test.js
│ │ ├── message.reply.test.js
│ │ ├── message.replyByIntent.test.js
│ │ └── message.sendToUser.test.js
│ ├── room
│ │ └── room.test.js
│ ├── scene
│ │ ├── actions
│ │ │ ├── scene.action.askAi.test.js
│ │ │ ├── scene.action.blinkDevices.test.js
│ │ │ ├── scene.action.checkAlarmMode.test.js
│ │ │ ├── scene.action.checkTime.test.js
│ │ │ ├── scene.action.conditionIfThenElse.test.js
│ │ │ ├── scene.action.continueOnlyIf.test.js
│ │ │ ├── scene.action.delay.test.js
│ │ │ ├── scene.action.ecowattCondition.test.js
│ │ │ ├── scene.action.edfTempoCondition.test.js
│ │ │ ├── scene.action.getValue.test.js
│ │ │ ├── scene.action.httpRequest.test.js
│ │ │ ├── scene.action.isEventRunnning.test.js
│ │ │ ├── scene.action.playNotification.test.js
│ │ │ ├── scene.action.sendCameraMessage.test.js
│ │ │ ├── scene.action.sendMessage.test.js
│ │ │ ├── scene.action.sendMqttMessage.test.js
│ │ │ ├── scene.action.sendSms.test.js
│ │ │ ├── scene.action.sendZigbee2MqttMessage.test.js
│ │ │ └── scene.action.setAlarmMode.test.js
│ │ ├── scene.addScene.test.js
│ │ ├── scene.cancelTriggers.test.js
│ │ ├── scene.checkCalendarTriggers.test.js
│ │ ├── scene.checkTrigger.test.js
│ │ ├── scene.command.test.js
│ │ ├── scene.create.test.js
│ │ ├── scene.dailyUpdate.test.js
│ │ ├── scene.destroy.test.js
│ │ ├── scene.duplicate.test.js
│ │ ├── scene.execute.test.js
│ │ ├── scene.executeActions.test.js
│ │ ├── scene.executeSingleAction.test.js
│ │ ├── scene.get.test.js
│ │ ├── scene.getBySelector.test.js
│ │ ├── scene.getTag.test.js
│ │ ├── scene.init.test.js
│ │ ├── scene.update.test.js
│ │ └── triggers
│ │ │ ├── scene.trigger.alarmMode.test.js
│ │ │ ├── scene.trigger.deviceNewState.test.js
│ │ │ └── scene.trigger.mqttReceived.test.js
│ ├── scheduler
│ │ ├── scheduler.cancelJob.test.js
│ │ ├── scheduler.init.test.js
│ │ └── scheduler.scheduleJob.test.js
│ ├── service
│ │ ├── service.getLocalServiceByName.test.js
│ │ ├── service.getUsage.test.js
│ │ ├── service.load.test.js
│ │ ├── service.start.test.js
│ │ ├── service.startAll.test.js
│ │ ├── service.stop.test.js
│ │ └── service.test.js
│ ├── session
│ │ └── session.test.js
│ ├── state
│ │ └── state.test.js
│ ├── system
│ │ ├── DockerApiMock.test.js
│ │ ├── DockerodeMock.test.js
│ │ ├── system.checkIfGladysUpgraded.test.js
│ │ ├── system.createContainer.test.js
│ │ ├── system.exec.test.js
│ │ ├── system.getContainerMounts.test.js
│ │ ├── system.getContainers.test.js
│ │ ├── system.getDiskSpace.test.js
│ │ ├── system.getGladysBasePath.test.js
│ │ ├── system.getGladysContainerId.test.js
│ │ ├── system.getInfos.test.js
│ │ ├── system.getNetworkMode.test.js
│ │ ├── system.init.test.js
│ │ ├── system.inspectContainer.test.js
│ │ ├── system.installUpgrade.test.js
│ │ ├── system.isDocker.test.js
│ │ ├── system.pull.test.js
│ │ ├── system.removeContainer.test.js
│ │ ├── system.restartContainer.test.js
│ │ ├── system.shutdown.test.js
│ │ ├── system.stopContainer.test.js
│ │ └── system.vacuum.test.js
│ ├── user
│ │ ├── tooLongImage.json
│ │ ├── user.create.test.js
│ │ ├── user.destroy.test.js
│ │ ├── user.forgotPassword.test.js
│ │ ├── user.get.test.js
│ │ ├── user.getById.test.js
│ │ ├── user.getByRole.test.js
│ │ ├── user.getBySelector.test.js
│ │ ├── user.getByTelegramUserId.test.js
│ │ ├── user.getPicture.test.js
│ │ ├── user.getUserCount.test.js
│ │ ├── user.update.test.js
│ │ ├── user.updateBySelector.test.js
│ │ └── user.updatePassord.test.js
│ ├── variable
│ │ ├── variable.destroy.test.js
│ │ ├── variable.getValue.test.js
│ │ ├── variable.getVariables.test.js
│ │ └── variable.setValue.test.js
│ └── weather
│ │ ├── weather.command.test.js
│ │ └── weather.get.test.js
├── middlewares
│ ├── authMiddleware.test.js
│ ├── corsMiddleware.test.js
│ └── errorMiddleware.test.js
├── security
│ └── user.test.js
├── services
│ ├── airplay
│ │ ├── api
│ │ │ └── airplay.controller.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── airplay.init.test.js
│ │ │ ├── airplay.setValue.test.js
│ │ │ └── airplay_scan.test.js
│ ├── alexa
│ │ └── lib
│ │ │ ├── alexa.onDiscovery.test.js
│ │ │ ├── alexa.onExecute.test.js
│ │ │ └── alexa.onReportState.test.js
│ ├── bluetooth
│ │ ├── BluetoothMock.test.js
│ │ ├── api
│ │ │ └── bluetooth.controller.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── commands
│ │ │ ├── bluetooth.applyOnPeripheral.test.js
│ │ │ ├── bluetooth.completeDevice.test.js
│ │ │ ├── bluetooth.getDiscoveredDevice.test.js
│ │ │ ├── bluetooth.getDiscoveredDevices.test.js
│ │ │ ├── bluetooth.getStatus.test.js
│ │ │ ├── bluetooth.readDevice.test.js
│ │ │ ├── bluetooth.scan.test.js
│ │ │ ├── bluetooth.scanDevice.test.js
│ │ │ ├── bluetooth.scanPresence.test.js
│ │ │ ├── bluetooth.start.test.js
│ │ │ ├── bluetooth.stop.test.js
│ │ │ ├── bluetooth.stopScanPresence.test.js
│ │ │ ├── bluetooth.subscribeDevice.test.js
│ │ │ ├── bluetooth.unsubscribeDevice.test.js
│ │ │ └── bluetooth.writeDevice.test.js
│ │ │ ├── config
│ │ │ ├── bluetooth.getConfiguration.test.js
│ │ │ ├── bluetooth.initPresenceScanner.test.js
│ │ │ └── bluetooth.saveConfiguration.test.js
│ │ │ ├── device
│ │ │ ├── bluetooth.information.test.js
│ │ │ └── bluetooth.transformToDevice.test.js
│ │ │ ├── events
│ │ │ ├── bluetooth.discover.test.js
│ │ │ ├── bluetooth.scanStart.test.js
│ │ │ ├── bluetooth.scanStop.test.js
│ │ │ └── bluetooth.stateChange.test.js
│ │ │ └── utils
│ │ │ ├── bluetooth.connect.test.js
│ │ │ ├── bluetooth.discoverCharacteristics.test.js
│ │ │ ├── bluetooth.discoverServices.test.js
│ │ │ ├── bluetooth.subscribe.test.js
│ │ │ └── bluetooth.unsubscribe.test.js
│ ├── broadlink
│ │ ├── api
│ │ │ └── broadlink.controler.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── commands
│ │ │ ├── broadlink.addPeripheral.test.js
│ │ │ ├── broadlink.buildPeripheral.test.js
│ │ │ ├── broadlink.getDevice.test.js
│ │ │ ├── broadlink.getPeripherals.test.js
│ │ │ ├── broadlink.init.test.js
│ │ │ ├── broadlink.loadMapper.test.js
│ │ │ ├── broadlink.poll.test.js
│ │ │ ├── broadlink.setValue.test.js
│ │ │ ├── broadlink.stop.test.js
│ │ │ └── features
│ │ │ │ ├── broadlink.light.test.js
│ │ │ │ ├── broadlink.remote.test.js
│ │ │ │ ├── broadlink.sensor.test.js
│ │ │ │ └── broadlink.switch.test.js
│ │ │ └── learn
│ │ │ ├── broadlink.cancelLearn.test.js
│ │ │ ├── broadlink.checkData.test.js
│ │ │ ├── broadlink.learn.test.js
│ │ │ └── broadlink.send.test.js
│ ├── caldav
│ │ ├── controllers
│ │ │ └── caldav.controller.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── calendar
│ │ │ ├── cleanUp.test.js
│ │ │ ├── disableCalendar.test.js
│ │ │ ├── enableCalendar.test.js
│ │ │ ├── formaters.test.js
│ │ │ ├── requests.test.js
│ │ │ ├── syncUserCalendars.test.js
│ │ │ └── syncUserWebcals.test.js
│ │ │ └── config
│ │ │ └── index.test.js
│ ├── callmebot
│ │ ├── index.test.js
│ │ └── lib
│ │ │ └── messageHandler.test.js
│ ├── checks.test.js
│ ├── ecowatt
│ │ ├── ecowatt.controller.test.js
│ │ ├── ecowatt.data.js
│ │ └── index.test.js
│ ├── edf-tempo
│ │ ├── edf-tempo.controller.test.js
│ │ └── index.test.js
│ ├── enedis
│ │ ├── enedis.controller.test.js
│ │ ├── enedis.sync.test.js
│ │ └── index.test.js
│ ├── ewelink
│ │ ├── controllers
│ │ │ └── ewelink.controller.test.js
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ ├── device
│ │ │ │ ├── connect.test.js
│ │ │ │ ├── discover.test.js
│ │ │ │ ├── poll.test.js
│ │ │ │ ├── setValue.test.js
│ │ │ │ └── throwErrorIfNeeded.test.js
│ │ │ └── features
│ │ │ │ └── features.test.js
│ │ └── mocks
│ │ │ ├── Gladys-2ch.json
│ │ │ ├── Gladys-Basic.json
│ │ │ ├── Gladys-offline.json
│ │ │ ├── Gladys-pow.json
│ │ │ ├── Gladys-th.json
│ │ │ ├── Gladys-unhandled.json
│ │ │ ├── consts.test.js
│ │ │ ├── eweLink-2ch.json
│ │ │ ├── eweLink-basic.json
│ │ │ ├── eweLink-offline.json
│ │ │ ├── eweLink-pow.json
│ │ │ ├── eweLink-th.json
│ │ │ ├── eweLink-unhandled.json
│ │ │ ├── ewelink-api-empty.mock.test.js
│ │ │ └── ewelink-api.mock.test.js
│ ├── example
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ └── setValue.test.js
│ │ └── mocks.test.js
│ ├── free-mobile
│ │ └── index.test.js
│ ├── google-actions
│ │ ├── index.test.js
│ │ └── lib
│ │ │ └── smarthome
│ │ │ ├── devices_and_traits
│ │ │ ├── googleActions.brightness.trait.light.test.js
│ │ │ ├── googleActions.brightness.trait.switch.test.js
│ │ │ ├── googleActions.colorSetting.trait.color.test.js
│ │ │ ├── googleActions.colorSetting.trait.colorTemp.test.js
│ │ │ ├── googleActions.openCloseTrait.trait.curtain.test.js
│ │ │ └── googleActions.openCloseTrait.trait.shutter.test.js
│ │ │ ├── googleActions.onExecute.test.js
│ │ │ ├── googleActions.onQuery.test.js
│ │ │ └── googleActions.onSync.test.js
│ ├── google-cast
│ │ ├── api
│ │ │ └── google_cast.controller.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── google_cast.init.test.js
│ │ │ ├── google_cast.setValue.test.js
│ │ │ └── google_cast_scan.test.js
│ ├── homekit
│ │ ├── controllers
│ │ │ └── homekit.controller.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── buildAccessory.test.js
│ │ │ ├── buildService.test.js
│ │ │ ├── createBridge.test.js
│ │ │ ├── notifyChange.test.js
│ │ │ ├── resetBridge.test.js
│ │ │ └── sendState.test.js
│ ├── lan-manager
│ │ ├── api
│ │ │ └── lan-manager.controler.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── lan-manager.getConfiguration.test.js
│ │ │ ├── lan-manager.getDiscoveredDevices.test.js
│ │ │ ├── lan-manager.initPresenceScanner.test.js
│ │ │ ├── lan-manager.loadConfiguration.test.js
│ │ │ ├── lan-manager.saveConfiguration.test.js
│ │ │ ├── lan-manager.scan.test.js
│ │ │ ├── lan-manager.scanPresence.test.js
│ │ │ ├── lan-manager.stop.test.js
│ │ │ └── lan-manager.transformDevice.test.js
│ ├── matter
│ │ ├── api
│ │ │ └── matter.controller.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── listenToStateChange.test.js
│ │ │ ├── matter.backupController.test.js
│ │ │ ├── matter.checkIpv6.test.js
│ │ │ ├── matter.decommission.test.js
│ │ │ ├── matter.getDevices.test.js
│ │ │ ├── matter.getNodes.test.js
│ │ │ ├── matter.init.test.js
│ │ │ ├── matter.pairDevice.test.js
│ │ │ ├── matter.refreshDevices.test.js
│ │ │ ├── matter.restoreBackup.test.js
│ │ │ ├── matter.setValue.test.js
│ │ │ └── matter.stop.test.js
│ ├── melcloud
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── controllers
│ │ │ └── melcloud.controller.test.js
│ │ │ ├── device
│ │ │ └── feature
│ │ │ │ ├── air-to-air.device.test.js
│ │ │ │ └── melcloud.convertDevice.test.js
│ │ │ ├── melcloud.connect.test.js
│ │ │ ├── melcloud.disconnect.test.js
│ │ │ ├── melcloud.discoverDevices.test.js
│ │ │ ├── melcloud.getConfiguration.test.js
│ │ │ ├── melcloud.init.test.js
│ │ │ ├── melcloud.loadDevices.test.js
│ │ │ ├── melcloud.poll.test.js
│ │ │ ├── melcloud.saveConfiguration.test.js
│ │ │ └── melcloud.setValue.test.js
│ ├── mqtt
│ │ ├── api
│ │ │ └── mqtt.controler.test.js
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ ├── configureContainer.test.js
│ │ │ ├── connect.test.js
│ │ │ ├── getConfiguration.test.js
│ │ │ ├── handleNewMessage.test.js
│ │ │ ├── init.test.js
│ │ │ ├── installContainer.test.js
│ │ │ ├── listenToCustomMqttTopicIfNeeded.test.js
│ │ │ ├── publish.test.js
│ │ │ ├── saveConfiguration.test.js
│ │ │ ├── setDebugMode.test.js
│ │ │ ├── setValue.test.js
│ │ │ ├── status.test.js
│ │ │ ├── unListenToCustomMqttTopic.test.js
│ │ │ ├── unsubscribe.test.js
│ │ │ └── updateContainer.test.js
│ │ ├── mocks.test.js
│ │ └── mqttHandler.test.js
│ ├── netatmo
│ │ ├── .eslintrc.json
│ │ ├── controllers
│ │ │ └── netatmo.controller.test.js
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ ├── device
│ │ │ │ ├── netatmo.convertDeviceEnergy.test.js
│ │ │ │ ├── netatmo.convertDeviceNotSupported.test.js
│ │ │ │ ├── netatmo.convertDeviceWeather.test.js
│ │ │ │ └── netatmo.deviceMapping.test.js
│ │ │ ├── index.test.js
│ │ │ ├── netatmo.connect.test.js
│ │ │ ├── netatmo.disconnect.test.js
│ │ │ ├── netatmo.discoverDevices.test.js
│ │ │ ├── netatmo.getAccessToken.test.js
│ │ │ ├── netatmo.getConfiguration.test.js
│ │ │ ├── netatmo.getRefreshToken.test.js
│ │ │ ├── netatmo.getStatus.test.js
│ │ │ ├── netatmo.init.test.js
│ │ │ ├── netatmo.loadDeviceDetails.test.js
│ │ │ ├── netatmo.loadDevices.test.js
│ │ │ ├── netatmo.loadThermostatDetails.test.js
│ │ │ ├── netatmo.loadWeatherStationDetails.test.js
│ │ │ ├── netatmo.pollRefreshingTokens.test.js
│ │ │ ├── netatmo.pollRefreshingValues.test.js
│ │ │ ├── netatmo.refreshingTokens.test.js
│ │ │ ├── netatmo.retrieveToken.test.js
│ │ │ ├── netatmo.saveConfiguration.test.js
│ │ │ ├── netatmo.saveStatus.test.js
│ │ │ ├── netatmo.setTokens.test.js
│ │ │ ├── netatmo.setValue.test.js
│ │ │ ├── netatmo.updateValues.test.js
│ │ │ └── update
│ │ │ │ ├── netatmo.updateNAMain.test.js
│ │ │ │ ├── netatmo.updateNAModule1.test.js
│ │ │ │ ├── netatmo.updateNAModule2.test.js
│ │ │ │ ├── netatmo.updateNAModule3.test.js
│ │ │ │ ├── netatmo.updateNAModule4.test.js
│ │ │ │ ├── netatmo.updateNAPlug.test.js
│ │ │ │ ├── netatmo.updateNATherm1.test.js
│ │ │ │ └── netatmo.updateNRV.test.js
│ │ ├── netatmo.convertDevices.mock.test.json
│ │ ├── netatmo.discoverDevices.mock.test.json
│ │ ├── netatmo.getThermostat.mock.test.json
│ │ ├── netatmo.getWeatherStation.mock.test.json
│ │ ├── netatmo.homesdata.mock.test.json
│ │ ├── netatmo.homestatus.mock.test.json
│ │ ├── netatmo.loadDevices.mock.test.json
│ │ ├── netatmo.loadDevicesComplete.mock.test.json
│ │ ├── netatmo.loadDevicesDetails.mock.test.json
│ │ ├── netatmo.loadThermostatDetails.mock.test.json
│ │ ├── netatmo.loadWeatherStationDetails.mock.test.json
│ │ └── netatmo.mock.test.js
│ ├── nextcloud-talk
│ │ ├── index.test.js
│ │ └── lib
│ │ │ └── messageHandler.test.js
│ ├── node-red
│ │ ├── api
│ │ │ └── node-red.controller.test.js
│ │ ├── expectedDefaultContent.txt
│ │ ├── expectedNodeRedContent.txt
│ │ ├── expectedOtherNodeRedContent.txt
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ ├── checkForContainerUpdates.test.js
│ │ │ ├── configureContainer.test.js
│ │ │ ├── disconnect.test.js
│ │ │ ├── getConfiguration.test.js
│ │ │ ├── init.test.js
│ │ │ ├── installContainer.test.js
│ │ │ ├── isEnabled.test.js
│ │ │ ├── saveConfiguration.test.js
│ │ │ └── status.test.js
│ │ └── mockPassword.js
│ ├── openweather
│ │ ├── expected-result.json
│ │ ├── fakeOpenWeatherService.js
│ │ ├── openweather.test.js
│ │ ├── weather-data-new.json
│ │ └── weather-forecast.json
│ ├── philips-hue
│ │ ├── controllers
│ │ │ ├── activateScene.controller.test.js
│ │ │ ├── configureBridge.controller.test.js
│ │ │ ├── getBridges.controller.test.js
│ │ │ ├── getLights.controller.test.js
│ │ │ ├── getScenes.controller.test.js
│ │ │ └── syncWithBridge.controller.test.js
│ │ ├── index.test.js
│ │ ├── light
│ │ │ ├── light.configureBridge.test.js
│ │ │ ├── light.getBridges.test.js
│ │ │ ├── light.getLights.test.js
│ │ │ ├── light.poll.test.js
│ │ │ ├── light.setValue.test.js
│ │ │ ├── light.syncWithBridge.test.js
│ │ │ ├── lights.activateScene.test.js
│ │ │ └── lights.getScenes.test.js
│ │ ├── lights.json
│ │ ├── mocks.test.js
│ │ └── utils
│ │ │ └── parseExternalId.test.js
│ ├── rtsp-camera
│ │ ├── controllers
│ │ │ └── rtspCamera.controller.test.js
│ │ ├── rstp.convertLocalStreamToGateway.test.js
│ │ ├── rstpCamera.onNewCameraFile.test.js
│ │ ├── rtspCamera.sendCameraFileToGateway.test.js
│ │ ├── rtspCamera.streaming.test.js
│ │ └── rtspCamera.test.js
│ ├── sonos
│ │ ├── api
│ │ │ └── sonos.controller.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ ├── sonos.init.test.js
│ │ │ ├── sonos.onAvTransportEvent.test.js
│ │ │ ├── sonos.onVolumeEvent.test.js
│ │ │ └── sonos.setValue.test.js
│ ├── tasmota
│ │ ├── api
│ │ │ └── tasmota.controller.test.js
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ ├── device-creation
│ │ │ │ ├── AM2301.json
│ │ │ │ ├── BL09XX.json
│ │ │ │ ├── DHT11.json
│ │ │ │ ├── DS18B20.json
│ │ │ │ ├── ESP32.json
│ │ │ │ ├── SR04.json
│ │ │ │ ├── SonoffDualR3.json
│ │ │ │ ├── THR320.json
│ │ │ │ ├── VL53L0X.json
│ │ │ │ ├── colorChannel-1.json
│ │ │ │ ├── colorChannel-2.json
│ │ │ │ ├── colorChannel-3.json
│ │ │ │ ├── colorChannel-4.json
│ │ │ │ ├── colorChannel-5.json
│ │ │ │ ├── colorScheme.json
│ │ │ │ ├── colorSpeed.json
│ │ │ │ ├── colorTemperature.json
│ │ │ │ ├── counter.json
│ │ │ │ ├── dimmer_light.json
│ │ │ │ ├── dimmer_switch.json
│ │ │ │ ├── energy.json
│ │ │ │ ├── power_light_off.json
│ │ │ │ ├── power_light_on.json
│ │ │ │ ├── power_switch_off.json
│ │ │ │ └── power_switch_on.json
│ │ │ ├── device-setValue
│ │ │ │ ├── mqtt
│ │ │ │ │ ├── tasmota.mqtt.setValue-colorChannel.test.js
│ │ │ │ │ ├── tasmota.mqtt.setValue-colorScheme.test.js
│ │ │ │ │ ├── tasmota.mqtt.setValue-colorSpeed.test.js
│ │ │ │ │ ├── tasmota.mqtt.setValue-colorTemperature.test.js
│ │ │ │ │ ├── tasmota.mqtt.setValue-dimmer.test.js
│ │ │ │ │ ├── tasmota.mqtt.setValue-energy.test.js
│ │ │ │ │ ├── tasmota.mqtt.setValue-power-x.test.js
│ │ │ │ │ └── tasmota.mqtt.setValue-power.test.js
│ │ │ │ └── tasmota.setValue.test.js
│ │ │ ├── http
│ │ │ │ ├── tasmota.http.getValue.test.js
│ │ │ │ ├── tasmota.http.request.test.js
│ │ │ │ ├── tasmota.http.scan.test.js
│ │ │ │ ├── tasmota.http.setValue.test.js
│ │ │ │ ├── tasmota.http.status.test.js
│ │ │ │ └── tasmota.http.subStatus.test.js
│ │ │ ├── mock
│ │ │ │ └── TasmotaProtocolHandlerMock.test.js
│ │ │ ├── mqtt
│ │ │ │ ├── handle-message
│ │ │ │ │ ├── device-creation
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-SonoffDualR3.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorChannel-1.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorChannel-2.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorChannel-3.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorChannel-4.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorChannel-5.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorScheme.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorSpeed.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-colorTemperature.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-counter-feature.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-device_temperature_DS18B20.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-device_temperature_ESP32.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-dimmer_light.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-dimmer_switch.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-distance_SR04.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-distance_VL53L0X.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-energy-feature.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-power_light_off.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-power_light_on.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-power_switch_off.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-power_switch_on.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-temperature_BL09XX.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-temperature_humidity_AM2301.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.deviceCreation-temperature_humidity_DHT11.test.js
│ │ │ │ │ │ └── tasmota.mqtt.handleMessage.deviceCreation-temperature_humidity_THR320.test.js
│ │ │ │ │ └── new-state
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.newState-arrayValue.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.newState-colorChannel.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.newState-colorScheme.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.newState-colorSpeed.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.newState-colorTemperature.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.newState-dimmer.test.js
│ │ │ │ │ │ ├── tasmota.mqtt.handleMessage.newState-energy.test.js
│ │ │ │ │ │ └── tasmota.mqtt.handleMessage.newState-power.test.js
│ │ │ │ ├── tasmota.mqtt.connect.test.js
│ │ │ │ ├── tasmota.mqtt.disconnect.test.js
│ │ │ │ └── tasmota.mqtt.handleMessage.test.js
│ │ │ ├── tasmota.connect.test.js
│ │ │ ├── tasmota.disconnect.test.js
│ │ │ ├── tasmota.getDiscoveredDevices.test.js
│ │ │ ├── tasmota.getHandler.test.js
│ │ │ ├── tasmota.getProtocolFromDevice.test.js
│ │ │ ├── tasmota.poll.test.js
│ │ │ └── tasmota.scan.test.js
│ │ └── tasmota.mock.test.js
│ ├── telegram
│ │ ├── TelegramApiMock.test.js
│ │ ├── index.test.js
│ │ └── lib
│ │ │ └── messageHandler.test.js
│ ├── tp-link
│ │ ├── controllers
│ │ │ └── getDevices.controller.test.js
│ │ ├── devices.json
│ │ ├── index.test.js
│ │ ├── mocks.test.js
│ │ ├── smart-device
│ │ │ ├── smart-device.getDevices.test.js
│ │ │ ├── smart-device.poll.test.js
│ │ │ └── smart-device.setValue.test.js
│ │ └── utils
│ │ │ └── parseExternalId.test.js
│ ├── tuya
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ ├── controllers
│ │ │ │ └── tuya.controller.test.js
│ │ │ ├── device
│ │ │ │ └── feature
│ │ │ │ │ ├── tuya.convertFeature.test.js
│ │ │ │ │ ├── tuya.convertUnit.test.js
│ │ │ │ │ └── tuya.deviceMapping.test.js
│ │ │ ├── tuya.connect.test.js
│ │ │ ├── tuya.disconnect.test.js
│ │ │ ├── tuya.discoverDevices.test.js
│ │ │ ├── tuya.getAccessToken.test.js
│ │ │ ├── tuya.getConfiguration.test.js
│ │ │ ├── tuya.getRefreshToken.test.js
│ │ │ ├── tuya.init.test.js
│ │ │ ├── tuya.loadDeviceDetails.test.js
│ │ │ ├── tuya.loadDevices.test.js
│ │ │ ├── tuya.poll.test.js
│ │ │ ├── tuya.saveConfiguration.test.js
│ │ │ ├── tuya.setTokens.test.js
│ │ │ └── tuya.setValue.test.js
│ │ └── tuya.mock.test.js
│ ├── usb
│ │ ├── SerialPortMock.test.js
│ │ ├── index.test.js
│ │ └── usb.controller.test.js
│ ├── xiaomi
│ │ ├── DgramMock.test.js
│ │ ├── index.test.js
│ │ ├── messagesToTest.test.js
│ │ ├── xiaomi.controller.test.js
│ │ └── xiaomi.test.js
│ ├── zigbee2mqtt
│ │ ├── api
│ │ │ └── zigbee2mqtt.controller.test.js
│ │ ├── exposes
│ │ │ ├── actionEnumType.test.js
│ │ │ ├── binaryType.test.js
│ │ │ ├── compositeType.test.js
│ │ │ ├── coverEnumType.test.js
│ │ │ ├── melodyEnumType.test.js
│ │ │ ├── numericType.test.js
│ │ │ └── volumeEnumType.test.js
│ │ ├── index.test.js
│ │ ├── lib
│ │ │ ├── backup.test.js
│ │ │ ├── backup
│ │ │ │ └── base64.backup
│ │ │ ├── checkForContainerUpdates.test.js
│ │ │ ├── config
│ │ │ │ ├── z2m_adapter-deconz_config.yaml
│ │ │ │ ├── z2m_adapter-ezsp_config.yaml
│ │ │ │ ├── z2m_default_config.yaml
│ │ │ │ ├── z2m_mqtt-other_config.yaml
│ │ │ │ ├── z2m_mqtt_config.yaml
│ │ │ │ └── z2m_port_config.yaml
│ │ │ ├── configureContainer.test.js
│ │ │ ├── connect.test.js
│ │ │ ├── disconnect.test.js
│ │ │ ├── findMatchingExpose.test.js
│ │ │ ├── getConfiguration.test.js
│ │ │ ├── getDiscoveredDevices.test.js
│ │ │ ├── getManagedAdapters.test.js
│ │ │ ├── getPermitJoin.test.js
│ │ │ ├── getSetup.test.js
│ │ │ ├── handleMqttMessage.test.js
│ │ │ ├── init.test.js
│ │ │ ├── installMqttContainer.test.js
│ │ │ ├── installZ2mContainer.test.js
│ │ │ ├── isEnabled.test.js
│ │ │ ├── payloads
│ │ │ │ ├── aqara_with_duplicate_feature_mqtt.json
│ │ │ │ ├── discovered_devices.json
│ │ │ │ ├── event_device_result.json
│ │ │ │ ├── mqtt_devices_get.json
│ │ │ │ └── single_mqtt_device.json
│ │ │ ├── publish.test.js
│ │ │ ├── readValue.test.js
│ │ │ ├── restoreZ2mBackup.test.js
│ │ │ ├── saveConfiguration.test.js
│ │ │ ├── saveZ2mBackup.test.js
│ │ │ ├── setPermitJoin.test.js
│ │ │ ├── setValue.test.js
│ │ │ ├── setup.test.js
│ │ │ ├── status.test.js
│ │ │ └── subscribe.test.js
│ │ └── utils
│ │ │ ├── convertDevice.test.js
│ │ │ ├── convertFeature.test.js
│ │ │ ├── feature
│ │ │ ├── buildFeatures.test.js
│ │ │ ├── completeFeature.test.js
│ │ │ └── mapUnit.test.js
│ │ │ ├── payloads
│ │ │ ├── CCT5015.json
│ │ │ ├── ZSS-ZK-THL.json
│ │ │ └── index.js
│ │ │ └── realZigbee2mqttDevices.test.js
│ └── zwavejs-ui
│ │ ├── api
│ │ └── zwaveJSUI.controller.test.js
│ │ ├── index.test.js
│ │ ├── lib
│ │ ├── exampleData.json
│ │ ├── zwaveJSUI.connect.test.js
│ │ ├── zwaveJSUI.disconnect.test.js
│ │ ├── zwaveJSUI.getConfiguration.test.js
│ │ ├── zwaveJSUI.handleNewMessage.test.js
│ │ ├── zwaveJSUI.init.test.js
│ │ ├── zwaveJSUI.onNewDeviceDiscover.test.js
│ │ ├── zwaveJSUI.onNodeValueUpdated.test.js
│ │ ├── zwaveJSUI.publish.test.js
│ │ ├── zwaveJSUI.saveConfiguration.test.js
│ │ └── zwaveJSUI.setValue.test.js
│ │ └── utils
│ │ └── refineCategory.test.js
├── utils
│ ├── buildExpandObject.test.js
│ ├── chunks.test.js
│ ├── colors.test.js
│ ├── compare.test.js
│ ├── coordinates.test.js
│ ├── device.test.js
│ ├── json.test.js
│ ├── jwtSecret.test.js
│ ├── objects.test.js
│ ├── password.test.js
│ ├── slugify.test.js
│ ├── units.test.js
│ └── websocketUtils.test.js
└── websockets
│ └── index.test.js
└── utils
├── accents.js
├── accessToken.js
├── addSelector.js
├── backupKey.js
├── buildExpandObject.js
├── cache.js
├── childProcess.js
├── chunks.js
├── colors.js
├── compare.js
├── constants.js
├── coordinates.js
├── coreErrors.js
├── date.js
├── device.js
├── functionsWrapper.js
├── getConfig.js
├── httpErrors.js
├── json.js
├── jwtSecret.js
├── logger.js
├── objects.js
├── password.js
├── readChunk.js
├── refreshToken.js
├── setDeviceFeature.js
├── slugify.js
├── titleize.js
├── units.js
└── websocketUtils.js
/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | server/test
3 | dump.rdb
4 | server/*.db
5 | .env
6 | **/.nyc_output
7 | lib-cov
8 | *.seed
9 | *.log
10 | *.out
11 | *.pid
12 | npm-debug.log
13 | *~
14 | *#
15 | .DS_STORE
16 | .netbeans
17 | .idea
18 | .node_history
19 | node.d.ts
20 | .git
21 | .npmrc
22 | docker
23 | front/build
24 | .github
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 | [*]
8 | end_of_line = lf
9 | charset = utf-8
10 | trim_trailing_whitespace = true
11 | insert_final_newline = true
12 | indent_style = space
13 | indent_size = 2
14 | quote_type= single
15 | indent_brace_style= K&R
16 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Force Unix line endings for most file formats (except binary files)
2 | *.js text eol=lf
3 | *.jsm text eol=lf
4 | *.css text eol=lf
5 | *.html text eol=lf
6 | *.md text eol=lf
7 | *.properties text eol=lf
8 | *.yml text eol=lf
9 | *.json text eol=lf
10 | *.config text eol=lf
11 | *.inc text eol=lf
12 | *.manifest text eol=lf
13 | *.rdf text eol=lf
14 | *.jade text eol=lf
15 | *.coffee text eol=lf
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # We provide a way to help Gladys Assistant financially: Gladys Plus.
2 | # It's a package which gives the user additional features, at a 9.99€/month price.
3 | #
4 | # It's thanks to these contributions that this project can be sustainable, so thank you if you helped :)
5 |
6 | custom: ['https://gladysassistant.com/plus', 'https://www.buymeacoffee.com/gladysassistant']
7 |
--------------------------------------------------------------------------------
/.github/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # 💬 Getting Support from the Gladys Community
2 |
3 | First of all — thank you for using Gladys Assistant!
4 |
5 | If you need help, the best place to ask questions is on our community forums:
6 |
7 | - 🌍 [English Forum](https://en-community.gladysassistant.com/)
8 | - 🇫🇷 [French Forum](https://community.gladysassistant.com/)
9 |
10 | Please **do not open a GitHub issue for support questions** — GitHub is reserved for bug reports.
11 |
12 | For anything else, we’ll be happy to help you on the forum!
13 |
14 | See you there 🙏
15 |
--------------------------------------------------------------------------------
/.github/workflows/publish-gladys-plus-production.yml:
--------------------------------------------------------------------------------
1 | name: Publish Gladys Plus front to production
2 |
3 | on: workflow_dispatch
4 |
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - name: Run Cloudflare Pages deploy hook
10 | run: curl -X POST "https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/${{ secrets.CLOUDFLARE_PAGES_GLADYS_PLUS_DEPLOY_HOOK }}"
11 |
--------------------------------------------------------------------------------
/.github/workflows/relative-ci.yaml:
--------------------------------------------------------------------------------
1 | name: RelativeCI
2 |
3 | on:
4 | workflow_run:
5 | workflows: ['Pull request tests']
6 | types:
7 | - completed
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - name: Send webpack stats to RelativeCI
14 | uses: relative-ci/agent-action@v2
15 | with:
16 | token: ${{ secrets.GITHUB_TOKEN }}
17 | key: ${{ secrets.RELATIVE_CI_KEY }}
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | *.db
3 | *.duckdb
4 | *.duckdb.wal
5 | *.db-shm
6 | *.db-wal
7 | *.dbfile-shm
8 | *.dbfile-wal
9 | apidoc
10 | jsdoc
11 | *.lcov
12 | .nyc_output
13 | .env
14 | build
15 | static
16 | gladys-backups
17 | qemu-*
18 | coverage
19 | persist
20 | stats.json
21 | size-plugin.json
22 | # VSCode
23 | .vscode
24 | # Webstorm
25 | .idea
26 | .tmp
27 | .DS_Store
28 | matter-controller-data
29 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Reporting a Vulnerability
4 |
5 | To report a vulnerability, you can contact us on Gladys Assistant [french forum](https://community.gladysassistant.com/) or [english forum](https://en-community.gladysassistant.com/) in private, or on the contact form [on our website](https://gladysassistant.com/contact/).
6 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | coverage:
2 | status:
3 | project:
4 | server:
5 | target: 90%
6 | flags:
7 | - server
8 |
9 | flags:
10 | server:
11 | paths:
12 | - server
13 |
--------------------------------------------------------------------------------
/front/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "test": {
4 | "presets": [
5 | ["preact-cli/babel", { "modules": "commonjs" }]
6 | ]
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/front/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | /build
3 | /*.log
4 | *.lock
5 | coverage
--------------------------------------------------------------------------------
/front/.prettierignore:
--------------------------------------------------------------------------------
1 | build
2 | coverage
3 | node_modules
4 |
--------------------------------------------------------------------------------
/front/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": true,
3 | "singleQuote": true,
4 | "printWidth": 120,
5 | "tabWidth": 2,
6 | "useTabs": false
7 | }
8 |
--------------------------------------------------------------------------------
/front/cypress/fixtures/integration/routes/integration/bluetooth/status_not_ready.json:
--------------------------------------------------------------------------------
1 | {
2 | "ready": false,
3 | "scanning": false
4 | }
5 |
--------------------------------------------------------------------------------
/front/cypress/fixtures/integration/routes/integration/bluetooth/status_ready.json:
--------------------------------------------------------------------------------
1 | {
2 | "ready": true,
3 | "scanning": false
4 | }
5 |
--------------------------------------------------------------------------------
/front/cypress/fixtures/integration/routes/integration/bluetooth/status_scanning.json:
--------------------------------------------------------------------------------
1 | {
2 | "ready": true,
3 | "scanning": true
4 | }
5 |
--------------------------------------------------------------------------------
/front/cypress/fixtures/integration/routes/integration/usb/get_available_usb_ports.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "comPath": "/dev/ttyUSB0",
4 | "comVID": "0658",
5 | "comName": "0200"
6 | },
7 | {
8 | "comPath": "/dev/ttyUSB1",
9 | "comVID": "0478",
10 | "comName": "0910"
11 | }
12 | ]
13 |
--------------------------------------------------------------------------------
/front/cypress/fixtures/integration/routes/integration/zigbee2mqtt/status_not_ready_to_setup.json:
--------------------------------------------------------------------------------
1 | {
2 | "usbConfigured": false,
3 | "mqttExist": false,
4 | "mqttRunning": false,
5 | "zigbee2mqttExist": false,
6 | "zigbee2mqttRunning": false,
7 | "gladysConnected": false,
8 | "zigbee2mqttConnected": false,
9 | "z2mEnabled": false,
10 | "dockerBased": false,
11 | "networkModeValid": false
12 | }
13 |
--------------------------------------------------------------------------------
/front/cypress/fixtures/integration/routes/integration/zigbee2mqtt/status_ready_to_setup.json:
--------------------------------------------------------------------------------
1 | {
2 | "usbConfigured": false,
3 | "mqttExist": false,
4 | "mqttRunning": false,
5 | "zigbee2mqttExist": false,
6 | "zigbee2mqttRunning": false,
7 | "gladysConnected": false,
8 | "zigbee2mqttConnected": false,
9 | "z2mEnabled": false,
10 | "dockerBased": true,
11 | "networkModeValid": true
12 | }
13 |
--------------------------------------------------------------------------------
/front/netlify.toml:
--------------------------------------------------------------------------------
1 | [[headers]]
2 | for = "/sw.js"
3 | [headers.values]
4 | cache-control = '''
5 | max-age=0,
6 | no-cache,
7 | no-store,
8 | must-revalidate'''
9 |
10 | [[headers]]
11 | for = "/sw-esm.js"
12 | [headers.values]
13 | cache-control = '''
14 | max-age=0,
15 | no-cache,
16 | no-store,
17 | must-revalidate'''
18 |
19 | [[redirects]]
20 | from = "/*"
21 | to = "/index.html"
22 | status = 200
23 |
--------------------------------------------------------------------------------
/front/old-sw.js:
--------------------------------------------------------------------------------
1 | self.addEventListener('install', function(e) {
2 | self.skipWaiting();
3 | });
4 |
5 | self.addEventListener('activate', function(e) {
6 | self.registration
7 | .unregister()
8 | .then(function() {
9 | return self.clients.matchAll();
10 | })
11 | .then(function(clients) {
12 | clients.forEach(client => client.navigate(client.url));
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/front/relativeci.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | // Allow the agent to pick up the current commit message
3 | includeCommitMessage: true,
4 | webpack: {
5 | // Path to Webpack stats JSON file
6 | stats: './stats.json'
7 | }
8 | };
9 |
--------------------------------------------------------------------------------
/front/src/actions/dashboard/index.js:
--------------------------------------------------------------------------------
1 | function createActions(store) {
2 | const actions = {
3 | setFullScreen(state, fullScreen) {
4 | store.setState({
5 | fullScreen
6 | });
7 | }
8 | };
9 | return actions;
10 | }
11 |
12 | export default createActions;
13 |
--------------------------------------------------------------------------------
/front/src/actions/edit-device.js:
--------------------------------------------------------------------------------
1 | import createActionsHouse from './house';
2 | import createActionsIntegration from './integration';
3 |
4 | function createActions(store) {
5 | const houseActions = createActionsHouse(store);
6 | const integrationActions = createActionsIntegration(store);
7 | const actions = {};
8 | return Object.assign({}, houseActions, integrationActions, actions);
9 | }
10 |
11 | export default createActions;
12 |
--------------------------------------------------------------------------------
/front/src/actions/integration.js:
--------------------------------------------------------------------------------
1 | const actions = store => ({
2 | async getIntegrationByName(state, name, podId = null) {
3 | try {
4 | const query = {
5 | pod_id: podId
6 | };
7 | const currentIntegration = await state.httpClient.get(`/api/v1/service/${name}`, query);
8 | store.setState({
9 | currentIntegration
10 | });
11 | } catch (e) {
12 | console.error(e);
13 | }
14 | }
15 | });
16 |
17 | export default actions;
18 |
--------------------------------------------------------------------------------
/front/src/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/favicon.ico
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-144x144.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-192x192-round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-192x192-round.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-192x192.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-36x36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-36x36.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-48x48.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-512x512-round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-512x512-round.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-512x512.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-72x72.png
--------------------------------------------------------------------------------
/front/src/assets/icons/android-icon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/android-icon-96x96.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-114x114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-114x114.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-120x120.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-144x144.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-152x152.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-180x180.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-57x57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-57x57.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-60x60.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-72x72.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-76x76.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon-precomposed.png
--------------------------------------------------------------------------------
/front/src/assets/icons/apple-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/apple-icon.png
--------------------------------------------------------------------------------
/front/src/assets/icons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/favicon-16x16.png
--------------------------------------------------------------------------------
/front/src/assets/icons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/favicon-32x32.png
--------------------------------------------------------------------------------
/front/src/assets/icons/favicon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/icons/favicon-96x96.png
--------------------------------------------------------------------------------
/front/src/assets/images/home-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/images/home-icon.png
--------------------------------------------------------------------------------
/front/src/assets/images/welcome.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/images/welcome.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/airplay.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/airplay.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/alexa.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/alexa.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/bluetooth.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/bluetooth.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/broadlink.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/broadlink.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/caldav.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/caldav.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/callmebot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/callmebot.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/darksky.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/darksky.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/enedis.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/enedis.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/ewelink.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/ewelink.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/free-mobile.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/free-mobile.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/google-cast.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/google-cast.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/google-home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/google-home.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/homekit.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/homekit.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/lan-manager.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/lan-manager.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/matter.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/matter.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/melcloud.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/melcloud.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/mqtt.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/mqtt.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/netatmo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/netatmo.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/nextcloud-talk.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/nextcloud-talk.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/node-red.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/node-red.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/openai.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/openai.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/openweather.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/openweather.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/owntracks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/owntracks.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/philips-hue.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/philips-hue.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/rtsp-camera.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/rtsp-camera.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/sonos.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/sonos.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/tasmota.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/tasmota.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/telegram.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/telegram.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/tp-link.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/tp-link.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/tuya.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/tuya.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/wemo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/wemo.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/xiaomi.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/xiaomi.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/zigbee2mqtt.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/zigbee2mqtt.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/cover/zwave-js-ui.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/cover/zwave-js-ui.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NAMain.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NAMain.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NAModule1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NAModule1.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NAModule2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NAModule2.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NAModule3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NAModule3.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NAModule4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NAModule4.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NAPlug.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NAPlug.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NATherm1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NATherm1.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/devices/netatmo/netatmo-NRV.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/devices/netatmo/netatmo-NRV.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/logos/logo_mqtt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/logos/logo_mqtt.png
--------------------------------------------------------------------------------
/front/src/assets/integrations/logos/logo_node-red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/logos/logo_node-red.png
--------------------------------------------------------------------------------
/front/src/assets/integrations/logos/logo_zigbee2mqtt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/logos/logo_zigbee2mqtt.png
--------------------------------------------------------------------------------
/front/src/assets/integrations/zwavejs-ui/zwavejs-ui-gateway-configuration.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/zwavejs-ui/zwavejs-ui-gateway-configuration.jpg
--------------------------------------------------------------------------------
/front/src/assets/integrations/zwavejs-ui/zwavejs-ui-mqtt-configuration.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/integrations/zwavejs-ui/zwavejs-ui-mqtt-configuration.jpg
--------------------------------------------------------------------------------
/front/src/assets/leaflet/layers-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/leaflet/layers-2x.png
--------------------------------------------------------------------------------
/front/src/assets/leaflet/layers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/leaflet/layers.png
--------------------------------------------------------------------------------
/front/src/assets/leaflet/marker-icon-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/leaflet/marker-icon-2x.png
--------------------------------------------------------------------------------
/front/src/assets/leaflet/marker-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/leaflet/marker-icon.png
--------------------------------------------------------------------------------
/front/src/assets/leaflet/marker-shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/leaflet/marker-shadow.png
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1125-2436.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1125-2436.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1136-640.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1136-640.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1170-2532.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1170-2532.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1242-2208.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1242-2208.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1242-2688.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1242-2688.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1284-2778.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1284-2778.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1334-750.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1334-750.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1536-2048.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1536-2048.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1620-2160.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1620-2160.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1668-2224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1668-2224.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1668-2388.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1668-2388.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-1792-828.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-1792-828.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2048-1536.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2048-1536.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2048-2732.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2048-2732.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2160-1620.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2160-1620.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2208-1242.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2208-1242.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2224-1668.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2224-1668.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2388-1668.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2388-1668.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2436-1125.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2436-1125.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2532-1170.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2532-1170.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2688-1242.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2688-1242.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2732-2048.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2732-2048.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-2778-1284.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-2778-1284.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-640-1136.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-640-1136.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-750-1334.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-750-1334.jpg
--------------------------------------------------------------------------------
/front/src/assets/splash/apple-splash-828-1792.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GladysAssistant/Gladys/b59d804c651ec1058e2c0a65c43296a48baab01c/front/src/assets/splash/apple-splash-828-1792.jpg
--------------------------------------------------------------------------------
/front/src/components/boxs/alarm/countdown.css:
--------------------------------------------------------------------------------
1 | .countdown {
2 | font-size: 5em;
3 | color: #333;
4 | font-weight: bold;
5 | text-align: center;
6 | }
7 |
8 | .countdownTimer {
9 | display: inline-block;
10 | padding: 10px;
11 | transition: transform 0.5s, opacity 0.5s;
12 | }
13 |
14 | .countdownTimer.updated {
15 | transform: scale(0.9);
16 | opacity: 0.7;
17 | }
18 |
--------------------------------------------------------------------------------
/front/src/components/boxs/alarm/style.css:
--------------------------------------------------------------------------------
1 | .alarmActionButton {
2 | height: 6rem;
3 | line-height: 16px;
4 | }
5 |
6 | .alarmActionIcon {
7 | font-size: 30px !important;
8 | }
9 |
--------------------------------------------------------------------------------
/front/src/components/boxs/camera/style.css:
--------------------------------------------------------------------------------
1 | .noImageToShowError {
2 | background-color: #34495e;
3 | color: white;
4 | height: 244px;
5 | padding: 12px;
6 | padding-bottom: 0px;
7 | margin-bottom: 0px;
8 | display: table-cell;
9 | vertical-align: middle;
10 | border-top-left-radius: 3px;
11 | border-top-right-radius: 3px;
12 | }
13 |
--------------------------------------------------------------------------------
/front/src/components/boxs/clock/ClockTypes.js:
--------------------------------------------------------------------------------
1 | export const CLOCK_TYPES = {
2 | ANALOG: 'analog',
3 | DIGITAL: 'digital'
4 | };
5 |
6 | export const CLOCK_TYPES_LIST = [CLOCK_TYPES.ANALOG, CLOCK_TYPES.DIGITAL];
7 |
--------------------------------------------------------------------------------
/front/src/components/boxs/device-in-room/device-features/sensor-value/NoRecentValueBadge.jsx:
--------------------------------------------------------------------------------
1 | import { Text } from 'preact-i18n';
2 |
3 | const NoRecentValueBadge = () => (
4 |
5 |
8 |
8 |