mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2026-03-07 11:39:40 +01:00
Updated ioBroker FAQ & Anleitungen (markdown)
@@ -85,20 +85,23 @@ Hintergrund: Die Buttons geben keinen definierten Page-Index zurück, daher werd
|
|||||||
|
|
||||||
|
|
||||||
* **Quelle**:
|
* **Quelle**:
|
||||||
Post [1087](https://forum.iobroker.net/topic/50888/sonoff-nspanel/1087) hier im Forum
|
Post [1087](https://forum.iobroker.net/topic/50888/sonoff-nspanel/1087), [1265](https://forum.iobroker.net/topic/50888/sonoff-nspanel/1265)+[1270](https://forum.iobroker.net/topic/50888/sonoff-nspanel/1270) im ioBroker Forum.
|
||||||
|
|
||||||
|
* **Voraussetzung**:
|
||||||
|
Konfigurationsskript **NsPanelTs.ts** mindestens in der Version: _04.09.2022 - V3.3.1 - Überarbeitung und BugFix für cardAlarm_
|
||||||
|
|
||||||
* **Im IoBroker**
|
* **Im IoBroker**
|
||||||
Im IoBroker wird unter 0_userdata.0.NSPanel.1.Alarm die drei Datenpunkte **AlarmPin**, **AlarmState** und **AlarmType** benötigt. Diese werden i.d.R. generisch erzeugt (Typ String).
|
Im IoBroker wird unter **0_userdata.0.NSPanel.Alarm** die Datenpunkte **AlarmPin**, **AlarmState**, **AlarmType**, **PANEL** und **PIN_Failed** benötigt. Diese werden i.d.R. generisch erzeugt (Typ String), sobald der Code der Alarm Page das erste Mal geladen wird.
|
||||||
|
|
||||||

|

|
||||||
(Bild by @Armilar)
|
|
||||||
|
**Wichtig**: Mit der Version v3.3.1 hat sich der Default-Pfad von der Ebene **0_userdata.0.NSPanel.1.Alarm** nach **0_userdata.0.NSPanel.Alarm** geändert. Da wir im Alarmverhalten / Informations-Popup unterscheiden wollen zwischen Meldung an alle NSPanel oder nur an ein speziefisches, ist es logisch den Alarm Ordner aus dem Ordner des NSPanel Nr. 1 auf die nächst höhere globalere Ebene darüber zu verschieben.
|
||||||
|
|
||||||
Bei Aktivierung oder Deaktivierung der Alarmanlage wechselt der Status in "arming" oder "pending". Da die Verarbeitung der Alarmlogik außerhalb des Skriptes stattfindet, müssen die Datenpunkte auch entsprechend durch das externe Skript weiter getaktet werden
|
Bei Aktivierung oder Deaktivierung der Alarmanlage wechselt der Status in **arming** oder **pending**. Im Falle einer PIN Falscheingabe gibt es nun auch **triggered**. Da die Verarbeitung der Alarmlogik außerhalb des Skriptes stattfindet, müssen die Datenpunkte auch entsprechend durch das externe Skript weiter getaktet werden
|
||||||
|
|
||||||
|
|
||||||
* **Aliase**:
|
* **Aliase**:
|
||||||
Die drei Datenpunkte **AlarmPin**, **AlarmState** und **AlarmType** werden in einem Alias vom Typ Feueralarm im Gerätemanager oder Alias Adapter angelet und dieser Alias wird dann im Konfigurationsskript auf der Alarm-Page verwendet.
|
Die drei Datenpunkte **AlarmPin**, **AlarmState** und **AlarmType** werden in einem Alias vom Typ Feueralarm im Gerätemanager oder Alias Adapter angelegt und dieser Alias wird dann im Konfigurationsskript auf der Alarm-Page verwendet.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -110,7 +113,17 @@ Die drei Datenpunkte **AlarmPin**, **AlarmState** und **AlarmType** werden in ei
|
|||||||
Falls ein Wert im Alias nicht vorhanden ist, dann separat hinzufügen
|
Falls ein Wert im Alias nicht vorhanden ist, dann separat hinzufügen
|
||||||
|
|
||||||
* **Konfigurationsskript**
|
* **Konfigurationsskript**
|
||||||
|
**Allgemeine Einstellung**:
|
||||||
|
Es gibt nun eine neue Konstante, die den Pfad definiert, in dem der Ordner Alarm angelgt wird. Default wie wir schon zuvor gelernt haben ist **0_userdata.0.NSPanel.**
|
||||||
|
|
||||||
|
`
|
||||||
|
const NSPanel_Alarm_Path = '0_userdata.0.NSPanel.';
|
||||||
|
//Neuer Pfad für gemeinsame Nutzung durch mehrere Panels
|
||||||
|
`
|
||||||
|
|
||||||
|
**Page Type**: Die Alarmfunktion kann nur auf einer **PageAlarm** verwendet werden
|
||||||
|
|
||||||
|
**Beispiel**:
|
||||||
```
|
```
|
||||||
var Buero_Alarm: PageAlarm =
|
var Buero_Alarm: PageAlarm =
|
||||||
{
|
{
|
||||||
@@ -127,90 +140,78 @@ Die drei Datenpunkte **AlarmPin**, **AlarmState** und **AlarmType** werden in ei
|
|||||||
* **Blockly Testskript**
|
* **Blockly Testskript**
|
||||||
Nachfolgend ein kurzes Emulationsskript für die Weiterverarbeitung. Diese Logik sollte auch in dein eigenes externes Alarm-Skript übernommen werden.
|
Nachfolgend ein kurzes Emulationsskript für die Weiterverarbeitung. Diese Logik sollte auch in dein eigenes externes Alarm-Skript übernommen werden.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Blockly</summary>
|
<summary>Blockly</summary>
|
||||||
|
|
||||||
```
|
```
|
||||||
<xml xmlns="https://developers.google.com/blockly/xml">
|
<xml xmlns="https://developers.google.com/blockly/xml">
|
||||||
<block type="on_ext" id="q!?(x}z/f~TClQnNmbyU" x="113" y="38">
|
<variables>
|
||||||
<mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
|
<variable id="LwJJoNeQC4K?A;BW5:o">nspanelAlarmPath</variable>
|
||||||
<field name="CONDITION">ne</field>
|
<variable id=".d{cc!R.4y2U9N+gLY1K">dpAlarmState</variable>
|
||||||
<field name="ACK_CONDITION"></field>
|
</variables>
|
||||||
<value name="OID0">
|
<block type="comment" id="I^BpP.H=p^7Vj|-sy!%" x="-937" y="-162"> <field name="COMMENT">Bitte nspanelAlarmPath anpassen</field> <next> <block type="comment" id="JL[C{;Q}PF[TQ_BfpN$c"> <field name="COMMENT">Der Rest wird dynamisch für das jeweilige Panel ermittelt</field> <next> <block type="variables_set" id="2}X9[s}b1IDUV{6QPzh?"> <field name="VAR" id="LwJJoNeQC4K?A;BW5:_o">nspanelAlarmPath</field> <value name="VALUE"> <block type="text" id="in2z;TR0jhq1QI85qO8">
|
||||||
<shadow type="field_oid" id="]~f@4kO$zmxdg=}/810C">
|
<field name="TEXT">0_userdata.0.NSPanel.Alarm.</field>
|
||||||
<field name="oid">0_userdata.0.NSPanel.1.Alarm.AlarmState</field>
|
</block>
|
||||||
</shadow>
|
</value>
|
||||||
</value>
|
<next>
|
||||||
<statement name="STATEMENT">
|
<block type="variables_set" id="+tlGEcYI17~KL5S%%1O">
|
||||||
<block type="controls_if" id="=_e7bf!`Q]$tg*0U1_2F">
|
<field name="VAR" id=".d{cc!R.4y2U9N+gLY1K">dpAlarmState</field>
|
||||||
<mutation elseif="1"></mutation>
|
<value name="VALUE">
|
||||||
<value name="IF0">
|
<block type="text_join" id="PWihVQn3v+ef7aPA%zyx">
|
||||||
<block type="logic_compare" id="0_9gv(MmSSJ{2a$j{}(P">
|
<mutation items="2"></mutation>
|
||||||
<field name="OP">EQ</field>
|
<value name="ADD0">
|
||||||
<value name="A">
|
<block type="variables_get" id="v2AT~!{!0Qc0BI2!SgN"> <field name="VAR" id="LwJJoNeQC4K?A;BW5:_o">nspanelAlarmPath</field> </block> </value> <value name="ADD1"> <block type="text" id="78{g[~wI2yQXnYZvL4}t"> <field name="TEXT">AlarmState</field> </block> </value> </block> </value> <next> <block type="on_ext" id="q!?(x}z/f~TClQnNmbyU"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="]~f@4kO$zmxdg=}/810C"> <field name="oid">0_userdata.0.NSPanel.Alarm.AlarmState</field> </shadow> <block type="variables_get" id="vCPAx:V[ZG~6IkkFu/r">
|
||||||
<block type="on_source" id="H$WWrxxX|NaWkT%W]g!Z">
|
<field name="VAR" id=".d{cc!R.4y2U9N+gLY1K">dpAlarmState</field>
|
||||||
<field name="ATTR">state.val</field>
|
</block>
|
||||||
</block>
|
</value>
|
||||||
</value>
|
<statement name="STATEMENT">
|
||||||
<value name="B">
|
<block type="controls_if" id="=e7bf!Q]$tg*0U1_2F"> <mutation elseif="2"></mutation> <value name="IF0"> <block type="logic_compare" id="0_9gv(MmSSJ{2a$j{}(P"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="H$WWrxxX|NaWkT%W]g!Z"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="_TnyjJ5x!)JY~rQ:Opj)"> <field name="TEXT">arming</field> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="=w_/N]5Tu)B)NwyTbxSp"> <field name="COMMENT">weitere ioBroker-Überprüfung - z.B. Fenster offen</field> <next> <block type="control_ex" id="FGZ}]#=@X?IJ3ddc[9rP" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid" id="=EKIKVg=5v+fyd:5J3]B"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="Y,]v4(aeLZ~(@alJ-8;D"> <field name="VAR" id=".d{cc!R.4y2U9N+gLY1K">dpAlarmState</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="2A;g]]ox]cFCoGeBOge">
|
||||||
<block type="text" id="_TnyjJ5x!)JY~rQ:Opj)">
|
<field name="BOOL">TRUE</field>
|
||||||
<field name="TEXT">arming</field>
|
</shadow>
|
||||||
</block>
|
<block type="text" id="WOt(NkkB-R9/-Xho,6}-">
|
||||||
</value>
|
<field name="TEXT">armed</field>
|
||||||
</block>
|
</block>
|
||||||
</value>
|
</value>
|
||||||
<statement name="DO0">
|
<value name="DELAY_MS">
|
||||||
<block type="control" id="eO}0c$0s~08Di)?sMM0(">
|
<shadow type="math_number" id="M@|2SGg8%@2nZdqU51f">
|
||||||
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
|
<field name="NUM">0</field>
|
||||||
<field name="OID">0_userdata.0.NSPanel.1.Alarm.AlarmState</field>
|
</shadow>
|
||||||
<field name="WITH_DELAY">TRUE</field>
|
<block type="math_number" id=".e9qh.?F@m)/t(HM7|M"> <field name="NUM">1000</field> </block> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_compare" id="]p3s+ouB~BJkfd:e)G:("> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id=":n]Z,t6+q#-l_hP+MEI@"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="([Ep{MPBu5s.C-lOdHgr"> <field name="TEXT">pending</field> </block> </value> </block> </value> <statement name="DO1"> <block type="control_ex" id="FI3q9?nQ|FDT]dY;djZz" inline="true"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">TRUE</field> <value name="OID"> <shadow type="field_oid"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id=":8ls:Akgxi%bWPgrIJT}"> <field name="VAR" id=".d{cc!R.4y2U9N+gLY1K">dpAlarmState</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean"> <field name="BOOL">TRUE</field> </shadow> <block type="text" id="MH!9j:G.S:mOaq31i!aM"> <field name="TEXT">disarmed</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number"> <field name="NUM">0</field> </shadow> <block type="math_number" id="zO=:KFH/FH-zc4ob5b7^"> <field name="NUM">1000</field> </block> </value> </block> </statement> <value name="IF2"> <block type="logic_compare" id="pHUmm^o8GqFji*VULm*Z"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="ques8D:5Hge-)^s,XBR!"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="3Hd)Fn4g#;XPXSWwe-$">
|
||||||
<field name="DELAY_MS">1000</field>
|
<field name="TEXT">triggered</field>
|
||||||
<field name="UNIT">ms</field>
|
</block>
|
||||||
<field name="CLEAR_RUNNING">TRUE</field>
|
</value>
|
||||||
<value name="VALUE">
|
</block>
|
||||||
<block type="text" id="J(va8~n[/dogNBn!W].I">
|
</value>
|
||||||
<field name="TEXT">armed</field>
|
<statement name="DO2">
|
||||||
</block>
|
<block type="comment" id="c%VR#jE+K$AoZ2m%HuY_">
|
||||||
</value>
|
<field name="COMMENT">Wenn der PIN bei der Deaktivierung falsch war</field>
|
||||||
</block>
|
<next>
|
||||||
</statement>
|
<block type="comment" id="I-Iasuh.K$wmTE`(e!;K">
|
||||||
<value name="IF1">
|
<field name="COMMENT">Zum Beispiel MEldung an Telegram oder popupNotify </field>
|
||||||
<block type="logic_compare" id="]p3s+ouB~BJkfd:e)G:(">
|
<next>
|
||||||
<field name="OP">EQ</field>
|
<block type="comment" id="j_U/cfS;e3c]-j}Bie,7">
|
||||||
<value name="A">
|
<field name="COMMENT">an Panel senden</field>
|
||||||
<block type="on_source" id=":n]Z,t6+q#-l_hP+MEI@">
|
</block>
|
||||||
<field name="ATTR">state.val</field>
|
</next>
|
||||||
</block>
|
</block>
|
||||||
</value>
|
</next>
|
||||||
<value name="B">
|
</block>
|
||||||
<block type="text" id="([Ep{MPBu5s.C-lOdHgr">
|
</statement>
|
||||||
<field name="TEXT">pending</field>
|
</block>
|
||||||
</block>
|
</statement>
|
||||||
</value>
|
</block>
|
||||||
</block>
|
</next>
|
||||||
</value>
|
</block>
|
||||||
<statement name="DO1">
|
</next>
|
||||||
<block type="control" id="s77gpG^9o0A)T{f}{#,c">
|
</block>
|
||||||
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
|
</next>
|
||||||
<field name="OID">0_userdata.0.NSPanel.1.Alarm.AlarmState</field>
|
</block>
|
||||||
<field name="WITH_DELAY">TRUE</field>
|
</next>
|
||||||
<field name="DELAY_MS">1000</field>
|
</block>
|
||||||
<field name="UNIT">ms</field>
|
</xml>
|
||||||
<field name="CLEAR_RUNNING">TRUE</field>
|
|
||||||
<value name="VALUE">
|
|
||||||
<block type="text" id="4DC5l(?mcdlhZ/jIumty">
|
|
||||||
<field name="TEXT">disarmed</field>
|
|
||||||
</block>
|
|
||||||
</value>
|
|
||||||
</block>
|
|
||||||
</statement>
|
|
||||||
</block>
|
|
||||||
</statement>
|
|
||||||
</block>
|
|
||||||
</xml>
|
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
(Bild & Blockly by @Armilar)
|
(Bild & Blockly by @Armilar)
|
||||||
@@ -221,13 +222,34 @@ Nachfolgend ein kurzes Emulationsskript für die Weiterverarbeitung. Diese Logik
|
|||||||
Alarm-Code in die cardAlarm eingeben --> Schutz auswählen --> aktiviert
|
Alarm-Code in die cardAlarm eingeben --> Schutz auswählen --> aktiviert
|
||||||
Alarm-Code in die cardAlarm eingeben --> Deaktivieren --> deaktiviert
|
Alarm-Code in die cardAlarm eingeben --> Deaktivieren --> deaktiviert
|
||||||
|
|
||||||
|
**Ablauf**:
|
||||||
|
1. Ablauf Alarm Aktivierung:
|
||||||
|
PIN eingeben und dann Alarm-Modus (Vollschutz, Zuhause, Nacht oder Besuch) auswählen. Im Datenpunkt AlarmType wird das als A1, A2, A3 oder A4 interpretiert und kann extern weiterverarbeitet werden.
|
||||||
|

