├── .eslintrc.json ├── .github ├── ISSUE_TEMPLATE │ ├── BugReport.md │ └── Enhancement.md ├── auto-merge.yml ├── dependabot.yml └── workflows │ ├── dependabot-auto-merge.yml │ ├── npmpublish.yml │ └── test-and-release.yml ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── admin ├── admin.d.ts ├── doc-md │ ├── img │ │ ├── check_box-24px.svg │ │ ├── done_all-24px.svg │ │ ├── start_dropdown-ani.gif │ │ ├── start_open-dialog.png │ │ ├── start_show-explanation.gif │ │ ├── start_states-astro.png │ │ ├── start_states-options-motion.png │ │ ├── start_states-target-devices.png │ │ ├── start_states-test.png │ │ ├── table-zones_select-target-devices-overwrite.gif │ │ ├── timelapse-24px.svg │ │ └── timer-24px.svg │ ├── readme.txt │ ├── start_de.md │ ├── start_en.md │ ├── table-conditions_de.md │ ├── table-conditions_en.md │ ├── table-execution_de.md │ ├── table-execution_en.md │ ├── table-target-devices_de.md │ ├── table-target-devices_en.md │ ├── table-target-enums_de.md │ ├── table-target-enums_en.md │ ├── table-target-url_de.md │ ├── table-target-url_en.md │ ├── table-trigger-devices_de.md │ ├── table-trigger-devices_en.md │ ├── table-trigger-motion_de.md │ ├── table-trigger-motion_en.md │ ├── table-trigger-times_de.md │ ├── table-trigger-times_en.md │ ├── table-zones_de.md │ ├── table-zones_en.md │ ├── table-zones_select-targets_de.md │ └── table-zones_select-targets_en.md ├── fancytree │ └── skin-lion │ │ ├── icons-rtl.gif │ │ ├── icons.gif │ │ ├── loading.gif │ │ ├── ui.fancytree.min.css │ │ ├── vline-rtl.gif │ │ └── vline.gif ├── i18n │ ├── de │ │ └── translations.json │ ├── en │ │ └── translations.json │ ├── es │ │ └── translations.json │ ├── fr │ │ └── translations.json │ ├── it │ │ └── translations.json │ ├── nl │ │ └── translations.json │ ├── pl │ │ └── translations.json │ ├── pt │ │ └── translations.json │ ├── ru │ │ └── translations.json │ └── zh-cn │ │ └── translations.json ├── icons │ ├── home-automation.png │ ├── home-automation.svg │ └── home-automation_source.txt ├── img │ ├── info-big.png │ ├── info-big.png_README.txt │ ├── option-screenshots │ │ ├── tab-conditions.png │ │ ├── tab-further-options.png │ │ ├── tab-start.png │ │ ├── tab-target-devices.png │ │ ├── tab-triggers-motion.png │ │ ├── tab-triggers-other.png │ │ ├── tab-triggers-time.png │ │ ├── tab-zones-execution.png │ │ └── tab-zones.png │ ├── sc_always.png │ ├── select-target-devices-overwrite.gif │ ├── smartControl_options1.gif │ ├── smartControl_options_dropdown.gif │ └── smartControl_options_dropdown_2.gif ├── index_m.html ├── index_m.js ├── smartcontrol-banner.png ├── smartcontrol.png ├── style.css ├── tsconfig.json ├── words.js └── zero-md │ ├── readme.txt │ ├── webcomponents-loader.min.js │ └── zero-md.min.js.js ├── gulpfile.js ├── io-package.json ├── lib ├── adapter-config.d.ts ├── constants.js ├── helper.js ├── tools.js └── trigger-class.js ├── main.js ├── main.test.js ├── package-lock.json ├── package.json ├── test ├── integration.js ├── mocha.custom.opts ├── mocha.setup.js ├── package.js ├── tsconfig.json └── unit.js └── tsconfig.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "es6": true, 4 | "node": true, 5 | "mocha": true 6 | }, 7 | "extends": "eslint:recommended", 8 | "rules": { 9 | "indent": [ 10 | "error", 11 | 4, 12 | { 13 | "SwitchCase": 1 14 | } 15 | ], 16 | "no-console": "off", 17 | "no-var": "error", 18 | "prefer-const": "error", 19 | "quotes": [ 20 | "error", 21 | "single", 22 | { 23 | "avoidEscape": true, 24 | "allowTemplateLiterals": true 25 | } 26 | ], 27 | "semi": [ 28 | "error", 29 | "always" 30 | ] 31 | }, 32 | "parserOptions": { 33 | "ecmaVersion": 2018 34 | } 35 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/BugReport.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Something is not working as it should 4 | title: '' 5 | labels: 'bug' 6 | assignees: 'Mic-M' 7 | --- 8 | 9 | **!!! Before you start !!!** 10 | 1. Verify if there is not already an issue requesting the same 11 | 2. Is this really a bug of current code or an enhancement (feature) request ? 12 | 13 | **Describe the bug** 14 | A clear and concise description of what the bug is. 15 | 16 | **To Reproduce** 17 | Steps to reproduce the behavior: 18 | 1. Go to '...' 19 | 2. Click on '...' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Screenshots & Log files** 27 | If applicable, add screenshots and log files to help explain your problem. 28 | 29 | **Versions:** 30 | - Adapter version: 31 | - JS-Controller version: 32 | - Node version: 33 | - Operating system: 34 | 35 | **Additional context** 36 | Add any other context about the problem here. 37 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Enhancement.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Enhancement Request 3 | about: Request new functionality 4 | title: '' 5 | labels: 'enhancement' 6 | assignees: 'Mic-M' 7 | --- 8 | 9 | **!!! Before you start !!!!** 10 | Verify if there is not already an issue requesting the same Enhancement. 11 | 12 | **Describe desired Enhancement !** 13 | A clear description of the desired functionality 14 | 15 | **Why should we put effort in it ?** 16 | Please add some additional information why this Enhancement should be integrated 17 | 18 | **Additional context** 19 | Add any other context about the request here. 20 | -------------------------------------------------------------------------------- /.github/auto-merge.yml: -------------------------------------------------------------------------------- 1 | # Configure here which dependency updates should be merged automatically. 2 | # The recommended configuration is the following: 3 | - match: 4 | # Only merge patches for production dependencies 5 | dependency_type: production 6 | update_type: "semver:patch" 7 | - match: 8 | # Except for security fixes, here we allow minor patches 9 | dependency_type: production 10 | update_type: "security:minor" 11 | - match: 12 | # and development dependencies can have a minor update, too 13 | dependency_type: development 14 | update_type: "semver:minor" 15 | 16 | # The syntax is based on the legacy dependabot v1 automerged_updates syntax, see: 17 | # https://dependabot.com/docs/config-file/#automerged_updates 18 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: monthly 7 | time: "04:00" 8 | timezone: Europe/Berlin 9 | open-pull-requests-limit: 20 10 | assignees: 11 | - Mic-M 12 | versioning-strategy: increase 13 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-auto-merge.yml: -------------------------------------------------------------------------------- 1 | # Automatically merge Dependabot PRs when version comparison is within the range 2 | # that is configured in .github/auto-merge.yml 3 | 4 | name: Auto-Merge Dependabot PRs 5 | 6 | on: 7 | pull_request: 8 | 9 | jobs: 10 | auto-merge: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout code 14 | uses: actions/checkout@v2 15 | 16 | - name: Check if PR should be auto-merged 17 | uses: ahmadnassri/action-dependabot-auto-merge@v2 18 | with: 19 | # This must be a personal access token with push access 20 | github-token: ${{ secrets.AUTO_MERGE_TOKEN }} 21 | # By default, squash and merge, so Github chooses nice commit messages 22 | command: squash and merge 23 | -------------------------------------------------------------------------------- /.github/workflows/npmpublish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | release: 5 | types: [created] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v1 12 | - uses: actions/setup-node@v1 13 | with: 14 | node-version: 12 15 | - run: npm i 16 | - run: npm test 17 | 18 | publish-npm: 19 | needs: build 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v1 23 | - uses: actions/setup-node@v1 24 | with: 25 | node-version: 12 26 | registry-url: https://registry.npmjs.org/ 27 | - run: npm i 28 | - run: npm publish 29 | env: 30 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} 31 | -------------------------------------------------------------------------------- /.github/workflows/test-and-release.yml: -------------------------------------------------------------------------------- 1 | name: Test and Release 2 | 3 | # Run this job on all pushes and pull requests 4 | # as well as tags with a semantic version 5 | on: 6 | push: 7 | branches: 8 | - "*" 9 | tags: 10 | # normal versions 11 | - "v[0-9]+.[0-9]+.[0-9]+" 12 | # pre-releases 13 | - "v[0-9]+.[0-9]+.[0-9]+-**" 14 | pull_request: {} 15 | 16 | jobs: 17 | # Performs quick checks before the expensive test runs 18 | check-and-lint: 19 | if: contains(github.event.head_commit.message, '[skip ci]') == false 20 | 21 | runs-on: ubuntu-latest 22 | 23 | strategy: 24 | matrix: 25 | node-version: [14.x] 26 | 27 | steps: 28 | - name: Checkout code 29 | uses: actions/checkout@v2 30 | 31 | - name: Use Node.js ${{ matrix.node-version }} 32 | uses: actions/setup-node@v1 33 | with: 34 | node-version: ${{ matrix.node-version }} 35 | 36 | - name: Install Dependencies 37 | run: npm ci 38 | 39 | - name: Lint source code 40 | run: npm run lint 41 | - name: Test package files 42 | run: npm run test:package 43 | 44 | # Runs adapter tests on all supported node versions and OSes 45 | adapter-tests: 46 | if: contains(github.event.head_commit.message, '[skip ci]') == false 47 | 48 | needs: [check-and-lint] 49 | 50 | runs-on: ${{ matrix.os }} 51 | strategy: 52 | matrix: 53 | node-version: [10.x, 12.x, 14.x] 54 | os: [ubuntu-latest, windows-latest, macos-latest] 55 | 56 | steps: 57 | - name: Checkout code 58 | uses: actions/checkout@v2 59 | 60 | - name: Use Node.js ${{ matrix.node-version }} 61 | uses: actions/setup-node@v1 62 | with: 63 | node-version: ${{ matrix.node-version }} 64 | 65 | - name: Install Dependencies 66 | run: npm ci 67 | 68 | - name: Run unit tests 69 | run: npm run test:unit 70 | 71 | - name: Run integration tests (unix only) 72 | if: startsWith(runner.OS, 'windows') == false 73 | run: DEBUG=testing:* npm run test:integration 74 | 75 | - name: Run integration tests (windows only) 76 | if: startsWith(runner.OS, 'windows') 77 | run: set DEBUG=testing:* & npm run test:integration 78 | 79 | # TODO: To enable automatic npm releases, create a token on npmjs.org 80 | # Enter this token as a GitHub secret (with name NPM_TOKEN) in the repository options 81 | # Then uncomment the following block: 82 | 83 | # # Deploys the final package to NPM 84 | # deploy: 85 | # needs: [adapter-tests] 86 | # 87 | # # Trigger this step only when a commit on any branch is tagged with a version number 88 | # if: | 89 | # contains(github.event.head_commit.message, '[skip ci]') == false && 90 | # github.event_name == 'push' && 91 | # startsWith(github.ref, 'refs/tags/v') 92 | # 93 | # runs-on: ubuntu-latest 94 | # strategy: 95 | # matrix: 96 | # node-version: [14.x] 97 | # 98 | # steps: 99 | # - name: Checkout code 100 | # uses: actions/checkout@v2 101 | # 102 | # - name: Use Node.js ${{ matrix.node-version }} 103 | # uses: actions/setup-node@v1 104 | # with: 105 | # node-version: ${{ matrix.node-version }} 106 | # 107 | # - name: Extract the version and commit body from the tag 108 | # id: extract_release 109 | # # The body may be multiline, therefore newlines and % need to be escaped 110 | # run: | 111 | # VERSION="${{ github.ref }}" 112 | # VERSION=${VERSION##*/v} 113 | # echo "::set-output name=VERSION::$VERSION" 114 | # BODY=$(git show -s --format=%b) 115 | # BODY="${BODY//'%'/'%25'}" 116 | # BODY="${BODY//$'\n'/'%0A'}" 117 | # BODY="${BODY//$'\r'/'%0D'}" 118 | # echo "::set-output name=BODY::$BODY" 119 | # 120 | # - name: Publish package to npm 121 | # run: | 122 | # npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} 123 | # npm whoami 124 | # npm publish 125 | # 126 | # - name: Create Github Release 127 | # uses: actions/create-release@v1 128 | # env: 129 | # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 130 | # with: 131 | # tag_name: ${{ github.ref }} 132 | # release_name: Release v${{ steps.extract_release.outputs.VERSION }} 133 | # draft: false 134 | # # Prerelease versions create prereleases on Github 135 | # prerelease: ${{ contains(steps.extract_release.outputs.VERSION, '-') }} 136 | # body: ${{ steps.extract_release.outputs.BODY }} 137 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .git 2 | .idea 3 | .vscode/ 4 | *.code-workspace 5 | node_modules 6 | nbproject 7 | iob_npm.done 8 | admin/i18n/.i18n-editor-metadata 9 | 10 | # npm package files 11 | iobroker.*.tgz 12 | 13 | Thumbs.db 14 | 15 | # i18n intermediate files 16 | admin/i18n/flat.txt 17 | admin/i18n/*/flat.txt 18 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .git 2 | .idea 3 | node_modules/ 4 | nbproject/ 5 | .vs*/ 6 | *.code-workspace 7 | Thumbs.db 8 | gulpfile.js 9 | iob_npm.done 10 | 11 | # CI test files 12 | test/ 13 | travis/ 14 | .travis.yml 15 | appveyor.yml 16 | .travis.yaml 17 | appveyor.yaml 18 | 19 | # Type checking configuration 20 | tsconfig.json 21 | tsconfig.*.json 22 | 23 | # ESLint configuration 24 | .eslintrc.json 25 | .eslintrc.js 26 | 27 | # npm package files 28 | iobroker.*.tgz 29 | package-lock.json 30 | 31 | # i18n intermediate files 32 | admin/i18n 33 | 34 | # maintenance scripts 35 | maintenance/** -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Mic-M 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /admin/admin.d.ts: -------------------------------------------------------------------------------- 1 | declare let systemDictionary: Record>; 2 | declare var $: any; // for jQuerys like $('.collapsible').collapsible() 3 | declare function values2table(any, any, any, any): any; // Quick and dirty 4 | -------------------------------------------------------------------------------- /admin/doc-md/img/check_box-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/doc-md/img/done_all-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/doc-md/img/start_dropdown-ani.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/start_dropdown-ani.gif -------------------------------------------------------------------------------- /admin/doc-md/img/start_open-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/start_open-dialog.png -------------------------------------------------------------------------------- /admin/doc-md/img/start_show-explanation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/start_show-explanation.gif -------------------------------------------------------------------------------- /admin/doc-md/img/start_states-astro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/start_states-astro.png -------------------------------------------------------------------------------- /admin/doc-md/img/start_states-options-motion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/start_states-options-motion.png -------------------------------------------------------------------------------- /admin/doc-md/img/start_states-target-devices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/start_states-target-devices.png -------------------------------------------------------------------------------- /admin/doc-md/img/start_states-test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/start_states-test.png -------------------------------------------------------------------------------- /admin/doc-md/img/table-zones_select-target-devices-overwrite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/doc-md/img/table-zones_select-target-devices-overwrite.gif -------------------------------------------------------------------------------- /admin/doc-md/img/timelapse-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/doc-md/img/timer-24px.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/doc-md/readme.txt: -------------------------------------------------------------------------------- 1 | SmartControl Adapter 2 | 3 | This folder expects Markdown files, which will be added to index_m.html by using https://github.com/zerodevx/zero-md 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /admin/doc-md/start_de.md: -------------------------------------------------------------------------------- 1 | 2 |
3 | Über diesen Adapter 4 | 5 | 6 |
In unserer Heim-Automation haben wir ja diverse **Auslöser**, z.B. 7 | * Bewegungsmelder im Flur löst aus, 8 | * ein Wandschalter wird gedrückt, 9 | * eine bestimmte Zeit tritt ein (etwa 30 Minuten nach Sonnenuntergang oder Mo-Fr um 7:00) 10 | 11 | Gleichzeitig möchten wir oftmals, dass dabei zusätzliche Bedingungen (nicht) zutreffen (z.B. 'Heute ist Feiertag', 'Wohnzimmer-Fenster ist offen', Helligkeit ist größer 100 Lux, etc.). 12 | 13 | Sobald also was auslöst, und optional Bedingungen zutreffen oder nicht zutreffen, sollen Ziel-Datenpunkte (d.h. **Zielgeräte**) geschaltet werden. 14 | Außerdem soll etwa nach ausgelöstem Bewegungungsmelder ein Timer laufen, der (sobald keine Bewegung mehr) nach der eingestellten Anzahl Sekunden die Zielgeräte wieder abschaltet. 15 | 16 | Smart Control kümmert sich entsprechend darum und führt alles gemäß IFTTT aus. 17 | 18 | Ziel ist, hiermit viele JavaScripts und Blockly abzulösen und eine sehr anwenderfreundliche Möglichkeit für diverse Szenarien zu bieten. 19 | 20 |
21 | 22 | 23 |
24 | Wie am besten starten? 25 | 26 | 27 |
Du gehst einfach durch die einzelnen Options-Seiten (obige Reiter) wie folgt durch: 28 | 29 | | Reiter | Was machen | 30 | |--------|------------| 31 | |1. ZIELGERÄTE | Hier trägst du all deine zu schaltenden Ziel-Geräte ein, also Lichter, Radio, usw. Du kannst dort in der ersten Tabelle einzelne Geräte anlegen, und/oder in der zweiten Tabelle auch sogenannte "Aufzählungen" (Enums) nutzen. [Link zur Dokumentation: Aufzählungen](https://www.iobroker.net/#de/documentation/admin/enums.md) | 32 | |2. ZUSÄTZLICHE BEDINGUNGEN | *Optional*: Hier trägst du zusätzliche Bedingungen ein, die (nicht) zutreffen sollen, z.B.: keiner anwesend, Feiertag heute, usw. | 33 | |3. AUSLÖSER |Hier trägst du Auslöser ein, also z.B. Bewegungsmelder, Wandschalter, etc., sowie ggf. zeitabhängige Auslöser (z.B. jeden Tag um 8:00 Uhr). | 34 | |4. ZONEN |Hier führst du alles zusammen, in dem du alle "Zonen" definierst (z.B. Badezimmer 1.OG, Kaffeeecke, usw.) und Auslöser und zu schaltende Zielgeräte zuweist, sowie auch weitere Bedingungen zur Ausführung definierst. | 35 | | WEITERE OPTIONEN | Hier kannst du weitere Adapter-Optionen einstellen. | 36 | 37 | ### Durch Klicken auf die jeweils dunkelblau hinterlegte Überschrift erhältst du weitere Infos zu den Einstellungungen, Beispiel: 38 | 39 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_show-explanation.gif?raw=true) 40 | 41 | 42 | 43 | ### Hinweis: Auswahl-Felder (Drop-Down) in Tabellen 44 | 45 | Auswahlfelder (Drop-Down-Menüs), die mehrere selektierbare Werte bieten, müssen "an der Seite" angeklickt werden. Dies ist ein Issue des ioBroker-Admin-Adapters, und nicht von Smart Control. [Das Issue ist gemeldet und adressiert](https://github.com/ioBroker/ioBroker.admin/issues/590) im ioBroker Admin Adapter, und wird mit dem nächsten Update kommen. 46 | 47 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_dropdown-ani.gif?raw=true) 48 | 49 | 50 |
Einfache Abhilfe: Klicke einfach auf den blauen Button links daneben, dann bekommst du einen viel besseren Auswahl-Dialog: 51 | 52 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_open-dialog.png?raw=true) 53 | 54 | 55 |
56 | 57 | 58 |
59 | Adapter-Datenpunkte 60 | 61 | 62 | ### smartcontrol.x.info.astroTimes 63 | 64 | Hier findest du alle aktuellen Astrozeiten deiner Geo-Koordinaten, die du in den ioBroker-Admin-Optionen (Schraubschlüssel oben links) eingestellt hast. 65 | 66 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-astro.png?raw=true) 67 | 68 | ### smartcontrol.x.info.log.zoneActivations.json 69 | 70 | Mit `smartcontrol.x.info.log.zoneActivations.json` stellt der Adapter einen Datenpunkt bereit, der, sobald eine Zone erfolgreich ausgeführt wurde, Informationen hierzu als JSON zur Verfügung stellt (dabei erscheint der neueste Eintrag jeweils oben). In den Adapter-Optionen, im Reiter "WEITERE OPTIONEN", kannst du unter "Logging" die Anzahl der JSON-Einträge einstellen. 71 | 72 | ### smartcontrol.x.options 73 | 74 | Hier kannst du für jede Optionen-Tabelle einzelne Zeilen an- und abschalten (Datenpunkt `active`). 75 |
Zudem kannst du für alle Bewegungsmelder die Zeit in Sekunden (Datenpunkt `duration`) und die Grenze für die Helligkeit (Datenpunkt `briThreshold`) ändern. 76 | 77 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-options-motion.png?raw=true) 78 | 79 | 80 | **Bitte beachten:** Eine Änderung dieser Datenpunkte bewirkt einen Neustart der Adapter-Instanz, damit die Änderungen greifen können. 81 | 82 | ### smartcontrol.x.targetDevices 83 | 84 | Für jede Tabellenzeile unter "1. ZIELGERÄTE" fügt der Adapter hier verknüpfte Datenpunkte hinzu. Wenn du diese Datenpunkte änderst, wird der ursprüngliche Ziel-Datenpunkt entsprechend geändert, und umgekehrt. 85 | 86 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-target-devices.png?raw=true) 87 | 88 | 89 | ### smartcontrol.x.Test 90 | 91 | Hier stehen dir Datenpunkte rein zum Testen des Adapters zur Verfügung. Diese Datenpunkte stellen keinerlei Funktionen oder Features zur Verfügung und dienen eben nur zum Testen dieses Adapters. Nach der ersten Installation einer Instanz dieses Adapters sind die Adapteroptionen mit einigen dieser Datenpunkte vorbelegt. Beginne z.B. mit dem Testen, indem du z.B. einen Auslöser-Datenpunkt aktivierst, also z.B. `smartcontrol.0.Test.trigger.Bathroom_motion` auf `true` setzt. Dann prüfst du, ob etwas ausgelöst wird (basierend auf den Einstellungen in "4. ZONEN" etc.). 92 |
Das ioBroker-Log (ioBroker Admin > Log) liefert detaillierte Informationen. Für das Debugging setzt du bitte den Log-Level der Adapterinstanz auf 'debug', damit du viel mehr Informationen im Log erhältst. 93 | 94 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-test.png?raw=true) 95 | 96 |
97 | 98 | 99 |
100 | Fragen / Probleme / Verbesserungsvorschläge 101 | 102 | 103 | ### Fragen zur Bedienung, etc. 104 | 105 | Frage am besten im ioBroker-Forum, idealerweise referenzierst du @Mic so dass ich als Entwickler eine Meldung bekomme. Aktueller Forum-Thread für diesen Adapter ist hier: [ioBroker-Forum: Smart Control](https://forum.iobroker.net/topic/36728/). 106 | 107 | ### Fehler / Bug 108 | 109 | Prüfe zunächst das ioBroker Log auf sämtliche Hinweise und gehe diesen entsprechend nach. Falls du nicht sicher bist, ob du alles richtig gemacht hast in den Adapter-Einstellungen, siehe oben -> *Fragen zur Bedienung, etc.*. 110 |
Falls du wirklich einen durch diesen Adapter verursachten Fehler hast: 111 | 1. Gehe zu [GitHub: Smart Control Issues](https://github.com/Mic-M/ioBroker.smartcontrol/issues) und erstelle ein neues Issue. 112 | 2. Beschreibe **ausführlich** die Problematik und Schritt für Schritt, was du getan hast als/bevor der Fehler auftrat. Setze außerdem das Log Level des Adapters auf "Debug", reproduziere den Fehler und stelle die Logausgabe in Code-Tags im Issue ein. ioBroker schneidet Log-Zeilen ab, daher gehst du dazu bitte direkt ins Logfile (durch Klicken auf "Download Log"). 113 | 3. Füge Screenshots hinzu, soweit möglicherweise hilfreich für mich als Entwickler 114 | 4. Füge den Adapter-Optionen-Export hinzu, sofern möglicherweise sinnvoll zur Fehlersuche für mich: Ganz oben rechts in den SmartControl-Adapter-Optionen den blauen Button "Pfeil nach unten" anklicken. 115 | 116 | ### Erweiterungungswunsch (neues Feature) 117 | 118 | Mach am besten ein neues Github-Issue auf unter [GitHub: Smart Control Issues](https://github.com/Mic-M/ioBroker.smartcontrol/issues), in Deutsch oder Englisch. Wenn Deutsch deine Muttersprache ist, dann schreibe auch bitte in Deutsch und nicht Englisch auf Github. Das macht unsere Kommunikation deutlich einfacher und du brauchst dir keinen abbrechen :-) Nicht deutsch sprechende User können das dennoch dank Google Translate o.ä. super mitlesen und sich einbringen. 119 | 120 | 121 |
122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /admin/doc-md/start_en.md: -------------------------------------------------------------------------------- 1 | 2 |
3 | About this adapter 4 | 5 | 6 | In our home automation we have several **triggers**, e.g. 7 | * motion sensor in the corridor triggers, 8 | * a wall switch is pressed, 9 | * a certain time occurs (e.g. 30 minutes after sunset or Mon-Fri at 7:00) 10 | 11 | In addition, we often want that additional conditions are (not) met (e.g. 'Today is a holiday', 'living room window is open', brightness is greater than 100 lux, etc.). 12 | 13 | So as soon as something triggers and optionally conditions apply or do not apply, target states (i.e. **Target devices**) should be switched. 14 | In addition, a timer should run after a motion sensor is triggered, which (as soon as there is no more motion) switches off the target devices after the set number of seconds. 15 | 16 | Smart Control takes care of this and executes everything according to IFTTT. 17 | 18 | The goal is to replace many JavaScript and Blockly's and to provide a very user-friendly environment for various scenarios. 19 | 20 |
21 | 22 | 23 |
24 | How to start? 25 | 26 | 27 | You simply go through the individual options pages (tabs) as follows: 28 | 29 | | Tab | What to do | 30 | |--------|------------| 31 | |1. TARGET DEVICES | Here you enter all your target devices to be switched, e.g. lights, radio, etc. You can enter single device states in the first table, and/or use so-called enumerations ("enums") in the second table. [Documentation link : Enumerations](https://www.iobroker.net/#en/documentation/admin/enums.md) | 32 | |2. ADDITIONAL CONDITIONS | *optional*: Here you enter additional conditions that should (not) apply, e.g.: nobody present, holiday today, etc. | 33 | |3. TRIGGERS |Here you enter triggers, e.g. motion sensors, wall switches, etc., as well as any time-dependent triggers (e.g. every day at 8:00 am). | 34 | |4 ZONES |Here you bring everything together by defining all "zones" (e.g. bathroom 1st floor, coffee corner, etc.) and assigning triggers and target devices to be switched, as well as defining further conditions for execution. | 35 | | FURTHER OPTIONS | Here you can set additional adapter options. | 36 | 37 | ### By clicking on the dark blue highlighted headline you will get more information about the settings, example: 38 | 39 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_show-explanation.gif?raw=true) 40 | 41 | 42 | 43 | ### Note: Drop-down fields in tables 44 | 45 | Drop-down fields that offer several selectable values must be clicked "on the side". This is an issue of the ioBroker admin adapter, not of Smart Control. [The issue is reported and addressed](https://github.com/ioBroker/ioBroker.admin/issues/590) in the ioBroker admin adapter, and will come with the next update. 46 | 47 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_dropdown-ani.gif?raw=true) 48 | 49 | 50 |
Simple remedy: Just click on the blue button to the left of it and you will get a much better selection dialog: 51 | 52 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_open-dialog.png?raw=true) 53 | 54 | 55 |
56 | 57 | 58 |
59 | Adapter states 60 | 61 | 62 | ### smartcontrol.x.info.astroTimes 63 | 64 | Here you see all current astro times of your geo-coordinates, which you have set in the ioBroker-Admin-Options (wrench top left). 65 | 66 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-astro.png?raw=true) 67 | 68 | 69 | ### smartcontrol.x.info.log.zoneActivations.json 70 | 71 | With smartcontrol.x.info.log.zoneActivations.json the adapter provides a state, which provides information as JSON once a a zone has been successfully executed (the newest entry appears at the top). In the adapter options, tab "FURTHER OPTIONS" -> "Logging", you can set the number of JSON entries accordingly. 72 | 73 | 74 | ### smartcontrol.x.options 75 | 76 | Here you can switch on and off individual rows for each options table (state 'active'). 77 |
In addition you can change the time in seconds (state 'duration') and the brightness threshold (state 'briThreshold') for all motion sensors. 78 | 79 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-options-motion.png?raw=true) 80 | 81 | 82 | **Please note:** A change of these states causes a restart of the adapter instance so that the changes can take effect. 83 | 84 | ### smartcontrol.x.targetDevices 85 | 86 | For each table row under "1. TARGET DEVICES" the adapter adds linked states here. If you change these states, the original target state is changed accordingly, and vice versa. 87 | 88 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-target-devices.png?raw=true) 89 | 90 | 91 | ### smartcontrol.x.Test 92 | 93 | Here you have states purely for testing the adapter. These states do not provide any functions or features and are only used to test the adapter. After the first installation of an instance of this adapter, the adapter options are preset with some of these states. For example, start testing by activating a trigger state, e.g. set 'smartcontrol.0.Test.trigger.Bathroom_motion' to 'true'. Then you check if something is triggered (based on the settings in '4. ZONES' etc.). 94 |
The ioBroker Log (ioBroker Admin > Log) provides detailed information. For debugging, please set the log level of the adapter instance to 'debug' to get much more information in the log. 95 | 96 | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/start_states-test.png?raw=true) 97 | 98 |
99 | 100 | 101 |
102 | Questions / problems / suggestions for improvement 103 | 104 | 105 | ### Questions about usage, etc. 106 | 107 | The best way is to ask a question in the ioBroker forum, ideally you reference @Mic so that I, as the developer, get a notification. Current forum thread for this adapter is here: [ioBroker-Forum: Smart Control](https://forum.iobroker.net/topic/36728/). Feel free to write in English or German. 108 | 109 | ### Error / Bug 110 | 111 | First check the ioBroker log for all hints and follow them accordingly. If you are not sure if you have done everything correctly in the adapter settings, see above -> *Questions about usage, etc.*. 112 |
If you really have an error caused by this adapter: 113 | 1. go to [GitHub: Smart Control Issues](https://github.com/Mic-M/ioBroker.smartcontrol/issues) and open a new issue. 114 | 2. describe **in detail** the issue and step-by-step what you were doing when/before the bug occurred. Also set the log level of the adapter to "debug", reproduce the error and set the log output in code tags in the issue. ioBroker cuts off log lines, so please go directly to the log file (by clicking on "Download Log"). 115 | 3. add screenshots, if likely helpful for me as developer 116 | 4. add the adapter options export, if possibly useful for troubleshooting for me, by clicking on the blue "arrow down" button in the top right corner of the SmartControl adapter options 117 | 118 | ### Enhancement/feature requests 119 | 120 | Open a new Github issue at [GitHub: Smart Control Issues](https://github.com/Mic-M/ioBroker.smartcontrol/issues), in English or German. 121 | 122 | 123 |
124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /admin/doc-md/table-conditions_de.md: -------------------------------------------------------------------------------- 1 | Diese Tabelle ist optional: 2 |
Hier trägst du zusätzliche Bedingungen ein, die (nicht) zutreffen sollen, z.B.: Jemand ist anwesend, Keiner ist anwesend, Heute ist Feiertag, etc. Diese Bedingungen kannst du dann in den entsprechenden anderen Optionen-Tabellen auswählen. 3 | 4 | | Spalte | Pflichtfeld | Beschreibung | 5 | |----------|:------------:|-------| 6 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 7 | | Name der Bedingung | Ja | Hier beliebigen Namen deiner Bedingung eintragen, z.B. 'Feiertag Heute'. | 8 | | Datenpunkt der Bedingung | Ja | Datenpunkt für diese Bedingung, wie `javascript.0.Holiday.isHolidayToday`. | 9 | | DP-Wert | Ja | Datenpunkt-Wert der Bedingung, wenn sie zutreffen soll. Du kannst `true`, `false`, Nummern wie `144`, or Strings wie `Oma schläft jetzt` verwenden. Sämtliche Leerzeichen und Anführungszeichen (wie `"`) am Anfang und Ende werden automatisch entfernt.
**Hinweis**: Du kannst auch Vergleichsoperatoren vor Nummern hinzufügen, also `<`, `>`, `>=` und `<=`, dann wird auf diese geprüft. | 10 | 11 | -------------------------------------------------------------------------------- /admin/doc-md/table-conditions_en.md: -------------------------------------------------------------------------------- 1 | This table is optional: 2 |
Here you enter additional conditions that should (not) apply, e.g: Someone is present, No one is present, Today is a holiday, etc. You can then select these conditions in the corresponding other option tables. 3 | 4 | | Column | Mandatory | Description | 5 | |----------|:------------:|-------| 6 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 7 | | Name of condition | Yes | Enter any name of your condition here, e.g. 'Holiday today'. | 8 | | State of condition | Yes | State for this condition, e.g. `javascript.0.Holiday.isHolidayToday`. | 9 | | State value | Yes | States value of the condition, if it should apply. You can use `true`, `false`, numbers like `144`, or strings. All spaces and quotation marks (like `"`) at the beginning and end are automatically removed.
**Note**: You can also use comparison operators `<`, `>`, `>=` and `<=` before numbers, to check for these. | 10 | 11 | -------------------------------------------------------------------------------- /admin/doc-md/table-execution_de.md: -------------------------------------------------------------------------------- 1 | Du kannst **Immer ausführen** selektieren, dann wird einfach immer ausgeführt, sofern etwaige zuvor definierte Bedingungen zutreffen.
Möchtest du jedoch weitere Bedingungen definieren, wann die in der Zone definierten Zielgeräte angeschaltet werden, sobald ein Auslöser auslöst, deaktivierst du diese Option.
Dann erscheint eine Tabelle mit folgenden Optionen: 2 | 3 | | Spalte | Pflichtfeld | Beschreibung | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 6 | | Start/Ende | Ja | Sobald ein Auslöser auslöst, muss die aktuelle Uhrzeit innerhalb dieses Zeitraums sein, damit die Zielgeräte geschalten werden.
Du kannst hier eine Uhrzeit in Stunde/Minute, wie `08:25` oder `23:30` eingeben. Außerdem kannst du einen Astro-Namen wie `sunset` eingeben und dabei einen Versatz ("Offset") in Minuten hinzufügen, z.B. `goldenHourEnd+30` oder `sunset-60`.
Die aktuellen Astrozeiten findest du übrigens als Info-Datenpunkte in diesem Adapter: `smartcontrol.x.info.astroTimes`.
Eine Startzeit von z.B. `sunset` und eine Endzeit von z.B. `03:00` (also über Mitternacht hinaus) ist ebenso möglich. | 7 | | Mo-So | Ja | Ziele werden geschaltet, wenn diese Wochentage zutreffen. | 8 | | Zusätzliche Bedingungen | Nein | Hier kannst du zusätzliche Bedingungen eintragen, die zusätzlich zutreffen müssen, z.B.: Jemand ist anwesend, Heute ist Feiertag, Oma schläft, usw. | 9 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | Nein | Für *Zusätzliche Bedingungen*: Wenn aktiviert, müssen alle Bedingungen zutreffen ('und'). Wenn deaktiviert, reicht es, wenn eine der Bedingungen zutrifft.
Falls du nur eine Bedingung auswählst, ist es egal, ob du das aktivierst oder nicht. | 10 | | Nie einschalten wenn... | Nein | Hier kannst du zusätzliche Bedingungen eintragen, die nie zutreffen dürfen, z.B.: Keiner zu Hause, Radio läuft, usw. | 11 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | Nein | Für *Nie einschalten wenn...*: Wenn aktiviert, müssen alle Bedingungen zutreffen ('und'). Wenn deaktiviert, reicht es, wenn eine der Bedingungen zutrifft.
Falls du nur eine Bedingung auswählst, ist es egal, ob du das aktivierst oder nicht. | 12 | 13 | -------------------------------------------------------------------------------- /admin/doc-md/table-execution_en.md: -------------------------------------------------------------------------------- 1 | You can select **Execute always**, then the zone will simply always execute if any previously defined conditions are met.
However, if you want to define more conditions, you should deactivate this option. Then a table with the following options will appear: 2 | 3 | | Column | Mandatory | Description | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 6 | | Name of zone | Yes | Any zone name. | 7 | | Start/End | Yes | As soon as a trigger triggers, the current time must be within this time period in order for the target devices to be switched.
You can enter a time in hours/minutes here, such as `08:25` or `23:30`. You can also enter an astro name like `sunset` and add an offset in minutes, e.g. `goldenHourEnd+30` or `sunset-60`.
The current astro times can be found as info states in this adapter: `smartcontrol.x.info.astroTimes`.
A start time of e.g. `sunset` and an end time of e.g. `03:00` (i.e. beyond midnight) is also possible. | 8 | | Mon-Sun | Yes | Targets are switched if these weekdays apply. | 9 | | Additional conditions | No | Here you can enter additional conditions that must be fulfilled additionally, e.g: Someone is present, today is a holiday, grandma is sleeping, etc. | 10 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | No | For *Additional conditions*: If activated, all conditions must apply ('and'). If disabled, it is enough if one of the conditions applies.
If you select only one condition, it doesn't matter if you enable it or not. | 11 | | Never switch on if... | No | Here you can enter additional conditions that must never apply, e.g: No one at home, radio on, etc. | 12 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | No | For *Never switch on if...*: If activated, all conditions must apply ('and'). If disabled, it is enough if one of the conditions applies.
If you select only one condition, it doesn't matter if you enable it or not. | 13 | -------------------------------------------------------------------------------- /admin/doc-md/table-target-devices_de.md: -------------------------------------------------------------------------------- 1 | Gib hier alle Zielgeräte ein, die Du schalten möchtest, sobald ein Auslöser aktiviert wird und die Bedingungen in den Zonen erfüllt sind. 2 | 3 | *Warum sind hier unterschiedliche Datenpunkte für das Ein- und Ausschalten?* 4 | Normalerweise sind diese gleich (Datenpunkt erwartet `true`/`false`) für das Ein-/Ausschalten, aber in bestimmten Fällen benötigen Benutzer einen anderen Datenpunkt und Datenpunkt-Wert, um ein Gerät ein- oder auszuschalten. Beispiel: `fully-tablet-control.0.device.tablet_bathroom.commands.screenOn` und `fully-tablet-control.0.device.tablet_bathroom.commands.screenOff`. 5 |
Du kannst auch Datenpunkte hinzufügen, die nicht boolean (`true`/`false`), sondern String oder Zahl sind. 6 | 7 | Für jede Tabellenzeile fügt dieser Adapter verknüpfte Datenpunkte zu `smartcontrol.x.targetDevices.xxx` hinzu. Wenn du diese Datenpunkte änderst, wird der ursprüngliche Ziel-Datenpunkt entsprechend geändert, und umgekehrt. 8 | 9 | | Spalte | Pflichtfeld | Beschreibung | 10 | |----------|:------------:|-------| 11 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 12 | | Geräte-Name | Ja | Name des Gerätes deiner Wahl. Verbotene Zeichen: ``[ ] * , ; ' " ` < > \ ?``

**Tipp** Nimm Punkte als Trenner und organisiere die Unterpunkte z.B. nach Räumen und Geräten, z.B. `Wohnzimmer.Lichter.Decke`, `Wohnzimmer.Lichter.Wand links`, etc. Damit werden dir in "4. ZONEN" die Zielgeräte dann als Ordner angezeigt: "Wohnzimmer > Lichter > Decke", etc. | 13 | | Datenpunkt zum einschalten | Ja | Datenpunkt des Zielgerätes zum Einschalten, sobald ein Auslöser auslöst und die Bedingungen in den Zonen zutreffen. | 14 | | Wert für 'an' | Ja | Datenpunkt-Wert, der in 'Datenpunkt zum einschalten' gesetzt wird. Du kannst `true`, `false`, Nummern wie `144`, or Strings wie `Schalte Radio an` verwenden. Sämtliche Leerzeichen und Anführungszeichen (wie `"`) am Anfang und Ende werden automatisch entfernt.

Der Wert kann unter "4. ZONEN", "Zu schaltende Zielgeräte" überschrieben werden.| 15 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/timelapse-24px.svg?raw=true)| Nein | **Verzögertes Einschalten des Zielgerätes (in Sekunden)**: Hiermit kannst du eine Verzögerung einstellen: erst nach dieser Anzahl an Sekunden wird das Zielgerät tatsächlich eingeschaltet.
Durch leer lassen oder `0` wird diese Option ignoriert. | 16 | | Prüfung deakiv. (an) | Nein | Vor dem Schalten wird immer geprüft, ob das Zielgerät bereits an ist lt. "Wert für 'an'". Wenn du diese Option aktivierst, erfolgt keine Überprüfung und es wird immer geschaltet. Use Case: z.B. ein Button als Datenpunkt. Siehe [Github Issue #5](https://github.com/Mic-M/ioBroker.smartcontrol/issues/5).| 17 | | Datenpunkt zum ausschalten | Ja | Datenpunkt des Zielgerätes zum Ausschalten, sobald ein Timeout erreicht wurde (z.B. keine Bewegung mehr und die Bewegungsmelder-Sekunden sind heruntergezählt auf 0) oder falls der Datenpunkt `smartcontrol.x.targetDevices.xxx.[Device Name]` geändert wurde.| 18 | | Wert für 'aus' | Ja | Datenpunkt-Wert, der in 'Datenpunkt zum ausschalten' gesetzt wird. Du kannst `true`, `false`, Nummern wie `144`, or Strings wie `Schalte Radio an` verwenden. Sämtliche Leerzeichen und Anführungszeichen (wie `"`) am Anfang und Ende werden automatisch entfernt.| 19 | | Prüfung deakiv. (aus) | Nein | Siehe *Prüfung deakiv. (an)* weiter oben, nur hier für das ausschalten des Gerätes.| -------------------------------------------------------------------------------- /admin/doc-md/table-target-devices_en.md: -------------------------------------------------------------------------------- 1 | Enter here all target devices you want to switch as soon as a trigger is activated and the conditions in the zones are met. 2 | 3 | *Why are there different states for switching on and off?* 4 | Normally these are the same (states expect `true`/`false`) for switching on/off, but in certain cases users may need a different state and state value to switch a device on or off. For example: fully-tablet-control.0.device.tablet_bathroom.commands.screenOn and fully-tablet-control.0.device.tablet_bathroom.commands.screenOff. 5 | You can also add states that are not boolean (`true`/`false`), but string or number. 6 | 7 | For each table row this adapter adds linked states to `smartcontrol.x.targetDevices.xxx`. If you change these states, the original target state is changed accordingly, and vice versa. 8 | 9 | | Column | Mandatory | Description | 10 | |----------|:------------:|-------| 11 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 12 | | Device name | Yes | Name of the device of your choice. Forbidden characters: ``[ ] * , ; ' " ` < > \ ?`` | 13 | | State to switch device on | Yes | States of the target device to switch on as soon as a trigger is triggered and the conditions in the zones are met. | 14 | | Value for 'on' | Yes | States value that is set in 'states to switch on'. You can use `true`, `false`, numbers like `144`, or strings like `Turn on radio`. All spaces and quotation marks (like `"`) at the beginning and end are automatically removed.

The value can be overwritten under "4. ZONES", "Target devices". | 15 | | Do not verify (on) | No | Before switching, it is always verified if the target device is already on according to "Value for 'on'". Activating this option disables this verification, and switching is always done. Use case: e.g. a button as a state. See [Github Issue #5](https://github.com/Mic-M/ioBroker.smartcontrol/issues/5). | 16 | | State to switch device off | Yes | states of the target device to switch off as soon as a timeout has been reached (e.g. no more motion and the motion sensor seconds have counted down to 0) or if the 'smartcontrol.x.targetDevices.xxx.[Device Name]` state has been changed. | 17 | | Value for 'off' | Yes | States value to be set in 'Switch off state'. You can use `true`, `false`, numbers like `144`, or strings like `turn radio on`. All spaces and quotation marks (like `"`) at the beginning and end are automatically removed.| 18 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/timelapse-24px.svg?raw=true)| Nein | **Delay for switching target device on (in seconds)** This allows you to set a delay: after this number of seconds the target device will actually be switched on.
Leave empty or set `0` to ignore this option. | 19 | | Do not verify (off) | No | See *Value for 'on'* above, bot for switching off, and not on. | 20 | 21 | 22 | -------------------------------------------------------------------------------- /admin/doc-md/table-target-enums_de.md: -------------------------------------------------------------------------------- 1 | Im Gegensatz zur oberen Tabelle kannst du hier sogenannte "Aufzählungen" (Enums) nutzen - [Link zur Dokumentation: Aufzählungen](https://www.iobroker.net/#de/documentation/admin/enums.md). 2 |
Du kannst hier in jeder Zeile jeweils eine "Funktion" (`enum.functions`) zuordnen, und dies bei Bedarf auf bestimmte Räume (`enum.rooms`) limitieren. Diese werden dann alle geschaltet, sobald ein Auslöser aktiviert wird und die Bedingungen in den Zonen erfüllt sind. 3 |
Bitte beachte, dass alle Datenpunkte, denen du die jeweilige Funktion zugeordnet hast, denselben Datentyp haben (also boolean - true/false, oder string), da `Wert für 'an'` und `Wert für 'aus'` für alle Datenpunkte gilt, denen die gewählte Funktion zugeordnet ist. Aber keine Sorge, der Adapter liefert im Log einen Fehler, falls deine Zuordnung nicht passt ;-) 4 | 5 | | Spalte | Pflichtfeld | Beschreibung | 6 | |----------|:------------:|-------| 7 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 8 | | Name | Ja | Name deiner Wahl. Verbotene Zeichen: ``[ ] * , ; ' " ` < > \ ?`` | 9 | | Funktions-Name (Aufzählungen) | Ja | Wähle hier die entsprechende Funktion der Aufzählungen aus ([hier sind Details dazu beschrieben](https://www.iobroker.net/#de/documentation/admin/enums.md)). Sobald eine Zone auslöst, in der du unter 'Zielgeräte' diese selektiert hast, werden alle Datenpunkte geschaltet, denen diese selektierte "Funktion" zugeordnet ist. | 10 | | Limitiert auf Räume | Nein | Hier kannst du optional auf bestimmte "Räume" limitieren (`enum.rooms`), d.h. falls ein oder mehrere Räume hier selektiert werden, wird nur geschaltet, falls dem Zieldatenpunkt der gewählten Funktion auch einer dieser Räume zugeordnet ist. Lässt man es leer, werden keine Räume geprüft. | 11 | | Wert für 'an' | Ja | Datenpunkt-Wert, der in 'Datenpunkt zum einschalten' gesetzt wird. Du kannst `true`, `false`, Nummern wie `144`, or Strings wie `Schalte Radio an` verwenden. Sämtliche Leerzeichen und Anführungszeichen (wie `"`) am Anfang und Ende werden automatisch entfernt.

Der Wert kann unter "4. ZONEN", "Zu schaltende Zielgeräte" überschrieben werden.| 12 | | Prüfung deakiv. (an) | Nein | Vor dem Schalten wird immer geprüft, ob das Zielgerät bereits an ist lt. "Wert für 'an'". Wenn du diese Option aktivierst, erfolgt keine Überprüfung und es wird immer geschaltet. Use Case: z.B. ein Button als Datenpunkt. Siehe [Github Issue #5](https://github.com/Mic-M/ioBroker.smartcontrol/issues/5).| 13 | | Wert für 'aus' | Ja | Datenpunkt-Wert, der in 'Datenpunkt zum ausschalten' gesetzt wird. Du kannst `true`, `false`, Nummern wie `144`, or Strings wie `Schalte Radio an` verwenden. Sämtliche Leerzeichen und Anführungszeichen (wie `"`) am Anfang und Ende werden automatisch entfernt.| 14 | | Prüfung deakiv. (aus) | Nein | Siehe *Prüfung deakiv. (an)* weiter oben, nur hier für das ausschalten des Gerätes.| -------------------------------------------------------------------------------- /admin/doc-md/table-target-enums_en.md: -------------------------------------------------------------------------------- 1 | In contrast to the table above, you can use so-called "enums" here - [Link to documentation: Enums](https://www.iobroker.net/#en/documentation/admin/enums.md). 2 |
You can assign a "function" (`enum.functions`) in each row, and limit this to certain rooms (`enum.rooms`) if wanted. All states containing the function (and optionally the room) are switched once a trigger is being activated and the conditions in the zones are fulfilled. 3 |
Please note that all states to which you have assigned the respective function require the same data type (i.e. boolean - true/false, or string), since 'Value for 'on'` and 'Value for 'off'` applies to all states to which the selected function is assigned. But don't worry, the adapter will show an error in the log if your assignment does not fit ;-) 4 | 5 | Translated with www.DeepL.com/Translator (free version) 6 | 7 | | Column | Mandatory | Description | 8 | |----------|:------------:|-------| 9 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 10 | | Name | Yes | Name of your choice. Forbidden characters: ``[ ] * , ; ' " ` < > \ ?`` | 11 | | Enum Function Name | Yes | Select the according function of the enumerations ([enum details are described here](https://www.iobroker.net/#en/documentation/admin/enums.md)). As soon as a zone is triggered in which you have selected this table row under 'Target Devices', all states to which this selected "function" is assigned will be switched. | 12 | | Limit to rooms | No | Here you can optionally limit to certain "rooms" (`enum.rooms`): if one or more rooms are selected here, the targets will only be switched if one of these rooms is assigned to the target state of the selected function. If you leave it empty, no rooms will be checked. | 13 | | Value for 'on' | Yes | States value that is set in 'states to switch on'. You can use `true`, `false`, numbers like `144`, or strings like `Turn on radio`. All spaces and quotation marks (like `"`) at the beginning and end are automatically removed.

The value can be overwritten under "4. ZONES", "Target devices". | 14 | | Do not verify (on) | No | Before switching, it is always verified if the target device is already on according to "Value for 'on'". Activating this option disables this verification, and switching is always done. Use case: e.g. a button as a state. See [Github Issue #5](https://github.com/Mic-M/ioBroker.smartcontrol/issues/5). | 15 | | Value for 'off' | Yes | States value to be set in 'Switch off state'. You can use `true`, `false`, numbers like `144`, or strings like `turn radio on`. All spaces and quotation marks (like `"`) at the beginning and end are automatically removed.| 16 | | Do not verify (off) | No | See *Value for 'on'* above, bot for switching off, and not on. | -------------------------------------------------------------------------------- /admin/doc-md/table-target-url_de.md: -------------------------------------------------------------------------------- 1 | Hiermit kannst du als Ziel eine URL verwenden, z.B. `http://192.198.10.20/relay/0?turn=on`. Dies dient dazu, etwa Geräte per URL zu steuern. 2 | 3 | ### Tabellen-Einstellungen: 4 | 5 | 6 | | Spalte | Pflichtfeld | Beschreibung | 7 | |----------|:------------:|-------| 8 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 9 | | Name | Ja | Name deiner Wahl. Verbotene Zeichen: ``[ ] * , ; ' " ` < > \ ?`` | 10 | | URL zum Einschalten | Ja | Die entsprechende URL, die aufgerufen werden soll, z.B. `http://192.198.10.20/relay/0?turn=on` 11 | | URL zum Ausschalten| Nein | Hier optional eine URL, die die zum Ausschalten aufgerufen werden soll, z.B. `http://192.198.10.20/relay/0?turn=off`. Falls du dies leer lässt, wird nicht ausgeschaltet und auch keine Ausschalt-Datenpunkte angelegt. 12 | 13 | Unter "ZONEN" kannst du diese "Zielgeräte" dann entsprechend wählen. 14 | 15 | 16 | ### Datenpunkte unterhalb smartcontrol.x.targetURLs..: 17 | 18 | Für jede Tabellenzeile werden diese Datenpunkte angelegt, dabei wird der Wert, der unter `Name` steht, eintsprechend verwendet: 19 | 20 | | Datenpunkt | Erklärung | 21 | |------------|------------| 22 | | `smartcontrol.x.targetURLs..call_on` | Sobald dieser Datenpunkt auf `true` gesetzt wird, wird die URL aufgerufen. | 23 | | `smartcontrol.x.targetURLs..response_on` | In diesem Datenpunkt wird dann die Response, also die Antwort auf deinen URL-Aufruf, ausgegeben. | 24 | 25 | Wenn du eine URL "zum Ausschalten" angelegt hast, dann werden ebenso die Datenpunkte `smartcontrol.x.targetURLs..call_off` und `smartcontrol.x.targetURLs..response_off` angelegt. 26 | 27 | 28 | Unabhängig zu den sonstigen Einstellungen in diesem Adapter kannst du über die angelegten Datenpunkte die URLs dann entsprechend ausführen bzw. aufrufen, in dem du `.call_on` oder `.call_off` auf `true` setzt. Das Antwort des Aufrufs erscheint dann im Datenpunkt `.response_on` bzw. `.response_off`.
Damit kannst du die URLs also beispielsweise auch über Blockly/Javascript aufrufen. 29 | 30 | -------------------------------------------------------------------------------- /admin/doc-md/table-target-url_en.md: -------------------------------------------------------------------------------- 1 | Hiermit kannst du als Ziel eine URL verwenden, z.B. `http://192.198.10.20/relay/0?turn=on`. Dies dient dazu, etwa Geräte per URL zu steuern. 2 | 3 | ### Tabellen-Einstellungen: 4 | 5 | 6 | | Spalte | Pflichtfeld | Beschreibung | 7 | |----------|:------------:|-------| 8 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 9 | | Name | Ja | Name deiner Wahl. Verbotene Zeichen: ``[ ] * , ; ' " ` < > \ ?`` | 10 | | Objekt-ID unterhalb smartcontrol.0.targetURLs. | Ja | Objekt-ID-Bezeichnung für die Objekte, die unterhalb von `smartcontrol.0.targetURLs.` angelegt werden. Verbotene Zeichen: ``[ ] * , ; ' " ` < > \ ?``
Wenn du hier z.B. `Wohnzimmer.TV.ein` einträgst, dann werden die Datenpunkte `smartcontrol.x.targetURLs.Wohnzimmer.TV.ein.call` und `smartcontrol.x.targetURLs.Wohnzimmer.TV.ein.response` angelegt. | 11 | | URL | Ja | Die entsprechende URL, die aufgerufen werden soll, z.B. `http://192.198.10.20/relay/0?turn=on` 12 | 13 | Unter "ZONEN" kannst du diese "Zielgeräte" dann entsprechend wählen. 14 | 15 | 16 | ### Datenpunkte unterhalb smartcontrol.x.targetURLs..: 17 | 18 | Für jede Tabellenzeile werden diese Datenpunkte angelegt: 19 | 20 | | Datenpunkt | Erklärung | 21 | |------------|------------| 22 | | `smartcontrol.x.targetURLs..call` | Sobald dieser Datenpunkt auf `true` gesetzt wird, wird die URL aufgerufen. | 23 | | `smartcontrol.x.targetURLs..response` | In diesem Datenpunkt wird dann die Response, also die Antwort auf deinen URL-Aufruf, ausgegeben. | 24 | 25 | Unabhängig zu den sonstigen Einstellungen in diesem Adapter kannst du über die angelegten Datenpunkte die URLs dann entsprechend ausführen bzw. aufrufen, in dem du `.call` auf `true` setzt. 26 | Das Ergebnis erscheint dann im Datenpunkt `.response`. Damit kannst du die URLs also beispielsweise auch über Blockly/Javascript aufrufen. 27 | 28 | -------------------------------------------------------------------------------- /admin/doc-md/table-trigger-devices_de.md: -------------------------------------------------------------------------------- 1 | Hier erfasst du andere Geräte als Auslöser, wie Wandschalter, das Betreten der Wohnung, Küchenfenster wird geöffnet, usw. 2 | 3 | | Spalte | Pflichtfeld | Beschreibung | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 6 | | Name | Ja | Beliebiger Name.| 7 | | SC | Ja | Siehe **Datenpunkt**.| 8 | | Datenpunkt | Ja | Ein existierender Datenpunkt als Auslöser.

Falls du die Option SC aktivierst, wird der Datenpunkt unterhalb von `smartcontrol.x.userstates` angelegt, d.h. wenn du hier z.B. `Bad.Radio.An` einträgst, dann wird hierfür der Datenpunkt `smartcontrol.x.userstates.Bad.Radio.An` angelegt, mit dem du dann das ganze auslösen kannst, in dem du den Datenpunkt enstprechend **DP-Wert** setzt. Der Datenpunkt wird als Typ 'String' angelegt, außer es ist `true` oder `false` in DP-Wert, dann wird dieser als 'boolean' angelegt.
Anwendungsfall hierfür: Etwa brauchst du einen Datenpunkt zum auslösen, also z.B. 'Heimkino an', der z.B. von Alexa getriggert wird. Hiermit ersparst du dir also, dass du deswegen manuell noch Datenpunkte anlegen musst.| 9 | | DP-Wert | Ja | Sobald der Wert vom Datenpunkt mit diesem Wert übereinstimmt, wird der Auslöser aktiviert. Du kannst `true`, `false`, Nummern wie `144`, or Strings wie `ABCDEF` verwenden.
Ebenso kannst du die Vergleichs-Operatoren `<`, `>`, `>=`, `<=` sowie `!=` oder `<>` vor Zahlen schreiben. Um also auszulösen, wenn z.B. die Temperatur größer als 20°C ist, trägst du `>20` ein.
Sämtliche Leerzeichen und Anführungszeichen (`"` usw.) am Anfang und Ende werden automatisch entfernt.| 10 | | Ziel aus | Nein | Normalerweise werden die Ziel-Geräte beim Auslösen eingeschaltet (1. ZIELGERÄTE > 'Datenpunkt zum einschalten' / 'Wert für an'). Wenn du den Haken aktivierst, werden die Ziele nicht ein- sondern ausgeschaltet (1. ZIELGERÄTE > 'Datenpunkt zum ausschalten' / 'Wert für aus').
Hinweis: Falls **Toggle** gesetzt ist, wird diese Option ignoriert.| 11 | | Toggle | Nein | Falls aktiviert, ermöglicht dies einen Taster (Toggle) als Auslöser. Wenn die Zielgeräte aus sind, werden sie vom Auslöser eingeschaltet, und umgekehrt (wenn sie ein sind, werden sie ausgeschaltet). Der Adapter verwendet dabei zur Ermittlung, ob das Gerät bereits an ist, den "Datenpunkt zum einschalten" unter "1. ZIELGERÄTE".
Hinweis: Falls gleichzeitig **Ziel aus** aktiviert ist, wird die **Ziel aus**-Option ignoriert, das würde sonst auch keinen Sinn ergeben für einen "Toggle".| 12 | 13 | -------------------------------------------------------------------------------- /admin/doc-md/table-trigger-devices_en.md: -------------------------------------------------------------------------------- 1 | Here you enter other devices as triggers, such as wall switches, window sensors, etc. 2 | 3 | | Column | Mandatory | Description | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 6 | | Name | Yes | Any name.| 7 | | SC | Yes | See **State**.| 8 | | State | Yes | An existing state as a trigger.

If you activate the SC option, the state will be created under `smartcontrol.x.userstates`, i.e. if you enter e.g. `Bath.Radio.on`, the state will be created as `smartcontrol.x.userstates.Bath.Radio.on`, which you then can use as trigger by setting the according **State value**. The state is created as type 'String', unless you enter `true` or `false` in 'State value', then it is created as 'boolean'. Use case: For example, you need a state to trigger, e.g. 'Home Cinema On', which is triggered by Alexa. This saves you from having to create states manually. 9 | | State value | Yes | As soon as the value of the state matches this value, the trigger is activated. You can use `true`, `false`, numbers like `144`, or strings like `ABCDEF`.
Also, you can use comparison operators `<`, `>`, `>=`, `<=`, and `!=` or `<>` before numbers. So to trigger, for example, if the temperature is higher than 20°C, you enter `>20`.
All spaces and quotation marks (`"` etc.) at the beginning and end are automatically removed.| 10 | | Target off | No | Normally, the target devices are switched on when the triggering occurs (1. TARGET DEVICES > 'State to switch device on' / 'Value for on'). If you activate this option, the state is not turned on but off (1. TARGET DEVICES > 'State to switch device off' / 'Value for off').
Note: If **Toggle** is activated, this option is ignored. 11 | | Toggle | No | If enabled, this allows a button (toggle) as trigger. When the target devices are off, the trigger turns them on, and vice versa (when they are on, the trigger turns them off). The adapter uses "State to switch device on" in "1. TARGET DEVICES" to determine if the device is already on.
Note: If **Target off** is activated at the same time, the **Target off** option is ignored, otherwise this would not make sense for a "toggle" option. | -------------------------------------------------------------------------------- /admin/doc-md/table-trigger-motion_de.md: -------------------------------------------------------------------------------- 1 | Hier erfasst du deine Bewegungsmelder. Du kannst optional auch noch Helligkeits-Datenpunkte und Grenzwerte für diese festlegen. 2 | 3 | | Spalte | Pflichtfeld | Beschreibung | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 6 | | Name für Bewegungsmelder | Ja | Beliebiger Name für den Bewegungsmelder.| 7 | | Datenpunkt Bewegungsmelder | Ja | Datenpunkt des Bewegungsmelders. Es wird erwartet, dass dieser bei Bewegung auf `true` geht, und bei keiner Bewegung mehr auf `false`, dies ist nahezu bei allen Bewegungsmeldern so der Fall. Falls sich dein Bewegungsmelder-Datenpunkt anders verhält, so verwende bitte Alias. Siehe [Forum-Diskussion](https://forum.iobroker.net/post/492267). | 8 | | Sek | Nein | Nach dieser Anzahl an Sekunden (und keiner weiteren zwischendurch erkannten Bewegung) werden die Zielgeräte ausgeschaltet.
Zum deaktivieren: Leer lassen oder 0 setzen.
Detail-Info: Sobald der Bewegungsmelder-Datenpunkt auf `false` geht, also keine Bewegung mehr erkannt wird, startet ein Timer mit den hier angegebenen Sekunden. Erst nach Ablauf dieser Sekunden werden die in der jeweiligen Zone definierten Zielgeräte ausgeschaltet. Erfolgt eine neue Bewegung (Bewegungsmelder-Datenpunkt auf `true`) während der Timer läuft, wird der Timer gelöscht und die Zielgeräte bleiben an.| 9 | | (Symbol: Timer aus) | Nein | Wenn diese Option aktiviert ist, wird kein Ausschalt-Timer für die Zielgeräte gesetzt, die bereits an waren. Use Case: [siehe Forum-Beitrag](https://forum.iobroker.net/post/433871).| 10 | 11 | ### Optional: Helligkeit (Lux) 12 | 13 | | Spalte | Pflichtfeld | Beschreibung | 14 | |----------|:------------:|-------| 15 | | Datenpunkt Helligkeit | Nein | Datenpunkt, der die aktuelle Helligkeit widergibt.| 16 | | Grenze | Nein | Grenzwert für die Helligkeit. Falls die aktuelle Helligkeit von 'Datenpunkt Helligkeit' größer als diese Zahl ist, wird die Bewegung ignoriert.
Bitte beachte hierzu auch die Option *Helligkeit (Bri) nicht prüfen falls Zone an* unter 'WEITERE OPTIONEN > Bewegungsmelder'.| 17 | 18 | ### Optional: Verknüpfte Auslöser 19 | 20 | | Spalte | Pflichtfeld | Beschreibung | 21 | |----------|:------------:|-------| 22 | | Verknüpfte Auslöser | Nein | Hier kannst du "Andere Auslöser" auswählen, diese lösen dann die entsprechende Zone ebenso aus, wie der Bewegungsmelder.
Den Auslöser legst du dazu unter "Andere Auslöser" in der Tabelle unten an, und fügst diesen neuen Auslöser in "Bewegungsmelder" unter "Verknüpfte Auslöser" hinzu.

*Beispiel-Use-Case:* Wenn der Wandschalter eingeschaltet wird, soll das Licht nach x Sekunden wieder ausgehen, sofern es keine Bewegung gibt (Beispiel: Ein Flur mit smartem Wandschalter, sowie Bewegungsmelder im Flur). Gibt es eine Bewegung, wird der Timer für den Wandschalter gelöscht und der Bewegungsmelder-Timer tritt in Kraft.

**Hinweis:** Falls du "Andere Auslöser" frisch angelegt hast und diese hier nicht gleich erscheinen, wechsle kurz zu einem anderen Reiter und wieder zurück (oder speichere und schließe die Adapter-Instanz und öffne sie erneut).| 23 | | Sek | Nein | Für "Verknüpfte Auslöser": Trage hier die Anzahl an Sekunden ein, nach denen ohne registrierter Bewegung ausgeschaltet wird, wenn ein "Verknüpfter Auslöser" das Einschalten getriggert hat.
*Hinweis:* Diese Anzahl an Sekunden kannst du hier separat einstellen (und es wird nicht "Sek" von oben genommen), weil diese Anzahl an Sekunden von oben erst dann greift, wenn der Bewegungsmelder keine Bewegung mehr erkennt, und dies dauert z.B. bei Xiaomi 2 Minuten. Daher kannst du hier eine unterschiedliche Zeit einstellen. 24 | | ✖ | Nein | Für "Verknüpfte Auslöser": Wenn aktiviert, erfolgt das Einschalten ausschließlich durch "Verknüpfte Auslöser" (z.B. Wandschalter), aber nie durch den Bewegungsmelder. Das heißt, bei Bewegung wird nicht eingeschaltet. Wird aber etwa per Wandschalter (in "Verknüpfte Auslöser") eingeschaltet, und erfolgt vor dem Ausschalten eine Bewegung, wird erst ausgeschaltet, sobald keine Bewegung mehr. Siehe [Issue #42](https://github.com/Mic-M/ioBroker.smartcontrol/issues/42) für Details.| -------------------------------------------------------------------------------- /admin/doc-md/table-trigger-motion_en.md: -------------------------------------------------------------------------------- 1 | Here you can enter your motion sensors. You can also optionally define brightness states and according thresholds. 2 | 3 | | Column | Mandatory | Description | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 6 | | Name of motion sensor | Yes | Any name for the motion sensor. 7 | | State of motion sensor | Yes | State of the motion sensor. It is expected that this state is boolean, so set to `true` when there is movement and to `false` when there is no movement, which is the case with almost all motion sensors. If your motion sensor states are different, please use aliases. See [forum discussion](https://forum.iobroker.net/post/492267). | 8 | | Sec | No | After this number of seconds (and no further motion detected in the meantime), the target devices will be turned off.
To disable: Leave blank or set to 0.
Further info: As soon as the motion sensor states is set to `false`, i.e. no more motion is detected any longer, a timer starts with the seconds specified here. After these seconds have elapsed, the target devices defined in the respective zone(s) will be switched off. If a new motion occurs (motion sensor state to `true`) while the timer is running, the timer will be cleared and the target devices will remain on. 9 | | (icon: timer off) | No | If this option is enabled, no off timer will be set for the target devices that were already on. Use case: [see forum post](https://forum.iobroker.net/post/433871).| 10 | 11 | ### Optional: Brightness (Lux) 12 | 13 | | Column | Mandatory | Description | 14 | |----------|:------------:|-------| 15 | | State of brightness | No | state that reflects the current brightness.| 16 | | Threshold | No | Threshold value for the brightness. If the current brightness of 'State of brightness' is greater than this number, the motion is ignored.
Please also note the option *Do not verify brightness if zone is on* under 'FURTHER OPTIONS > Motion sensors'.| 17 | 18 | 19 | ### Optional: Linked devices 20 | 21 | | Column | Mandatory | Description | 22 | |----------|:------------:|-------| 23 | | Linked triggers | No | Here you can select "Other triggers"; these will trigger the corresponding zone in the same way as the motion sensor.
Create the trigger under "Other triggers" in the table below, and add this new trigger in "Motion sensor" under "Linked triggers".

*Example use-case:* When a wall switch is turned on, the light should go off after x seconds, provided there is no movement (example: a corridor with a smart wall switch, and a motion sensor in the corridor). If there is motion, the timer of the wall switch is deleted and the motion sensor timer takes effect.

**Note:** If you have just created "Other triggers" and they do not appear here immediately, switch to another tab and back again to this tab (or save and close the adapter instance and open it again).| 24 | | Sec | No | For "Linked triggers": Enter the number of seconds after which the zone will switch off if no motion detected and if a "Linked trigger" has triggered the switch on.
*Note:* You can set this number of seconds separately here (and the adapter will not take the "Sec" from above), because this number of seconds from above only takes effect when the motion sensor detects no more motion, and this takes 2 minutes for Xiaomi devices, for example. So you can set a different time here. 25 | | ✖ | No | For "Linked triggers": If activated, the zone is turned on only by "Linked triggers" (e.g. wall switches), but never by the motion sensor. This means that the device is not switched on when there is motion detected. But if the zone is switched on by a wall switch (set in "Linked devices") and there is a motion detected before switching off, the zone will be switched off as soon as there is no more motion. See [Issue #42](https://github.com/Mic-M/ioBroker.smartcontrol/issues/42) for details. -------------------------------------------------------------------------------- /admin/doc-md/table-trigger-times_de.md: -------------------------------------------------------------------------------- 1 | Diese Auslöser werden aktiviert, sobald die entsprechende Zeit eintritt. 2 | 3 | | Spalte | Pflichtfeld | Beschreibung | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 6 | | Name des Auslösers | Ja | Beliebiger Name für den Auslöser. | 7 | | Zeit | Ja | Hier kannst du eine Uhrzeit in Stunde/Minute, wie `23:30`, eingeben. Außerdem kannst du einen Astro-Namen wie `sunset` eingeben und dabei einen Versatz ("Offset") in Minuten hinzufügen, z.B. `goldenHourEnd+30` oder `sunset-60`.
Die aktuellen Astrozeiten findest du übrigens als Info-Datenpunkte in diesem Adapter: `smartcontrol.x.info.astroTimes`.
Außerdem kannst du hier Cron verwenden, also z.B. `5 4 * * *`. Zum einfachen Ermittlung der zu verwendeten Cron-Syntax kannst du z.B. folgende Website verwenden: [Crontab.guru](https://crontab.guru/).

Für Stunde/Minute (wie `23:30`) oder Astrozeiten (wie `sunset`) ist die Ausführung jeden Tag. In "4. ZONEN" kannst du das dann weiter entsprechend limitieren. | 8 | | Zusätzliche Bedingungen | Nein | Hier kannst du zusätzliche Bedingungen eintragen, die zusätzlich zutreffen müssen, z.B.: Jemand ist anwesend, Heute ist Feiertag, Oma schläft, usw. | 9 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | Nein | Für *Zusätzlich muss erfüllt sein*: Wenn aktiviert, müssen alle Bedingungen zutreffen ('und'). Wenn deaktiviert, reicht es, wenn eine der Bedingungen zutrifft.
Falls du nur eine Bedingung auswählst, ist es egal, ob du das aktivierst oder nicht.| 10 | | Nie auslösen wenn... | Nein | Hier kannst du zusätzliche Bedingungen eintragen, die nie zutreffen dürfen, z.B.: Keiner zu Hause, Radio läuft, usw.| 11 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | Nein | Für *Nie auslösen wenn...*: Wenn aktiviert, müssen alle Bedingungen zutreffen ('und'). Wenn deaktiviert, reicht es, wenn eine der Bedingungen zutrifft.
Falls du nur eine Bedingung auswählst, ist es egal, ob du das aktivierst oder nicht.| 12 | | Ziel aus | Nein | Normalerweise werden die Ziel-Geräte beim Auslösen eingeschaltet (1. ZIELGERÄTE > 'Datenpunkt zum einschalten' / 'Wert für an'). Wenn du den Haken aktivierst, werden die Ziele nicht ein- sondern ausgeschaltet (1. ZIELGERÄTE > 'Datenpunkt zum ausschalten' / 'Wert für aus').| 13 | 14 | -------------------------------------------------------------------------------- /admin/doc-md/table-trigger-times_en.md: -------------------------------------------------------------------------------- 1 | These triggers are activated once the according time is reached. 2 | 3 | | Column | Mandatory | Description | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 6 | | Name of trigger | Yes | Any trigger name. | 7 | | Time | Yes | Here you can enter a time in hour/minute, like '23:30'. You can also enter an astro name like `sunset` and add an offset in minutes, e.g. `goldenHourEnd+30` or `sunset-60`.
The current astro times can be found as info states of this adapter: `smartcontrol.x.info.astroTimes`.
You can also use Cron here, e.g. `5 4 * * *`. To easily determine the cron syntax to use, you can use the following website: [Crontab.guru](https://crontab.guru/).

For hours/minutes (like `23:30`) or astro times (like `sunset`) the execution is every day. In "4. ZONES" you can further limit this accordingly. | 8 | | Additional conditions | No | Here you can enter additional conditions that must be fulfilled additionally, e.g: Someone is present, today is a holiday, grandma is sleeping, etc. | 9 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | No | For *Additional conditions*: If activated, all conditions must apply ('and'). If disabled, it is enough if one of the conditions applies.
If you select only one condition, it doesn't matter if you enable it or not.| 10 | | Never if... | No | Here you can enter additional conditions that must never apply, for example No one at home, radio on, etc. | 11 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | No | For *Never if...*: If activated, all conditions must apply ('and'). If disabled, it is enough if one of the conditions applies.
If you select only one condition, it doesn't matter if you enable it or not.| 12 | | Target off | No | Normally, the target devices are switched on when the triggering occurs (1. TARGET DEVICES > 'State to switch device on' / 'Value for on'). If you activate this option, the state is not turned on but off (1. TARGET DEVICES > 'State to switch device off' / 'Value for off'). | -------------------------------------------------------------------------------- /admin/doc-md/table-zones_de.md: -------------------------------------------------------------------------------- 1 | Hier definierst du alle "Zonen" (z.B. Badezimmer 1.OG, Kaffeeecke, usw.) und weist Auslöser und zu schaltende Zielgeräte zu. 2 | 3 | | Spalte | Pflichtfeld | Beschreibung | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Ja | Aktiviert/Deaktiviert diese Tabellenzeile. Falls nicht aktiviert, wird diese Tabellenzeile vom Adapter nicht beachtet. In den Adapter-Optionen, unter 'WEITERE OPTIONEN > Eingabe-Validierung' kannst du übrigens einstellen, dass auch deaktivierte Zeilen auf Gültigkeit geprüft werden. | 6 | | Name der Zone | Ja | Beliebiger Name für die Zone. | 7 | | Auslöser | Ja | Wähle hier einen oder mehrere Auslöser aus, um dieser Zone zuzuordnen. Falls du hier mehrere Bewegungsmelder einträgst, wird nur dann wieder ausgeschaltet, wenn keiner dieser Bewegungsmelder mehr eine Bewegung registriert hat. | 8 | | Zielgeräte | Ja | Wähle hier ein oder mehrere zu schaltende Zielgeräte aus, die geschalten werden, sobald ein Auslöser auslöst und die Bedingungen zutreffen.

Mit dem blauen Button links daneben kannst du bei vielen Zielgeräten deutlich schneller auswählen. Es öffnet sich ein Dialog, in dem du die Zielgeräte leichter finden, filtern und auswählen kannst.

**Funktion 'Individuelle Optionen für Zielgerät setzen'**:
Im Dialog, der erscheint, wenn man auf den blauen Button links daneben klickt, kann man durch Doppelklick oder `F2` individuelle Werte für Zielgeräte setzen, Beispiel **{**`val:Radio Chillout, delay:20`**}**.
Mit `val` wird der *Wert für 'an'* von *1. ZIELGERÄTE* überschrieben.
Mit `delay` wird das Zielgerät bei Aktivierung der Zone um diese Anzahl an Sekunden verzögert eingeschaltet.

Deine eingetragenen Optionen erscheinen dann in geschweiften Klammern hinter dem Namen.
![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/table-zones_select-target-devices-overwrite.gif?raw=true)

**Tipp**: Wähle im Reiter "1. ZIELGERÄTE" für die Zielgeräte-Namen Punkte als Trennung und organisere diese z.B. nach Räumen und Geräten, z.B. "Wohnzimmer.Lichter.Decke", "Wohnzimmer.Lichter.Wand links", etc. Damit werden dir hier die Zielgeräte dann als Ordner angezeigt: "Wohnzimmer > Lichter > Decke", etc. | 9 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/timelapse-24px.svg?raw=true)| Nein | **Verzögertes Einschalten der Zone (in Sekunden)**: Hiermit kannst du eine Verzögerung einstellen: erst nach dieser Anzahl an Sekunden wird die Zone tatsächlich eingeschaltet.
Durch leer lassen oder `0` wird diese Option ignoriert. | 10 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/timer-24px.svg?raw=true) | Nein | **Zone aus nach x Sekunden**: Hiermit wird die Zone nach der angegebenen Anzahl an Sekunden ausgeschaltet (unabhängig von etwaigen Bewegungsmeldern). Der Timer zum Ausschalten startet, sobald die Zone eingeschaltet wurde. Gibt es zwischendurch ein erneutes Einschalten der Zone, wird dieser Timer neu gestartet.
Durch leer lassen oder `0` wird diese Option ignoriert. | 11 | | Nie ausschalten wenn... | Nein | Hier kannst du zusätzliche Bedingungen eintragen, z.B.: Keiner zu Hause, Radio läuft, usw. Wenn diese Bedingungen zutreffen, werden die Zielgeräte dieser Zone **nicht** ausgeschaltet, wenn ein Timer abgelaufen ist. Dies betrifft sowohl den Timer *Zone aus nach x Sekunden* als auch etwaige Bewegungsmelder-Timer. | 12 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/done_all-24px.svg?raw=true) | Nein | Für *Nie ausschalten wenn...*: Wenn aktiviert, müssen alle Bedingungen zutreffen ('und'). Wenn deaktiviert, reicht es, wenn eine der Bedingungen zutrifft.
Falls du nur eine Bedingung auswählst, ist es egal, ob du das aktivierst oder nicht.| 13 | | Ausführung | Nein | Durch Klicken auf diesen Button öffnet sich ein Dialog, in dem du weitere Bedingungen definieren kannst, wann die in der Zone definierten Zielgeräte geschaltet werden, sobald ein Auslöser auslöst. Detail-Informationen findest du hierzu in diesem Dialog. | 14 | | Immer | Ja | Diese Option ist identisch mit "Immer ausführen" im Dialog 'Ausführung' (siehe oben): Falls aktiviert, dann wird immer ausgeführt, sofern etwaige zuvor definierte Bedingungen zutreffen. Falls nicht aktiviert, musst du im Dialog 'Ausführung' mindestens eine aktive Zeile anlegen. | 15 | -------------------------------------------------------------------------------- /admin/doc-md/table-zones_en.md: -------------------------------------------------------------------------------- 1 | Here you bring everything together by defining all "zones" (e.g. bathroom 1st floor, coffee corner, etc.) and assigning triggers and target devices to be switched, as well as defining further conditions for execution. 2 | 3 | | Column | Mandatory | Description | 4 | |----------|:------------:|-------| 5 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/check_box-24px.svg?raw=true) | Yes | Enables/disables this table row. If not activated, this table row is ignored by the adapter. In the Adapter Options, under 'FURTHER OPTIONS > Input Validation', you can set that even disabled rows are checked for validity. | 6 | | Name of zone | Yes | Any zone name. | 7 | | Trigger | Yes | Select one or more triggers to assign to this zone. If you enter more than one motion sensors here, the zone will only be switched off again if none of these motion sensors has registered any more motion.| 8 | | Target devices | Yes | Here you select one or more target devices to be switched, which will be switched as soon as a trigger is triggered and the conditions are met.

With the blue button to the left you can select much faster in case of many target devices. A dialog opens where you can find, filter and select the target devices more easily.

**Function 'Set individual options für target device'**:
In the dialog that appears when you click on the blue button to the left, you can set individual values for target devices by double clicking or 'F2', example: **{**`val:Radio Chillout, delay:20`**}**.
`val` overwrites the *Value for 'on'* of *1. TARGET DEVICES*.
`delay` the target device is switched on delayed by this number of seconds when the zone is activated.

Your entered options will appear in curly brackets after the name.
![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/table-zones_select-target-devices-overwrite.gif?raw=true)

**Tip**: Use dots as separators in tab "1. TARGET DEVICES" for the target device names and organize them e.g. by rooms and devices, e.g. "Bathroom.Lights.Ceiling", "Bathroom.Lights.Wall left", etc. The target devices will then be displayed here as folders: "Bathroom > Lights > Ceiling", etc. | 9 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/timelapse-24px.svg?raw=true)| Nein | **Delay for switching zone on (in seconds)** This allows you to set a delay: after this number of seconds the zone will actually be switched on.
Leave empty or set `0` to ignore this option. | 10 | | ![image](https://github.com/Mic-M/ioBroker.smartcontrol/blob/master/admin/doc-md/img/timer-24px.svg?raw=true) | No | **Switch zone off after x seconds**: This switches the zone off after the specified number of seconds (independent of any motion sensors). The timer for switching off starts as soon as the zone is switched on. If the zone is switched on again in between, this timer will be restarted.
Leave empty or set `0` to ignore this option. | 11 | | Never switch off if... | No | Here you can enter additional conditions, for example: No one at home, radio is on, etc. If these conditions apply, the target devices of this zone **will not** be turned off when a timer expires. This applies to both the timer *Switch zone off after x seconds* and motion sensor timers. | 12 | | ✓✓ | No | For *Never switch off if...*: If activated, all conditions must apply ('and'). If disabled, it is enough if one of the conditions applies.
If you select only one condition, it doesn't matter if you enable it or not.| 13 | | Execution | Yes | Clicking this button opens a dialog where you can define further conditions when the target devices, as defined in the zone, will be switched as soon as a trigger is triggered. Details are described in this dialog. | 14 | | Always | Yes | This option is identical to "Execute always" in the 'Execution' dialog (see above): If activated, the adapter will always execute if any previously defined conditions apply. If not activated, you must create at least one active line in the 'Execution' dialog. | -------------------------------------------------------------------------------- /admin/doc-md/table-zones_select-targets_de.md: -------------------------------------------------------------------------------- 1 | Durch Doppelklick oder F2 kannst du hier individuelle Optionen für Zielgeräte setzen.
2 |
3 | Weitere Erklärung (hier klicken) 4 | 5 | 6 | 7 | ### Beispiele 8 | * **{** `val:Radio Chillout, delay:20` **}** 9 | * **{** `delay:30` **}** 10 | * **{** `val:true` **}** 11 | 12 | ### Erklärung 13 | * **val**: Hiermit wird der *Wert für 'an'* von *1. ZIELGERÄTE* überschrieben. 14 | * **delay**: Hiermit wird *Verzögertes Einschalten des Zielgerätes* von *1. ZIELGERÄTE* durch die angegebene Anzahl Sekunden überschrieben. Zum Deaktivieren kannst du `delay:0` eintragen.
*Beispiel-Anwendungsfall (Use Case)*: Schalte den Strom-Zwischenstecker sofort ein, warte 30 Sekunden und schalte dann den Fernseher ein (weil er z.B. vorher noch nicht auf IR-Befehle reagiert) und dimme nach 50 Sekunden das Licht im TV-Eck. 15 | 16 | #### Hinweis 17 | Diese Funktion wurde mit Adapter-Version 0.5.3 erweitert, in den Vor-Versionen konnte man hier lediglich einen neuen Zielwert setzen mit z.B. **{** `Radio Chillout` **}**. Dies unterstützt der Adapter weiterhin. Falls du also nur den Zielwert überschreiben willst, kannst du einfach **{** `Radio Chillout` **}** eingeben, anstatt **{** `val:Radio Chillout` **}**. Aber wenn du auch ein **delay** (Verzögertes Einschalten) setzen willst, musst du **{** `val:Radio Chillout, delay:20` **}** eingeben. Delay alleine, also **{** `delay:20` **}** geht natürlich auch, dann wird der Zielwert natürlich nicht überschrieben. 18 | 19 |
-------------------------------------------------------------------------------- /admin/doc-md/table-zones_select-targets_en.md: -------------------------------------------------------------------------------- 1 | Double click or hit F2 on a selected target device to set individual values.
2 |
3 | Further explanation (click me) 4 | 5 | 6 | 7 | ### Examples 8 | * **{** `val:Radio Chillout, delay:20` **}** 9 | * **{** `delay:30` **}** 10 | * **{** `val:true` **}** 11 | 12 | ### Explanation 13 | * **val**: Overwrites *Value for 'on'* of *1. TARGET DEVICES*. 14 | * **delay**: Overwrites *Delay for switching target device on* of *1. TARGET DEVICES* by the number of seconds set. To deactivate, use `delay:0`.
*Example use case*: Switch on a power plug immediately, wait 30 seconds and then switch on the TV (e.g. because it does not react to IR commands before) and dim the light in the TV corner after 50 seconds. 15 | 16 | #### Please note 17 | This function was extended with adapter version 0.5.3, in the previous versions you could only set a new target value with e.g. **{** `Radio Chillout` **}**. This is still supported by the adapter. So if you only want to overwrite the target value you can simply enter **{** `Radio Chillout` **}** instead of **{** `val:Radio Chillout` **}**. But if you also want to set a **delay** you have to enter **{** `val:Radio Chillout, delay:20` **}**. Delay alone, i.e. **{** `delay:20` **}** works too, but then the target value will not be overwritten, of course. 18 | 19 |
-------------------------------------------------------------------------------- /admin/fancytree/skin-lion/icons-rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/fancytree/skin-lion/icons-rtl.gif -------------------------------------------------------------------------------- /admin/fancytree/skin-lion/icons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/fancytree/skin-lion/icons.gif -------------------------------------------------------------------------------- /admin/fancytree/skin-lion/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/fancytree/skin-lion/loading.gif -------------------------------------------------------------------------------- /admin/fancytree/skin-lion/vline-rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/fancytree/skin-lion/vline-rtl.gif -------------------------------------------------------------------------------- /admin/fancytree/skin-lion/vline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/fancytree/skin-lion/vline.gif -------------------------------------------------------------------------------- /admin/i18n/de/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Adapter-Version", 3 | "Additional conditions": "Zusätzliche Bedingungen", 4 | "Always": "Immer", 5 | "Astro times 'night' and 'nightEnd'": "Astro-Zeiten 'night' und 'nightEnd'", 6 | "Cancel": "Abbrechen", 7 | "Deactivate to define detailed criteria for execution": "Deaktivieren, um detaillierte Kriterien zur Ausführung zu definieren", 8 | "Device Name": "Geräte-Name", 9 | "Do not verify": "Prüfung deakiv.", 10 | "End": "Ende", 11 | "Enum Function Name": "Funktions-Name (Aufzählungen)", 12 | "Execute always": "Immer ausführen", 13 | "Execution": "Ausführung", 14 | "Execution settings for zone": "Ausführungseinstellungen für Zone", 15 | "Fri": "Fr", 16 | "Further Adapter Options": "Weitere Adapter-Optionen", 17 | "Further Options": "Weitere Optionen", 18 | "Hello World": "Hallo Welt", 19 | "Incorrect configuration": "Fehlerhafte Konfiguration", 20 | "Input Validation": "Eingabe-Validierung", 21 | "JSON state for recent successful zone activations": "JSON-Datenpunkt for die letzten erfolgreichen Zonen-Aktivierungen", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "Limitiert auf Räume", 24 | "Linked triggers": "Verknüpfte Auslöser", 25 | "Logging": "Logging", 26 | "Mo": "Mo", 27 | "Motion sensors": "Bewegungsmelder", 28 | "Name of condition": "Name der Bedingung", 29 | "Name of motion sensor": "Name für Bewegungsmelder", 30 | "Name of trigger": "Name des Auslösers", 31 | "Name of zone": "Name der Zone", 32 | "Never if...": "Nie auslösen wenn...", 33 | "Never switch if...": "Nie schalten wenn...", 34 | "Never switch off if...": "Nie ausschalten wenn...", 35 | "Never switch on if...": "Nie einschalten wenn...", 36 | "Number of entries in JSON states (0-500)": "Max. Anzahl Einträge in den JSON-Datenpunkten (0-500)", 37 | "Object ID under": "Objekt-ID unterhalb", 38 | "Off after x sec": "Aus nach x sek", 39 | "Ok": "OK", 40 | "Other triggers": "Andere Auslöser", 41 | "Sat": "Sa", 42 | "Sec": "Sek", 43 | "Second(s)": "Sekunde(n)", 44 | "Select": "Auswählen", 45 | "Select 'never if...'": "Wähle 'Nie wenn...'", 46 | "Select 'never switch on if...'": "Wähle 'Nie einschalten wenn...'", 47 | "Select additional conditions": "Wähle zusätzliche Bedingungen aus", 48 | "Select linked triggers": "Wähle verknüpfte Auslöser", 49 | "Select state": "Wähle Datenpunkt", 50 | "Select target devices": "Wähle Zielgeräte aus", 51 | "Select triggers": "Wähle Auslöser aus", 52 | "Start": "Start", 53 | "State": "Datenpunkt", 54 | "State of brightness": "Datenpunkt Helligkeit", 55 | "State of condition": "Datenpunkt der Bedingung", 56 | "State of motion sensor": "Datenpunkt Bewegungsmelder", 57 | "State to switch device off": "Datenpunkt zum ausschalten", 58 | "State to switch device on": "Datenpunkt zum einschalten", 59 | "State under": "Datenpunkt unterhalb", 60 | "State value": "DP-Wert", 61 | "Sun": "So", 62 | "Target devices": "Zielgeräte", 63 | "Target devices: objects": "Zielgeräte: Objekte", 64 | "Target devices: states": "Zielgeräte: Objekte", 65 | "Target off": "Ziel aus", 66 | "Targets: Enum functions": "Zielgeräte: Aufzählungen (Enums) 🡒 Funktionen", 67 | "Targets: URLs": "Ziele: URLs", 68 | "Threshold": "Grenze", 69 | "Thu": "Do", 70 | "Time": "Zeit", 71 | "Time based triggers": "Zeitabhängige Auslöser", 72 | "Time schedule and astro": "Zeitplan und Astro", 73 | "Toggle": "Toggle", 74 | "Trigger": "Auslöser", 75 | "Triggers": "Auslöser", 76 | "Tue": "Di", 77 | "URL for switching off": "URL zum Ausschalten (optional)", 78 | "URL for switching on": "URL zum Einschalten", 79 | "Value for 'off'": "Wert für 'aus'", 80 | "Value for 'on'": "Wert für 'an'", 81 | "Wed": "Mi", 82 | "Zones": "Zonen", 83 | "log.verifyOptions.header": "Deine Konfiguration ist fehlerhaft, bitte wie folgt beheben:", 84 | "log.verifyOptions.info": "Bitte beachte, dass hier nur geprüft wurde, ob jeweils mindestens eine aktive Tabellenzeile vorhanden ist und ob mindestens eine aktive Ausführung in den Zonen definiert ist. Weitere Prüfungen finden nach dem Speichern beim Neustart des Adapters statt. Bitte daher auch unbedingt ins ioBroker-Log sehen. Etwaige weitere Fehler werden dort ausgegeben.", 85 | "new value": "neuer Wert", 86 | "off": "aus", 87 | "on": "an", 88 | "overwrite options": "überschreibe Optionen", 89 | "tabMain.Doc": "Anleitung zu diesem Adapter:", 90 | "tabMain.Welcome": "Willkommen beim Smart-Control-Adapter. Aktueller ioBroker-Forum-Artikel", 91 | "tabOptions.extendedLogHeader": "Erweitere Info-Log-Ausgaben", 92 | "tabOptions.extendedLogInfo": "Wenn deaktiviert, werden im Log (Level 'Info') nur wenige Informationen beim Adapter-Start und Stop/Neustart angezeigt und alle weiteren Informationen nur im Debug-Log.
Wenn aktiviert, werden im Log (Level 'Info') erweiterte Informationen ausgegeben (aber dennoch deutlich weniger als im Debug-Log).", 93 | "tabOptions.inputValidationHeader": "Überprüfe auch deaktivierte Tabellenzeilen", 94 | "tabOptions.inputValidationInfo": "Mit Aktivieren dieser Option werden auch deaktivierte Tabellenzeilen auf Gültigkeit geprüft (z.B. ob Datenpunkt existiert, etc.). Dies kann sinnvoll sein, weil du über die Datenpunkte unterhalb smartcontrol.x.options. Tabellenzeilen aktivieren kannst. Damit wird also schon im Vorfeld geprüft, ob diese gültig sind, und nicht erst bei Aktivierung über die Datenpunkte.", 95 | "tabOptions.jsonMaxEntriesInfo": "Der Adapter stellt mit smartcontrol.x.info.log.zoneActivations.json und smartcontrol.x.info.log.switchedTargetDevices.json Datenpunkte bereit:
Sobald eine Zone erfolgreich ausgeführt oder ein Zielgerät geschalten wurde, werden Informationen hierzu als JSON in diesen Datenpunkten zur Verfügung gestellt; dabei erscheint der neueste Eintrag jeweils oben.
Im folgenden Feld kannst du die maximale Anzahl der letzten Einträge einstellen, mehr als 500 sind nicht erlaubt. Default ist 100.
Zum Deaktivieren auf 0 stellen.", 96 | "tabOptions.nightEndInfo": "Je nach den geographischen Koordinaten, die in den ioBroker-Admin-Optionen gesetzt sind, gibt es z.B. in Deutschland im Sommer teils kein night und nightEnd. Wenn du diese Option aktivierst, dann wird in diesem Fall als night = '00:00' gesetzt, und als nightEnd = '02:00'.", 97 | "tabOptions.nightEndOpt": "Setze 0:00/2:00, falls kein night/nightEnd verfügbar", 98 | "tabOptions.notVerifyBriHeader": "Helligkeit (Bri) nicht prüfen falls Zone an", 99 | "tabOptions.notVerifyBriInfo": "Für Bewegungssensoren und zugehörige Helligkeits-Datenpunkte kannst du hier definieren, ob die Helligkeit ignoriert werden soll, falls eine zugehörige Zone bereits an ist.
Use Case (Anwendungsfall): 'Grenze' ist der oberere Schwellwert der Helligkeit, über dem nicht mehr eingeschaltet wird wenn der Bewegungsmelder auslöst. Dies ist jedoch nicht praxisnah, wenn der Bewegungsmelder z.B. Lichter schaltet, denn dann werden keine wiederkehrenden Bewegungen mehr erkannt, falls Licht an und 'Bri' höchstwahrscheinlich damit überhalb des Schwellwertes ist.
Mit Aktivierung dieser Option wird die Helligkeit nicht überprüft, falls eine zugehörige Zone bereits an ist.", 100 | "tabOptions.triggerAckHeader": "Auslöser-Datenpunkte unterhalb von User-Datenpunkten wie javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "Änderungen von Datenpunkten, die unterhalb von Adapter-Instanzen sind, werden nur getriggert, wenn acknowledge (ack) = true (also States gültig/bestätigt sind).
Für user-eigene Datenpunkte unterhalb javascript.x, 0_userdata.0, Messwerte.0, alias.0 usw. kann man das hier ändern.
Bitte beachten: Falls \"Egal (ack:true oder ack:false)\" ausgewählt wird, wird ggf. doppelt geschaltet, wenn ack:false und kurz darauf ack:true gesetzt wird. Dieser Adapter verhindert das aber mit der Option Auslöser ignorieren, falls letzes Auslösen desselben Auslösers vor weniger als x Sekunden war.", 102 | "tabOptions.triggerAckOptAny": "Egal (ack:true oder ack:false)", 103 | "tabOptions.triggerAckOptFalse": "Nur ack:false (ignoriere ack:true)", 104 | "tabOptions.triggerAckOptTrue": "Nur ack:true (ignoriere ack:false)", 105 | "tabOptions.triggerLimitHeader": "Auslöser ignorieren, falls letzes Auslösen desselben Auslösers vor weniger als x Sekunden war", 106 | "tabOptions.triggerLimitInfo": "Aus Stabilitätsgründen werden Auslöser ignoriert, wenn diese bereits vor weniger als x Sekunden ausgelöst haben. Du kannst diese Anzahl Sekunden hier anpassen. Weniger als 1 Sekunde ist nicht erlaubt.", 107 | "tabOptions.triggerLimitLabel": "Mindestens 1 Sekunde erforderlich", 108 | "will be generated automatically": "wird automatisch erstellt" 109 | } -------------------------------------------------------------------------------- /admin/i18n/en/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Adapter Version", 3 | "Additional conditions": "Additional conditions", 4 | "Always": "Always", 5 | "Astro times 'night' and 'nightEnd'": "Astro times 'night' and 'nightEnd'", 6 | "Cancel": "Cancel", 7 | "Deactivate to define detailed criteria for execution": "Deactivate to define detailed criteria for execution", 8 | "Device Name": "Device Name", 9 | "Do not verify": "Do not verify", 10 | "End": "End", 11 | "Enum Function Name": "Enum Function Name", 12 | "Execute always": "Execute always", 13 | "Execution": "Execution", 14 | "Execution settings for zone": "Execution settings for zone", 15 | "Fri": "Fri", 16 | "Further Adapter Options": "Further Adapter Options", 17 | "Further Options": "Further Options", 18 | "Hello World": "Hello World", 19 | "Incorrect configuration": "Incorrect configuration", 20 | "Input Validation": "Input Validation", 21 | "JSON state for recent successful zone activations": "JSON state for recent successful zone activations", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "Limit to rooms", 24 | "Linked triggers": "Linked triggers", 25 | "Logging": "Logging", 26 | "Mo": "Mo", 27 | "Motion sensors": "Motion sensors", 28 | "Name of condition": "Name of condition", 29 | "Name of motion sensor": "Name of motion sensor", 30 | "Name of trigger": "Name of trigger", 31 | "Name of zone": "Name of zone", 32 | "Never if...": "Never if...", 33 | "Never switch if...": "Never switch if...", 34 | "Never switch off if...": "Never switch off if...", 35 | "Never switch on if...": "Never switch on if...", 36 | "Number of entries in JSON states (0-500)": "Max number of entries in JSON states (0-500)", 37 | "Object ID under": "Object ID under", 38 | "Off after x sec": "Off after x sec", 39 | "Ok": "Ok", 40 | "Other triggers": "Other triggers", 41 | "Sat": "Sat", 42 | "Sec": "Sec", 43 | "Second(s)": "Second(s)", 44 | "Select": "Select", 45 | "Select 'never if...'": "Select 'never if...'", 46 | "Select 'never switch on if...'": "Select 'never switch on if...'", 47 | "Select additional conditions": "Select additional conditions", 48 | "Select linked triggers": "Select linked triggers", 49 | "Select state": "Select state", 50 | "Select target devices": "Select target devices", 51 | "Select triggers": "Select triggers", 52 | "Start": "Start", 53 | "State": "State", 54 | "State of brightness": "State of brightness", 55 | "State of condition": "State of condition", 56 | "State of motion sensor": "State of motion sensor", 57 | "State to switch device off": "State to switch device off", 58 | "State to switch device on": "State to switch device on", 59 | "State under": "State under", 60 | "State value": "State value", 61 | "Sun": "Sun", 62 | "Target devices": "Target devices", 63 | "Target devices: objects": "Target devices: objects", 64 | "Target devices: states": "Target devices: states", 65 | "Target off": "Target off", 66 | "Targets: Enum functions": "Targets: Enum functions", 67 | "Targets: URLs": "Targets: URLs", 68 | "Threshold": "Threshold", 69 | "Thu": "Thu", 70 | "Time": "Time", 71 | "Time based triggers": "Time based triggers", 72 | "Time schedule and astro": "Time schedule and astro", 73 | "Toggle": "Toggle", 74 | "Trigger": "Trigger", 75 | "Triggers": "Triggers", 76 | "Tue": "Tue", 77 | "URL for switching off": "URL for switching off", 78 | "URL for switching on": "URL for switching on", 79 | "Value for 'off'": "Value for 'off'", 80 | "Value for 'on'": "Value for 'on'", 81 | "Wed": "Wed", 82 | "Zones": "Zones", 83 | "log.verifyOptions.header": "Your configuration is faulty, please fix as follows:", 84 | "new value": "new value", 85 | "off": "off", 86 | "on": "on", 87 | "overwrite options": "overwrite options", 88 | "tabMain.Doc": "Instructions for this adapter:", 89 | "tabMain.Welcome": "Welcome to the Smart Control Adapter. Current ioBroker Forum thread", 90 | "tabOptions.extendedLogHeader": "Extended info log", 91 | "tabOptions.extendedLogInfo": "If deactivated, the log (level 'Info') shows only a small amount of log lines during adapter start and stop/restart, and all other information is only displayed in the debug log.
If activated, the log (level 'Info') will show extended information (but less than in debug log).", 92 | "tabOptions.inputValidationHeader": "Check also disabled table rows", 93 | "tabOptions.inputValidationInfo": "Activating this option verifies deactivated table rows for validity (e.g. whether state exists, etc.) as well. This can be useful as you can enable table rows via states under smartcontrol.x.options.. By activating this option, the adapter verifies in advance (so when the adapter starts) whether the rows are valid or not.", 94 | "tabOptions.jsonMaxEntriesInfo": "The adapter provides the states smartcontrol.x.info.log.zoneActivations.json and smartcontrol.x.info.log.switchedTargetDevices. json:
As soon as a zone has been successfully executed or a target device has been switched, information about this is provided as JSON in these states; the newest entry appears at the top.
In the following field you can set the maximum number of the last entries, more than 500 are not allowed. Default is 100.
set to 0 to deactivate", 95 | "tabOptions.nightEndInfo": "Depending on the geographical coordinates set in the ioBroker admin options, there is sometimes no night and/or nightEnd available, e.g. in the summer in some German regions. If you activate this option, then the adapter will set: night = '00:00', and nightEnd = '02:00'.", 96 | "tabOptions.nightEndOpt": "Set 0:00/2:00, if night/nightEnd is not available", 97 | "tabOptions.notVerifyBriHeader": "Do not verify brightness if zone is on", 98 | "tabOptions.notVerifyBriInfo": "For motion sensors and associated brightness states, you can define here if the brightness should be ignored if an associated zone is already on.
Use Case: 'Threshold' is the upper threshold value of the brightness, above which the adapter will not switch on anymore when the motion sensor is triggered. But this is not practical if the motion sensor e.g. switches on lights, because then no recurring motions will be detected if light is on and 'Bri' is most likely above the threshold.
With activation of this option, the brightness is not checked if a associated zone is already on.", 99 | "tabOptions.triggerAckHeader": "Trigger states under user states like javascript.x, 0_userdata.0, Messwerte.0, alias.x", 100 | "tabOptions.triggerAckInfo": "Changes of states under adapter instances are only triggered if acknowledge (ack) = true (i.e. states are acknowledged/confirmed).
For user-own states under javascript.x, 0_userdata.0, Messwerte.0, alias.0 etc. you can change this behavior.
Please note: If \"Any (ack:true or ack:false)\" is selected, it might be switched twice if ack:false and shortly after ack:true is set. However, this adapter prevents this with the option Ignore trigger if last triggering of the same trigger was less than x seconds ago.", 101 | "tabOptions.triggerAckOptAny": "Any (ack:true or ack:false)", 102 | "tabOptions.triggerAckOptFalse": "ack:false only (ignoriere ack:true)", 103 | "tabOptions.triggerAckOptTrue": "ack:true only (ignoriere ack:false)", 104 | "tabOptions.triggerLimitHeader": "Ignore trigger if last triggering of the same trigger was less than x seconds ago", 105 | "tabOptions.triggerLimitInfo": "For stability reasons, triggers are ignored if they were triggered less than x seconds ago. You can adjust this number of seconds here. Less than 1 second is not allowed.", 106 | "tabOptions.triggerLimitLabel": "Minimum 1 second required", 107 | "will be generated automatically": "will be generated automatically" 108 | } -------------------------------------------------------------------------------- /admin/i18n/es/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Versión del adaptador", 3 | "Additional conditions": "Condiciones adicionales", 4 | "Always": "Siempre", 5 | "Astro times 'night' and 'nightEnd'": "Astro veces 'noche' y 'nocheEnd'", 6 | "Cancel": "Cancelar", 7 | "Deactivate to define detailed criteria for execution": "Desactivar para definir criterios detallados de ejecución", 8 | "Device Name": "Nombre del dispositivo", 9 | "Do not verify": "No verificar", 10 | "End": "Final", 11 | "Enum Function Name": "Nombre de la función de enumeración", 12 | "Execute always": "Ejecutar siempre", 13 | "Execution": "Ejecución", 14 | "Execution settings for zone": "Configuración de ejecución para zona", 15 | "Fri": "Vie", 16 | "Further Adapter Options": "Otras opciones de adaptadores", 17 | "Further Options": "Más opciones", 18 | "Hello World": "Hola Mundo", 19 | "Incorrect configuration": "Configuracion incorrecta", 20 | "Input Validation": "Validación de entrada", 21 | "JSON state for recent successful zone activations": "Estado JSON para activaciones de zona exitosas recientes", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "Límite de habitaciones", 24 | "Linked triggers": "Activadores vinculados", 25 | "Logging": "Inicio sesión", 26 | "Mo": "Mes", 27 | "Motion sensors": "Sensores de movimiento", 28 | "Name of condition": "Nombre de la condición", 29 | "Name of motion sensor": "Nombre del sensor de movimiento", 30 | "Name of trigger": "Nombre del disparador", 31 | "Name of zone": "Nombre de la zona", 32 | "Never if...": "Nunca si ...", 33 | "Never switch if...": "Nunca cambie si ...", 34 | "Never switch off if...": "Nunca apague si ...", 35 | "Never switch on if...": "Nunca encienda si ...", 36 | "Number of entries in JSON states (0-500)": "Número máximo de entradas en estados JSON (0-500)", 37 | "Object ID under": "ID de objeto debajo", 38 | "Off after x sec": "Apagado después de x seg", 39 | "Ok": "Okay", 40 | "Other triggers": "Otros desencadenantes", 41 | "Sat": "Se sentó", 42 | "Sec": "Segundo", 43 | "Second(s)": "Segundos)", 44 | "Select": "Seleccione", 45 | "Select 'never if...'": "Seleccione 'nunca si ...'", 46 | "Select 'never switch on if...'": "Seleccione 'nunca encender si ...'", 47 | "Select additional conditions": "Seleccionar condiciones adicionales", 48 | "Select linked triggers": "Seleccionar activadores vinculados", 49 | "Select state": "Seleccione estado", 50 | "Select target devices": "Seleccionar dispositivos de destino", 51 | "Select triggers": "Seleccionar disparadores", 52 | "Start": "comienzo", 53 | "State": "Estado", 54 | "State of brightness": "Estado de brillo", 55 | "State of condition": "Estado de condición", 56 | "State of motion sensor": "Estado del sensor de movimiento", 57 | "State to switch device off": "Estado para apagar el dispositivo", 58 | "State to switch device on": "Estado para encender el dispositivo", 59 | "State under": "Estado bajo", 60 | "State value": "Valor del estado", 61 | "Sun": "Dom", 62 | "Target devices": "Dispositivos de destino", 63 | "Target devices: objects": "Dispositivos de destino: objetos", 64 | "Target devices: states": "Dispositivos de destino: estados", 65 | "Target off": "Objetivo desactivado", 66 | "Targets: Enum functions": "Objetivos: funciones de enumeración", 67 | "Targets: URLs": "Objetivos: URL", 68 | "Threshold": "Límite", 69 | "Thu": "Jue", 70 | "Time": "Hora", 71 | "Time based triggers": "Activadores basados en el tiempo", 72 | "Time schedule and astro": "Horario y astro", 73 | "Toggle": "Palanca", 74 | "Trigger": "Desencadenar", 75 | "Triggers": "Disparadores", 76 | "Tue": "mar", 77 | "URL for switching off": "URL para apagar", 78 | "URL for switching on": "URL para encender", 79 | "Value for 'off'": "Valor para 'desactivado'", 80 | "Value for 'on'": "Valor de \"activado\"", 81 | "Wed": "Mie", 82 | "Zones": "Zonas", 83 | "log.verifyOptions.header": "Su configuración es defectuosa, corríjala de la siguiente manera:", 84 | "log.verifyOptions.info": "Tenga en cuenta que aquí solo verificamos si existe al menos una fila de tabla activa y si al menos una ejecución activa está definida en Zonas. Se realizarán más verificaciones después de guardar estas opciones, lo que reiniciará el adaptador. Por lo tanto, asegúrese de verificar el registro de ioBroker: allí se mostrarán los errores adicionales.", 85 | "new value": "nuevo valor", 86 | "off": "apagado", 87 | "on": "en", 88 | "overwrite options": "sobrescribir opciones", 89 | "tabMain.Doc": "Instrucciones para este adaptador:", 90 | "tabMain.Welcome": "Bienvenido al adaptador de control inteligente. Hilo actual del Foro ioBroker", 91 | "tabOptions.extendedLogHeader": "Registro de información extendido", 92 | "tabOptions.extendedLogInfo": "Si está desactivado, el registro (nivel 'Información') muestra solo una pequeña cantidad de líneas de registro durante el inicio y la detención / reinicio del adaptador, y el resto de la información solo se muestra en el registro de depuración.
Si está activado, el registro (nivel 'Información') mostrará información ampliada (pero menos que en el registro de depuración).", 93 | "tabOptions.inputValidationHeader": "Compruebe también las filas de la tabla deshabilitadas", 94 | "tabOptions.inputValidationInfo": "La activación de esta opción también verifica la validez de las filas de la tabla desactivadas (por ejemplo, si existe un estado, etc.). Esto puede ser útil ya que puede habilitar filas de tabla a través de estados en smartcontrol.x.options. . Al activar esta opción, el adaptador verifica de antemano (es decir, cuando se inicia el adaptador) si las filas son válidas o no.", 95 | "tabOptions.jsonMaxEntriesInfo": "El adaptador proporciona los estados smartcontrol.x.info.log.zoneActivations.json y smartcontrol.x.info.log. ", 96 | "tabOptions.nightEndInfo": "Dependiendo de las coordenadas geográficas establecidas en las opciones de administración de ioBroker, a veces no hay night y / o nightEnd disponible, por ejemplo, en verano en algunas regiones alemanas. Si activa esta opción, el adaptador establecerá: night = '00: 00 'y nightEnd = '02: 00'.", 97 | "tabOptions.nightEndOpt": "Establecer 0: 00/2: 00, si night / nightEnd no está disponible", 98 | "tabOptions.notVerifyBriHeader": "No verifique el brillo si la zona está encendida", 99 | "tabOptions.notVerifyBriInfo": "Para sensores de movimiento y estados de brillo asociados, puede definir aquí si el brillo debe ignorarse si una zona asociada ya está encendida.
Caso de uso: 'Umbral' es el valor de umbral superior del brillo, por encima del cual el adaptador ya no se encenderá cuando se active el sensor de movimiento. Pero esto no es práctico si el sensor de movimiento, por ejemplo, enciende las luces, porque entonces no se detectarán movimientos recurrentes si la luz está encendida y es muy probable que 'Bri' esté por encima del umbral.
Con la activación de esta opción, el brillo no se verifica si una zona asociada ya está encendida.", 100 | "tabOptions.triggerAckHeader": "Estados de activación en estados de usuario como javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "Los cambios de estado en las instancias del adaptador solo se activan si se reconoce (ack) = true (es decir, se reconocen / confirman los estados).
Para estados propios del usuario en javascript.x, 0_userdata.0, Messwerte.0, alias.0, etc., puede cambiar este comportamiento.
Tenga en cuenta: Si se selecciona \"Any (ack: true o ack: false) \", se puede cambiar dos veces si se establece ack: false y poco después de ack: true. Sin embargo, este adaptador evita esto con la opción Ignorar disparador si la última activación del mismo disparador fue hace menos de x segundos .", 102 | "tabOptions.triggerAckOptAny": "Cualquiera (ack: verdadero o ack: falso)", 103 | "tabOptions.triggerAckOptFalse": "ack: solo falso (ignoriere ack: true)", 104 | "tabOptions.triggerAckOptTrue": "ack: solo verdadero (ignoriere ack: falso)", 105 | "tabOptions.triggerLimitHeader": "Ignore el activador si la última activación del mismo activador fue hace menos de x segundos", 106 | "tabOptions.triggerLimitInfo": "Por razones de estabilidad, los disparadores se ignoran si se dispararon hace menos de x segundos. Puede ajustar este número de segundos aquí. No se permite menos de 1 segundo.", 107 | "tabOptions.triggerLimitLabel": "Mínimo 1 segundo requerido", 108 | "will be generated automatically": "se generará automáticamente" 109 | } -------------------------------------------------------------------------------- /admin/i18n/fr/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Version de l'adaptateur", 3 | "Additional conditions": "Conditions additionnelles", 4 | "Always": "Toujours", 5 | "Astro times 'night' and 'nightEnd'": "Astro times 'night' et 'nightEnd'", 6 | "Cancel": "Annuler", 7 | "Deactivate to define detailed criteria for execution": "Désactiver pour définir des critères détaillés d'exécution", 8 | "Device Name": "Nom de l'appareil", 9 | "Do not verify": "Ne pas vérifier", 10 | "End": "Fin", 11 | "Enum Function Name": "Nom de la fonction Enum", 12 | "Execute always": "Exécuter toujours", 13 | "Execution": "Exécution", 14 | "Execution settings for zone": "Paramètres d'exécution pour la zone", 15 | "Fri": "ven", 16 | "Further Adapter Options": "Autres options d'adaptateur", 17 | "Further Options": "Autres options", 18 | "Hello World": "Bonjour le monde", 19 | "Incorrect configuration": "Mauvaise configuration", 20 | "Input Validation": "Validation d'entrée", 21 | "JSON state for recent successful zone activations": "État JSON pour les activations de zone récentes réussies", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "Limiter aux chambres", 24 | "Linked triggers": "Déclencheurs liés", 25 | "Logging": "Enregistrement", 26 | "Mo": "Mo", 27 | "Motion sensors": "Détecteurs de mouvement", 28 | "Name of condition": "Nom de la condition", 29 | "Name of motion sensor": "Nom du capteur de mouvement", 30 | "Name of trigger": "Nom du déclencheur", 31 | "Name of zone": "Nom de la zone", 32 | "Never if...": "Jamais si ...", 33 | "Never switch if...": "Ne changez jamais si ...", 34 | "Never switch off if...": "Ne jamais éteindre si ...", 35 | "Never switch on if...": "Ne jamais allumer si ...", 36 | "Number of entries in JSON states (0-500)": "Nombre maximum d'entrées dans les états JSON (0-500)", 37 | "Object ID under": "ID d'objet sous", 38 | "Off after x sec": "Éteint après x s", 39 | "Ok": "D'accord", 40 | "Other triggers": "Autres déclencheurs", 41 | "Sat": "Sam", 42 | "Sec": "Seconde", 43 | "Second(s)": "Seconde (s)", 44 | "Select": "Sélectionner", 45 | "Select 'never if...'": "Sélectionnez «jamais si ...»", 46 | "Select 'never switch on if...'": "Sélectionnez «ne jamais allumer si ...»", 47 | "Select additional conditions": "Sélectionnez des conditions supplémentaires", 48 | "Select linked triggers": "Sélectionnez les déclencheurs liés", 49 | "Select state": "Sélectionnez l'état", 50 | "Select target devices": "Sélectionnez les appareils cibles", 51 | "Select triggers": "Sélectionnez les déclencheurs", 52 | "Start": "Début", 53 | "State": "Etat", 54 | "State of brightness": "État de luminosité", 55 | "State of condition": "État de condition", 56 | "State of motion sensor": "État du capteur de mouvement", 57 | "State to switch device off": "État pour éteindre l'appareil", 58 | "State to switch device on": "État pour allumer l'appareil", 59 | "State under": "État sous", 60 | "State value": "Valeur de l'état", 61 | "Sun": "Soleil", 62 | "Target devices": "Appareils cibles", 63 | "Target devices: objects": "Appareils cibles: objets", 64 | "Target devices: states": "Appareils cibles: états", 65 | "Target off": "Objectif désactivé", 66 | "Targets: Enum functions": "Cibles: fonctions Enum", 67 | "Targets: URLs": "Cibles: URL", 68 | "Threshold": "Seuil", 69 | "Thu": "jeu", 70 | "Time": "Temps", 71 | "Time based triggers": "Déclencheurs basés sur le temps", 72 | "Time schedule and astro": "Calendrier et astro", 73 | "Toggle": "Basculer", 74 | "Trigger": "Déclencheur", 75 | "Triggers": "Déclencheurs", 76 | "Tue": "Mar", 77 | "URL for switching off": "URL de désactivation", 78 | "URL for switching on": "URL d'activation", 79 | "Value for 'off'": "Valeur pour «off»", 80 | "Value for 'on'": "Valeur pour \"on\"", 81 | "Wed": "mer", 82 | "Zones": "Zones", 83 | "log.verifyOptions.header": "Votre configuration est défectueuse, veuillez corriger comme suit:", 84 | "log.verifyOptions.info": "Veuillez noter que nous vérifions ici uniquement si au moins une ligne de table active existe et si au moins une exécution active est définie dans Zones. D'autres vérifications auront lieu après l'enregistrement de ces options, ce qui redémarrera l'adaptateur. Par conséquent, assurez-vous de vérifier le journal ioBroker: toutes les erreurs supplémentaires y seront affichées.", 85 | "new value": "nouvelle valeur", 86 | "off": "de", 87 | "on": "sur", 88 | "overwrite options": "options d'écrasement", 89 | "tabMain.Doc": "Instructions pour cet adaptateur:", 90 | "tabMain.Welcome": "Bienvenue dans l'adaptateur Smart Control. Sujet actuel du forum ioBroker", 91 | "tabOptions.extendedLogHeader": "Journal d'informations étendu", 92 | "tabOptions.extendedLogInfo": "S'il est désactivé, le journal (niveau 'Info') n'affiche qu'une petite quantité de lignes de journal pendant le démarrage et l'arrêt / redémarrage de l'adaptateur, et toutes les autres informations ne sont affichées que dans le journal de débogage.
S'il est activé, le journal (niveau 'Info') affichera des informations étendues (mais moins que dans le journal de débogage).", 93 | "tabOptions.inputValidationHeader": "Vérifiez également les lignes de tableau désactivées", 94 | "tabOptions.inputValidationInfo": "L'activation de cette option vérifie également la validité des lignes de table désactivées (par exemple, si l'état existe, etc.). Cela peut être utile car vous pouvez activer les lignes de table via des états sous smartcontrol.x.options. . En activant cette option, l'adaptateur vérifie à l'avance (donc au démarrage de l'adaptateur) si les lignes sont valides ou non.", 95 | "tabOptions.jsonMaxEntriesInfo": "L'adaptateur fournit les états smartcontrol.x.info.log.zoneActivations.json et smartcontrol.x.info.log. ", 96 | "tabOptions.nightEndInfo": "En fonction des coordonnées géographiques définies dans les options d'administration d'ioBroker, il n'y a parfois aucune night et / ou nightEnd disponible, par exemple en été dans certaines régions allemandes. Si vous activez cette option, l'adaptateur définira: night = '00: 00 'et nightEnd = '02: 00'.", 97 | "tabOptions.nightEndOpt": "Définir 0: 00/2: 00, si night / nightEnd n'est pas disponible", 98 | "tabOptions.notVerifyBriHeader": "Ne pas vérifier la luminosité si la zone est activée", 99 | "tabOptions.notVerifyBriInfo": "Pour les détecteurs de mouvement et les états de luminosité associés, vous pouvez définir ici si la luminosité doit être ignorée si une zone associée est déjà activée.
Cas d'utilisation: «Seuil» est la valeur de seuil supérieure de la luminosité, au-dessus de laquelle l'adaptateur ne s'allume plus lorsque le capteur de mouvement est déclenché. Mais ce n'est pas pratique si le capteur de mouvement, par exemple, allume des lumières, car alors aucun mouvement récurrent ne sera détecté si la lumière est allumée et «Bri» est très probablement au-dessus du seuil.
Avec l'activation de cette option, la luminosité n'est pas vérifiée si une zone associée est déjà activée.", 100 | "tabOptions.triggerAckHeader": "Déclenchez les états sous les états utilisateur comme javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "Les changements d'état sous les instances d'adaptateur ne sont déclenchés que si acquitter (ack) = true (c'est-à-dire que les états sont acquittés / confirmés).
Pour les états propres à l'utilisateur sous javascript.x, 0_userdata.0, Messwerte.0, alias.0 etc., vous pouvez modifier ce comportement.
Remarque: si \"Any (ack: true ou ack: false) \" est sélectionné, il peut être commuté deux fois si ack: false et peu de temps après ack: true est défini. Cependant, cet adaptateur empêche cela avec l'option Ignorer le déclencheur si le dernier déclenchement du même déclencheur remonte à moins de x secondes .", 102 | "tabOptions.triggerAckOptAny": "Any (ack: true ou ack: false)", 103 | "tabOptions.triggerAckOptFalse": "ack: false uniquement (ignoriere ack: true)", 104 | "tabOptions.triggerAckOptTrue": "ack: true uniquement (ignoriere ack: false)", 105 | "tabOptions.triggerLimitHeader": "Ignorer le déclencheur si le dernier déclenchement du même déclencheur remonte à moins de x secondes", 106 | "tabOptions.triggerLimitInfo": "Pour des raisons de stabilité, les déclencheurs sont ignorés s'ils ont été déclenchés il y a moins de x secondes. Vous pouvez régler ce nombre de secondes ici. Moins d'une seconde n'est pas autorisée.", 107 | "tabOptions.triggerLimitLabel": "Minimum 1 seconde requis", 108 | "will be generated automatically": "sera généré automatiquement" 109 | } -------------------------------------------------------------------------------- /admin/i18n/it/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Versione adattatore", 3 | "Additional conditions": "Condizioni supplementari", 4 | "Always": "Sempre", 5 | "Astro times 'night' and 'nightEnd'": "Astro times 'night' e 'nightEnd'", 6 | "Cancel": "Annulla", 7 | "Deactivate to define detailed criteria for execution": "Disattivare per definire criteri dettagliati per l'esecuzione", 8 | "Device Name": "Nome del dispositivo", 9 | "Do not verify": "Non verificare", 10 | "End": "Fine", 11 | "Enum Function Name": "Nome funzione enum", 12 | "Execute always": "Esegui sempre", 13 | "Execution": "Esecuzione", 14 | "Execution settings for zone": "Impostazioni di esecuzione per la zona", 15 | "Fri": "Ven", 16 | "Further Adapter Options": "Ulteriori opzioni dell'adattatore", 17 | "Further Options": "Ulteriori opzioni", 18 | "Hello World": "Ciao mondo", 19 | "Incorrect configuration": "Configurazione errata", 20 | "Input Validation": "Convalida dell'input", 21 | "JSON state for recent successful zone activations": "Stato JSON per le recenti attivazioni di zona riuscite", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "Limita alle stanze", 24 | "Linked triggers": "Trigger collegati", 25 | "Logging": "Registrazione", 26 | "Mo": "Mo", 27 | "Motion sensors": "Sensori di movimento", 28 | "Name of condition": "Nome della condizione", 29 | "Name of motion sensor": "Nome del sensore di movimento", 30 | "Name of trigger": "Nome del trigger", 31 | "Name of zone": "Nome della zona", 32 | "Never if...": "Mai se ...", 33 | "Never switch if...": "Non cambiare mai se ...", 34 | "Never switch off if...": "Non spegnere mai se ...", 35 | "Never switch on if...": "Non accendere mai se ...", 36 | "Number of entries in JSON states (0-500)": "Numero massimo di voci negli stati JSON (0-500)", 37 | "Object ID under": "ID oggetto sotto", 38 | "Off after x sec": "Spento dopo x sec", 39 | "Ok": "Ok", 40 | "Other triggers": "Altri fattori scatenanti", 41 | "Sat": "Sab", 42 | "Sec": "Sec", 43 | "Second(s)": "Secondo / i", 44 | "Select": "Selezionare", 45 | "Select 'never if...'": "Seleziona \"mai se ...\"", 46 | "Select 'never switch on if...'": "Seleziona \"non accendere mai se ...\"", 47 | "Select additional conditions": "Seleziona condizioni aggiuntive", 48 | "Select linked triggers": "Seleziona i trigger collegati", 49 | "Select state": "Seleziona stato", 50 | "Select target devices": "Seleziona i dispositivi di destinazione", 51 | "Select triggers": "Seleziona i trigger", 52 | "Start": "Inizio", 53 | "State": "Stato", 54 | "State of brightness": "Stato di luminosità", 55 | "State of condition": "Stato di conservazione", 56 | "State of motion sensor": "Sensore di stato di movimento", 57 | "State to switch device off": "Stato per spegnere il dispositivo", 58 | "State to switch device on": "Stato per accendere il dispositivo", 59 | "State under": "Stato sotto", 60 | "State value": "Valore dello stato", 61 | "Sun": "Sole", 62 | "Target devices": "Dispositivi di destinazione", 63 | "Target devices: objects": "Dispositivi di destinazione: oggetti", 64 | "Target devices: states": "Dispositivi di destinazione: stati", 65 | "Target off": "Obiettivo spento", 66 | "Targets: Enum functions": "Obiettivi: funzioni Enum", 67 | "Targets: URLs": "Target: URL", 68 | "Threshold": "Soglia", 69 | "Thu": "Gio", 70 | "Time": "Tempo", 71 | "Time based triggers": "Trigger basati sul tempo", 72 | "Time schedule and astro": "Orario e astro", 73 | "Toggle": "Attiva / disattiva", 74 | "Trigger": "Trigger", 75 | "Triggers": "Trigger", 76 | "Tue": "Mar", 77 | "URL for switching off": "URL per lo spegnimento", 78 | "URL for switching on": "URL per l'accensione", 79 | "Value for 'off'": "Valore per \"off\"", 80 | "Value for 'on'": "Valore per \"on\"", 81 | "Wed": "Mercoledì", 82 | "Zones": "Zone", 83 | "log.verifyOptions.header": "La tua configurazione è difettosa, correggi come segue:", 84 | "log.verifyOptions.info": "Si noti che qui controlliamo solo se esiste almeno una riga della tabella attiva e se almeno un'esecuzione attiva è definita in Zone. Dopo il salvataggio di queste opzioni avranno luogo ulteriori verifiche, che riavvieranno l'adattatore. Quindi assicurati di controllare il registro di ioBroker: eventuali errori aggiuntivi verranno visualizzati lì.", 85 | "new value": "nuovo valore", 86 | "off": "spento", 87 | "on": "sopra", 88 | "overwrite options": "opzioni di sovrascrittura", 89 | "tabMain.Doc": "Istruzioni per questo adattatore:", 90 | "tabMain.Welcome": "Benvenuto in Smart Control Adapter. Thread corrente del forum ioBroker", 91 | "tabOptions.extendedLogHeader": "Registro informazioni esteso", 92 | "tabOptions.extendedLogInfo": "Se disattivato, il registro (livello \"Info\") mostra solo una piccola quantità di righe di registro durante l'avvio e l'arresto / riavvio dell'adattatore e tutte le altre informazioni vengono visualizzate solo nel registro di debug.
Se attivato, il registro (livello \"Info\") mostrerà informazioni estese (ma meno che nel registro di debug).", 93 | "tabOptions.inputValidationHeader": "Controlla anche le righe della tabella disabilitate", 94 | "tabOptions.inputValidationInfo": "L'attivazione di questa opzione verifica anche la validità delle righe della tabella disattivate (ad esempio se lo stato esiste, ecc.). Ciò può essere utile in quanto è possibile abilitare le righe della tabella tramite gli stati in smartcontrol.x.options. . Attivando questa opzione, l'adattatore verifica in anticipo (quindi all'avvio dell'adattatore) se le righe sono valide o meno.", 95 | "tabOptions.jsonMaxEntriesInfo": "L'adattatore fornisce gli stati smartcontrol.x.info.log.zoneActivations.json e smartcontrol.x.info.log. ", 96 | "tabOptions.nightEndInfo": "A seconda delle coordinate geografiche impostate nelle opzioni di amministrazione di ioBroker, a volte non sono disponibili night e / o nightEnd , ad esempio in estate in alcune regioni tedesche. Se attivi questa opzione, l'adattatore imposterà: night = '00: 00 'e nightEnd = '02: 00'.", 97 | "tabOptions.nightEndOpt": "Impostare 0: 00/2: 00, se night / nightEnd non è disponibile", 98 | "tabOptions.notVerifyBriHeader": "Non verificare la luminosità se la zona è attiva", 99 | "tabOptions.notVerifyBriInfo": "Per i sensori di movimento e gli stati di luminosità associati, è possibile definire qui se la luminosità deve essere ignorata se una zona associata è già attiva.
Caso d'uso: 'Soglia' è il valore di soglia superiore della luminosità, al di sopra del quale l'adattatore non si accenderà più quando viene attivato il sensore di movimento. Ma questo non è pratico se il sensore di movimento, ad esempio, accende le luci, perché in tal caso non verranno rilevati movimenti ricorrenti se la luce è accesa e 'Bri' è molto probabilmente sopra la soglia.
Con l'attivazione di questa opzione la luminosità non viene controllata se una zona associata è già accesa.", 100 | "tabOptions.triggerAckHeader": "Stati di attivazione in stati utente come javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "Le modifiche degli stati nelle istanze dell'adattatore vengono attivate solo se confirm (ack) = true (ovvero gli stati vengono riconosciuti / confermati).
Per gli stati utente in javascript.x, 0_userdata.0, Messwerte.0, alias.0 ecc. Puoi modificare questo comportamento.
Nota: se è selezionato \"Any (ack: true o ack: false) \", potrebbe essere cambiato due volte se è impostato ack: false e subito dopo ack: true. Tuttavia, questo adattatore lo impedisce con l'opzione Ignora trigger se l'ultimo trigger dello stesso trigger è stato inferiore a x secondi prima .", 102 | "tabOptions.triggerAckOptAny": "Qualsiasi (ack: true o ack: false)", 103 | "tabOptions.triggerAckOptFalse": "ack: false only (ignoriere ack: true)", 104 | "tabOptions.triggerAckOptTrue": "ack: true only (ignoriere ack: false)", 105 | "tabOptions.triggerLimitHeader": "Ignora il trigger se l'ultimo trigger dello stesso trigger è stato inferiore a x secondi prima", 106 | "tabOptions.triggerLimitInfo": "Per motivi di stabilità, i trigger vengono ignorati se sono stati attivati meno di x secondi fa. Puoi regolare questo numero di secondi qui. Non è consentito meno di 1 secondo.", 107 | "tabOptions.triggerLimitLabel": "Richiesto minimo 1 secondo", 108 | "will be generated automatically": "verrà generato automaticamente" 109 | } -------------------------------------------------------------------------------- /admin/i18n/nl/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Adapterversie", 3 | "Additional conditions": "Aanvullende voorwaarden", 4 | "Always": "Altijd", 5 | "Astro times 'night' and 'nightEnd'": "Astrotijden 'nacht' en 'nachtEinde'", 6 | "Cancel": "Annuleer", 7 | "Deactivate to define detailed criteria for execution": "Deactiveer om gedetailleerde criteria voor uitvoering te definiëren", 8 | "Device Name": "Toestelnaam", 9 | "Do not verify": "Verifieer niet", 10 | "End": "Einde", 11 | "Enum Function Name": "Enum Functienaam", 12 | "Execute always": "Voer altijd uit", 13 | "Execution": "Uitvoering", 14 | "Execution settings for zone": "Uitvoeringsinstellingen voor zone", 15 | "Fri": "Vr", 16 | "Further Adapter Options": "Verdere adapteropties", 17 | "Further Options": "Verdere opties", 18 | "Hello World": "Hallo Wereld", 19 | "Incorrect configuration": "Onjuiste configuratie", 20 | "Input Validation": "Invoervalidatie", 21 | "JSON state for recent successful zone activations": "JSON-status voor recente succesvolle zone-activeringen", 22 | "JSON states under .info": "JSON-gegevenspunkte onder .info", 23 | "Limit to rooms": "Beperk tot kamers", 24 | "Linked triggers": "Gekoppelde triggers", 25 | "Logging": "Logboekregistratie", 26 | "Mo": "Ma", 27 | "Motion sensors": "Bewegingssensoren", 28 | "Name of condition": "Naam van de aandoening", 29 | "Name of motion sensor": "Naam van bewegingssensor", 30 | "Name of trigger": "Naam van de trigger", 31 | "Name of zone": "Naam van de zone", 32 | "Never if...": "Nooit als ...", 33 | "Never switch if...": "Nooit overschakelen als ...", 34 | "Never switch off if...": "Schakel nooit uit als ...", 35 | "Never switch on if...": "Nooit inschakelen als ...", 36 | "Number of entries in JSON states (0-500)": "Max. Aantal vermeldingen in JSON-staten (0-500)", 37 | "Object ID under": "Object-ID onder", 38 | "Off after x sec": "Uit na x sec", 39 | "Ok": "OK", 40 | "Other triggers": "Andere triggers", 41 | "Sat": "Za", 42 | "Sec": "Sec", 43 | "Second(s)": "Tweede (n)", 44 | "Select": "Selecteer", 45 | "Select 'never if...'": "Selecteer 'nooit als ...'", 46 | "Select 'never switch on if...'": "Selecteer 'nooit inschakelen als ...'", 47 | "Select additional conditions": "Selecteer aanvullende voorwaarden", 48 | "Select linked triggers": "Selecteer gekoppelde triggers", 49 | "Select state": "Selecteer staat", 50 | "Select target devices": "Selecteer doelapparaten", 51 | "Select triggers": "Selecteer triggers", 52 | "Start": "Begin", 53 | "State": "Staat", 54 | "State of brightness": "Staat van helderheid", 55 | "State of condition": "Staat van conditie", 56 | "State of motion sensor": "Staat van bewegingssensor", 57 | "State to switch device off": "Staat om het apparaat uit te schakelen", 58 | "State to switch device on": "Staat om het apparaat in te schakelen", 59 | "State under": "Staat onder", 60 | "State value": "Staat waarde", 61 | "Sun": "Zon", 62 | "Target devices": "Target apparaten", 63 | "Target devices: objects": "Doelapparaten: objecten", 64 | "Target devices: states": "Doelapparaten: staten", 65 | "Target off": "Richt af", 66 | "Targets: Enum functions": "Doelen: Enum-functies", 67 | "Targets: URLs": "Doelen: URL's", 68 | "Threshold": "Drempel", 69 | "Thu": "Do", 70 | "Time": "Tijd", 71 | "Time based triggers": "Op tijd gebaseerde triggers", 72 | "Time schedule and astro": "Tijdschema en astro", 73 | "Toggle": "Wissel", 74 | "Trigger": "Trekker", 75 | "Triggers": "Triggers", 76 | "Tue": "Di", 77 | "URL for switching off": "URL voor uitschakelen", 78 | "URL for switching on": "URL voor inschakelen", 79 | "Value for 'off'": "Waarde voor 'uit'", 80 | "Value for 'on'": "Waarde voor 'aan'", 81 | "Wed": "Wo", 82 | "Zones": "Zones", 83 | "log.verifyOptions.header": "Uw configuratie is defect. Los dit als volgt op:", 84 | "log.verifyOptions.info": "Houd er rekening mee dat we hier alleen controleren of er minimaal één actieve tabelrij bestaat en of er minimaal één actieve uitvoering is gedefinieerd in Zones. Verdere verificaties zullen plaatsvinden na het opslaan van deze opties, waardoor de adapter opnieuw wordt opgestart. Controleer daarom het ioBroker-logboek: eventuele extra fouten worden daar weergegeven.", 85 | "new value": "nieuwe waarde", 86 | "off": "uit", 87 | "on": "Aan", 88 | "overwrite options": "overschrijfopties", 89 | "tabMain.Doc": "Instructies voor deze adapter:", 90 | "tabMain.Welcome": "Welkom bij de Smart Control Adapter. Huidige ioBroker Forum-thread", 91 | "tabOptions.extendedLogHeader": "Uitgebreid informatielogboek", 92 | "tabOptions.extendedLogInfo": "Indien gedeactiveerd, toont het log (niveau 'Info') slechts een klein aantal logregels tijdens het starten en stoppen / herstarten van de adapter, en wordt alle andere informatie alleen weergegeven in het foutopsporingslogboek.
Indien geactiveerd, zal het log (niveau 'Info') uitgebreide informatie tonen (maar minder dan in debug log).", 93 | "tabOptions.inputValidationHeader": "Controleer ook uitgeschakelde tabelrijen", 94 | "tabOptions.inputValidationInfo": "Als u deze optie activeert, verifieert u ook de geldigheid van gedeactiveerde tabelrijen (bijvoorbeeld of de status bestaat, enz.). Dit kan handig zijn omdat u tabelrijen kunt inschakelen via statussen onder smartcontrol.x.options. . Door deze optie te activeren, controleert de adapter van tevoren (dus wanneer de adapter start) of de rijen geldig zijn of niet.", 95 | "tabOptions.jsonMaxEntriesInfo": "De adapter biedt de toestanden smartcontrol.x.info.log.zoneActivations.json en smartcontrol.x.info.log. ", 96 | "tabOptions.nightEndInfo": "Afhankelijk van de geografische coördinaten die zijn ingesteld in de ioBroker admin-opties, is er soms geen night en / of nightEnd beschikbaar, bijvoorbeeld in de zomer in sommige Duitse regio's. Als u deze optie activeert, stelt de adapter in: night = '00: 00 'en nightEnd = '02: 00'.", 97 | "tabOptions.nightEndOpt": "Stel 0: 00/2: 00 in als nacht / nachtEinde niet beschikbaar is", 98 | "tabOptions.notVerifyBriHeader": "Controleer de helderheid niet als de zone is ingeschakeld", 99 | "tabOptions.notVerifyBriInfo": "Voor bewegingssensoren en bijbehorende helderheidstoestanden kunt u hier bepalen of de helderheid moet worden genegeerd als er al een bijbehorende zone is ingeschakeld.
Use Case: 'Threshold' is de bovenste drempelwaarde van de helderheid, waarboven de adapter niet meer inschakelt als de bewegingssensor wordt geactiveerd. Maar dit is niet praktisch als de bewegingssensor bv lampen aanzet, want dan worden er geen terugkerende bewegingen gedetecteerd als het licht aan is en is 'Bri' hoogstwaarschijnlijk boven de drempel.
Bij activering van deze optie wordt de helderheid niet gecontroleerd als er al een bijbehorende zone is ingeschakeld.", 100 | "tabOptions.triggerAckHeader": "Triggerstatussen onder gebruikersstatussen zoals javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "Veranderingen van toestanden onder adapterinstanties worden alleen geactiveerd als bevestigen (ack) = true (dwz toestanden worden bevestigd / bevestigd).
Voor gebruikers-eigen staten onder javascript.x, 0_userdata.0, Messwerte.0, alias.0 etc. kun je dit gedrag veranderen.
Let op: Als \"Any (ack: true of ack: false) \" is geselecteerd, kan het twee keer worden geschakeld als ack: false en kort daarna ack: true is ingesteld. Deze adapter voorkomt dit echter met de optie Negeer trigger als de laatste activering van dezelfde trigger minder dan x seconden geleden was .", 102 | "tabOptions.triggerAckOptAny": "Elke (ack: true of ack: false)", 103 | "tabOptions.triggerAckOptFalse": "ack: false only (ignoriere ack: true)", 104 | "tabOptions.triggerAckOptTrue": "ack: alleen waar (ignoriere ack: false)", 105 | "tabOptions.triggerLimitHeader": "Negeer de trigger als de laatste activering van dezelfde trigger minder dan x seconden geleden was", 106 | "tabOptions.triggerLimitInfo": "Om stabiliteitsredenen worden triggers genegeerd als ze minder dan x seconden geleden zijn geactiveerd. U kunt dit aantal seconden hier aanpassen. Minder dan 1 seconde is niet toegestaan.", 107 | "tabOptions.triggerLimitLabel": "Minimaal 1 seconde vereist", 108 | "will be generated automatically": "wordt automatisch gegenereerd" 109 | } -------------------------------------------------------------------------------- /admin/i18n/pl/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Wersja adaptera", 3 | "Additional conditions": "Dodatkowe warunki", 4 | "Always": "Zawsze", 5 | "Astro times 'night' and 'nightEnd'": "Astro czasy 'noc' i 'noc' koniec '", 6 | "Cancel": "Anuluj", 7 | "Deactivate to define detailed criteria for execution": "Dezaktywuj, aby zdefiniować szczegółowe kryteria wykonania", 8 | "Device Name": "Nazwa urządzenia", 9 | "Do not verify": "Nie weryfikuj", 10 | "End": "Koniec", 11 | "Enum Function Name": "Nazwa funkcji wyliczenia", 12 | "Execute always": "Wykonuj zawsze", 13 | "Execution": "Wykonanie", 14 | "Execution settings for zone": "Ustawienia wykonywania dla strefy", 15 | "Fri": "Pt", 16 | "Further Adapter Options": "Dalsze opcje adapterów", 17 | "Further Options": "Dalsze opcje", 18 | "Hello World": "Witaj świecie", 19 | "Incorrect configuration": "Nieprawidłowa konfiguracja", 20 | "Input Validation": "Walidacja danych wejściowych", 21 | "JSON state for recent successful zone activations": "Stan JSON dla ostatnich udanych aktywacji stref", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "Ogranicz do pokoi", 24 | "Linked triggers": "Powiązane wyzwalacze", 25 | "Logging": "Logowanie", 26 | "Mo": "Mo", 27 | "Motion sensors": "Czujniki ruchu", 28 | "Name of condition": "Nazwa stanu", 29 | "Name of motion sensor": "Nazwa czujnika ruchu", 30 | "Name of trigger": "Nazwa wyzwalacza", 31 | "Name of zone": "Nazwa strefy", 32 | "Never if...": "Nigdy, jeśli ...", 33 | "Never switch if...": "Nigdy nie przełączaj, jeśli ...", 34 | "Never switch off if...": "Nigdy nie wyłączaj, jeśli ...", 35 | "Never switch on if...": "Nigdy nie włączaj, jeśli ...", 36 | "Number of entries in JSON states (0-500)": "Maksymalna liczba wpisów w stanach JSON (0-500)", 37 | "Object ID under": "Identyfikator obiektu pod", 38 | "Off after x sec": "Wył. Po x sek", 39 | "Ok": "Dobrze", 40 | "Other triggers": "Inne wyzwalacze", 41 | "Sat": "Sob", 42 | "Sec": "Sek", 43 | "Second(s)": "Sekundy)", 44 | "Select": "Wybierz", 45 | "Select 'never if...'": "Wybierz „nigdy, jeśli ...”", 46 | "Select 'never switch on if...'": "Wybierz „nigdy nie włączaj, jeśli ...”", 47 | "Select additional conditions": "Wybierz dodatkowe warunki", 48 | "Select linked triggers": "Wybierz połączone wyzwalacze", 49 | "Select state": "Wybierz stan", 50 | "Select target devices": "Wybierz urządzenia docelowe", 51 | "Select triggers": "Wybierz wyzwalacze", 52 | "Start": "Początek", 53 | "State": "Stan", 54 | "State of brightness": "Stan jasności", 55 | "State of condition": "Stan kondycji", 56 | "State of motion sensor": "Stan czujnika ruchu", 57 | "State to switch device off": "Stan wyłączenia urządzenia", 58 | "State to switch device on": "Stan włączenia urządzenia", 59 | "State under": "Stan poniżej", 60 | "State value": "Wartość stanu", 61 | "Sun": "Słońce", 62 | "Target devices": "Kieruj na urządzenia", 63 | "Target devices: objects": "Urządzenia docelowe: obiekty", 64 | "Target devices: states": "Urządzenia docelowe: stany", 65 | "Target off": "Wyceluj", 66 | "Targets: Enum functions": "Cele: funkcje wyliczeniowe", 67 | "Targets: URLs": "Cele: adresy URL", 68 | "Threshold": "Próg", 69 | "Thu": "Czw", 70 | "Time": "Czas", 71 | "Time based triggers": "Wyzwalacze oparte na czasie", 72 | "Time schedule and astro": "Harmonogram i astro", 73 | "Toggle": "Przełącznik", 74 | "Trigger": "Wyzwalacz", 75 | "Triggers": "Wyzwalacze", 76 | "Tue": "Wt", 77 | "URL for switching off": "URL do wyłączenia", 78 | "URL for switching on": "URL do włączenia", 79 | "Value for 'off'": "Wartość „off”", 80 | "Value for 'on'": "Wartość dla „on”", 81 | "Wed": "Poślubić", 82 | "Zones": "Strefy", 83 | "log.verifyOptions.header": "Twoja konfiguracja jest wadliwa, napraw w następujący sposób:", 84 | "log.verifyOptions.info": "Należy pamiętać, że sprawdzamy tutaj tylko, czy istnieje co najmniej jeden aktywny wiersz tabeli i czy co najmniej jedno aktywne wykonanie jest zdefiniowane w strefach. Dalsze weryfikacje zostaną przeprowadzone po zapisaniu tych opcji, co spowoduje ponowne uruchomienie adaptera. Dlatego sprawdź dziennik ioBroker: będą tam wyświetlane wszelkie dodatkowe błędy.", 85 | "new value": "Nowa wartość", 86 | "off": "poza", 87 | "on": "na", 88 | "overwrite options": "nadpisać opcje", 89 | "tabMain.Doc": "Instrukcje dotyczące tego adaptera:", 90 | "tabMain.Welcome": "Witamy w adapterze Smart Control. Aktualny wątek na forum ioBroker", 91 | "tabOptions.extendedLogHeader": "Rozszerzony dziennik informacyjny", 92 | "tabOptions.extendedLogInfo": "Po dezaktywacji dziennik (poziom „Informacje”) wyświetla tylko niewielką liczbę wierszy dziennika podczas uruchamiania i zatrzymywania / ponownego uruchamiania adaptera, a wszystkie inne informacje są wyświetlane tylko w dzienniku debugowania.
Jeśli jest aktywowany, dziennik (poziom „Informacje”) będzie zawierał rozszerzone informacje (ale mniej niż w dzienniku debugowania).", 93 | "tabOptions.inputValidationHeader": "Zaznacz również wyłączone wiersze tabeli", 94 | "tabOptions.inputValidationInfo": "Aktywacja tej opcji weryfikuje również dezaktywowane wiersze tabeli pod względem ważności (np. Czy istnieje stan itp.). Może to być przydatne, ponieważ możesz włączyć wiersze tabeli za pośrednictwem stanów w smartcontrol.x.options. . Aktywując tę opcję, adapter sprawdza z wyprzedzeniem (czyli podczas uruchamiania adaptera), czy wiersze są prawidłowe, czy nie.", 95 | "tabOptions.jsonMaxEntriesInfo": "Adapter udostępnia stany smartcontrol.x.info.log.zoneActivations.json i smartcontrol.x.info.log. ", 96 | "tabOptions.nightEndInfo": "W zależności od współrzędnych geograficznych ustawionych w opcjach administratora ioBroker, czasami nie jest dostępna nightEnd night i / lub nightEnd , np. Latem w niektórych regionach Niemiec. Jeśli włączysz tę opcję, adapter ustawi: night = '00: 00 'i nightEnd = '02: 00'.", 97 | "tabOptions.nightEndOpt": "Ustaw 0: 00/2: 00, jeśli noc / noc Koniec nie jest dostępny", 98 | "tabOptions.notVerifyBriHeader": "Nie sprawdzaj jasności, jeśli strefa jest włączona", 99 | "tabOptions.notVerifyBriInfo": "W przypadku czujników ruchu i powiązanych stanów jasności można tutaj określić, czy jasność ma być ignorowana, jeśli skojarzona strefa jest już włączona.
Przykład zastosowania: „Próg” to górna wartość progowa jasności, powyżej której adapter nie będzie się już włączał po wyzwoleniu czujnika ruchu. Nie jest to jednak praktyczne, jeśli czujnik ruchu np. Włącza światła, ponieważ wtedy żadne powtarzające się ruchy nie będą wykrywane, jeśli światło jest włączone, a „Bri” jest najprawdopodobniej powyżej progu.
Po włączeniu tej opcji jasność nie jest sprawdzana, jeśli przynależna strefa jest już włączona.", 100 | "tabOptions.triggerAckHeader": "Stany wyzwalania w stanach użytkownika, takich jak javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "Zmiany stanów w instancjach adaptera są wyzwalane tylko wtedy, gdy potwierdzenie (ACK) = true (tj. Stany są potwierdzane / potwierdzane).
W przypadku stanów własnych użytkownika w javascript.x, 0_userdata.0, Messwerte.0, alias.0 itd. Możesz zmienić to zachowanie.
Uwaga: Jeśli wybrano \"Any (ACK: true lub ACK: FAŁSZ) \", może zostać przełączone dwukrotnie, jeśli zostanie ustawiona opcja ACK: FAŁSZ i krótko po ustawieniu ACK: TRUE. Jednak ten adapter zapobiega temu za pomocą opcji Ignoruj wyzwalacz, jeśli ostatnie wyzwolenie tego samego wyzwalacza było mniej niż x sekund temu .", 102 | "tabOptions.triggerAckOptAny": "Any (ACK: true lub ACK: FAŁSZ)", 103 | "tabOptions.triggerAckOptFalse": "ACK: FALSE only (ignoriere ACK: true)", 104 | "tabOptions.triggerAckOptTrue": "ACK: tylko true (ignoriere ACK: false)", 105 | "tabOptions.triggerLimitHeader": "Ignoruj wyzwalacz, jeśli ostatnie wyzwolenie tego samego wyzwalacza było mniej niż x sekund temu", 106 | "tabOptions.triggerLimitInfo": "Ze względu na stabilność wyzwalacze są ignorowane, jeśli zostały uruchomione mniej niż x sekund temu. Tutaj możesz dostosować liczbę sekund. Mniej niż 1 sekunda jest niedozwolona.", 107 | "tabOptions.triggerLimitLabel": "Wymagana minimum 1 sekunda", 108 | "will be generated automatically": "zostanie wygenerowany automatycznie" 109 | } -------------------------------------------------------------------------------- /admin/i18n/pt/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Versão do Adaptador", 3 | "Additional conditions": "Condições adicionais", 4 | "Always": "Sempre", 5 | "Astro times 'night' and 'nightEnd'": "Astro vezes 'night' e 'nightEnd'", 6 | "Cancel": "Cancelar", 7 | "Deactivate to define detailed criteria for execution": "Desative para definir critérios detalhados de execução", 8 | "Device Name": "Nome do dispositivo", 9 | "Do not verify": "Não verifique", 10 | "End": "Fim", 11 | "Enum Function Name": "Nome da Função Enum", 12 | "Execute always": "Executar sempre", 13 | "Execution": "Execução", 14 | "Execution settings for zone": "Configurações de execução para zona", 15 | "Fri": "Sex", 16 | "Further Adapter Options": "Outras opções de adaptador", 17 | "Further Options": "Opções Adicionais", 18 | "Hello World": "Olá Mundo", 19 | "Incorrect configuration": "Configuração incorreta", 20 | "Input Validation": "Validação de entrada", 21 | "JSON state for recent successful zone activations": "Estado JSON para recentes ativações de zona bem-sucedidas", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "Limite de salas", 24 | "Linked triggers": "Gatilhos vinculados", 25 | "Logging": "Exploração madeireira", 26 | "Mo": "Mo", 27 | "Motion sensors": "Sensores de movimento", 28 | "Name of condition": "Nome da condição", 29 | "Name of motion sensor": "Nome do sensor de movimento", 30 | "Name of trigger": "Nome do gatilho", 31 | "Name of zone": "Nome da zona", 32 | "Never if...": "Nunca se ...", 33 | "Never switch if...": "Nunca troque se ...", 34 | "Never switch off if...": "Nunca desligue se ...", 35 | "Never switch on if...": "Nunca ligue se ...", 36 | "Number of entries in JSON states (0-500)": "Número máximo de entradas em estados JSON (0-500)", 37 | "Object ID under": "ID do objeto em", 38 | "Off after x sec": "Desligado após x seg", 39 | "Ok": "Está bem", 40 | "Other triggers": "Outros gatilhos", 41 | "Sat": "Sentou", 42 | "Sec": "Seg", 43 | "Second(s)": "Segundo (s)", 44 | "Select": "Selecione", 45 | "Select 'never if...'": "Selecione 'nunca se ...'", 46 | "Select 'never switch on if...'": "Selecione 'nunca ligar se ...'", 47 | "Select additional conditions": "Selecione condições adicionais", 48 | "Select linked triggers": "Selecione acionadores vinculados", 49 | "Select state": "Selecione o estado", 50 | "Select target devices": "Selecione os dispositivos alvo", 51 | "Select triggers": "Selecione gatilhos", 52 | "Start": "Começar", 53 | "State": "Estado", 54 | "State of brightness": "Estado de brilho", 55 | "State of condition": "Estado de condição", 56 | "State of motion sensor": "Estado do sensor de movimento", 57 | "State to switch device off": "Estado para desligar o dispositivo", 58 | "State to switch device on": "Estado para ligar o dispositivo", 59 | "State under": "Estado sob", 60 | "State value": "Valor do estado", 61 | "Sun": "Sol", 62 | "Target devices": "Dispositivos alvo", 63 | "Target devices: objects": "Dispositivos alvo: objetos", 64 | "Target devices: states": "Dispositivos alvo: estados", 65 | "Target off": "Alvo desligado", 66 | "Targets: Enum functions": "Alvos: funções Enum", 67 | "Targets: URLs": "Alvos: URLs", 68 | "Threshold": "Limite", 69 | "Thu": "qui", 70 | "Time": "Tempo", 71 | "Time based triggers": "Gatilhos baseados em tempo", 72 | "Time schedule and astro": "Cronograma e astro", 73 | "Toggle": "Alternancia", 74 | "Trigger": "Desencadear", 75 | "Triggers": "Gatilhos", 76 | "Tue": "ter", 77 | "URL for switching off": "URL para desligar", 78 | "URL for switching on": "URL para ligar", 79 | "Value for 'off'": "Valor para 'desligado'", 80 | "Value for 'on'": "Valor para 'on'", 81 | "Wed": "Casar", 82 | "Zones": "Zonas", 83 | "log.verifyOptions.header": "Sua configuração está com defeito, corrija o seguinte:", 84 | "log.verifyOptions.info": "Observe que apenas verificamos aqui se existe pelo menos uma linha ativa da tabela e se pelo menos uma execução ativa está definida nas zonas. Verificações adicionais ocorrerão após salvar essas opções, o que reiniciará o adaptador. Portanto, certifique-se de verificar o log do ioBroker: quaisquer erros adicionais serão mostrados lá.", 85 | "new value": "novo valor", 86 | "off": "fora", 87 | "on": "em", 88 | "overwrite options": "opções de sobrescrever", 89 | "tabMain.Doc": "Instruções para este adaptador:", 90 | "tabMain.Welcome": "Bem-vindo ao Adaptador Smart Control. Tópico atual do fórum ioBroker", 91 | "tabOptions.extendedLogHeader": "Registro de informações estendidas", 92 | "tabOptions.extendedLogInfo": "Se desativado, o log (nível 'Info') mostra apenas uma pequena quantidade de linhas de log durante a inicialização e parada / reinicialização do adaptador e todas as outras informações são exibidas apenas no log de depuração.
Se ativado, o log (nível 'Info') mostrará informações estendidas (mas menos do que no log de depuração).", 93 | "tabOptions.inputValidationHeader": "Verifique também as linhas da tabela desativadas", 94 | "tabOptions.inputValidationInfo": "Ativar esta opção verifica também a validade das linhas da tabela desativadas (por exemplo, se existe estado, etc.). Isso pode ser útil, pois você pode habilitar as linhas da tabela por meio de estados em smartcontrol.x.options. . Ao ativar essa opção, o adaptador verifica com antecedência (quando o adaptador é iniciado) se as linhas são válidas ou não.", 95 | "tabOptions.jsonMaxEntriesInfo": "O adaptador fornece os estados smartcontrol.x.info.log.zoneActivations.json e smartcontrol.x.info.log. ", 96 | "tabOptions.nightEndInfo": "Dependendo das coordenadas geográficas definidas nas opções de administração do ioBroker, às vezes não há night e / ou nightEnd disponíveis, por exemplo, no verão em algumas regiões da Alemanha. Se você ativar esta opção, o adaptador definirá: night = '00: 00 'e nightEnd = '02: 00'.", 97 | "tabOptions.nightEndOpt": "Defina 0: 00/2: 00, se night / nightEnd não estiver disponível", 98 | "tabOptions.notVerifyBriHeader": "Não verifique o brilho se a zona estiver ligada", 99 | "tabOptions.notVerifyBriInfo": "Para sensores de movimento e estados de brilho associados, você pode definir aqui se o brilho deve ser ignorado se uma zona associada já estiver ativada.
Caso de uso: 'Limite' é o valor limite superior do brilho, acima do qual o adaptador não ligará mais quando o sensor de movimento for acionado. Mas isso não é prático se o sensor de movimento, por exemplo, ligar as luzes, porque então nenhum movimento recorrente será detectado se a luz estiver ligada e 'Bri' provavelmente estiver acima do limite.
Com a ativação desta opção, o brilho não é verificado se uma zona associada já estiver ligada.", 100 | "tabOptions.triggerAckHeader": "Estados de acionamento em estados de usuário como javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "As alterações de estados nas instâncias do adaptador são acionadas apenas se reconhecer (ack) = true (ou seja, os estados são reconhecidos / confirmados).
Para estados próprios do usuário em javascript.x, 0_userdata.0, Messwerte.0, alias.0 etc., você pode alterar este comportamento.
Observe: Se \"Any (ack: true ou ack: false) \" for selecionado, pode ser alternado duas vezes se ack: false e logo após ack: true for definido. No entanto, este adaptador evita isso com a opção Ignorar gatilho se o último disparo do mesmo gatilho foi há menos de x segundos .", 102 | "tabOptions.triggerAckOptAny": "Qualquer (ack: true ou ack: false)", 103 | "tabOptions.triggerAckOptFalse": "ack: falso apenas (ignoriere ack: verdadeiro)", 104 | "tabOptions.triggerAckOptTrue": "ack: somente verdadeiro (ignoriere ack: falso)", 105 | "tabOptions.triggerLimitHeader": "Ignore o gatilho se o último gatilho do mesmo gatilho foi menos de x segundos atrás", 106 | "tabOptions.triggerLimitInfo": "Por motivos de estabilidade, os gatilhos são ignorados se tiverem sido disparados há menos de x segundos. Você pode ajustar este número de segundos aqui. Menos de 1 segundo não é permitido.", 107 | "tabOptions.triggerLimitLabel": "Mínimo 1 segundo necessário", 108 | "will be generated automatically": "será gerado automaticamente" 109 | } -------------------------------------------------------------------------------- /admin/i18n/ru/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "Версия адаптера", 3 | "Additional conditions": "Дополнительные условия", 4 | "Always": "Всегда", 5 | "Astro times 'night' and 'nightEnd'": "Астрологическое время \"ночь\" и \"конец ночи\"", 6 | "Cancel": "Отмена", 7 | "Deactivate to define detailed criteria for execution": "Деактивировать, чтобы определить подробные критерии выполнения.", 8 | "Device Name": "Имя устройства", 9 | "Do not verify": "Не проверять", 10 | "End": "Конец", 11 | "Enum Function Name": "Имя функции перечисления", 12 | "Execute always": "Всегда выполнять", 13 | "Execution": "Исполнение", 14 | "Execution settings for zone": "Настройки исполнения для зоны", 15 | "Fri": "Пт", 16 | "Further Adapter Options": "Другие варианты адаптера", 17 | "Further Options": "Дополнительные возможности", 18 | "Hello World": "Привет мир", 19 | "Incorrect configuration": "Неправильная конфигурация", 20 | "Input Validation": "Проверка ввода", 21 | "JSON state for recent successful zone activations": "Состояние JSON для недавних успешных активаций зоны", 22 | "JSON states under .info": "JSON-Datenpunkte под .info", 23 | "Limit to rooms": "Ограничить комнатами", 24 | "Linked triggers": "Связанные триггеры", 25 | "Logging": "логирование", 26 | "Mo": "Пн", 27 | "Motion sensors": "Датчики движения", 28 | "Name of condition": "Название условия", 29 | "Name of motion sensor": "Название датчика движения", 30 | "Name of trigger": "Название триггера", 31 | "Name of zone": "Название зоны", 32 | "Never if...": "Никогда, если ...", 33 | "Never switch if...": "Никогда не переключайтесь, если ...", 34 | "Never switch off if...": "Никогда не выключайтесь, если ...", 35 | "Never switch on if...": "Никогда не включайте, если ...", 36 | "Number of entries in JSON states (0-500)": "Максимальное количество записей в состояниях JSON (0-500)", 37 | "Object ID under": "ID объекта под", 38 | "Off after x sec": "Выкл. Через x сек.", 39 | "Ok": "Хорошо", 40 | "Other triggers": "Другие триггеры", 41 | "Sat": "Суббота", 42 | "Sec": "Сек", 43 | "Second(s)": "Секунды", 44 | "Select": "Выбрать", 45 | "Select 'never if...'": "Выберите \"никогда, если ...\"", 46 | "Select 'never switch on if...'": "Выберите \"никогда не включать, если ...\"", 47 | "Select additional conditions": "Выбрать дополнительные условия", 48 | "Select linked triggers": "Выберите связанные триггеры", 49 | "Select state": "Выберите штат", 50 | "Select target devices": "Выберите целевые устройства", 51 | "Select triggers": "Выберите триггеры", 52 | "Start": "Начало", 53 | "State": "государство", 54 | "State of brightness": "Состояние яркости", 55 | "State of condition": "Состояние", 56 | "State of motion sensor": "Состояние датчика движения", 57 | "State to switch device off": "Состояние выключения устройства", 58 | "State to switch device on": "Состояние для включения устройства", 59 | "State under": "Государство под", 60 | "State value": "Государственная ценность", 61 | "Sun": "солнце", 62 | "Target devices": "Целевые устройства", 63 | "Target devices: objects": "Целевые устройства: объекты", 64 | "Target devices: states": "Целевые устройства: состояния", 65 | "Target off": "Цель выключена", 66 | "Targets: Enum functions": "Цели: функции перечисления", 67 | "Targets: URLs": "Цели: URL", 68 | "Threshold": "Порог", 69 | "Thu": "Чт", 70 | "Time": "Время", 71 | "Time based triggers": "Триггеры на основе времени", 72 | "Time schedule and astro": "График и астро", 73 | "Toggle": "Переключить", 74 | "Trigger": "Курок", 75 | "Triggers": "Триггеры", 76 | "Tue": "Вт", 77 | "URL for switching off": "URL для выключения", 78 | "URL for switching on": "URL для включения", 79 | "Value for 'off'": "Значение для \"выключено\"", 80 | "Value for 'on'": "Значение для 'on'", 81 | "Wed": "Мы бы", 82 | "Zones": "Зоны", 83 | "log.verifyOptions.header": "Ваша конфигурация неверна, пожалуйста, исправьте следующее:", 84 | "log.verifyOptions.info": "Обратите внимание, что здесь мы только проверяем, существует ли хотя бы одна активная строка таблицы и определено ли хотя бы одно активное выполнение в Зонах. Дальнейшие проверки будут выполнены после сохранения этих параметров, что приведет к перезапуску адаптера. Поэтому обязательно проверьте журнал ioBroker: там будут отображаться любые дополнительные ошибки.", 85 | "new value": "новое значение", 86 | "off": "выключен", 87 | "on": "на", 88 | "overwrite options": "параметры перезаписи", 89 | "tabMain.Doc": "Инструкция к этому адаптеру:", 90 | "tabMain.Welcome": "Добро пожаловать в адаптер Smart Control. Текущая ветка форума ioBroker", 91 | "tabOptions.extendedLogHeader": "Журнал расширенной информации", 92 | "tabOptions.extendedLogInfo": "\"Если этот параметр отключен, журнал (уровень «Информация») отображает только небольшое количество строк журнала во время запуска и остановки / перезапуска адаптера, а вся остальная информация отображается только в журнале отладки.
Если эта функция активирована, в журнале (уровень «Информация») будет отображаться расширенная информация (но меньше, чем в журнале отладки).", 93 | "tabOptions.inputValidationHeader": "Проверьте также отключенные строки таблицы", 94 | "tabOptions.inputValidationInfo": "Активация этой опции также проверяет деактивированные строки таблицы на допустимость (например, существует ли состояние и т. Д.). Это может быть полезно, так как вы можете включить строки таблицы через состояния в smartcontrol.x.options. . При активации этой опции адаптер заранее проверяет (то есть при запуске адаптера), допустимы ли строки или нет.", 95 | "tabOptions.jsonMaxEntriesInfo": "Адаптер предоставляет состояния smartcontrol.x.info.log.zoneActivations.json и smartcontrol.x.info.log. ", 96 | "tabOptions.nightEndInfo": "В зависимости от географических координат, установленных в параметрах администрирования ioBroker, иногда недоступны night и / или nightEnd , например, летом в некоторых регионах Германии. Если вы активируете эту опцию, то адаптер установит: night = '00: 00 'и nightEnd = '02: 00'.", 97 | "tabOptions.nightEndOpt": "Установите 0: 00/2: 00, если night / nightEnd недоступен", 98 | "tabOptions.notVerifyBriHeader": "Не проверяйте яркость, если зона включена", 99 | "tabOptions.notVerifyBriInfo": "Для датчиков движения и связанных состояний яркости вы можете определить здесь, следует ли игнорировать яркость, если связанная зона уже включена.
Пример использования: «Порог» - это верхнее пороговое значение яркости, выше которого адаптер больше не будет включаться при срабатывании датчика движения. Но это непрактично, если датчик движения, например, включает свет, потому что в этом случае повторяющиеся движения не будут обнаружены, если свет включен и значение «Bri», скорее всего, превышает пороговое значение.
При активации этой опции яркость не проверяется, если связанная зона уже включена.", 100 | "tabOptions.triggerAckHeader": "Состояния триггера в пользовательских состояниях, таких как javascript.x, 0_userdata.0, Messwerte.0, alias.x", 101 | "tabOptions.triggerAckInfo": "Изменения состояний в экземплярах адаптеров запускаются только в том случае, если подтверждение (ack) = true (т. Е. Состояния подтверждены / подтверждены).
Для пользовательских состояний в javascript.x, 0_userdata.0, Messwerte.0, alias.0 и т. Д. Вы можете изменить это поведение.
Обратите внимание: если выбрано \"Any (ack: true или ack: false) \", он может быть переключен дважды, если ack: false и вскоре после установки ack: true. Однако этот адаптер предотвращает это с помощью опции Игнорировать триггер, если последний запуск того же триггера был менее x секунд назад .", 102 | "tabOptions.triggerAckOptAny": "Любой (ack: true или ack: false)", 103 | "tabOptions.triggerAckOptFalse": "только ack: false (ignoriere ack: true)", 104 | "tabOptions.triggerAckOptTrue": "ack: только true (ignoriere ack: false)", 105 | "tabOptions.triggerLimitHeader": "Игнорировать триггер, если последний запуск того же триггера был менее x секунд назад", 106 | "tabOptions.triggerLimitInfo": "По соображениям стабильности триггеры игнорируются, если они сработали менее x секунд назад. Здесь вы можете настроить это количество секунд. Менее 1 секунды не допускается.", 107 | "tabOptions.triggerLimitLabel": "Требуется минимум 1 секунда", 108 | "will be generated automatically": "будет сгенерирован автоматически" 109 | } -------------------------------------------------------------------------------- /admin/i18n/zh-cn/translations.json: -------------------------------------------------------------------------------- 1 | { 2 | "Adapter Version": "适配器版本", 3 | "Additional conditions": "附加条件", 4 | "Always": "总是", 5 | "Astro times 'night' and 'nightEnd'": "天文时间“ night”和“ nightEnd”", 6 | "Cancel": "取消", 7 | "Deactivate to define detailed criteria for execution": "停用以定义执行的详细标准", 8 | "Device Name": "设备名称", 9 | "Do not verify": "不验证", 10 | "End": "结束", 11 | "Enum Function Name": "枚举函数名称", 12 | "Execute always": "始终执行", 13 | "Execution": "执行", 14 | "Execution settings for zone": "区域的执行设置", 15 | "Fri": "周五", 16 | "Further Adapter Options": "更多适配器选项", 17 | "Further Options": "更多选择", 18 | "Hello World": "你好,世界", 19 | "Incorrect configuration": "配置错误", 20 | "Input Validation": "输入验证", 21 | "JSON state for recent successful zone activations": "近期成功成功激活区域的JSON状态", 22 | "JSON states under .info": "JSON-Datenpunkte unter .info", 23 | "Limit to rooms": "限于房间", 24 | "Linked triggers": "链接触发器", 25 | "Logging": "记录中", 26 | "Mo": "莫", 27 | "Motion sensors": "运动传感器", 28 | "Name of condition": "条件名称", 29 | "Name of motion sensor": "运动传感器名称", 30 | "Name of trigger": "触发名称", 31 | "Name of zone": "区域名称", 32 | "Never if...": "永远不会...", 33 | "Never switch if...": "如果...", 34 | "Never switch off if...": "切勿在以下情况下关闭电源...", 35 | "Never switch on if...": "切勿在以下情况下开机...", 36 | "Number of entries in JSON states (0-500)": "JSON状态下的最大条目数(0-500)", 37 | "Object ID under": "下的对象ID", 38 | "Off after x sec": "x秒后关闭", 39 | "Ok": "好", 40 | "Other triggers": "其他触发因素", 41 | "Sat": "周六", 42 | "Sec": "秒", 43 | "Second(s)": "秒", 44 | "Select": "选择", 45 | "Select 'never if...'": "选择“如果...则从不”", 46 | "Select 'never switch on if...'": "选择“如果...则永远不要开机”", 47 | "Select additional conditions": "选择其他条件", 48 | "Select linked triggers": "选择链接的触发器", 49 | "Select state": "选择州", 50 | "Select target devices": "选择目标设备", 51 | "Select triggers": "选择触发器", 52 | "Start": "开始", 53 | "State": "州", 54 | "State of brightness": "亮度状态", 55 | "State of condition": "状况", 56 | "State of motion sensor": "运动状态传感器", 57 | "State to switch device off": "状态以关闭设备", 58 | "State to switch device on": "开启设备的状态", 59 | "State under": "状态下", 60 | "State value": "状态值", 61 | "Sun": "太阳", 62 | "Target devices": "目标设备", 63 | "Target devices: objects": "目标设备:对象", 64 | "Target devices: states": "目标设备:状态", 65 | "Target off": "目标关闭", 66 | "Targets: Enum functions": "目标:枚举函数", 67 | "Targets: URLs": "目标:URL", 68 | "Threshold": "阈", 69 | "Thu": "周四", 70 | "Time": "时间", 71 | "Time based triggers": "基于时间的触发器", 72 | "Time schedule and astro": "时间表和astro", 73 | "Toggle": "切换", 74 | "Trigger": "触发", 75 | "Triggers": "扳机", 76 | "Tue": "周二", 77 | "URL for switching off": "关闭网址", 78 | "URL for switching on": "开启网址", 79 | "Value for 'off'": "“关闭”的值", 80 | "Value for 'on'": "“ on”的值", 81 | "Wed": "星期三", 82 | "Zones": "区域", 83 | "log.verifyOptions.header": "您的配置有误,请按以下步骤修复:", 84 | "log.verifyOptions.info": "请注意,我们仅在此处检查是否存在至少一个活动表行以及是否在区域中定义了至少一个活动执行。保存这些选项后,将进行进一步的验证,这将重新启动适配器。因此,请确保检查ioBroker日志:任何其他错误将在此处显示。", 85 | "new value": "新价值", 86 | "off": "关", 87 | "on": "上", 88 | "overwrite options": "覆盖选项", 89 | "tabMain.Doc": "该适配器的说明:", 90 | "tabMain.Welcome": "欢迎使用智能控制适配器。当前的ioBroker论坛线程", 91 | "tabOptions.extendedLogHeader": "扩展信息日志", 92 | "tabOptions.extendedLogInfo": "如果停用,则日志(级别“ Info”)在适配器启动和停止/重新启动期间仅显示少量日志行,而所有其他信息仅显示在调试日志中。 ", 93 | "tabOptions.inputValidationHeader": "还检查禁用的表行", 94 | "tabOptions.inputValidationInfo": "激活此选项也会验证停用的表行的有效性(例如,状态是否存在等)。", 95 | "tabOptions.jsonMaxEntriesInfo": "适配器提供状态 smartcontrol.x.info.log.zoneActivations.json smartcontrol.x.info.log。 ", 96 | "tabOptions.nightEndInfo": "根据ioBroker管理员选项中设置的地理坐标,有时没有night和/或nightEnd ,例如在某些德国地区的夏天。如果激活此选项,则适配器将设置:night = '00:00',nightEnd = '02:00'。", 97 | "tabOptions.nightEndOpt": "设置0:00/2:00(如果无法使用Night / nightEnd)", 98 | "tabOptions.notVerifyBriHeader": "如果区域开启,请勿验证亮度", 99 | "tabOptions.notVerifyBriInfo": "对于运动传感器和关联的亮度状态,您可以在此处定义如果关联区域已打开,是否应忽略亮度。
使用案例:“阈值”是亮度的上限阈值,超过该阈值时,触发运动传感器时适配器将不再打开。但是,如果运动传感器(例如)打开灯,这是不切实际的,因为如果打开灯并且“ Bri”很可能超过阈值,则不会检测到重复运动。
激活此选项后,如果关联的区域已经打开,则不会检查亮度。", 100 | "tabOptions.triggerAckHeader": "在用户状态(如javascript.x,0_userdata.0,Messwerte.0,alias.x)下触发状态", 101 | "tabOptions.triggerAckInfo": "仅当确认(ack)= true (即,确认/确认状态)时,才触发适配器实例下的状态更改。
对于javascript.x,0_userdata.0,Messwerte.0,alias.0等下的用户拥有状态 ,您可以更改此行为。
请注意:如果选择' Any(ack:true或ack:false)',则如果ack:false且设置了ack:true之后不久,它可能会切换两次。但是, 如果同一触发器的最后一次触发时间少于x秒前 ,则此适配器使用“ 忽略触发器 ”选项来防止这种情况。", 102 | "tabOptions.triggerAckOptAny": "任何(ack:true或ack:false)", 103 | "tabOptions.triggerAckOptFalse": "ack:仅false(忽略ack:true)", 104 | "tabOptions.triggerAckOptTrue": "ack:仅真(忽略ack:false)", 105 | "tabOptions.triggerLimitHeader": "如果同一触发器的上一次触发时间少于x秒,则忽略触发器", 106 | "tabOptions.triggerLimitInfo": "出于稳定性的原因,如果触发时间少于x秒,则忽略触发。您可以在此处调整此秒数。不允许少于1秒。", 107 | "tabOptions.triggerLimitLabel": "至少需要1秒", 108 | "will be generated automatically": "将自动生成" 109 | } -------------------------------------------------------------------------------- /admin/icons/home-automation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/icons/home-automation.png -------------------------------------------------------------------------------- /admin/icons/home-automation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/icons/home-automation_source.txt: -------------------------------------------------------------------------------- 1 | Icon made by Freepik https://www.flaticon.com/authors/freepik from https://www.flaticon.com 2 | 3 | Flaticon license: Free for personal and commercial purpose with attribution. https://www.freepikcompany.com/legal#nav-flaticon -------------------------------------------------------------------------------- /admin/img/info-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/info-big.png -------------------------------------------------------------------------------- /admin/img/info-big.png_README.txt: -------------------------------------------------------------------------------- 1 | We are using selectID.js (iobroker/node_modules/iobroker.admin/www/lib/js/selectID.js). 2 | 3 | Per selectID.js: "Important to have "admin/img/big-info.png" in too, because this icon will be loaded if no icon found, elsewise we have endless loop" 4 | 5 | -- 6 | Mic-M, 2020-07-05 -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-conditions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-conditions.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-further-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-further-options.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-start.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-target-devices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-target-devices.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-triggers-motion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-triggers-motion.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-triggers-other.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-triggers-other.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-triggers-time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-triggers-time.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-zones-execution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-zones-execution.png -------------------------------------------------------------------------------- /admin/img/option-screenshots/tab-zones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/option-screenshots/tab-zones.png -------------------------------------------------------------------------------- /admin/img/sc_always.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/sc_always.png -------------------------------------------------------------------------------- /admin/img/select-target-devices-overwrite.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/select-target-devices-overwrite.gif -------------------------------------------------------------------------------- /admin/img/smartControl_options1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/smartControl_options1.gif -------------------------------------------------------------------------------- /admin/img/smartControl_options_dropdown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/smartControl_options_dropdown.gif -------------------------------------------------------------------------------- /admin/img/smartControl_options_dropdown_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/img/smartControl_options_dropdown_2.gif -------------------------------------------------------------------------------- /admin/smartcontrol-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/smartcontrol-banner.png -------------------------------------------------------------------------------- /admin/smartcontrol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mic-M/ioBroker.smartcontrol/fdee6c98122729126e4a30562f7a2a2dea4338a7/admin/smartcontrol.png -------------------------------------------------------------------------------- /admin/style.css: -------------------------------------------------------------------------------- 1 | /* ------------------- CSS style provided by ioBroker Adapter Creator ------------------- */ 2 | * { box-sizing: border-box; } 3 | .m { overflow: initial; /* Don't cut off dropdowns! */ } 4 | /* -------------------------------------------------------------------------------------- */ 5 | 6 | /* Required to avoid y-scrollbar. */ 7 | .modal { max-height:85% !important; } 8 | .m .page {height: auto !important; min-height:75% !important; } 9 | 10 | /* span */ 11 | .m span { font-size: 1.0em !important } /* span is set to 0.9em for some unknown reason, we set back to 1.0em */ 12 | .m .dialog-config-buttons span { font-size: 0.9em !important } /* leave span at 0.9em for the save/cancel etc. buttons */ 13 | 14 | 15 | /* Header section "Smart Control -- Controlling ioBroker smarter..." */ 16 | #header-area {margin-top: 5px; margin-bottom: 1px; background-color:#174475;} 17 | #header-area #header-logo-title .logo {float:left; margin-right: 10px;} 18 | #header-area #header-logo-title p {line-height: normal !important; margin: 0 !important; padding: 8px 0 0 8px;} 19 | #header-area #header-logo-title p>span.h-title {font-size: 2em !important; color:white; } 20 | #header-area #header-logo-title p>span.h-sub-title {font-size: 1.1em !important; color:white; font-style: italic; } 21 | 22 | 23 | /* Tabs menu */ 24 | .m .tabs .tab a { color: rgba(13, 134, 231, 0.7); } /* Color */ 25 | .m .tabs .tab a { padding: 0 5px; } /* space of x px at beginning and end of text */ 26 | .m .tabs .active { border-bottom: 2px solid #0d47a1; font-weight: bold;} 27 | .m .tabs .tab a.active, .m .tabs .tab a:hover { color:#0d47a1; } 28 | .m .tabs .tab a:hover { border-bottom: 2px solid #46a0e9 !important; } 29 | .m .row .col.m1 { width: 14%; } 30 | #tab-area { padding-left:0;padding-right:0; margin-top: 0px; margin-bottom: 1px; background-color:#174475; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2) } 31 | 32 | /* Table header */ 33 | table.table-values th.header { background-color:#64BfF6; font-size:90%; text-align:center; line-height: 1em; padding:6px 2px;} 34 | 35 | /* Table header -- Optional column */ 36 | table.table-values th.mOptional { color:#c9e7fa } 37 | 38 | /* format second column of option tables */ 39 | table.table-values tr td:nth-child(2) input { font-weight:bold; } 40 | /* but not tableZoneExecution */ 41 | #tableZoneExecution table.table-values tr td:nth-child(2) input { font-weight:normal; } 42 | 43 | 44 | /* specific format of second column of tableCombinedDevices */ 45 | #tableCombinedDevices table.table-values tr td:nth-child(2) input { width: 40% !important; font-family: monospace; } 46 | #tableCombinedDevices table.table-values tr td:nth-child(2)::before { content: "smartcontrol.x.combinedDevices."; font-size:1.1em; font-family: monospace; color:#585858; } 47 | 48 | /* to be able to adjust column width accordingly */ 49 | table.table-values { table-layout:fixed; } 50 | 51 | /* Table Zones: Hide execution option rows */ 52 | #tableZones th:nth-of-type(14) { visibility: hidden; display: none; } 53 | #tableZones td:nth-of-type(14) { visibility: hidden; display: none; } 54 | 55 | /* add space at top/bottom */ 56 | .spaceTop3em {margin-top: 3em; } 57 | .spaceBottom3em {margin-top: 3em; } 58 | 59 | /* Introduction section */ 60 | .intro {font-size: 18px;} 61 | .intro h5 {font-size: 1.5em;} 62 | ol.instr li {font-size: .9em;} 63 | ol.instr li:not(:last-child) { margin-bottom: .6em; } 64 | 65 | /* Different format for h6 */ 66 | h6.hBlock { background-color: #184473 !important; padding:7px 0 7px 7px !important; border-radius: 3px; color:white; font-size:1.2em; } 67 | 68 | /* Code */ 69 | code { padding: 2px 4px; font-size: 1.05em !important; color: #2696ef; background-color: rgba(101, 190, 246, 0.05); border-radius: 0; } 70 | 71 | /* Links */ 72 | .page a:link, .page a:visited { color: #0d47a1;} /* unvisited link */ 73 | .page a:visited { color:#616e83; } /* visited link */ 74 | .page a:visited { color:#2696ef; } /* visited link */ 75 | .page a:hover { text-decoration: underline; } /* mouse over link */ 76 | .page a:active { color: #0d47a1; } /* selected link */ 77 | 78 | /* ****** collapsible sections ****** */ 79 | /* collapsible: general ****** */ 80 | .collapsible-header { background-color: #c8e4fa69 !important;} 81 | .collapsible-header { padding-top:3px !important; padding-bottom:5px !important;} 82 | .collapsible-header i { padding-top:3px; } 83 | .collapsible-header h5 { font-weight: bold; font-size:1.3em; margin-top:0.7em; } 84 | .collapsible-body ol li {font-size: 1.1em;} 85 | .collapsible-body ol li:not(:last-child) { margin-bottom: .6em; } 86 | .collapsible-body p { font-size: 1.1em; } 87 | .collapsible-body code { font-size: 1.1em !important } 88 | .collapsible-body td:nth-child(1) { font-weight:normal; color: #0d47a1; width: 200px; } /* Format first column */ 89 | .collapsible-body table {font-size: 1.0em;} 90 | .collapsible-body th {background-color: #c8e4fa69;} 91 | 92 | /* collapsible: Config Table Header/Documentation ****** */ 93 | .collapsible-header.config-section { background-color: #174475 !important; } 94 | .collapsible-header.config-section i.material-icons { color:#fff; } /* icon color */ 95 | .collapsible-header.config-section h5 { color:#fff; } 96 | .collapsible-header.config-section { display: flex; justify-content: space-between; } /* for right alignment of question mark icon */ 97 | .collapsible-header.config-section i.material-icons { padding-right: 0; margin-right: 0;} 98 | 99 | /* collapsible: Documentation ****** */ 100 | .collapsible-body.instructions td { line-height: 1.7em; } 101 | 102 | /* For selectID.js (node_modules/iobroker.admin/www/lib/js/) */ 103 | #dialog-select-member { z-index: 9999 !important; width:calc(100% - 150px) !important; max-height: 75% !important; } 104 | #dialog-select-member .modal-footer { width:calc(100% - 20px) !important; } 105 | #dialog-select-member .modal-content span {font-size:1.0em !important;} 106 | #dialog-select-member .main-toolbar-table {height: 28px !important;} 107 | #dialog-select-member .panel-button {height:28px !important; width:28px !important;} 108 | 109 | /* Line hight for p */ 110 | .collapsible-body p {line-height: 1.6em !important;} 111 | 112 | /* Filter for tables */ 113 | .table-filter input { color:#2696ef !important; padding-left: 5px !important; font-weight:bold; width: 200px !important; margin:0 0 0 20px !important; height: 2.5rem !important;} 114 | .table-filter button { left: -27px; width: 1.6em !important; height: 1.6em !important;} 115 | .table-filter button i {font-size: .9rem !important; line-height: 1rem !important; } 116 | 117 | /* FancyTree for Selecting Target Devices */ 118 | 119 | #dialog-select-settings { overflow-y: hidden !important ;} 120 | #dialog-select-settings ul.fancytree-container { overflow-y: scroll; height: calc(100% - 250px); } /* prevent vertical scroll */ 121 | #dialog-select-settings input.fancy-filter { color:#2696ef !important; padding-left: 5px !important; width: 200px !important; margin:0 0 0 25px !important; height: 2.5rem !important;} 122 | #dialog-select-settings div#matches { margin-left: -20px !important; display:inline-block !important; } 123 | #dialog-select-settings button#btnResetSearch { left: 230px; width: 1.6em !important; height: 1.6em !important;} 124 | #dialog-select-settings button#btnResetSearch i {font-size: .9rem !important; line-height: 1rem !important; } 125 | #dialog-select-settings a#fancy-collapse-all, #dialog-select-settings a#fancy-expand-all {width: 2em !important; height: 2em !important;} 126 | #dialog-select-settings a#fancy-collapse-all>i, #dialog-select-settings a#fancy-expand-all>i {font-size: .9rem !important; line-height: 1.8em !important; } 127 | #dialog-select-settings .modal-content div.row>p {margin:0 !important;} 128 | #dialog-select-settings ul.fancytree-container li { padding-left: 1.3em !important; } 129 | #dialog-select-settings ul.fancytree-container>li { padding-left:0px !important; } 130 | #dialog-select-settings ul.fancytree-container {padding: 10px 3px 10px 3px !important;} 131 | #dialog-select-settings span.fancytree-node {margin-top: 5px; margin-bottom:5px;} 132 | #dialog-select-settings span.fancytree-selected span.fancytree-title { background-color: #2696ef !important; color:white; font-style: normal !important; } 133 | #dialog-select-settings .fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-active span.fancytree-title {background-color: #cbe8f6; color:black; font-style: normal;} 134 | #dialog-select-settings .fancytree-plain.fancytree-container.fancytree-treefocus span.fancytree-selected span.fancytree-title {background-color: #2696ef; color:white; font-style: normal;} 135 | #dialog-select-settings span.fancytree-title {font-size:16px !important;} 136 | /* #dialog-select-settings #fancy-explanation {font-size:.9em; font-style: italic; color:#21448f} */ 137 | #dialog-select-settings #fancytree-select-settings {display:inline !important} 138 | #dialog-select-settings .modal-content {padding-bottom: 0 !important; padding-right: 0 !important; height: calc(100% - 50px)!important } 139 | 140 | /* Dialog called once SAVE button clicked and verification failed */ 141 | #dialog-save-verification div.error-section { font-size: 1.3em; } 142 | #dialog-save-verification div.error-section ol>li { color:#d92626; padding-bottom:0.5em !important; } 143 | #dialog-save-verification { width: 50% !important; height: 50% !important;} 144 | #dialog-save-verification .further-info {font-size:.75em;} 145 | #dialog-save-verification h6.title { background-color: #d92626 !important; } 146 | #dialog-save-verification .modal-footer .btn { background-color: #d92626 !important;; } 147 | 148 | /* Dialog for Zone Execution Config */ 149 | #dialog-configure-zone-execution { width: 90% !important; height: 80% !important} 150 | 151 | 152 | #tableTriggerDevices td div.userstates { 153 | color:#21448f; 154 | font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; 155 | font-style:italic; 156 | font-weight:bold; 157 | font-size:.8em !important; 158 | width:100% !important; 159 | } 160 | 161 | /* Translation required */ 162 | p.translation-required { font-style:italic; color:#21448f; font-size:14px !important; line-height: 14px !important;} 163 | -------------------------------------------------------------------------------- /admin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": true, 3 | "compilerOptions": { 4 | // do not compile anything, this file is just to configure type checking 5 | "noEmit": true, 6 | 7 | // check JS files 8 | "allowJs": true, 9 | "checkJs": true, 10 | 11 | "module": "commonjs", 12 | "moduleResolution": "node", 13 | // this is necessary for the automatic typing of the adapter config 14 | "resolveJsonModule": true, 15 | 16 | "noImplicitThis": false, /* Raise error on 'this' expressions with an implied 'any' type. - https://github.com/Microsoft/TypeScript/issues/19639#issuecomment-590680337 */ 17 | 18 | // Set this to false if you want to disable the very strict rules (not recommended) 19 | "strict": true, 20 | // Or enable some of those features for more fine-grained control 21 | // "strictNullChecks": true, 22 | // "strictPropertyInitialization": true, 23 | // "strictBindCallApply": true, 24 | "noImplicitAny": false, 25 | // "noUnusedLocals": true, 26 | // "noUnusedParameters": true, 27 | 28 | // Consider targeting es2017 or higher if you require the new NodeJS 8+ features 29 | "target": "es2017", 30 | 31 | }, 32 | "include": [ 33 | "**/*.js", 34 | "**/*.d.ts", 35 | "../../iobroker.admin/www/lib/js/jquery-3.2.1.min.js", 36 | "../../iobroker.admin/www/lib/js/socket.io.js", 37 | "../../iobroker.admin/www/lib/js/materialize.js", 38 | "../../iobroker.admin/www/js/adapter-settings.js", 39 | "../../iobroker.admin/www/js/translate.js" 40 | ], 41 | "exclude": [ 42 | "node_modules/**", 43 | "admin/**" 44 | ], 45 | 46 | 47 | } 48 | 49 | 50 | -------------------------------------------------------------------------------- /admin/zero-md/readme.txt: -------------------------------------------------------------------------------- 1 | https://github.com/zerodevx/zero-md -------------------------------------------------------------------------------- /admin/zero-md/webcomponents-loader.min.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Minified by jsDelivr using Terser v3.14.1. 4 | * Original file: /npm/@webcomponents/webcomponentsjs@2.4.4/webcomponents-loader.js 5 | * 6 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 7 | */ 8 | !function(){"use strict";var e,n=!1,t=[],o=!1;function d(){window.WebComponents.ready=!0,document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))}function i(){window.customElements&&customElements.polyfillWrapFlushCallback&&customElements.polyfillWrapFlushCallback(function(n){e=n,o&&e()})}function r(){window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(window.document),n=!0,c().then(d)}function c(){o=!1;var n=t.map(function(e){return e instanceof Function?e():e});return t=[],Promise.all(n).then(function(){o=!0,e&&e()}).catch(function(e){console.error(e)})}window.WebComponents=window.WebComponents||{},window.WebComponents.ready=window.WebComponents.ready||!1,window.WebComponents.waitFor=window.WebComponents.waitFor||function(e){e&&(t.push(e),n&&c())},window.WebComponents._batchCustomElements=i;var a="webcomponents-loader.js",l=[];(!("attachShadow"in Element.prototype&&"getRootNode"in Element.prototype)||window.ShadyDOM&&window.ShadyDOM.force)&&l.push("sd"),window.customElements&&!window.customElements.forcePolyfill||l.push("ce");var s=function(){var e=document.createElement("template");if(!("content"in e))return!0;if(!(e.content.cloneNode()instanceof DocumentFragment))return!0;var n=document.createElement("template");n.content.appendChild(document.createElement("div")),e.content.appendChild(n);var t=e.cloneNode(!0);return 0===t.content.childNodes.length||0===t.content.firstChild.content.childNodes.length}();if(window.Promise&&Array.from&&window.URL&&window.Symbol&&!s||(l=["sd-ce-pf"]),l.length){var m,w="bundles/webcomponents-"+l.join("-")+".js";if(window.WebComponents.root)m=window.WebComponents.root+w;else{var u=document.querySelector('script[src*="'+a+'"]');m=u.src.replace(a,w)}var p=document.createElement("script");p.src=m,"loading"===document.readyState?(p.setAttribute("onload","window.WebComponents._batchCustomElements()"),document.write(p.outerHTML),document.addEventListener("DOMContentLoaded",r)):(p.addEventListener("load",function(){i(),r()}),p.addEventListener("error",function(){throw new Error("Could not load polyfill bundle"+m)}),document.head.appendChild(p))}else"complete"===document.readyState?(n=!0,d()):(window.addEventListener("load",r),window.addEventListener("DOMContentLoaded",function(){window.removeEventListener("load",r),r()}))}(); 9 | //# sourceMappingURL=/sm/1a92a68f67d0deedb11065efad6be1c738c60921df9284a68170191521d7fbb7.map -------------------------------------------------------------------------------- /admin/zero-md/zero-md.min.js.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Minified by jsDelivr using Terser v3.14.1. 4 | * Original file: /gh/zerodevx/zero-md@1.3.4/src/zero-md.js 5 | * 6 | * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files 7 | */ 8 | window,document,window.customElements.define("zero-md",class extends HTMLElement{get version(){return"v1.3.4"}get src(){return this.getAttribute("src")}get manualRender(){return this.hasAttribute("manual-render")}get noShadow(){return this.hasAttribute("no-shadow")}get markedUrl(){return this.getAttribute("marked-url")||window.ZeroMd.config.markedUrl}get prismUrl(){return this.getAttribute("prism-url")||window.ZeroMd.config.prismUrl}get cssUrls(){let e=this.getAttribute("css-urls");return e?JSON.parse(e):window.ZeroMd.config.cssUrls}constructor(){super(),window.ZeroMd=window.ZeroMd||{},window.ZeroMd.config=window.ZeroMd.config||{},window.ZeroMd.config.markedUrl=window.ZeroMd.config.markedUrl||"https://cdn.jsdelivr.net/npm/marked@0/marked.min.js",window.ZeroMd.config.prismUrl=window.ZeroMd.config.prismUrl||"https://cdn.jsdelivr.net/npm/prismjs@1/prism.min.js",window.ZeroMd.config.cssUrls=window.ZeroMd.config.cssUrls||["https://cdn.jsdelivr.net/npm/github-markdown-css@2/github-markdown.min.css","https://cdn.jsdelivr.net/npm/prismjs@1/themes/prism.min.css"],window.ZeroMd.cache=window.ZeroMd.cache||{}}connectedCallback(){this.addEventListener("click",this._hijackLinks.bind(this)),this.addEventListener("zero-md-rendered",function e(){this.removeEventListener("zero-md-rendered",e),window.setTimeout(()=>{this._scrollTo(window.location.hash)})}.bind(this)),this.manualRender||this.render(),this._fire("zero-md-ready")}_fire(e){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0}))}_ajaxGet(e){return new Promise((t,r)=>{if(!e)return void r(e);let i=new XMLHttpRequest,n=t=>{console.warn("[zero-md] Error getting file",e),r(t)};i.open("GET",e,!0),i.onload=(()=>{i.status>=200&&i.status<400?t(i.responseText):n(i)}),i.onerror=(e=>n(e)),i.send()})}_loadScript(e,t,r,...i){return new Promise((n,s)=>{if("undefined"===t)if(window.ZeroMd.cache.hasOwnProperty(r))window.addEventListener(r,function e(){window.removeEventListener(r,e),n()});else{window.ZeroMd.cache[r]=!0;let t=document.createElement("script");for(let e of i)t.setAttribute(e,"");t.onload=(()=>{this._fire(r),n()}),t.onerror=(t=>{console.warn("[zero-md] Error loading script",e),s(t)}),t.src=e,document.head.appendChild(t)}else n()})}_getStylesheet(e){return new Promise((t,r)=>{window.ZeroMd.cache[e]?window.ZeroMd.cache[e].loaded?t(window.ZeroMd.cache[e].data):window.addEventListener(e,function r(){window.removeEventListener(e,r),t(window.ZeroMd.cache[e].data)}):(window.ZeroMd.cache[e]={loaded:!1,data:""},this._ajaxGet(e).then(r=>{window.ZeroMd.cache[e].data=r,window.ZeroMd.cache[e].loaded=!0,this._fire(e),t(r)},e=>r(e)))})}_getInputs(){return new Promise((e,t)=>{let r=this.querySelector("template")&&this.querySelector("template").content.querySelector("xmp")||!1;r?e(r.textContent):this._ajaxGet(this.src).then(t=>e(t)).catch(e=>t(e))})}_prismHighlight(e,t){return window.Prism.highlight(e,this._detectLang(e,t))}_detectLang(e,t){return t?window.Prism.languages.hasOwnProperty(t)?window.Prism.languages[t]:"es"===t.substr(0,2)?window.Prism.languages.javascript:"c"===t?window.Prism.languages.clike:window.Prism.languages.markup:e.match(/^\s*this.removeChild(e)),this.shadowRoot&&(this.shadowRoot.innerHTML=""),this.noShadow?this.insertAdjacentHTML("afterbegin",e):(this.shadowRoot||this.attachShadow({mode:"open"})).innerHTML=e}_buildMd(){return new Promise((e,t)=>{Promise.all([this._getInputs(),this._loadScript(this.markedUrl,typeof window.marked,"zero-md-marked-ready","async"),this._loadScript(this.prismUrl,typeof window.Prism,"zero-md-prism-ready","async","data-manual")]).then(t=>{e('
'+window.marked(t[0],{highlight:this._prismHighlight.bind(this)})+"
")},e=>{t(e)})})}_buildStyles(){return new Promise(e=>{let t='",i=this.querySelector("template")&&this.querySelector("template").content.querySelector("style")||!1;i?e(t+i.textContent+r):Array.isArray(this.cssUrls)&&this.cssUrls.length?Promise.all(this.cssUrls.map(e=>this._getStylesheet(e))).then(i=>e(t+i.join("")+r)).catch(()=>e(t+r)):(console.warn("[zero-md] No styles are defined"),e(t+r))})}_scrollTo(e){if(!e||!this.shadowRoot)return;let t=this.shadowRoot.getElementById(e.substr(1));t&&t.scrollIntoView()}_hijackLinks(e){let t=e.path||e.composedPath();if("A"!==t[0].tagName)return;const r=t[0];r.hash&&r.origin+r.pathname===window.location.origin+window.location.pathname&&(e.metaKey?window.open(r.href,"_blank"):(this._scrollTo(r.hash),window.location=r.href),e.preventDefault())}render(){Promise.all([this._buildStyles(),this._buildMd()]).then(e=>{this._stampDom(e[0]+e[1]),this._fire("zero-md-rendered")})}}); 9 | //# sourceMappingURL=/sm/4ea87c94a5676c3bbd7b8ef6009ea5891783fbe1fa7f72cb94912411c81b7de0.map -------------------------------------------------------------------------------- /lib/adapter-config.d.ts: -------------------------------------------------------------------------------- 1 | // This file extends the AdapterConfig type from "@types/iobroker" 2 | // using the actual properties present in io-package.json 3 | // in order to provide typings for adapter.config properties 4 | 5 | import { native } from '../io-package.json'; 6 | 7 | type _AdapterConfig = typeof native; 8 | 9 | // Augment the globally declared type ioBroker.AdapterConfig 10 | declare global { 11 | namespace ioBroker { 12 | interface AdapterConfig extends _AdapterConfig { 13 | // Do not enter anything here! 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /lib/constants.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | /** 3 | * @desc Define adapter constants, which will be available in adapter class instance 4 | * @author Mic-M 5 | * @license MIT 6 | */ 7 | 8 | module.exports = { 9 | forbiddenStatePaths: /[\][*,;'"`<>\\?]/g, // Source: https://github.com/ioBroker/ioBroker.js-controller/blob/master/lib/adapter.js - Version 3.1.6 10 | astroTimes: ['nightEnd', 'nauticalDawn', 'dawn', 'sunrise', 'sunriseEnd', 'goldenHourEnd', 'solarNoon', 'goldenHour', 'sunsetStart', 'sunset', 'dusk', 'nauticalDusk', 'night', 'nadir'], 11 | astroTimesGerman: ['Ende der Nacht', 'Nautische Morgendämmerung', 'Morgendämmerung', 'Sonnenaufgang', 'Ende des Sonnenaufgangs', 'Ende der goldenen Stunde', 'Mittag', 'Goldene Abendstunde', 'Start des Sonnenuntergangs', 'Sonnenuntergang', 'Dämmerung Abends', 'Nautische Dämmerung Abends', 'Start der Nacht', 'Mitternacht'], 12 | configTableValidation: [ 13 | { 14 | tableName: 'Target Devices', 15 | tableId: 'tableTargetDevices', 16 | tableMustHaveActiveRows: false, 17 | isTargetTable: true, 18 | check_1: {id: 'name', type:'name', deactivateIfError:true, removeForbidden:true }, 19 | check_2: {id: 'onState', type:'statePath', deactivateIfError:true }, 20 | check_3: {id: 'onValue', type:'stateValue', stateValueStatePath:'onState', deactivateIfError:true }, 21 | check_4: {id: 'offState', type:'statePath', deactivateIfError:true }, 22 | check_5: {id: 'offValue', type:'stateValue', stateValueStatePath:'offState', deactivateIfError:true }, 23 | check_6: {id: 'onAfter', type:'number', numberLowerLimit: 0, deactivateIfError:true, optional:true }, 24 | }, 25 | { 26 | tableName: 'Targets: Enums', 27 | tableId: 'tableTargetEnums', 28 | tableMustHaveActiveRows: false, 29 | isTargetTable: true, 30 | check_1: {id: 'name', type:'name', deactivateIfError:true, removeForbidden:true }, 31 | check_2: {id: 'enumId', type:'name', deactivateIfError:true}, 32 | check_3: {id: 'onValue', type:'name', deactivateIfError:true }, 33 | check_5: {id: 'offValue', type:'name', deactivateIfError:true }, 34 | }, 35 | { 36 | tableName: 'Targets: URLs', 37 | tableId: 'tableTargetURLs', 38 | tableMustHaveActiveRows: false, 39 | isTargetTable: true, 40 | check_1: {id: 'name', type:'targetURLname', deactivateIfError:true, removeForbidden:true }, 41 | check_2: {id: 'urlOn', type:'url', deactivateIfError:true}, 42 | check_3: {id: 'urlOff', type:'url', deactivateIfError:true, optional:true}, 43 | }, 44 | { 45 | tableName: 'Conditions', 46 | tableId: 'tableConditions', 47 | tableMustHaveActiveRows: false, 48 | check_1: {id: 'name', type:'name', deactivateIfError:true, removeForbidden:true }, 49 | check_2: {id: 'conditionState', type:'statePath', deactivateIfError:true }, 50 | check_3: {id: 'conditionValue', type:'stateValue', stateValueStatePath:'conditionState', deactivateIfError:true }, 51 | }, 52 | { 53 | tableName: 'Triggers: Motion Sensors', // Name of table, just for logging purposes 54 | tableId: 'tableTriggerMotion', 55 | tableMustHaveActiveRows: false, 56 | isTriggerTable: true, 57 | check_1: {id: 'name', type:'name', deactivateIfError:true, removeForbidden:true }, 58 | check_2: {id: 'stateId', type:'statePath', deactivateIfError:true }, 59 | check_4: {id: 'duration', type:'number', numberLowerLimit: 0, deactivateIfError:true, optional:true }, 60 | check_5: {id: 'briStateId', type:'statePath', deactivateIfError:true, optional:true }, 61 | check_6: {id: 'briThreshold', type:'number', deactivateIfError:true, optional:true }, 62 | }, 63 | { 64 | tableName: 'Triggers: Other Devices', 65 | tableId: 'tableTriggerDevices', 66 | tableMustHaveActiveRows: false, 67 | isTriggerTable: true, 68 | check_1: {id: 'name', type:'name', deactivateIfError:true, removeForbidden:true }, 69 | check_2: {id: 'stateId', type:'statePath', deactivateIfError:true }, 70 | check_3: {id: 'stateVal', type:'stateValue', stateValueStatePath:'stateId', deactivateIfError:true }, 71 | }, 72 | { 73 | tableName: 'Triggers: Times', 74 | tableId: 'tableTriggerTimes', 75 | tableMustHaveActiveRows: false, 76 | isTriggerTable: true, 77 | check_1: {id: 'name', type:'name', deactivateIfError:true, removeForbidden:true }, 78 | check_2: {id: 'time', type:'timeCron', deactivateIfError:true }, 79 | check_3: {id: 'additionalConditions', type:'name', deactivateIfError:true, removeForbidden:true, optional:true }, 80 | check_4: {id: 'never', type:'name', deactivateIfError:true, removeForbidden:true, optional:true }, 81 | 82 | 83 | }, 84 | { 85 | tableName: 'Zones', 86 | tableId: 'tableZones', 87 | tableMustHaveActiveRows: true, 88 | check_1: {id: 'name', type:'name', deactivateIfError:true, removeForbidden:true }, 89 | check_2: {id: 'triggers', type:'name', deactivateIfError:true, removeForbidden:true }, 90 | check_3: {id: 'targets', type:'name', deactivateIfError:true, removeForbidden:true }, 91 | check_4: {id: 'onAfter', type:'number', numberLowerLimit: 0, deactivateIfError:true, optional:true }, 92 | check_5: {id: 'offAfter', type:'number', numberLowerLimit: 0, deactivateIfError:true, optional:true }, 93 | check_6: {id: 'targetsOverwrite', type:'overwrite'}, // special for tableZones 94 | }, 95 | { 96 | // Special for sub "table" for each Zone 97 | tableName: 'Zone Execution', 98 | tableId: 'tableZoneExecution', 99 | tableMustHaveActiveRows: true, 100 | check_1: {id: 'start', type:'time', deactivateIfError:true }, 101 | check_2: {id: 'end', type:'time', deactivateIfError:true }, 102 | check_3: {id: 'additionalConditions', type:'name', deactivateIfError:true, removeForbidden:true, optional:true }, 103 | check_4: {id: 'never', type:'name', deactivateIfError:true, removeForbidden:true, optional:true }, 104 | }, 105 | ], 106 | 107 | testStates: [ 108 | {statePath:'Test.trigger.Bathroom_motion', commonObject:{name:'Bathroom Motion', type:'boolean', read:true, write:true, role:'button', def:false} }, 109 | {statePath:'Test.trigger.Bathroom_wall-switch', commonObject:{name:'Bathroom Wall Switch', type:'boolean', read:true, write:true, role:'state', def:false} }, 110 | {statePath:'Test.trigger.Hallway1_motion', commonObject:{name:'Hallway Motion', type:'boolean', read:true, write:true, role:'button', def:false} }, 111 | {statePath:'Test.trigger.Hallway2_motion', commonObject:{name:'HallwayMotion', type:'boolean', read:true, write:true, role:'button', def:false} }, 112 | {statePath:'Test.trigger.Hallway1_wall-switch', commonObject:{name:'Hallway Wall Switch', type:'boolean', read:true, write:true, role:'state', def:false} }, 113 | {statePath:'Test.trigger.Hallway2_wall-switch', commonObject:{name:'Hallway Wall Switch', type:'boolean', read:true, write:true, role:'state', def:false} }, 114 | {statePath:'Test.trigger.RelaxPersonSitting', commonObject:{name:'Relax Area: Someone sitting on sofa', type:'boolean', read:true, write:true, role:'state', def:false} }, 115 | {statePath:'Test.brightness.Bathroom_bri', commonObject:{name:'Bathroom Brightness', type:'number', read:true, write:true, role:'state', def:0} }, 116 | {statePath:'Test.brightness.Hallway1_bri', commonObject:{name:'Hallway Brightness 1', type:'number', read:true, write:true, role:'state', def:0} }, 117 | {statePath:'Test.brightness.Hallway2_bri', commonObject:{name:'Hallway Brightness 2', type:'number', read:true, write:true, role:'state', def:0} }, 118 | {statePath:'Test.light.Bathroom', commonObject:{name:'Bathroom Light', type:'boolean', read:true, write:true, role:'state', def:false} }, 119 | {statePath:'Test.light.Hallway', commonObject:{name:'Hallway Light', type:'boolean', read:true, write:true, role:'state', def:false} }, 120 | {statePath:'Test.light.RelaxAreaCeiling', commonObject:{name:'Relax Area Light', type:'boolean', read:true, write:true, role:'state', def:false} }, 121 | {statePath:'Test.light.RelaxAreaWall', commonObject:{name:'Relax Area Light', type:'boolean', read:true, write:true, role:'state', def:false} }, 122 | {statePath:'Test.radio.Bathroom', commonObject:{name:'Bath Radio Station (String)', type:'string', read:true, write:true, role:'state', def:''} }, 123 | {statePath:'Test.radio.Bathroom_pause', commonObject:{name:'Bath Radio Pause', type:'boolean', read:true, write:true, role:'button', def:false} }, 124 | {statePath:'Test.condition.isHolidayToday', commonObject:{name:'Condition: is Holiday Today?', type:'boolean', read:true, write:true, role:'state', def:false} }, 125 | {statePath:'Test.condition.isAnyonePresent', commonObject:{name:'Condition: is Anyone Present?', type:'boolean', read:true, write:true, role:'state', def:false} }, 126 | {statePath:'Test.condition.isFrontDoorLocked', commonObject:{name:'Condition: is Front Door locked?', type:'boolean', read:true, write:true, role:'state', def:false} }, 127 | ], 128 | 129 | }; -------------------------------------------------------------------------------- /lib/tools.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | 3 | /** 4 | * Tests whether the given variable is a real object and not an Array 5 | * @param {any} it The variable to test 6 | * @returns {it is Record} 7 | */ 8 | function isObject(it) { 9 | // This is necessary because: 10 | // typeof null === 'object' 11 | // typeof [] === 'object' 12 | // [] instanceof Object === true 13 | return Object.prototype.toString.call(it) === '[object Object]'; 14 | } 15 | 16 | /** 17 | * Tests whether the given variable is really an Array 18 | * @param {any} it The variable to test 19 | * @returns {it is any[]} 20 | */ 21 | function isArray(it) { 22 | if (typeof Array.isArray === 'function') return Array.isArray(it); 23 | return Object.prototype.toString.call(it) === '[object Array]'; 24 | } 25 | 26 | /** 27 | * Translates text to the target language. Automatically chooses the right translation API. 28 | * @param {string} text The text to translate 29 | * @param {string} targetLang The target languate 30 | * @param {string} [yandexApiKey] The yandex API key. You can create one for free at https://translate.yandex.com/developers 31 | * @returns {Promise} 32 | */ 33 | async function translateText(text, targetLang, yandexApiKey) { 34 | if (targetLang === 'en') { 35 | return text; 36 | } else if (!text) { 37 | return ''; 38 | } 39 | if (yandexApiKey) { 40 | return await translateYandex(text, targetLang, yandexApiKey); 41 | } else { 42 | return await translateGoogle(text, targetLang); 43 | } 44 | } 45 | 46 | /** 47 | * Translates text with Yandex API 48 | * @param {string} text The text to translate 49 | * @param {string} targetLang The target languate 50 | * @param {string} [apiKey] The yandex API key. You can create one for free at https://translate.yandex.com/developers 51 | * @returns {Promise} 52 | */ 53 | async function translateYandex(text, targetLang, apiKey) { 54 | if (targetLang === 'zh-cn') { 55 | targetLang = 'zh'; 56 | } 57 | try { 58 | const url = `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${apiKey}&text=${encodeURIComponent(text)}&lang=en-${targetLang}`; 59 | const response = await axios({url, timeout: 15000}); 60 | if (response.data && response.data['text']) { 61 | return response.data['text'][0]; 62 | } 63 | throw new Error('Invalid response for translate request'); 64 | } catch (e) { 65 | throw new Error(`Could not translate to "${targetLang}": ${e}`); 66 | } 67 | } 68 | 69 | /** 70 | * Translates text with Google API 71 | * @param {string} text The text to translate 72 | * @param {string} targetLang The target languate 73 | * @returns {Promise} 74 | */ 75 | async function translateGoogle(text, targetLang) { 76 | try { 77 | const url = `http://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=${targetLang}&dt=t&q=${encodeURIComponent(text)}&ie=UTF-8&oe=UTF-8`; 78 | const response = await axios({url, timeout: 15000}); 79 | if (isArray(response.data)) { 80 | // we got a valid response 81 | return response.data[0][0][0]; 82 | } 83 | throw new Error('Invalid response for translate request'); 84 | } catch (e) { 85 | throw new Error(`Could not translate to "${targetLang}": ${e}`); 86 | } 87 | } 88 | 89 | module.exports = { 90 | isArray, 91 | isObject, 92 | translateText 93 | }; 94 | -------------------------------------------------------------------------------- /main.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /** 4 | * This is a dummy TypeScript test file using chai and mocha 5 | * 6 | * It's automatically excluded from npm and its build output is excluded from both git and npm. 7 | * It is advised to test all your modules with accompanying *.test.js-files 8 | */ 9 | 10 | // tslint:disable:no-unused-expression 11 | 12 | const { expect } = require('chai'); 13 | // import { functionToTest } from "./moduleToTest"; 14 | 15 | describe('module to test => function to test', () => { 16 | // initializing logic 17 | const expected = 5; 18 | 19 | it(`should return ${expected}`, () => { 20 | const result = 5; 21 | // assign result a value from functionToTest 22 | expect(result).to.equal(expected); 23 | // or using the should() syntax 24 | result.should.equal(expected); 25 | }); 26 | // ... more tests => it 27 | 28 | }); 29 | 30 | // ... more test suites => describe 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "iobroker.smartcontrol", 3 | "version": "1.2.1", 4 | "description": "Control devices smarter: by grouping, including triggers like motion, opening window, etc. and set target devices accordingly", 5 | "author": { 6 | "name": "Mic-M", 7 | "email": "iob.micm@gmail.com" 8 | }, 9 | "homepage": "https://github.com/Mic-M/ioBroker.smartcontrol", 10 | "license": "MIT", 11 | "keywords": [ 12 | "smart", 13 | "control", 14 | "rooms", 15 | "groups", 16 | "motion sensors", 17 | "devices", 18 | "switches", 19 | "lights", 20 | "trigger", 21 | "schedule" 22 | ], 23 | "repository": { 24 | "type": "git", 25 | "url": "https://github.com/Mic-M/ioBroker.smartcontrol" 26 | }, 27 | "dependencies": { 28 | "@iobroker/adapter-core": "^2.4.0", 29 | "@types/jquery": "^3.5.4", 30 | "cheerio": "^1.0.0-rc.3", 31 | "got": "^11.8.0", 32 | "node-schedule": "^1.3.2", 33 | "suncalc2": "^1.8.1" 34 | }, 35 | "devDependencies": { 36 | "@iobroker/testing": "^2.2.0", 37 | "@types/chai": "^4.2.14", 38 | "@types/chai-as-promised": "^7.1.3", 39 | "@types/gulp": "^4.0.7", 40 | "@types/mocha": "^8.0.4", 41 | "@types/node": "^14.14.7", 42 | "@types/proxyquire": "^1.3.28", 43 | "@types/sinon": "^9.0.8", 44 | "@types/sinon-chai": "^3.2.5", 45 | "axios": "^0.21.0", 46 | "chai": "^4.2.0", 47 | "chai-as-promised": "^7.1.1", 48 | "eslint": "^7.13.0", 49 | "got": "^11.8.0", 50 | "gulp": "^4.0.2", 51 | "mocha": "^8.2.1", 52 | "proxyquire": "^2.1.3", 53 | "sinon": "^9.2.1", 54 | "sinon-chai": "^3.5.0", 55 | "suncalc2": "^1.8.1" 56 | }, 57 | "main": "main.js", 58 | "scripts": { 59 | "test:js": "mocha --opts test/mocha.custom.opts", 60 | "test:package": "mocha test/package --exit", 61 | "test:unit": "mocha test/unit --exit", 62 | "test:integration": "mocha test/integration --exit", 63 | "test": "npm run test:js && npm run test:package", 64 | "lint": "eslint" 65 | }, 66 | "bugs": { 67 | "url": "https://github.com/Mic-M/ioBroker.smartcontrol/issues" 68 | }, 69 | "readmeFilename": "README.md" 70 | } 71 | -------------------------------------------------------------------------------- /test/integration.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { tests } = require('@iobroker/testing'); 3 | 4 | // Run integration tests - See https://github.com/ioBroker/testing for a detailed explanation and further options 5 | tests.integration(path.join(__dirname, '..')); 6 | -------------------------------------------------------------------------------- /test/mocha.custom.opts: -------------------------------------------------------------------------------- 1 | --require test/mocha.setup.js 2 | {!(node_modules|test)/**/*.test.js,*.test.js,test/**/test!(PackageFiles|Startup).js} -------------------------------------------------------------------------------- /test/mocha.setup.js: -------------------------------------------------------------------------------- 1 | // Don't silently swallow unhandled rejections 2 | process.on('unhandledRejection', (e) => { 3 | throw e; 4 | }); 5 | 6 | // enable the should interface with sinon 7 | // and load chai-as-promised and sinon-chai by default 8 | const sinonChai = require('sinon-chai'); 9 | const chaiAsPromised = require('chai-as-promised'); 10 | const { should, use } = require('chai'); 11 | 12 | should(); 13 | use(sinonChai); 14 | use(chaiAsPromised); -------------------------------------------------------------------------------- /test/package.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { tests } = require('@iobroker/testing'); 3 | 4 | // Validate the package files 5 | tests.packageFiles(path.join(__dirname, '..')); 6 | -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "noImplicitAny": false 5 | }, 6 | "include": [ 7 | "./**/*.js" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /test/unit.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { tests } = require('@iobroker/testing'); 3 | 4 | // Run unit tests - See https://github.com/ioBroker/testing for a detailed explanation and further options 5 | tests.unit(path.join(__dirname, '..')); 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": true, 3 | "compilerOptions": { 4 | // do not compile anything, this file is just to configure type checking 5 | "noEmit": true, 6 | 7 | // check JS files 8 | "allowJs": true, 9 | "checkJs": true, 10 | 11 | "module": "commonjs", 12 | "moduleResolution": "node", 13 | // this is necessary for the automatic typing of the adapter config 14 | "resolveJsonModule": true, 15 | 16 | // Set this to false if you want to disable the very strict rules (not recommended) 17 | "strict": true, 18 | // Or enable some of those features for more fine-grained control 19 | // "strictNullChecks": true, 20 | // "strictPropertyInitialization": true, 21 | // "strictBindCallApply": true, 22 | "noImplicitAny": false, 23 | // "noUnusedLocals": true, 24 | // "noUnusedParameters": true, 25 | 26 | // Consider targeting es2017 or higher if you require the new NodeJS 8+ features 27 | "target": "es2017", 28 | 29 | }, 30 | "include": [ 31 | "**/*.js", 32 | "**/*.d.ts" 33 | ], 34 | "exclude": [ 35 | "node_modules/**", 36 | "admin/**" 37 | ] 38 | } --------------------------------------------------------------------------------