NEWS
HILFE: Ideen gesucht VOR-Alarm zu Hauptalarm
-
Hallo,
habe eine Alarmanlage gebaut. Verschiedene Alarm Linien / cript für Sensoren
eins für
Bewegungsmelder
Türen
Fenster
..Alle setzen VOR-ALARM auf true
im Voralarm ist aber ein Timeout ..
Hintergrund. Wenn VOR-ALARM true ist gehen ( leise sachen an ). Nach 30 Sekunden geht der Vor-Alarm zum Hauptalarm mit Sirenen usw...dazu habe ich "Deaktivieren" wenn das true ist setzt er alles zurück: voralarm, Hauptalarm und sich selbst also auf false.
Klappt alles ABER:
Problem...sollte die Tür geöffnet werden wird VOR-ALARM ausgelöst ,wenn nun wieder eine Tür geöffnet (oder Bewegungsmelder)wird wieder ein voralarm ausgelöst.. usw.
Problem im Voralarm ist das timeout was ich ja nicht stoppen kann. Außer ich mache ein STOP Timeout davor. Was aber mein Hauptalarm verzögert.Somit verkängert alles den Voralarm das erst Minuten später der Hauptalarm los geht ..
PROBLEM2 : Ich kann per Deaktiviert true nicht den Timer im VOR-ALARM stoppen .....
Jemand eine bessere Idee ?
Ideen:
-Voralarm checkt ob der letzte Zeitpunkt mehr als 30 Sekunden zurück liegt ? ( Somit keine doppelauslösung ? )- Voralarm mit Schleife und check ob DEAKTIVIERT true wurde ? Jede Sekunde ??
Bin eher noch Blockly anfänger vielleicht gibt es bessre Lösungen und wenn ja wie setze ich diese dann genau um ?
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="undefined" id="timeout">timeout</variable> </variables> <block type="procedures_defcustomnoreturn" id="8S$+v(eU]cE!m0w]2w]-" x="288" y="-187"> <mutation statements="false"></mutation> <field name="NAME">Alarm-Menu</field> <field name="SCRIPT">c2VuZFRvKCd0ZWxlZ3JhbS4wJywgew0KICAgIHRleHQ6ICAgJ0JpdHRlIHfkaGxlIGVpbiBCdXR0b24nLA0KICAgIHJlcGx5X21hcmt1cDogew0KICAgICAgICBrZXlib2FyZDogWw0KICAgICAgICAgICAgWydBbGFybSBhdXMnLCAnJ10sDQogICAgICAgICAgICBbJ0xpY2h0ZXIgYW4nLCAnJ10sDQoNCiAgICAgICAgXSwNCiAgICAgICAgcmVzaXplX2tleWJvYXJkOiAgIHRydWUsDQogICAgICAgIG9uZV90aW1lX2tleWJvYXJkOiBmYWxzZQ0KICAgIH0NCn0pOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="on_ext" id="(*HPTzKMeMQI:h}mPzBi" x="-112" y="-113"> <mutation items="1"></mutation> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="eXDD*E=[9k53vwHrl[vd"> <field name="oid">EIGENE_OBJEKTE.0.ALARMANLAGE.VOR-ALARM</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="*WgRPth$UzVcHudN?@2V"> <value name="IF0"> <block type="logic_operation" id="bT0,vX#~V?roG%_4l{.|" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="i@6G7sB-[{{/{*=pPL2#"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="$AgI;z{FMEEKCI$45_Gt"> <field name="ATTR">val</field> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.AUSGELÖST</field> </block> </value> <value name="B"> <block type="logic_boolean" id="%%%vv$gu3gPQzodhUJ~+"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="8BJNT0DdDeR4tVhMJT^5"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="yR~$}$Aou|N6qJM~5JYp"> <field name="ATTR">val</field> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.HÜLLE-SCHARF</field> </block> </value> <value name="B"> <block type="logic_boolean" id="5{HwE$uEYeOWI+SsgwxF"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="g;8zOr};li[(J|JfeEPe"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="@;},G(7r;%:dq$qfI:%E"> <field name="TEXT">VORALARM!!!!</field> </shadow> <block type="text_join" id="Fu@,h8$Qrdj%sB=6$jAn"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="dDg}]z?T`eH-7=8R:[41"> <field name="TEXT"> VORALARM AUSGELÖST </field> </block> </value> <value name="ADD1"> <block type="time_get" id="Z-[oihca71ExJ)z4S^q7"> <mutation format="false" language="false"></mutation> <field name="OPTION">hh:mm:ss</field> </block> </value> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="HK0aGJikF6|^`8nn|Y,r"> <mutation name="Alarm-Menu"></mutation> <next> <block type="comment" id="kC=VA8W2?v@B:CMd*AE0"> <field name="COMMENT">30 Sekunden dann geht es zum HAUPTALARM WEITER</field> <next> <block type="timeouts_cleartimeout" id=";$VpX=4![#NpuEd])3b1"> <field name="NAME">timeout</field> <next> <block type="timeouts_settimeout" id="~G#5Tx(V7];ijuKOFRmv"> <field name="NAME">timeout</field> <field name="DELAY">30</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="control" id="B3gi,kQxjs^[D2RkT]~z"> <mutation delay_input="false"></mutation> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.AUSGELÖST</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="!PhZVjn-;ST:^VlCWqR3"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id=")H1B5R.2=W9IDEkn.Fu9"> <mutation delay_input="false"></mutation> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.VOR-ALARM</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="8jWe/A|^D/#^JN+gjHP4"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="comment" id="G|Q#+/q#FbnaV/-+l_#k"> <field name="COMMENT">Weitere Geräte im Voralarm</field> </block> </next> </block> </statement> </block> <block type="logic_operation" id="/Px+.]N4TSOUF+hj%__u" x="-387" y="12"> <field name="OP">AND</field> </block> </xml>
-
-
@ChrisXY
Es gibt eine recht einfache Lösung:Wenn Deaktiviert auf true geht setzt du nur den Status vom Voralarm zurück, und lässt den Timeout laufen.
Im Timeout prüfst du dann noch einmal das der Voralarm noch "true" ist, nur dann löst du den Hauptalarm aus.A.
-
@Asgothian said in HILFE: Ideen gesucht VOR-Alarm zu Hauptalarm:
@ChrisXY
Es gibt eine recht einfache Lösung:Wenn Deaktiviert auf true geht setzt du nur den Status vom Voralarm zurück, und lässt den Timeout laufen.
Im Timeout prüfst du dann noch einmal das der Voralarm noch "true" ist, nur dann löst du den Hauptalarm aus.A.
Puhh so ganz kann ich immer noch nicht folgen.
Deaktiviert setzt immer alles auf false. Also Vor-Alarm, Hüllen Alarm, Hauptalarm ....Voralarm soll ja ebenfalls Ausgeschaltet werden wenn Deaktiviert wurde. Also noch bevor es zum Hauptalarm geht ..
Ich müsste dann doch eher rüfen ob Deaktiviert True ist bevor ich zum Haaauptalarm über gehe ??
Dann muss ich mit dem Deaktiviert false einfach über 20 Sekunden warten ?Oder wie meinst du das genau?
-
Vielleicht so?
Aber so wird trotzdem mehrfach Voralarm ausgelöst es geht zwar nicht zu Hauptalarm aber trotzdem Push 2x und alles andere wird doppelt ausgelöst
Edit:
Oder wa sist wenn ich bei allen Sensoren Prüfe ob Voralam schon Aktiv ist dann KEIN Voralarm auslösen ?
Z.b so:
-
@ChrisXY
also -Gemeint war das so:
Natürlich muss da wo Object_id bzw select ID steht dein Voralarm-Objekt rein
damit stellst du sicher das der Voralarm nur dann zum Hauptalarm wird wenn der Voralarm nicht gelöscht wurde.
Als letztes musst du halt noch irgendwie den Voralarm status zurück setzen, wenn kein Alarm kommen soll. Aber das müsstest du ja eigentlich bereits haben ?
-
@Asgothian Danke aber langsam wird es Kompliziert
Das Problem dabei ist aber noch das ich ja Vor dem Alarm_Timeout schon meine interne Sirene + Telefon Klingeln auslöse ...
Das wiederrum wird ja dann auch schon wieder ausgelöst wenn Voralarm öfters auf true gesetzt wird.Wie fange ich den nun das wieder ab ?
Ich glaube schon fast das ich den Voralarm weglasse und echt nur 1 Hauptalarm mache wo ALLES was "Laut" wird mit 30 Sekunden in deinem Timeout script läuft.
ABER auch hier wenn die Alarmsensoren hier öfers auslösen .. Da kann ich wirklich nur bei den Sensoren direkt abfragen wenn Alarm nicht true ist nur dann den true setzen ..
Vielleicht die einfachere Lösung`?? -
@ChrisXY Na ja, das ist dann einfach zu lösen:
2 Optionen:
- trigger umstellen von "ist wahr" auf "groesser als" - dann wird der trigger nur aktiv wenn der Voralarm von false auf true wechselst
- die Telegram Aktion - etc. auch hinter das "if alarm_timeout = null" setzen, dann kommt das auch nicht wieder, wenn die 30 Sekunden timeout noch nicht abgelaufen ist
A.
-
okay Option2 finde ich da besser glaube ich.
Hab ich das so richtig umgesetzt ? Bin bei dem Wert von Objekt ID etwas verwirrt gewesen.
-
@ChrisXY So hatte ich mir das vorgestellt, ja.
-
@Asgothian hm ich weiss nicht was los ist .. auf einmal geht es nicht mehr
Ich bekomme voralarm irgendwas und auch 2 aber dann geht es nicht weiter ...
Es kommt nichts mehr .. Script auch schon mal gestoppt hilft nicht
code<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="XSP:|I`n+%Yc9j/o]m~O">Alarm_Timeout</variable> <variable type="undefined" id="Alarm_Timeout">Alarm_Timeout</variable> </variables> <block type="procedures_defcustomnoreturn" id="8S$+v(eU]cE!m0w]2w]-" x="63" y="-162"> <mutation statements="false"></mutation> <field name="NAME">Alarm-Menu</field> <field name="SCRIPT">c2VuZFRvKCd0ZWxlZ3JhbS4wJywgew0KICAgIHRleHQ6ICAgJ0JpdHRlIHfkaGxlIGVpbiBCdXR0b24nLA0KICAgIHJlcGx5X21hcmt1cDogew0KICAgICAgICBrZXlib2FyZDogWw0KICAgICAgICAgICAgWydBbGFybSBhdXMnLCAnJ10sDQogICAgICAgICAgICBbJ0xpY2h0ZXIgYW4nLCAnJ10sDQoNCiAgICAgICAgXSwNCiAgICAgICAgcmVzaXplX2tleWJvYXJkOiAgIHRydWUsDQogICAgICAgIG9uZV90aW1lX2tleWJvYXJkOiBmYWxzZQ0KICAgIH0NCn0pOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="on_ext" id="(*HPTzKMeMQI:h}mPzBi" x="-112" y="-113"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="eXDD*E=[9k53vwHrl[vd"> <field name="oid">EIGENE_OBJEKTE.0.ALARMANLAGE.VOR-ALARM</field> </shadow> </value> <statement name="STATEMENT"> <block type="telegram" id="dR|G)$([j;y`ANXF::WB"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="oNN|hqnXvbIs,zk!1q`z"> <field name="TEXT">Voralarm IRGENDWAS</field> </shadow> </value> <next> <block type="controls_if" id="*WgRPth$UzVcHudN?@2V"> <value name="IF0"> <block type="logic_operation" id="xO5T5}Mek*Eg|l.Gd#Pw" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_operation" id="bT0,vX#~V?roG%_4l{.|" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="8BJNT0DdDeR4tVhMJT^5"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="yR~$}$Aou|N6qJM~5JYp"> <field name="ATTR">val</field> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.HÜLLE-SCHARF</field> </block> </value> <value name="B"> <block type="logic_boolean" id="5{HwE$uEYeOWI+SsgwxF"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="i@6G7sB-[{{/{*=pPL2#"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="$AgI;z{FMEEKCI$45_Gt"> <field name="ATTR">val</field> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.AUSGELÖST</field> </block> </value> <value name="B"> <block type="logic_boolean" id="%%%vv$gu3gPQzodhUJ~+"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="p,JtuUh-NSlo$0yv1p[h"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="V$n+2MohK}Te]6Ce*/*Y"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="eGB*3g7m/%@;8i^j^4bE"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="4g:Gk}=lX,E(7M`2NW7B"> <field name="VAR" id="XSP:|I`n+%Yc9j/o]m~O" variabletype="">Alarm_Timeout</field> <value name="VALUE"> <block type="logic_null" id="~hJVHl1FnnVli*ay;X)?"></block> </value> <next> <block type="telegram" id="C#;W$0iJJ:,.yU9$H@AN"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="mq0HdmfG;W|RMIcU:(GB"> <field name="TEXT">2</field> </shadow> </value> <next> <block type="on" id="WmU75iiqVm]^%M,Z^Wo@"> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.VOR-ALARM</field> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="T[$aQf[=NGqb$H3k!xv."> <value name="IF0"> <block type="logic_compare" id="yi/#Q(yfk@3f,fR=ud1{"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="GBNxiEp_f%ehG!Nl;%aJ"> <field name="VAR" id="XSP:|I`n+%Yc9j/o]m~O" variabletype="">Alarm_Timeout</field> </block> </value> <value name="B"> <block type="logic_null" id=")lX:GWlA2S]NqcEoJ2Ga"></block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="g;8zOr};li[(J|JfeEPe"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="@;},G(7r;%:dq$qfI:%E"> <field name="TEXT">VORALARM!!!!</field> </shadow> <block type="text_join" id="Fu@,h8$Qrdj%sB=6$jAn"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="dDg}]z?T`eH-7=8R:[41"> <field name="TEXT"> VORALARM AUSGELÖST </field> </block> </value> <value name="ADD1"> <block type="time_get" id="Z-[oihca71ExJ)z4S^q7"> <mutation format="false" language="false"></mutation> <field name="OPTION">hh:mm:ss</field> </block> </value> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="HK0aGJikF6|^`8nn|Y,r"> <mutation name="Alarm-Menu"></mutation> <next> <block type="timeouts_settimeout" id="[(W#cj1wDLB,/v-2vILO"> <field name="NAME">Alarm_Timeout</field> <field name="DELAY">30</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="controls_if" id="$HlJIRu[P)`*GOf1gHtH"> <value name="IF0"> <block type="get_value" id="yX,Xi]v7PcWpD+HvJ@93"> <field name="ATTR">val</field> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.VOR-ALARM</field> </block> </value> <statement name="DO0"> <block type="control" id="B3gi,kQxjs^[D2RkT]~z"> <mutation delay_input="false"></mutation> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.AUSGELÖST</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="!PhZVjn-;ST:^VlCWqR3"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id=")H1B5R.2=W9IDEkn.Fu9"> <mutation delay_input="false"></mutation> <field name="OID">EIGENE_OBJEKTE.0.ALARMANLAGE.VOR-ALARM</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="8jWe/A|^D/#^JN+gjHP4"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> <next> <block type="variables_set" id="ewosYZ`nW7T`)-+o9V2`"> <field name="VAR" id="XSP:|I`n+%Yc9j/o]m~O" variabletype="">Alarm_Timeout</field> <value name="VALUE"> <block type="logic_null" id="HPza)fjgC*R]}my@W/lQ"></block> </value> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </statement> <next> <block type="comment" id="G|Q#+/q#FbnaV/-+l_#k"> <field name="COMMENT"></field> </block> </next> </block> </next> </block> </statement> </block> </xml>
-
@ChrisXY
Die rache des Blockly's - ich hab einen Fehler übersehen. Du hast 2 Trigger ineinander geschachtelt, das geht so nicht. War mein Fehler. bitte nach Bild ändern:
Das Setzen der Variable (rot markiert) muss ganz nach oben.
Der innere Trigger muss entfallen, das was im Trigger sitzt muss direkt in das darüber liegende wenn (orange markiert)A.
-
@Asgothian hehe okay macht ja nichts so lerne ich auch etwas dazu
Scheint erstmal zu klappen werde es nun mal ein wenig testen.
Vielen Dank für die hilfe
-
alles ok