|
||||||
|
Das Panel wechselt in den Status (AlarmState) "arming" (Icon = gelbes blinkendes Schild/Keine Tastatur)
|
||||||
|

|
||||||
|
Wenn durch das externe Skript (oder Emulator) der Status "armed" in den Datenpunkt AlarmState eingetragen wird (vorausgesetzt das externe Skript findet z.B, keine offenen Fenster) wird das Icon rot:
|
||||||
|

|
||||||
|
Der AlarmType ist jetzt D1, die Tastatur ist wieder eingeblendet und die card Alarm bereit für die Deaktivierung.
|
||||||
|
|
||||||
* **Offene Punkte**:
|
2. Ablauf Alarm Deaktivierung:
|
||||||
Ich habe dieses Grid nicht selbst getestet. Ich wäre dankbar für Zusatz Informationen.
|
PIN-Eingabe zur Deaktivierung und Bestätigung durch den Button "Deaktivieren".
|
||||||
--> Wo definiert man den PIN der verwendet wird?
|

|
||||||
--> Wie ist das mit den Aliasen
|
Das Panel vergleicht jetzt den Aktivierungs-PIN mit dem Deaktivierungs-PIN. Stimmen die PIN's überein, dann wird der AlarmState auf "pending" gesetzt.
|
||||||
--> gibt es eine Karenzzeitspanne nach dem Aktivieren oder bis zum Deaktivieren?
|

|
||||||
|
Das externe Alarm-Skript macht seine restlichen Aufgaben und setzt dann den Status auf "disarmed"
|
||||||
|

|
||||||
|
Sollte der Pin nicht übereinstimmen, so setzt das Panel den AlarmState "triggered" (Icon blinkt)
|
||||||
|

|
||||||
|
|
||||||
|
**Neues**:
|
||||||
|
Neu ist in diesem Zusammenhang der Alias "PIN_Failed" (state/number)
|
||||||
|
Das TS-Skript zählt die missglückten Anmeldeversuche und trägt sie hier ein. Könnte man also auch für einen Trigger mit Meldung an Telegram nutzen. Außerdem wird bei Fehlerhaften PIN-Eingaben der Datenpunkt AlarmState auf "triggered" gesetzt. Im Panel sieht das dann so aus (das Icon blinkt):
|
||||||
|

|
||||||
|
|
||||||
|
Status "triggered":
|
||||||
|
Durch das externe Skript (alternativ der Alarm-Emulator) kann ein Status "triggered" gesetzt werden.
|
||||||
|
Zum Beispiel wenn der Alarm ausgelöst wurde, Die Deaktivierung der cardAlarm funktioniert somit auch bei dem Status "triggered".
|
||||||
***
|
***
|
||||||
|
|
||||||
## **3.) Info Screensaver-Info auf Request**
|
## **3.) Info Screensaver-Info auf Request**
|
||||||
|
|||||||
Reference in New Issue
Block a user