├── .browserslistrc
├── .editorconfig
├── .eslintrc.json
├── .gitignore
├── angular.json
├── assets
├── icon.png
└── splash.png
├── blinker.jks
├── blinker.jks.txt
├── capacitor.config.ts
├── ionic.config.json
├── karma.conf.js
├── package-lock.json
├── package.json
├── readme.md
├── src
├── app
│ ├── app-routing.module.ts
│ ├── app.component.html
│ ├── app.component.scss
│ ├── app.component.spec.ts
│ ├── app.component.ts
│ ├── app.module.ts
│ ├── configs
│ │ ├── api.config.ts
│ │ ├── app.config.ts
│ │ ├── devices.config.ts
│ │ ├── i18n
│ │ │ ├── ch.ts
│ │ │ └── en.ts
│ │ └── menu.config.ts
│ ├── core
│ │ ├── charts
│ │ │ ├── charts.module.ts
│ │ │ └── line-chart-area
│ │ │ │ ├── line-chart-area.component.html
│ │ │ │ ├── line-chart-area.component.scss
│ │ │ │ └── line-chart-area.component.ts
│ │ ├── components
│ │ │ ├── b-actcmd-list
│ │ │ │ ├── b-actcmd-list.component.html
│ │ │ │ ├── b-actcmd-list.component.scss
│ │ │ │ ├── b-actcmd-list.component.ts
│ │ │ │ └── b-actcmd-list.module.ts
│ │ │ ├── b-bottom-btn
│ │ │ │ ├── b-bottom-btn.component.html
│ │ │ │ ├── b-bottom-btn.component.scss
│ │ │ │ └── b-bottom-btn.component.ts
│ │ │ ├── b-chart
│ │ │ │ ├── b-chart.component.html
│ │ │ │ ├── b-chart.component.scss
│ │ │ │ └── b-chart.component.ts
│ │ │ ├── b-colorpicker-btns
│ │ │ │ ├── b-colorpicker-btns.component.html
│ │ │ │ ├── b-colorpicker-btns.component.scss
│ │ │ │ └── b-colorpicker-btns.component.ts
│ │ │ ├── b-colorpicker-disc
│ │ │ │ ├── b-colorpicker-disc.component.html
│ │ │ │ ├── b-colorpicker-disc.component.scss
│ │ │ │ └── b-colorpicker-disc.component.ts
│ │ │ ├── b-colorpicker
│ │ │ │ ├── b-colorpicker.html
│ │ │ │ ├── b-colorpicker.scss
│ │ │ │ └── b-colorpicker.ts
│ │ │ ├── b-device-img
│ │ │ │ ├── b-device-img.component.html
│ │ │ │ ├── b-device-img.component.scss
│ │ │ │ └── b-device-img.component.ts
│ │ │ ├── b-device-list
│ │ │ │ ├── b-device-list.component.html
│ │ │ │ ├── b-device-list.component.scss
│ │ │ │ └── b-device-list.component.ts
│ │ │ ├── b-item-list
│ │ │ │ ├── b-item-list.component.html
│ │ │ │ ├── b-item-list.component.scss
│ │ │ │ ├── b-item-list.component.ts
│ │ │ │ ├── b-item
│ │ │ │ │ ├── b-item.html
│ │ │ │ │ ├── b-item.scss
│ │ │ │ │ └── b-item.ts
│ │ │ │ └── readme.md
│ │ │ ├── b-progressbar
│ │ │ │ ├── b-progressbar.component.html
│ │ │ │ ├── b-progressbar.component.scss
│ │ │ │ └── b-progressbar.component.ts
│ │ │ ├── b-range
│ │ │ │ ├── b-range.html
│ │ │ │ ├── b-range.scss
│ │ │ │ └── b-range.ts
│ │ │ ├── b-timepicker
│ │ │ │ ├── b-timepicker.component.html
│ │ │ │ ├── b-timepicker.component.scss
│ │ │ │ └── b-timepicker.component.ts
│ │ │ ├── b-tip
│ │ │ │ ├── b-tip.component.html
│ │ │ │ ├── b-tip.component.scss
│ │ │ │ └── b-tip.component.ts
│ │ │ ├── b-toast
│ │ │ │ ├── b-toast.component.html
│ │ │ │ ├── b-toast.component.scss
│ │ │ │ └── b-toast.component.ts
│ │ │ ├── b-toggle
│ │ │ │ ├── b-toggle.component.html
│ │ │ │ ├── b-toggle.component.scss
│ │ │ │ └── b-toggle.component.ts
│ │ │ ├── b-top-box
│ │ │ │ ├── b-top-box.component.html
│ │ │ │ ├── b-top-box.component.scss
│ │ │ │ └── b-top-box.component.ts
│ │ │ ├── components.module.ts
│ │ │ ├── deviceblock-list2
│ │ │ │ ├── deviceblock-list2.html
│ │ │ │ ├── deviceblock-list2.scss
│ │ │ │ └── deviceblock-list2.ts
│ │ │ ├── lang-selector
│ │ │ │ ├── lang-selector.component.html
│ │ │ │ ├── lang-selector.component.scss
│ │ │ │ ├── lang-selector.component.ts
│ │ │ │ └── lang-selector.module.ts
│ │ │ └── scene-button-group
│ │ │ │ ├── scene-button-group.html
│ │ │ │ ├── scene-button-group.scss
│ │ │ │ ├── scene-button-group.ts
│ │ │ │ └── scene-button
│ │ │ │ ├── scene-button.html
│ │ │ │ ├── scene-button.scss
│ │ │ │ └── scene-button.ts
│ │ ├── directives
│ │ │ ├── directives.module.ts
│ │ │ └── overlay-padding.directive.ts
│ │ ├── functions
│ │ │ ├── check.ts
│ │ │ └── func.ts
│ │ ├── guard
│ │ │ └── auth.guard.ts
│ │ ├── injectable
│ │ │ └── server.interceptor.ts
│ │ ├── modals
│ │ │ ├── action-selector-modal
│ │ │ │ ├── action-selector-modal.component.html
│ │ │ │ ├── action-selector-modal.component.scss
│ │ │ │ └── action-selector-modal.component.ts
│ │ │ ├── device-selector-modal
│ │ │ │ ├── device-selector-modal.component.html
│ │ │ │ ├── device-selector-modal.component.scss
│ │ │ │ └── device-selector-modal.component.ts
│ │ │ ├── modals.module.ts
│ │ │ ├── repeat-selector-modal
│ │ │ │ ├── repeat-selector-modal.component.html
│ │ │ │ ├── repeat-selector-modal.component.scss
│ │ │ │ └── repeat-selector-modal.component.ts
│ │ │ ├── selector-modal
│ │ │ │ ├── selector-modal.component.html
│ │ │ │ ├── selector-modal.component.scss
│ │ │ │ └── selector-modal.component.ts
│ │ │ └── time-selector-modal
│ │ │ │ ├── time-selector-modal.component.html
│ │ │ │ ├── time-selector-modal.component.scss
│ │ │ │ └── time-selector-modal.component.ts
│ │ ├── model
│ │ │ ├── broker.model.ts
│ │ │ ├── data.model.ts
│ │ │ ├── device-config.model.ts
│ │ │ ├── device.model.ts
│ │ │ ├── response.model.ts
│ │ │ ├── tip.model.ts
│ │ │ └── toast.model.ts
│ │ ├── pages
│ │ │ ├── avatar
│ │ │ │ ├── avatar-picker.component.html
│ │ │ │ ├── avatar-picker.component.scss
│ │ │ │ ├── avatar-picker.component.ts
│ │ │ │ └── avatar-picker.module.ts
│ │ │ ├── device-icon
│ │ │ │ ├── device-icon.html
│ │ │ │ ├── device-icon.module.ts
│ │ │ │ ├── device-icon.scss
│ │ │ │ └── device-icon.ts
│ │ │ ├── doc
│ │ │ │ ├── doc.module.ts
│ │ │ │ ├── doc.page.html
│ │ │ │ ├── doc.page.scss
│ │ │ │ └── doc.page.ts
│ │ │ └── icon-list
│ │ │ │ ├── icon-list.html
│ │ │ │ ├── icon-list.module.ts
│ │ │ │ ├── icon-list.scss
│ │ │ │ └── icon-list.ts
│ │ ├── pipes
│ │ │ ├── actcmd2text.ts
│ │ │ ├── days2text.ts
│ │ │ ├── device2name.ts
│ │ │ ├── html.pipe.ts
│ │ │ ├── minute-to-time.ts
│ │ │ ├── ms-to-date.ts
│ │ │ ├── obj-to-str.ts
│ │ │ ├── ownplug-act2str.ts
│ │ │ ├── pipes.module.ts
│ │ │ └── wrap.pipe.ts
│ │ └── services
│ │ │ ├── audio.service.ts
│ │ │ ├── auth.service.ts
│ │ │ ├── cloudStorage.service.ts
│ │ │ ├── data.service.ts
│ │ │ ├── device-config.service.ts
│ │ │ ├── device.service.ts
│ │ │ ├── doc.service.ts
│ │ │ ├── geolocation.service.ts
│ │ │ ├── image.service.ts
│ │ │ ├── native.service.ts
│ │ │ ├── network.service.ts
│ │ │ ├── notice.service.ts
│ │ │ ├── permission.service.ts
│ │ │ ├── pusher.service.ts
│ │ │ ├── tip.service.ts
│ │ │ ├── toast.service.ts
│ │ │ ├── translation.service.ts
│ │ │ ├── update.service.ts
│ │ │ ├── user.service.ts
│ │ │ └── view.service.ts
│ ├── debug
│ │ ├── debug.component.html
│ │ ├── debug.component.scss
│ │ ├── debug.component.ts
│ │ ├── debug.module.ts
│ │ └── debug.service.ts
│ ├── device
│ │ ├── device.module.ts
│ │ ├── device.page.html
│ │ ├── device.page.scss
│ │ ├── device.page.ts
│ │ └── layouter2
│ │ │ ├── config-editor
│ │ │ ├── config-editor.component.html
│ │ │ ├── config-editor.component.scss
│ │ │ └── config-editor.component.ts
│ │ │ ├── guide
│ │ │ ├── esptouch
│ │ │ │ ├── esptouch.component.html
│ │ │ │ ├── esptouch.component.scss
│ │ │ │ └── esptouch.component.ts
│ │ │ ├── examples
│ │ │ │ ├── examples.component.html
│ │ │ │ ├── examples.component.scss
│ │ │ │ └── examples.component.ts
│ │ │ ├── guide.html
│ │ │ ├── guide.module.ts
│ │ │ ├── guide.scss
│ │ │ └── guide.ts
│ │ │ ├── ieconfig
│ │ │ ├── ieconfig.component.html
│ │ │ ├── ieconfig.component.scss
│ │ │ ├── ieconfig.component.ts
│ │ │ └── ieconfig.module.ts
│ │ │ ├── layouter.config.ts
│ │ │ ├── layouter.guard.ts
│ │ │ ├── layouter.interface.ts
│ │ │ ├── layouter2.html
│ │ │ ├── layouter2.module.ts
│ │ │ ├── layouter2.scss
│ │ │ ├── layouter2.service.ts
│ │ │ ├── layouter2.ts
│ │ │ ├── newui
│ │ │ ├── bottom-btn
│ │ │ │ ├── bottom-btn.component.html
│ │ │ │ ├── bottom-btn.component.scss
│ │ │ │ └── bottom-btn.component.ts
│ │ │ ├── item-list
│ │ │ │ ├── item-list.component.html
│ │ │ │ ├── item-list.component.scss
│ │ │ │ └── item-list.component.ts
│ │ │ ├── item
│ │ │ │ ├── item.component.html
│ │ │ │ ├── item.component.scss
│ │ │ │ └── item.component.ts
│ │ │ ├── newui.module.ts
│ │ │ └── newui.service.ts
│ │ │ ├── widget-buttonlist
│ │ │ ├── widget-buttonlist.html
│ │ │ ├── widget-buttonlist.module.ts
│ │ │ ├── widget-buttonlist.scss
│ │ │ └── widget-buttonlist.ts
│ │ │ ├── widget-editor2
│ │ │ ├── background-edit
│ │ │ │ ├── background-edit.component.html
│ │ │ │ ├── background-edit.component.scss
│ │ │ │ └── background-edit.component.ts
│ │ │ ├── base-edit
│ │ │ │ ├── base-edit.component.html
│ │ │ │ ├── base-edit.component.scss
│ │ │ │ └── base-edit.component.ts
│ │ │ ├── edit-components
│ │ │ │ ├── align-selector
│ │ │ │ │ ├── align-selector.component.html
│ │ │ │ │ ├── align-selector.component.scss
│ │ │ │ │ └── align-selector.component.ts
│ │ │ │ ├── check-list
│ │ │ │ │ ├── check-list.component.html
│ │ │ │ │ ├── check-list.component.scss
│ │ │ │ │ └── check-list.component.ts
│ │ │ │ ├── color-picker
│ │ │ │ │ ├── color-picker.component.html
│ │ │ │ │ ├── color-picker.component.scss
│ │ │ │ │ └── color-picker.component.ts
│ │ │ │ ├── double-number-input
│ │ │ │ │ ├── double-number-input.component.html
│ │ │ │ │ ├── double-number-input.component.scss
│ │ │ │ │ └── double-number-input.component.ts
│ │ │ │ ├── edit-components.module.ts
│ │ │ │ ├── icon-picker
│ │ │ │ │ ├── icon-picker.component.html
│ │ │ │ │ ├── icon-picker.component.scss
│ │ │ │ │ └── icon-picker.component.ts
│ │ │ │ └── number-input
│ │ │ │ │ ├── number-input.component.html
│ │ │ │ │ ├── number-input.component.scss
│ │ │ │ │ └── number-input.component.ts
│ │ │ ├── widget-button-edit
│ │ │ │ ├── widget-button-edit.component.html
│ │ │ │ ├── widget-button-edit.component.scss
│ │ │ │ └── widget-button-edit.component.ts
│ │ │ ├── widget-chart-edit
│ │ │ │ ├── widget-chart-edit.component.html
│ │ │ │ ├── widget-chart-edit.component.scss
│ │ │ │ └── widget-chart-edit.component.ts
│ │ │ ├── widget-custom-edit
│ │ │ │ ├── widget-custom-edit.component.html
│ │ │ │ ├── widget-custom-edit.component.scss
│ │ │ │ └── widget-custom-edit.component.ts
│ │ │ ├── widget-debug-edit
│ │ │ │ ├── widget-debug-edit.component.html
│ │ │ │ ├── widget-debug-edit.component.scss
│ │ │ │ └── widget-debug-edit.component.ts
│ │ │ ├── widget-editor.html
│ │ │ ├── widget-editor.module.ts
│ │ │ ├── widget-editor.scss
│ │ │ ├── widget-editor.ts
│ │ │ ├── widget-icon-edit
│ │ │ │ ├── widget-icon-edit.component.html
│ │ │ │ ├── widget-icon-edit.component.scss
│ │ │ │ └── widget-icon-edit.component.ts
│ │ │ ├── widget-image-edit
│ │ │ │ ├── widget-image-edit.component.html
│ │ │ │ ├── widget-image-edit.component.scss
│ │ │ │ └── widget-image-edit.component.ts
│ │ │ ├── widget-number-edit
│ │ │ │ ├── widget-number-edit.component.html
│ │ │ │ ├── widget-number-edit.component.scss
│ │ │ │ └── widget-number-edit.component.ts
│ │ │ ├── widget-select-edit
│ │ │ │ ├── widget-select-edit.component.html
│ │ │ │ ├── widget-select-edit.component.scss
│ │ │ │ └── widget-select-edit.component.ts
│ │ │ ├── widget-slider-edit
│ │ │ │ ├── widget-slider-edit.component.html
│ │ │ │ ├── widget-slider-edit.component.scss
│ │ │ │ └── widget-slider-edit.component.ts
│ │ │ ├── widget-text-edit
│ │ │ │ ├── widget-text-edit.component.html
│ │ │ │ ├── widget-text-edit.component.scss
│ │ │ │ └── widget-text-edit.component.ts
│ │ │ └── widget-video-edit
│ │ │ │ ├── widget-video-edit.component.html
│ │ │ │ ├── widget-video-edit.component.scss
│ │ │ │ └── widget-video-edit.component.ts
│ │ │ ├── widget-listbar
│ │ │ ├── widget-listbar.component.html
│ │ │ ├── widget-listbar.component.scss
│ │ │ ├── widget-listbar.component.ts
│ │ │ └── widget-listbar.module.ts
│ │ │ ├── widget-toolbar
│ │ │ ├── widget-toolbar.component.html
│ │ │ ├── widget-toolbar.component.scss
│ │ │ └── widget-toolbar.component.ts
│ │ │ └── widgets
│ │ │ ├── config.ts
│ │ │ ├── parentDynamic.component.html
│ │ │ ├── parentDynamic.component.scss
│ │ │ ├── parentDynamic.component.ts
│ │ │ ├── widget-button
│ │ │ ├── widget-button.html
│ │ │ ├── widget-button.scss
│ │ │ └── widget-button.ts
│ │ │ ├── widget-chart
│ │ │ ├── widget-chart.html
│ │ │ ├── widget-chart.scss
│ │ │ └── widget-chart.ts
│ │ │ ├── widget-color
│ │ │ ├── widget-color.html
│ │ │ ├── widget-color.scss
│ │ │ └── widget-color.ts
│ │ │ ├── widget-custom
│ │ │ ├── widget-custom.html
│ │ │ ├── widget-custom.scss
│ │ │ └── widget-custom.ts
│ │ │ ├── widget-debug
│ │ │ ├── widget-debug.html
│ │ │ ├── widget-debug.scss
│ │ │ └── widget-debug.ts
│ │ │ ├── widget-image
│ │ │ ├── widget-image.html
│ │ │ ├── widget-image.scss
│ │ │ └── widget-image.ts
│ │ │ ├── widget-input
│ │ │ ├── widget-input.html
│ │ │ ├── widget-input.scss
│ │ │ └── widget-input.ts
│ │ │ ├── widget-joystick
│ │ │ ├── widget-joystick.html
│ │ │ ├── widget-joystick.scss
│ │ │ └── widget-joystick.ts
│ │ │ ├── widget-map
│ │ │ ├── widget-map.component.html
│ │ │ ├── widget-map.component.scss
│ │ │ └── widget-map.component.ts
│ │ │ ├── widget-number
│ │ │ ├── widget-number.html
│ │ │ ├── widget-number.scss
│ │ │ └── widget-number.ts
│ │ │ ├── widget-range
│ │ │ ├── widget-range.html
│ │ │ ├── widget-range.scss
│ │ │ └── widget-range.ts
│ │ │ ├── widget-select
│ │ │ ├── widget-select.html
│ │ │ ├── widget-select.scss
│ │ │ └── widget-select.ts
│ │ │ ├── widget-text
│ │ │ ├── widget-text.html
│ │ │ ├── widget-text.scss
│ │ │ └── widget-text.ts
│ │ │ ├── widget-timer
│ │ │ ├── widget-timer.html
│ │ │ ├── widget-timer.scss
│ │ │ └── widget-timer.ts
│ │ │ ├── widget-video
│ │ │ ├── widget-video.html
│ │ │ ├── widget-video.scss
│ │ │ └── widget-video.ts
│ │ │ ├── widget.directive.ts
│ │ │ └── widgets.module.ts
│ ├── sections
│ │ ├── about
│ │ │ ├── about.module.ts
│ │ │ ├── about.page.html
│ │ │ ├── about.page.scss
│ │ │ └── about.page.ts
│ │ ├── account
│ │ │ ├── account-routing.module.ts
│ │ │ ├── account.scss
│ │ │ ├── first-modal
│ │ │ │ ├── first-modal.component.html
│ │ │ │ ├── first-modal.component.scss
│ │ │ │ ├── first-modal.component.ts
│ │ │ │ └── first-modal.module.ts
│ │ │ ├── login
│ │ │ │ ├── login.html
│ │ │ │ ├── login.module.ts
│ │ │ │ ├── login.scss
│ │ │ │ └── login.ts
│ │ │ ├── register
│ │ │ │ ├── register.html
│ │ │ │ ├── register.module.ts
│ │ │ │ ├── register.scss
│ │ │ │ └── register.ts
│ │ │ └── retrieve
│ │ │ │ ├── retrieve.html
│ │ │ │ ├── retrieve.module.ts
│ │ │ │ ├── retrieve.scss
│ │ │ │ └── retrieve.ts
│ │ ├── adddevice
│ │ │ ├── adddevice.html
│ │ │ ├── adddevice.module.ts
│ │ │ ├── adddevice.scss
│ │ │ ├── adddevice.service.ts
│ │ │ ├── adddevice.ts
│ │ │ ├── apconfig
│ │ │ │ ├── apconfig.html
│ │ │ │ ├── apconfig.module.ts
│ │ │ │ ├── apconfig.ts
│ │ │ │ ├── components
│ │ │ │ │ └── ios-guide
│ │ │ │ │ │ ├── ios-guide.component.html
│ │ │ │ │ │ ├── ios-guide.component.scss
│ │ │ │ │ │ └── ios-guide.component.ts
│ │ │ │ ├── config-state
│ │ │ │ │ ├── config-state.html
│ │ │ │ │ ├── config-state.scss
│ │ │ │ │ └── config-state.ts
│ │ │ │ └── readme.md
│ │ │ ├── bleconfig
│ │ │ │ ├── bleconfig.component.html
│ │ │ │ ├── bleconfig.component.scss
│ │ │ │ ├── bleconfig.component.ts
│ │ │ │ └── bleconfig.module.ts
│ │ │ ├── bwconfig
│ │ │ │ ├── bwconfig.html
│ │ │ │ ├── bwconfig.module.ts
│ │ │ │ ├── bwconfig.scss
│ │ │ │ ├── bwconfig.ts
│ │ │ │ └── config-state
│ │ │ │ │ ├── config-state.component.html
│ │ │ │ │ ├── config-state.component.scss
│ │ │ │ │ └── config-state.component.ts
│ │ │ ├── config-state.scss
│ │ │ ├── config.scss
│ │ │ ├── esptouch
│ │ │ │ ├── config-state
│ │ │ │ │ ├── config-state.html
│ │ │ │ │ ├── config-state.module.ts
│ │ │ │ │ ├── config-state.scss
│ │ │ │ │ └── config-state.ts
│ │ │ │ ├── esptouch.html
│ │ │ │ ├── esptouch.module.ts
│ │ │ │ └── esptouch.ts
│ │ │ ├── guide
│ │ │ │ ├── guide.html
│ │ │ │ ├── guide.module.ts
│ │ │ │ ├── guide.scss
│ │ │ │ └── guide.ts
│ │ │ ├── mqttkey
│ │ │ │ ├── mqttkey.html
│ │ │ │ ├── mqttkey.module.ts
│ │ │ │ ├── mqttkey.scss
│ │ │ │ └── mqttkey.ts
│ │ │ └── qrscanner
│ │ │ │ ├── qrscanner.module.ts
│ │ │ │ ├── qrscanner.page.html
│ │ │ │ ├── qrscanner.page.scss
│ │ │ │ ├── qrscanner.page.ts
│ │ │ │ └── readme.md
│ │ ├── devcenter
│ │ │ ├── components
│ │ │ │ ├── authentication
│ │ │ │ │ ├── authentication.component.html
│ │ │ │ │ ├── authentication.component.scss
│ │ │ │ │ └── authentication.component.ts
│ │ │ │ ├── components.module.ts
│ │ │ │ ├── datakey
│ │ │ │ │ ├── datakey.component.html
│ │ │ │ │ ├── datakey.component.scss
│ │ │ │ │ └── datakey.component.ts
│ │ │ │ ├── devtool
│ │ │ │ │ ├── devtool.component.html
│ │ │ │ │ ├── devtool.component.scss
│ │ │ │ │ └── devtool.component.ts
│ │ │ │ ├── prodevice-info
│ │ │ │ │ ├── prodevice-info.component.html
│ │ │ │ │ ├── prodevice-info.component.scss
│ │ │ │ │ └── prodevice-info.component.ts
│ │ │ │ └── prodevice
│ │ │ │ │ ├── prodevice.component.html
│ │ │ │ │ ├── prodevice.component.scss
│ │ │ │ │ └── prodevice.component.ts
│ │ │ ├── devcenter.module.ts
│ │ │ ├── devcenter.page.html
│ │ │ ├── devcenter.page.scss
│ │ │ ├── devcenter.page.ts
│ │ │ ├── devcenter.service.ts
│ │ │ ├── pages
│ │ │ │ ├── addprodevice
│ │ │ │ │ ├── addprodevice.module.ts
│ │ │ │ │ ├── addprodevice.page.html
│ │ │ │ │ ├── addprodevice.page.scss
│ │ │ │ │ └── addprodevice.page.ts
│ │ │ │ ├── editinfo
│ │ │ │ │ ├── editinfo.module.ts
│ │ │ │ │ ├── editinfo.page.html
│ │ │ │ │ ├── editinfo.page.scss
│ │ │ │ │ └── editinfo.page.ts
│ │ │ │ ├── editlayouter
│ │ │ │ │ ├── editlayouter.module.ts
│ │ │ │ │ ├── editlayouter.page.html
│ │ │ │ │ ├── editlayouter.page.scss
│ │ │ │ │ ├── editlayouter.page.ts
│ │ │ │ │ └── ieconfig
│ │ │ │ │ │ ├── ieconfig.module.ts
│ │ │ │ │ │ ├── ieconfig.page.html
│ │ │ │ │ │ ├── ieconfig.page.scss
│ │ │ │ │ │ └── ieconfig.page.ts
│ │ │ │ ├── publicprodevice
│ │ │ │ │ ├── publicprodevice.module.ts
│ │ │ │ │ ├── publicprodevice.page.html
│ │ │ │ │ ├── publicprodevice.page.scss
│ │ │ │ │ └── publicprodevice.page.ts
│ │ │ │ └── settings
│ │ │ │ │ ├── settings.module.ts
│ │ │ │ │ ├── settings.page.html
│ │ │ │ │ ├── settings.page.scss
│ │ │ │ │ └── settings.page.ts
│ │ │ └── readme.md
│ │ ├── device
│ │ │ ├── device-location
│ │ │ │ ├── device-location.page.html
│ │ │ │ ├── device-location.page.scss
│ │ │ │ └── device-location.page.ts
│ │ │ ├── device-log
│ │ │ │ ├── device-log.component.html
│ │ │ │ ├── device-log.component.scss
│ │ │ │ └── device-log.component.ts
│ │ │ ├── device-manager-routing.module.ts
│ │ │ ├── device-manager
│ │ │ │ ├── device-manager.html
│ │ │ │ ├── device-manager.module.ts
│ │ │ │ ├── device-manager.scss
│ │ │ │ └── device-manager.ts
│ │ │ ├── device-settings
│ │ │ │ ├── device-settings.html
│ │ │ │ ├── device-settings.scss
│ │ │ │ └── device-settings.ts
│ │ │ ├── device-share
│ │ │ │ ├── device-share.html
│ │ │ │ ├── device-share.scss
│ │ │ │ ├── device-share.ts
│ │ │ │ └── share.service.ts
│ │ │ ├── device-storage
│ │ │ │ ├── device-storage.page.html
│ │ │ │ ├── device-storage.page.scss
│ │ │ │ └── device-storage.page.ts
│ │ │ ├── device-timer
│ │ │ │ ├── device-timer.page.html
│ │ │ │ ├── device-timer.page.scss
│ │ │ │ ├── device-timer.page.ts
│ │ │ │ ├── readme.md
│ │ │ │ ├── timer.service.ts
│ │ │ │ └── timing-edit
│ │ │ │ │ ├── timing-edit.html
│ │ │ │ │ ├── timing-edit.scss
│ │ │ │ │ └── timing-edit.ts
│ │ │ └── device-update
│ │ │ │ ├── device-update.html
│ │ │ │ ├── device-update.scss
│ │ │ │ └── device-update.ts
│ │ ├── feedback
│ │ │ ├── feedback.component.html
│ │ │ ├── feedback.component.scss
│ │ │ ├── feedback.component.ts
│ │ │ ├── feedback.module.ts
│ │ │ └── feedback.service.ts
│ │ ├── message
│ │ │ ├── message.model.ts
│ │ │ ├── message.module.ts
│ │ │ ├── message.page.html
│ │ │ ├── message.page.scss
│ │ │ ├── message.page.ts
│ │ │ ├── message.service.ts
│ │ │ └── readme.md
│ │ ├── room
│ │ │ ├── room-edit
│ │ │ │ ├── room-edit.html
│ │ │ │ ├── room-edit.module.ts
│ │ │ │ ├── room-edit.scss
│ │ │ │ └── room-edit.ts
│ │ │ ├── room-manager-routing.module.ts
│ │ │ ├── room-manager
│ │ │ │ ├── room-manager.html
│ │ │ │ ├── room-manager.module.ts
│ │ │ │ ├── room-manager.scss
│ │ │ │ └── room-manager.ts
│ │ │ └── room.service.ts
│ │ ├── scene
│ │ │ ├── components
│ │ │ │ └── scene-editor-addact
│ │ │ │ │ ├── scene-edit-addact.html
│ │ │ │ │ ├── scene-edit-addact.scss
│ │ │ │ │ └── scene-edit-addact.ts
│ │ │ ├── scene-editor
│ │ │ │ ├── scene-edit.html
│ │ │ │ ├── scene-edit.scss
│ │ │ │ └── scene-edit.ts
│ │ │ ├── scene-manager
│ │ │ │ ├── scene-manager.html
│ │ │ │ ├── scene-manager.scss
│ │ │ │ └── scene-manager.ts
│ │ │ ├── scene.module.ts
│ │ │ └── scene.service.ts
│ │ ├── speech
│ │ │ ├── speech-button
│ │ │ │ ├── speech-button.html
│ │ │ │ ├── speech-button.scss
│ │ │ │ └── speech-button.ts
│ │ │ ├── speech.html
│ │ │ ├── speech.module.ts
│ │ │ ├── speech.scss
│ │ │ ├── speech.service.ts
│ │ │ └── speech.ts
│ │ └── user
│ │ │ ├── user.module.ts
│ │ │ ├── user.page.html
│ │ │ ├── user.page.scss
│ │ │ └── user.page.ts
│ └── view
│ │ ├── home
│ │ ├── components
│ │ │ ├── deviceblock-list
│ │ │ │ ├── deviceblock-list.html
│ │ │ │ ├── deviceblock-list.scss
│ │ │ │ └── deviceblock-list.ts
│ │ │ ├── deviceblock-zone
│ │ │ │ ├── deviceblock-zone.html
│ │ │ │ ├── deviceblock-zone.scss
│ │ │ │ └── deviceblock-zone.ts
│ │ │ ├── deviceblock
│ │ │ │ ├── deviceblock.html
│ │ │ │ ├── deviceblock.scss
│ │ │ │ └── deviceblock.ts
│ │ │ └── room-list
│ │ │ │ ├── room-list.html
│ │ │ │ ├── room-list.scss
│ │ │ │ └── room-list.ts
│ │ ├── view-home.module.ts
│ │ ├── view-home.page.html
│ │ ├── view-home.page.scss
│ │ └── view-home.page.ts
│ │ ├── menu
│ │ ├── menu.html
│ │ ├── menu.module.ts
│ │ ├── menu.scss
│ │ └── menu.ts
│ │ ├── view.module.ts
│ │ ├── view.page.html
│ │ ├── view.page.scss
│ │ └── view.page.ts
├── assets
│ ├── aac
│ │ ├── Click.aac
│ │ ├── Speech_Begin.aac
│ │ ├── Speech_Boot.aac
│ │ ├── Speech_CannotControl.aac
│ │ ├── Speech_ChoseDevice.aac
│ │ ├── Speech_Closed1.aac
│ │ ├── Speech_Closed2.aac
│ │ ├── Speech_Closing1.aac
│ │ ├── Speech_Closing2.aac
│ │ ├── Speech_DevMode.aac
│ │ ├── Speech_DeviceClosed.aac
│ │ ├── Speech_DeviceOpened.aac
│ │ ├── Speech_Doing.aac
│ │ ├── Speech_Done.aac
│ │ ├── Speech_End.aac
│ │ ├── Speech_Error1.aac
│ │ ├── Speech_Error2.aac
│ │ ├── Speech_Error3.aac
│ │ ├── Speech_Get1.aac
│ │ ├── Speech_Get2.aac
│ │ ├── Speech_Get3.aac
│ │ ├── Speech_Get4.aac
│ │ ├── Speech_Help.aac
│ │ ├── Speech_NetError.aac
│ │ ├── Speech_NotFound1.aac
│ │ ├── Speech_NotFound2.aac
│ │ ├── Speech_Opened1.aac
│ │ ├── Speech_Opened2.aac
│ │ ├── Speech_Opening1.aac
│ │ ├── Speech_Opening2.aac
│ │ ├── Speech_Unsupport.aac
│ │ ├── Speech_Wait1.aac
│ │ ├── Speech_Wait2.aac
│ │ ├── Switch_Off.aac
│ │ ├── Switch_On.aac
│ │ ├── Warning_Higest.aac
│ │ ├── Warning_High.aac
│ │ ├── Warning_Low.aac
│ │ └── Warning_Mid.aac
│ ├── fontawesome6
│ │ ├── css
│ │ │ ├── all.css
│ │ │ ├── all.min.css
│ │ │ ├── brands.css
│ │ │ ├── brands.min.css
│ │ │ ├── duotone.css
│ │ │ ├── duotone.min.css
│ │ │ ├── fontawesome.css
│ │ │ ├── fontawesome.min.css
│ │ │ ├── light.css
│ │ │ ├── light.min.css
│ │ │ ├── regular.css
│ │ │ ├── regular.min.css
│ │ │ ├── sharp-regular.css
│ │ │ ├── sharp-regular.min.css
│ │ │ ├── sharp-solid.css
│ │ │ ├── sharp-solid.min.css
│ │ │ ├── solid.css
│ │ │ ├── solid.min.css
│ │ │ ├── svg-with-js.css
│ │ │ ├── svg-with-js.min.css
│ │ │ ├── thin.css
│ │ │ ├── thin.min.css
│ │ │ ├── v4-font-face.css
│ │ │ ├── v4-font-face.min.css
│ │ │ ├── v4-shims.css
│ │ │ ├── v4-shims.min.css
│ │ │ ├── v5-font-face.css
│ │ │ └── v5-font-face.min.css
│ │ └── webfonts
│ │ │ ├── fa-brands-400.ttf
│ │ │ ├── fa-brands-400.woff2
│ │ │ ├── fa-duotone-900.ttf
│ │ │ ├── fa-duotone-900.woff2
│ │ │ ├── fa-light-300.ttf
│ │ │ ├── fa-light-300.woff2
│ │ │ ├── fa-regular-400.ttf
│ │ │ ├── fa-regular-400.woff2
│ │ │ ├── fa-sharp-regular-400.ttf
│ │ │ ├── fa-sharp-regular-400.woff2
│ │ │ ├── fa-sharp-solid-900.ttf
│ │ │ ├── fa-sharp-solid-900.woff2
│ │ │ ├── fa-solid-900.ttf
│ │ │ ├── fa-solid-900.woff2
│ │ │ ├── fa-thin-100.ttf
│ │ │ ├── fa-thin-100.woff2
│ │ │ ├── fa-v4compatibility.ttf
│ │ │ └── fa-v4compatibility.woff2
│ ├── fonts
│ │ ├── MiSans-Demibold.woff2
│ │ └── MiSans-Regular.woff2
│ ├── html
│ │ ├── button-3d.html
│ │ └── button.html
│ ├── icons
│ │ ├── icon-128.webp
│ │ ├── icon-128x128.png
│ │ ├── icon-144x144.png
│ │ ├── icon-152x152.png
│ │ ├── icon-192.webp
│ │ ├── icon-192x192.png
│ │ ├── icon-256.webp
│ │ ├── icon-384x384.png
│ │ ├── icon-48.webp
│ │ ├── icon-512.webp
│ │ ├── icon-512x512.png
│ │ ├── icon-72.webp
│ │ ├── icon-72x72.png
│ │ ├── icon-96.webp
│ │ └── icon-96x96.png
│ ├── img
│ │ ├── apconfig-ios.png
│ │ ├── avatar.png
│ │ ├── bg
│ │ │ ├── 1.jpg
│ │ │ ├── 2.jpg
│ │ │ ├── 3.jpg
│ │ │ ├── 4.jpg
│ │ │ ├── 5.jpg
│ │ │ ├── f1.jpg
│ │ │ ├── f2.jpg
│ │ │ ├── f3.jpg
│ │ │ ├── f4.jpg
│ │ │ ├── f5.jpg
│ │ │ ├── test.png
│ │ │ ├── test2.png
│ │ │ └── thumbnail
│ │ │ │ ├── 0.jpg
│ │ │ │ ├── 1.jpg
│ │ │ │ ├── 2.jpg
│ │ │ │ ├── 3.jpg
│ │ │ │ ├── 4.jpg
│ │ │ │ ├── 5.jpg
│ │ │ │ ├── 99.jpg
│ │ │ │ ├── f1.jpg
│ │ │ │ ├── f2.jpg
│ │ │ │ ├── f3.jpg
│ │ │ │ ├── f4.jpg
│ │ │ │ └── f5.jpg
│ │ ├── blinker-icon.jpg
│ │ ├── blinker-icon.png
│ │ ├── blinker-logo-white.png
│ │ ├── blue-led.png
│ │ ├── devices
│ │ │ ├── airstation
│ │ │ │ ├── co.svg
│ │ │ │ ├── no2.svg
│ │ │ │ ├── o3.svg
│ │ │ │ ├── pm10.svg
│ │ │ │ ├── pm2_5.svg
│ │ │ │ └── so2.svg
│ │ │ ├── icon
│ │ │ │ ├── airconditioner.png
│ │ │ │ ├── aligenie.png
│ │ │ │ ├── arduino-mega.png
│ │ │ │ ├── arduino-red.png
│ │ │ │ ├── baiduspeaker.png
│ │ │ │ ├── birdcage.png
│ │ │ │ ├── cat.png
│ │ │ │ ├── catfood.png
│ │ │ │ ├── cathouse.png
│ │ │ │ ├── diyarduino.png
│ │ │ │ ├── diylinux.png
│ │ │ │ ├── dog.png
│ │ │ │ ├── dogfood.png
│ │ │ │ ├── doghouse.png
│ │ │ │ ├── esp32.png
│ │ │ │ ├── fan.png
│ │ │ │ ├── fishtank.png
│ │ │ │ ├── heater.png
│ │ │ │ ├── humidifier.png
│ │ │ │ ├── hygrothermograph.png
│ │ │ │ ├── linux-logo.png
│ │ │ │ ├── openjumperfeeder.png
│ │ │ │ ├── ownairdetector.png
│ │ │ │ ├── ownbulb.png
│ │ │ │ ├── ownledstrip.png
│ │ │ │ ├── ownlight.png
│ │ │ │ ├── ownlight2.png
│ │ │ │ ├── ownlight3.png
│ │ │ │ ├── ownlight4.png
│ │ │ │ ├── ownplug.png
│ │ │ │ ├── plant1.png
│ │ │ │ ├── plant2.png
│ │ │ │ ├── plant3.png
│ │ │ │ ├── raspberrypi-blue.png
│ │ │ │ ├── raspberrypi-logo.png
│ │ │ │ ├── raspberrypi-pico.png
│ │ │ │ ├── raspberrypi-zero.png
│ │ │ │ ├── station.png
│ │ │ │ ├── unknown.png
│ │ │ │ ├── warninglight.png
│ │ │ │ ├── wifiduino-blue.png
│ │ │ │ └── wifiduino.png
│ │ │ └── ownlight
│ │ │ │ ├── auto.png
│ │ │ │ ├── bg.jpg
│ │ │ │ ├── bg.png
│ │ │ │ ├── blink.png
│ │ │ │ ├── breath.png
│ │ │ │ ├── colorpicker.png
│ │ │ │ ├── cool.png
│ │ │ │ ├── gradient.png
│ │ │ │ ├── solid.png
│ │ │ │ ├── speed-f.png
│ │ │ │ ├── speed-h.png
│ │ │ │ ├── stream.png
│ │ │ │ ├── sun-f.png
│ │ │ │ ├── sun-h.png
│ │ │ │ ├── sun.png
│ │ │ │ ├── timing.png
│ │ │ │ └── warm.png
│ │ ├── diandeng-logo.png
│ │ ├── headerbg.jpg
│ │ ├── icon
│ │ │ ├── add.svg
│ │ │ ├── apconfig.png
│ │ │ ├── arrow-gray.svg
│ │ │ ├── arrow.png
│ │ │ ├── arrow.svg
│ │ │ ├── ble-w.png
│ │ │ ├── ble.png
│ │ │ ├── esp-logo.png
│ │ │ ├── leaf.png
│ │ │ ├── link.png
│ │ │ ├── menu.svg
│ │ │ ├── message.svg
│ │ │ ├── room.png
│ │ │ ├── thermometer.png
│ │ │ ├── tint.png
│ │ │ ├── tool-bleconfig.png
│ │ │ ├── tool-qrscanner.png
│ │ │ ├── update-blue.png
│ │ │ ├── update-done.png
│ │ │ ├── update-fail.png
│ │ │ ├── update-gray.png
│ │ │ ├── viewmode.svg
│ │ │ ├── warning.png
│ │ │ ├── wifi-w.png
│ │ │ └── wifi.png
│ │ ├── language
│ │ │ ├── chinese.jpg
│ │ │ └── english.jpg
│ │ ├── layouter
│ │ │ ├── btn-bg.png
│ │ │ ├── colorpicker.png
│ │ │ ├── colorpicker2.png
│ │ │ ├── joyin.png
│ │ │ ├── joyout.png
│ │ │ └── joystick.png
│ │ ├── login-logo.png
│ │ ├── map
│ │ │ ├── device.png
│ │ │ ├── map-device.png
│ │ │ ├── map-marker.png
│ │ │ ├── map-me.png
│ │ │ ├── marker.png
│ │ │ └── user.png
│ │ ├── new.png
│ │ ├── nodevice.svg
│ │ ├── red-led.png
│ │ ├── scanner.png
│ │ ├── url-error.png
│ │ └── widget-img.png
│ ├── lib
│ │ └── loader.css
│ │ │ └── loaders.min.css
│ ├── ownfonts
│ │ ├── demo.css
│ │ ├── demo_index.html
│ │ ├── iconfont.css
│ │ ├── iconfont.eot
│ │ ├── iconfont.js
│ │ ├── iconfont.svg
│ │ ├── iconfont.ttf
│ │ ├── iconfont.woff
│ │ └── iconfont.woff2
│ └── svg
│ │ ├── circles.svg
│ │ ├── puff.svg
│ │ ├── speech.svg
│ │ └── tail-spin.svg
├── blinker.scss
├── environments
│ ├── environment.prod.ts
│ └── environment.ts
├── global.scss
├── index.html
├── main.ts
├── manifest.webmanifest
├── polyfills.ts
├── test.ts
├── theme
│ └── variables.scss
└── zone-flags.ts
├── tsconfig.app.json
├── tsconfig.json
└── tsconfig.spec.json
/.browserslistrc:
--------------------------------------------------------------------------------
1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 |
5 | # For the full list of supported browsers by the Angular framework, please see:
6 | # https://angular.io/guide/browser-support
7 |
8 | # You can see what browsers were selected by your queries by running:
9 | # npx browserslist
10 |
11 | Chrome >=79
12 | ChromeAndroid >=79
13 | Firefox >=70
14 | Edge >=79
15 | Safari >=14
16 | iOS >=14
17 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 |
14 | [*.md]
15 | max_line_length = off
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blinker-iot/blinker-app/57224fea35083a8bc2af45aae8443b7606197f69/assets/icon.png
--------------------------------------------------------------------------------
/assets/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blinker-iot/blinker-app/57224fea35083a8bc2af45aae8443b7606197f69/assets/splash.png
--------------------------------------------------------------------------------
/blinker.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/blinker-iot/blinker-app/57224fea35083a8bc2af45aae8443b7606197f69/blinker.jks
--------------------------------------------------------------------------------
/blinker.jks.txt:
--------------------------------------------------------------------------------
1 | alias:bM1}lF0!yQ7)
2 | password:bM1}lF0!yQ7)
--------------------------------------------------------------------------------
/ionic.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "diandeng-app",
3 | "integrations": {
4 | "capacitor": {}
5 | },
6 | "type": "angular"
7 | }
8 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Blinker APP
2 | 这是blinker app 2.8.0-alpha版本,为最新测试行版本
3 | 本软件版本使用 GPL v3 协议开源,不可用于商业用途
4 |
5 | 对于普通用户,我们推荐您使用官网发布的2.6.5版本
6 |
7 | # 关于2.8.0
8 | blinker App 2.8.0 是使用ionic 7、angular17、capacitor5重构的全新版本
9 | 部分功能仍然在重构中,待重构完成,即会更新到github
10 |
11 | # 开发环境
12 | 推荐使用 Visual Studio Code
13 | 主要框架 http://ionicframework.com/
14 | 涉及技术 ionic 7、angular17、capacitor5
15 |
16 | # 其他说明
17 | 本项目版本中提供的图片、音频及其他资源由原作者或点灯科技所有,不可用于其他项目
--------------------------------------------------------------------------------
/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
3 |
4 | const routes: Routes = [
5 | { path: '', redirectTo: 'view/home', pathMatch: 'full' },
6 | ];
7 |
8 | @NgModule({
9 | imports: [
10 | RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
11 | ],
12 | exports: [RouterModule]
13 | })
14 | export class AppRoutingModule { }
15 |
--------------------------------------------------------------------------------
/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |