iobroker.alarm 2.2.1 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,9 +31,9 @@ Hier werden die Einstellungen wie die Zeiten der Nachtruhe, Sirenezeit, Stiller-
31
31
 
32
32
 
33
33
  - Aktivierzeit -> Zeitverzögerung bis zu Aktivierung wenn man einen delay Datenpunkt benutzt
34
- - Sirenenzeit bei Einbruch -> Bei Einbruch wird der Datenpunkt alarm.0.status.siren für die Zeit auf true gesetzt
34
+ - Sirenenzeit bei Einbruch -> Bei Einbruch wird der Datenpunkt alarm.0.status.siren / siren_inside für die Zeit auf true gesetzt
35
35
  - Alarmverzögerung -> Verzögerungszeit bis Einbruch ausgelöst wird (während dieser Zeit wird der Stille Alarm ausgelöst)
36
- - Auslösezeit bei Warnungen/Sirene innen -> Bei Auslösung des Benachrichtigungskreises oder scharf innen Kreises, wird der jeweils zugehörige Datenpunkt für die Zeit auf true gesetzt
36
+
37
37
 
38
38
  ----------------------------------------------------------------------------------------------------------------------
39
39
 
@@ -153,6 +153,8 @@ Beinhaltet die Informationen für die "anderen" Alarmkreise 1 + 2.
153
153
 
154
154
  ## Changelog
155
155
 
156
+ #### 3.0.3 (31.01.2022)
157
+ * (misanorot) changed burgle concept, added silent alarm at sharp inside, fixed little issues
156
158
 
157
159
  #### 2.2.1 (20.01.2022)
158
160
  * (misanorot) added notification when warnings at beginning night rest
@@ -38,6 +38,7 @@
38
38
  sayit = settings.sayit || [];
39
39
  one = settings.one || [];
40
40
  two = settings.two || [];
41
+ new_version = settings.version;
41
42
 
42
43
 
43
44
 
@@ -63,6 +64,9 @@
63
64
  onChange(false);
64
65
  // reinitialize all the Materialize labels on the page if you are dynamically adding inputs:
65
66
  if (M) M.updateTextFields();
67
+ if (!new_version) {
68
+ version('', onChange);
69
+ }
66
70
  $('.timepicker').timepicker({
67
71
  "twelveHour":false
68
72
  });
@@ -83,11 +87,9 @@
83
87
  values2table('zone_five', zone_five, onChange, tableOnReady);
84
88
  values2table('zone_six', zone_six, onChange, tableOnReady);
85
89
  */
86
- $('#opt_leave').change(leaving);
87
90
 
91
+ $('#opt_leave').change(leaving);
88
92
  $('#opt_telegram').change(telChanging);
89
-
90
-
91
93
  $('.sendTo_Chips').chips({
92
94
  placeholder: 'Add adapter',
93
95
  secondaryPlaceholder: '+instance'
@@ -104,12 +106,11 @@
104
106
  });
105
107
  });
106
108
  list2chips('.sendTo_Chips', settings.sendTo || '', onChange);
107
-
108
109
  $('#sayit_help').on('click', ()=> {
109
110
  showMessage('Bitte einen state auswählen, wo Sie sicher sind, dass dieser mit einem Text zur Sprachausgabe beschrieben werden kann! Als Beispiel sayit.0.tts.text. Als Optionen zur Ausgabe, stehen die unten stehenden Sätze mit der entsprechenden Nummer zu Verfügung.');
110
111
  });
111
112
  $('#circuits_help').on('click', ()=> {
112
- showMessage('Alarmkreis => entspricht Vollschutz, Betreiber ist nicht Zuhause *** Scharf innen => entspricht Aussenhautüberwachung, Betreiber ist anwesend *** Benachrichtigungen => Es werden Meldungen während scharf und scharf innen aussgegeben *** Stiller Alarm => Bei Aktivierung wird erst der stille statt der richtige Alarm ausgelöst. *** negieren => triggert den State auf false ');
113
+ showMessage('* Alarmkreis => entspricht Vollschutz, Betreiber ist nicht Zuhause <br>* Scharf innen => entspricht Aussenhautüberwachung, Betreiber ist anwesend <br>* Benachrichtigungen => Es werden Meldungen während scharf und scharf innen aussgegeben <br>* Stiller Alarm => Bei Aktivierung wird erst der Stille statt der richtige Alarm ausgelöst. <br>* negieren => triggert den State auf false <br>* verlassen => Bei Aktivierung über Countdown, wird dieser beendet und die Alarmanlage aktiviert');
113
114
  });
114
115
  $('#test_sayit').on('click', ()=>{
115
116
  const tts_instance = table2values('sayit');
@@ -156,12 +157,21 @@
156
157
  obj.zone_five = table2values('zone_five');
157
158
  obj.zone_six = table2values('zone_six');*/
158
159
  obj.states = states;
160
+ obj.version = new_version;
159
161
  callback(obj);
160
162
  }
161
163
  //##############################################
162
164
 
163
165
  //########### HELPERS ###########
164
166
 
167
+ function version(id, callback) {
168
+ if (id !== 'version_button') {
169
+ new_version = true;
170
+ callback();
171
+ }
172
+ showMessage('<b>Ab Version 3.x.x, habe ich mich dazu entschieden den Alarm auch bei scharf innen auszulösen! Das verändert die Funktion des Adapters ein wenig. Es wird jetzt zwischen Sirene intern und extern unterschieden, hierzu ist zu beachten, dass es den Datenpunkt info.sharp_inside_siren nicht mehr gibt. Diesen bitte ggf. manuell löschen! Der Datenpunkt wurde durch status.siren_inside ersetzt, und entspricht der Innensirene. Es ist zu beachten, dass das auch ggf. bei den Verknüpfungen neu einzustellen ist. Möchte man dies Aussensirene auch bei innen Alarm auslösen, kann man das in den allgemeinen Einstellungen tun. <br><br> DANKE FÜR DAS VERSTÄNDNIS, ABER ICH DENKE SO IST ES LOGISCHER!</b>');
173
+ }
174
+
165
175
  function checkTrigger(val, id) {
166
176
  if (val === 'status.state_list') {
167
177
  $('#shorts .values-input[data-name="trigger_val"][data-index="' + id + '"] option[value=true]').prop('disabled',true);
@@ -191,7 +201,6 @@ $('select').select()
191
201
 
192
202
  function telChanging() {
193
203
  let check = document.getElementById('opt_telegram').checked;
194
-
195
204
  if (check) {
196
205
  $('#user').prop('disabled', false);
197
206
  $('#chatID').prop('disabled', false);
@@ -206,9 +215,7 @@ function telChanging() {
206
215
  }
207
216
 
208
217
  function leaving() {
209
-
210
218
  let check = document.getElementById('opt_leave').checked;
211
-
212
219
  if (check) {
213
220
  $('#circuits .table-values-div .table-values [data-name="leave"]').each(function() {
214
221
  $(this).prop('disabled', false);
@@ -568,11 +575,26 @@ function getName(obj) {
568
575
 
569
576
  <div id="tab_settings" class="col s12 page">
570
577
  <div class="row">
578
+ <div class="col s12 m2">
571
579
  <form action="https://www.paypal.com/donate" method="post" target="_top">
572
580
  <input type="hidden" name="hosted_button_id" value="BXTYTYW3D5MRU" />
573
581
  <input type="image" src="https://www.paypalobjects.com/de_DE/DE/i/btn/btn_donateCC_LG.gif" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" />
574
582
  <img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1" />
575
583
  </form>
584
+ </div>
585
+ <div class="col s12 m8">
586
+ <p class=" left translate">donat</p>
587
+ </div>
588
+ <div>
589
+ <a id="version_button" onclick="version(this.id)" class="pulse waves-effect waves-light btn">Version > 3</a>
590
+ </div>
591
+ </div>
592
+ <div class="row">
593
+ <div class="col s12">
594
+ <div class="card-panel">
595
+ <span class="blue-text text-darken-2 translate">alarm</span>
596
+ </div>
597
+ </div>
576
598
  </div>
577
599
  <div class="row">
578
600
  <div class="input-field col s4 m2 l1">
@@ -605,36 +627,6 @@ function getName(obj) {
605
627
  <option value="min">min</option>
606
628
  </select>
607
629
  </div>
608
- <div class="input-field col s4 m2 l1">
609
- <i class="material-icons prefix">alarm</i>
610
- <input id="time_silent"
611
- type="number"
612
- class="validate value tooltipped"
613
- data-position="top"
614
- data-tooltip="in sec">
615
- <label for="time_silent" class="translate">time_silent</label>
616
- </div>
617
- <div class="input-field col s2 m1 l1">
618
- <select id="time_silent_select" class="value">
619
- <option value="sec">sec</option>
620
- <option value="min">min</option>
621
- </select>
622
- </div>
623
- <div class="input-field col s4 m2 l1">
624
- <i class="material-icons prefix">alarm</i>
625
- <input id="time_warning"
626
- type="number"
627
- class="validate value tooltipped"
628
- data-position="top"
629
- data-tooltip="in sec">
630
- <label for="time_warning" class="translate">time_warning</label>
631
- </div>
632
- <div class="input-field col s2 m1 l1">
633
- <select id="time_warning_select" class="value">
634
- <option value="sec">sec</option>
635
- <option value="min">min</option>
636
- </select>
637
- </div>
638
630
  <div class="input-field col s6 m3 l2">
639
631
  <i class="material-icons prefix">alarm</i>
640
632
  <input id="alarm_flash"
@@ -644,14 +636,36 @@ function getName(obj) {
644
636
  data-tooltip="in sec">
645
637
  <label for="alarm_flash" class="translate">alarm_flash</label>
646
638
  </div>
647
- <div class="input-field col s6 m3 l2">
648
- <i class="material-icons prefix">alarm</i>
649
- <input id="silent_flash"
650
- type="number"
651
- class="validate value tooltipped"
652
- data-position="top"
653
- data-tooltip="in sec">
654
- <label for="silent_flash" class="translate">silent_flash</label>
639
+ </div>
640
+ <div class="row">
641
+ <div class="col s12">
642
+ <div class="card-panel">
643
+ <span class="blue-text text-darken-2 translate">inside</span>
644
+ </div>
645
+ </div>
646
+ </div>
647
+ <div class="row">
648
+ <div class="input-field col s4 m2 l1">
649
+ <i class="material-icons prefix">alarm</i>
650
+ <input id="time_warning"
651
+ type="number"
652
+ class="validate value tooltipped"
653
+ data-position="top"
654
+ data-tooltip="in sec">
655
+ <label for="time_warning" class="translate">time_warning</label>
656
+ </div>
657
+ <div class="input-field col s2 m1 l1">
658
+ <select id="time_warning_select" class="value">
659
+ <option value="sec">sec</option>
660
+ <option value="min">min</option>
661
+ </select>
662
+ </div>
663
+ </div>
664
+ <div class="row">
665
+ <div class="col s12">
666
+ <div class="card-panel">
667
+ <span class="blue-text text-darken-2 translate">general_settings</span>
668
+ </div>
655
669
  </div>
656
670
  </div>
657
671
  <div class="row">
@@ -671,6 +685,32 @@ function getName(obj) {
671
685
  </div>
672
686
  </div>
673
687
  <div class="row">
688
+ <div class="input-field col s4 m2 l1">
689
+ <i class="material-icons prefix">alarm</i>
690
+ <input id="time_silent"
691
+ type="number"
692
+ class="validate value tooltipped"
693
+ data-position="top"
694
+ data-tooltip="in sec">
695
+ <label for="time_silent" class="translate">time_silent</label>
696
+ </div>
697
+ <div class="input-field col s2 m1 l1">
698
+ <select id="time_silent_select" class="value">
699
+ <option value="sec">sec</option>
700
+ <option value="min">min</option>
701
+ </select>
702
+ </div>
703
+ <div class="input-field col s6 m3 l2">
704
+ <i class="material-icons prefix">alarm</i>
705
+ <input id="silent_flash"
706
+ type="number"
707
+ class="validate value tooltipped"
708
+ data-position="top"
709
+ data-tooltip="in sec">
710
+ <label for="silent_flash" class="translate">silent_flash</label>
711
+ </div>
712
+ </div>
713
+ <div class="row">
674
714
  <!--
675
715
  <div class="col s12">
676
716
  <input type="checkbox" id="opt_night" class="value" /><label for="opt_night" class="translate">opt_night</label>
@@ -683,7 +723,7 @@ function getName(obj) {
683
723
  <input type="checkbox" id="opt_warning" class="value" /><label for="opt_warning" class="translate">opt_warning</label>
684
724
  </div>
685
725
  <div class="col s12 m4 l2">
686
- <input type="checkbox" id="opt_list" class="value" /><label for="opt_list" class="translate">opt_list</label>
726
+ <input type="checkbox" id="opt_siren" class="value" /><label for="opt_siren" class="translate">opt_siren</label>
687
727
  </div>
688
728
  <div class="col s12 m4 l2">
689
729
  <input type="checkbox" id="opt_leave" class="value" /><label for="opt_leave" class="translate">opt_leave</label>
@@ -764,6 +804,9 @@ function getName(obj) {
764
804
  <div class="col s12 m6 l4">
765
805
  <input type="checkbox" id="send_activation_warnings_inside" class="value" /><label for="send_activation_warnings_inside" class="translate">send_activation_warnings</label>
766
806
  </div>
807
+ <div class="col s12 m6 l4">
808
+ <input type="checkbox" id="send_alarm_silent_inside" class="value" /><label for="send_alarm_silent_inside" class="translate">send_alarm_silent</label>
809
+ </div>
767
810
  </div>
768
811
  <div class="row">
769
812
  <div class="col s12">
@@ -813,7 +856,7 @@ function getName(obj) {
813
856
  <a class="btn-floating waves-effect waves-light blue table-button-add" id="circuits_table"><i class="material-icons">add</i></a>
814
857
  </div>
815
858
  <div class="col s2 m1 l1 right">
816
- <a class="btn-floating waves-effect waves-light blue" id="circuits_help"><i class="material-icons">help_center</i></a>
859
+ <a class="btn-floating pulse waves-effect waves-light blue" id="circuits_help"><i class="material-icons">help_center</i></a>
817
860
  </div>
818
861
  </div>
819
862
  <div class="table-values-div">
@@ -826,10 +869,11 @@ function getName(obj) {
826
869
  <th data-buttons="edit" style="width: 40px" class="header"></th>
827
870
  <th data-name="negativ" style="width: 100px" data-type="checkbox" class="header translate">negativ</th>
828
871
  <th data-name="alarm" style="width: 100px" data-type="checkbox" class="header translate">alarm</th>
829
- <th data-name="warning" style="width: 100px" data-type="checkbox" class="header translate">inside</th>
830
- <th data-name="night" style="width: 130px" data-type="checkbox" class="header translate">notification</th>
831
872
  <th data-name="delay" style="width: 100px" data-type="checkbox" class="header translate">delay</th>
832
873
  <th data-name="leave" style="width: 100px" data-type="checkbox" class="header translate">leave</th>
874
+ <th data-name="warning" style="width: 100px" data-type="checkbox" class="header translate">inside</th>
875
+ <th data-name="delay_inside" style="width: 100px" data-type="checkbox" class="header translate">delay_inside</th>
876
+ <th data-name="night" style="width: 130px" data-type="checkbox" class="header translate">notification</th>
833
877
  <th data-buttons="delete" style="width: 40px" class="header"></th>
834
878
  </tr>
835
879
  </thead>
@@ -912,27 +956,6 @@ function getName(obj) {
912
956
  <textarea id="text_warning" class="materialize-textarea value"></textarea>
913
957
  <label for="text_warning" class="translate">text_warning</label>
914
958
  </div>
915
- <div class="input-field col s9 m4 l3">
916
- <i class="material-icons prefix">filter_5</i>
917
- <textarea id="text_changes" class="materialize-textarea value"></textarea>
918
- <label for="text_changes" class="translate">text_changes</label>
919
- </div>
920
- <div class="input-field col s3 m2 l1">
921
- <select id="changes_repeat" class="value">
922
- <option value="1">1x</option>
923
- <option value="2">2x</option>
924
- <option value="3">3x</option>
925
- <option value="4">4x</option>
926
- <option value="5">5x</option>
927
- <option value="6">6x</option>
928
- <option value="7">7x</option>
929
- <option value="8">8x</option>
930
- <option value="9">9x</option>
931
- <option value="10">10x</option>
932
- <option value="15">15x</option>
933
- <option value="20">20x</option>
934
- </select>
935
- </div>
936
959
  <div class="input-field col s9 m4 l3">
937
960
  <i class="material-icons prefix">filter_6</i>
938
961
  <textarea id="text_alarm" class="materialize-textarea value"></textarea>
@@ -1019,7 +1042,7 @@ function getName(obj) {
1019
1042
  <thead>
1020
1043
  <tr>
1021
1044
  <th data-name="enabled" style="width: 50px" data-type="checkbox" class="header translate">active</th>
1022
- <th data-name="select_id" data-type="select" data-options="status.state_list;status.activated;status.gets_activated;status.deactivated;status.burglar_alarm;status.silent_alarm;status.siren;status.activation_failed;status.sleep;status.activated_with_warnings;status.enableable;status.sharp_inside_activated;info.sharp_inside_siren;info.notification_circuit_changes;status.alarm_flash;status.silent_flash;other_alarms.one_changes;other_alarms.two_changes" class="header translate">Name</th>
1045
+ <th data-name="select_id" data-type="select" data-options="status.state_list;status.activated;status.gets_activated;status.deactivated;status.burglar_alarm;status.silent_alarm;status.siren;status.activation_failed;status.sleep;status.activated_with_warnings;status.enableable;status.sharp_inside_activated;status.siren_inside;info.notification_circuit_changes;status.alarm_flash;status.silent_flash;other_alarms.one_changes;other_alarms.two_changes" class="header translate">Name</th>
1023
1046
  <th data-name="trigger_val" data-type="select" data-options=" ;true;false;deactivated;sharp;sharp_inside;burglary;night_rest;gets_activated;activation_failed;activation_aborted" class="header translate">Trigger</th>
1024
1047
  <th data-name="name" data-type="text" class="header translate">Name</th>
1025
1048
  <th data-name="name_id" data-type="text" class="header translate">Object-ID</th>
package/admin/words.js CHANGED
@@ -32,8 +32,39 @@ systemDictionary = {
32
32
  'es': 'alarma silenciosa',
33
33
  'pl': 'cichy alarm',
34
34
  'zh-cn': '静音警报'},
35
+ 'delay_inside': {
36
+ 'en': 'silent alarm sharp inside',
37
+ 'de': 'Stiller Alarm scharf innen',
38
+ 'ru': 'тихая тревога острая внутри',
39
+ 'pt': 'alarme silencioso afiado por dentro',
40
+ 'nl': 'stil alarm scherp van binnen',
41
+ 'fr': "alarme silencieuse à l'intérieur",
42
+ 'it': "allarme silenzioso acuto all'interno",
43
+ 'es': 'alarma silenciosa aguda en el interior',
44
+ 'pl': 'cichy alarm ostry w środku',
45
+ 'zh-cn': '静音报警尖锐内部'},
35
46
  'disabled': { 'en': 'disabled', 'de': 'deaktiviert', 'ru': 'отключен', 'pt': 'Desativado', 'nl': 'invalide', 'fr': 'désactivée', 'it': 'Disabilitato', 'es': 'discapacitado', 'pl': 'wyłączone', 'zh-cn': '残'},
47
+ 'donat': {'en': "I'm not a professional developer and this is a private project, the development takes place in my spare time, if you want to support this you can thank me with a donation under PayPal. You are also welcome to send me feature requests for future versions of the adapter.",
48
+ 'de': 'Ich bin kein professioneller Entwickler und dies ist ein privates Projekt, die Entwicklung findet in meiner Freizeit statt, wenn Sie dies unterstützen möchten, können Sie sich mit einer Spende unter PayPal bei mir bedanken. Sie können mir auch gerne Funktionsanfragen für zukünftige Versionen des Adapters senden.',
49
+ 'ru': 'Я не профессиональный разработчик, и это частный проект, разработка происходит в свободное время, если вы хотите поддержать это, вы можете отблагодарить меня пожертвованием через PayPal. Вы также можете присылать мне запросы функций для будущих версий адаптера.',
50
+ 'pt': 'Eu não sou um desenvolvedor profissional e este é um projeto privado, o desenvolvimento ocorre no meu tempo livre, se você quiser apoiar isso, pode me agradecer com uma doação no PayPal. Você também pode me enviar solicitações de recursos para versões futuras do adaptador.',
51
+ 'nl': 'Ik ben geen professionele ontwikkelaar en dit is een privé project, de ontwikkeling vindt plaats in mijn vrije tijd, als je dit wilt steunen kun je me bedanken met een donatie onder PayPal. U bent ook welkom om mij functieverzoeken te sturen voor toekomstige versies van de adapter.',
52
+ 'fr': "Je ne suis pas un développeur professionnel et c'est un projet privé, le développement a lieu sur mon temps libre, si vous voulez soutenir cela vous pouvez me remercier avec un don sous PayPal. Vous pouvez également m'envoyer des demandes de fonctionnalités pour les futures versions de l'adaptateur.",
53
+ 'it': "Non sono uno sviluppatore professionista e questo è un progetto privato, lo sviluppo avviene nel mio tempo libero, se vuoi supportarlo puoi ringraziarmi con una donazione sotto PayPal. Puoi anche inviarmi richieste di funzionalità per versioni future dell'adattatore.",
54
+ 'es': 'No soy un desarrollador profesional y este es un proyecto privado, el desarrollo se lleva a cabo en mi tiempo libre, si quieres apoyar esto puedes agradecerme con una donación a través de PayPal. También puede enviarme solicitudes de funciones para futuras versiones del adaptador.',
55
+ 'pl': 'Nie jestem profesjonalnym programistą i jest to projekt prywatny, rozwój odbywa się w wolnym czasie, jeśli chcesz to wesprzeć, możesz mi podziękować darowizną w systemie PayPal. Zapraszam również do przesyłania mi próśb o funkcje dla przyszłych wersji adaptera.',
56
+ 'zh-cn': '我不是专业开发人员,这是一个私人项目,开发是在我的业余时间进行的,如果你想支持这个,你可以通过 PayPal 捐款来感谢我。也欢迎您向我发送有关适配器未来版本的功能请求。'},
36
57
  'general': { 'en': 'Main settings', 'de': 'Haupteinstellungen', 'ru': 'Основные параметры', 'pt': 'Configurações principais', 'nl': 'Belangrijkste instellingen', 'fr': 'Réglages principaux', 'it': 'Impostazioni principali', 'es': 'Ajustes principales', 'pl': 'Ustawienia główne', 'zh-cn': '主要设置'},
58
+ 'general_settings': { 'en': 'general settings',
59
+ 'de': 'Allgemeine Einstellungen',
60
+ 'ru': 'общие настройки',
61
+ 'pt': 'Configurações Gerais',
62
+ 'nl': 'Algemene instellingen',
63
+ 'fr': 'réglages généraux',
64
+ 'it': 'impostazioni generali',
65
+ 'es': 'Configuración general',
66
+ 'pl': 'Ustawienia główne',
67
+ 'zh-cn': '常规设置'},
37
68
  'important': { 'en': 'Important! Do not create loops.', 'de': 'Wichtig! Erstellen Sie keine Schleifen.', 'ru': 'Важный! Не создавайте петли.', 'pt': 'Importante! Não crie loops.', 'nl': 'Belangrijk! Maak geen lussen.', 'fr': 'Important! Ne créez pas de boucles.', 'it': 'Importante! Non creare loop.', 'es': '¡Importante! No cree bucles.', 'pl': 'Ważny! Nie twórz pętli.', 'zh-cn': '重要!不要创建循环。'},
38
69
  'input': { 'en': 'Input shortcuts', 'de': 'Eingabeverknüpfungen', 'ru': 'Входные ярлыки', 'pt': 'Atalhos de entrada', 'nl': 'Sneltoetsen invoeren', 'fr': "Raccourcis d'entrée", 'it': 'Scorciatoie di input', 'es': 'Atajos de entrada', 'pl': 'Skróty wprowadzania', 'zh-cn': '输入快捷键'},
39
70
  'info_words': { 'en': 'You can edit the notifications at words tab', 'de': 'Texte der Benachrichtigungen können auf der Registerkarte Texte bearbeitet werden', 'ru': 'Вы можете редактировать уведомления на вкладке слов', 'pt': 'Você pode editar as notificações na guia palavras', 'nl': 'Je kunt de meldingen bewerken op het tabblad Woorden', 'fr': "Vous pouvez modifier les notifications dans l'onglet mots", 'it': 'Puoi modificare le notifiche nella scheda parole', 'es': 'Puedes editar las notificaciones en la pestaña de palabras', 'pl': 'Możesz edytować powiadomienia na karcie słów', 'zh-cn': '您可以在单词选项卡上编辑通知'},
@@ -110,16 +141,16 @@ systemDictionary = {
110
141
  'es': 'activación al salir durante la cuenta atrás',
111
142
  'pl': 'aktywacja przy wyjściu podczas odliczania',
112
143
  'zh-cn': '倒计时离开时激活' },
113
- 'opt_list': { 'en': 'set list states to burgle when sharp inside triggered',
114
- 'de': 'List States auf Einbruch setzen, wenn scharf Innen ausgelöst wird',
115
- 'ru': 'установить список состояний для взлома при резком срабатывании внутри',
116
- 'pt': 'definir os estados da lista para burgle quando afiado for acionado',
117
- 'nl': 'stel lijststaten in om in te breken wanneer scherp van binnen wordt geactiveerd',
118
- 'fr': "définir les états de liste pour cambrioler lorsque l'intérieur pointu est déclenché",
119
- 'it': "imposta gli stati dell'elenco per svaligiare quando viene attivato l'interno tagliente",
120
- 'es': 'Establecer estados de lista para robar cuando se activa el interior agudo',
121
- 'pl': 'ustawić stany listy na włamanie po wyzwoleniu ostrego środka',
122
- 'zh-cn': '当尖锐的内部触发时,将列表状态设置为窃贼' },
144
+ 'opt_siren': { 'en': 'activate outside siren at burgle sharp inside',
145
+ 'de': 'Außensirene bei Einbruch scharf innen aktivieren',
146
+ 'ru': 'активировать внешнюю сирену при взломе резко внутри',
147
+ 'pt': 'ativar a sirene externa em arrombamento afiado por dentro',
148
+ 'nl': 'activeer buitensirene bij inbraak scherp binnen',
149
+ 'fr': "activer la sirène extérieure en cas d'effraction à l'intérieur",
150
+ 'it': "attivare la sirena esterna in caso di scasso acuto all'interno",
151
+ 'es': 'activar la sirena exterior en caso de robo agudo en el interior',
152
+ 'pl': 'aktywuj syrenę zewnętrzną podczas włamywania się do środka',
153
+ 'zh-cn': '内部爆破时激活外部警报器' },
123
154
  'opt_log': { 'en': 'Log output', 'de': 'Ausgabe protokollieren', 'ru': 'Выход журнала', 'pt': 'Saída de log', 'nl': 'Log output', 'fr': 'Journal de sortie', 'it': "Registrare l'output", 'es': 'Salida de registro', 'pl': 'Wynik dziennika', 'zh-cn': '记录输出'},
124
155
  'opt_night': { 'en': 'Control configured states during night rest', 'de': 'Konfigurierte Zustände während der Nachtruhe überwachen', 'ru': 'Контроль настроенных состояний во время ночного отдыха', 'pt': 'Controle configurado estados durante o resto da noite', 'nl': 'Controleer geconfigureerde staten tijdens nachtrust', 'fr': 'Contrôler les états configurés pendant le repos de nuit', 'it': 'Controllare gli stati configurati durante il riposo notturno', 'es': 'Control de estados configurados durante el descanso nocturno.', 'pl': 'Kontroluj skonfigurowane stany podczas nocnego odpoczynku', 'zh-cn': '在夜间休息期间控制配置状态'},
125
156
  'opt_night_silent': {'en': 'no speech output during night rest',
@@ -284,6 +315,16 @@ systemDictionary = {
284
315
  'time_activate': { 'en': 'Activation time', 'de': 'Aktivierungszeit', 'ru': 'Время активации', 'pt': 'Tempo de ativação', 'nl': 'Activeringstijd', 'fr': "Temps d'activation", 'it': 'Tempo di attivazione', 'es': 'Tiempo de activacion', 'pl': 'Czas aktywacji', 'zh-cn': '激活时间(秒)'},
285
316
  'time_alarm': { 'en': 'Siren time at burgle', 'de': 'Sirenenzeit bei Einbruch', 'ru': 'Сирена время в Burgle', 'pt': 'Hora da sirene no burgle', 'nl': 'Sirenetijd bij inbraak', 'fr': 'Temps de sirène à burgle', 'it': 'Ora della sirena al burgle', 'es': 'Tiempo de sirena en burgle', 'pl': 'Czas syreny w burgle', 'zh-cn': '警报器的警笛时间在几秒钟内'},
286
317
  'time_silent': { 'en': 'Alarm delay', 'de': 'Alarmverzögerung', 'ru': 'Задержка тревоги в секундах', 'pt': 'Atraso do alarme em segundos', 'nl': 'Alarmvertraging in seconden', 'fr': "Délai d'alarme en secondes", 'it': "Ritardo dell'allarme in secondi", 'es': 'Retraso de alarma en segundos', 'pl': 'Opóźnienie alarmu w sekundach', 'zh-cn': '警报延迟秒数'},
318
+ 'time_silent_inside': { 'en': 'alarm delay sharp inside',
319
+ 'de': 'Alarmverzögerung scharf innen',
320
+ 'ru': 'задержка будильника резко внутри',
321
+ 'pt': 'atraso de alarme acentuado por dentro',
322
+ 'nl': 'alarmvertraging scherp van binnen',
323
+ 'fr': "retard d'alarme net à l'intérieur",
324
+ 'it': "ritardo di allarme acuto all'interno",
325
+ 'es': 'retardo de alarma agudo en el interior',
326
+ 'pl': 'opóźnienie alarmu ostre wewnątrz',
327
+ 'zh-cn': '内部报警延迟尖锐'},
287
328
  'time_warning': { 'en': 'Siren time at sharp inside',
288
329
  'de': 'Sirenenzeit scharf innen',
289
330
  'ru': 'Время сирены на резком внутри',
package/io-package.json CHANGED
@@ -1,8 +1,20 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "alarm",
4
- "version": "2.2.1",
4
+ "version": "3.0.3",
5
5
  "news": {
6
+ "3.0.2": {
7
+ "en": "changed burgle concept, added silent alarm at sharp inside, fixed little issues",
8
+ "de": "Einbruchkonzept geändert, stiller Alarm bei scharf Innen hinzugefügt, kleine Probleme behoben",
9
+ "ru": "изменена концепция взломов, добавлена бесшумная сигнализация при проникновении внутрь, исправлены мелкие недочеты",
10
+ "pt": "mudou o conceito de burle, adicionou alarme silencioso no interior, corrigiu pequenos problemas",
11
+ "nl": "gewijzigd inbraakconcept, stil alarm toegevoegd aan scherpe binnenkant, kleine problemen opgelost",
12
+ "fr": "changement du concept de cambriolage, ajout d'une alarme silencieuse à l'intérieur net, petits problèmes résolus",
13
+ "it": "cambiato il concetto di furto, aggiunto un allarme silenzioso all'interno acuto, risolti piccoli problemi",
14
+ "es": "cambió el concepto de robo, agregó alarma silenciosa en el interior agudo, solucionó pequeños problemas",
15
+ "pl": "zmieniono koncepcję włamywania, dodano cichy alarm w ostrym wnętrzu, naprawiono małe problemy",
16
+ "zh-cn": "改变了防盗概念,在尖锐的内部增加了静音警报,修复了一些小问题"
17
+ },
6
18
  "2.2.1": {
7
19
  "en": "added notification when warnings at beginning night rest",
8
20
  "de": "Benachrichtigung bei Warnungen zu Beginn der Nachtruhe hinzugefügt",
@@ -155,6 +167,7 @@
155
167
  "installedFrom": "misanorot/ioBroker.alarm"
156
168
  },
157
169
  "native": {
170
+ "new_version": false,
158
171
  "circuits": [],
159
172
  "shorts_in": [],
160
173
  "shorts": [],
@@ -178,7 +191,7 @@
178
191
  "opt_say_warn_changes": true,
179
192
  "opt_night": true,
180
193
  "opt_log": true,
181
- "opt_list": false,
194
+ "opt_siren": false,
182
195
  "opt_leave": false,
183
196
  "opt_warning": false,
184
197
  "night_from": "",
@@ -195,6 +208,7 @@
195
208
  "send_activation_warnings_night": true,
196
209
  "send_activated_with_warnings": true,
197
210
  "send_alarm_silent": true,
211
+ "send_alarm_silent_inside": true,
198
212
  "send_failed": true,
199
213
  "sayit": [],
200
214
  "text_activated": "Alarmanlage aktiviert",
@@ -668,11 +682,11 @@
668
682
  "native": {}
669
683
  },
670
684
  {
671
- "_id": "info.sharp_inside_siren",
685
+ "_id": "status.siren_inside",
672
686
  "type": "state",
673
687
  "common": {
674
688
  "role": "",
675
- "name": "Changes sharp inside circuit",
689
+ "name": "Sharp inside siren",
676
690
  "desc": "Changes in sharp inside circuit detected",
677
691
  "type": "boolean",
678
692
  "read": true,
package/main.js CHANGED
@@ -64,7 +64,7 @@ let activated = false,
64
64
 
65
65
  let timer = null,
66
66
  silent_timer = null,
67
- timer_inside_changes = null,
67
+ siren_inside_timer = null,
68
68
  timer_notification_changes = null,
69
69
  siren_timer = null,
70
70
  silent_interval = null,
@@ -212,6 +212,7 @@ function main() {
212
212
  //################# ENABLE ####################################################
213
213
 
214
214
  function enable(id, state){
215
+ if (activated || burgle) return;
215
216
  let say = A.text_failed;
216
217
  if(timer) {
217
218
  clearInterval(timer);
@@ -282,22 +283,10 @@ function disable(){
282
283
  adapter.setState('info.log', `${A.log_deact}`, true);
283
284
  sayit(A.text_deactivated, 2);
284
285
  if(log)adapter.log.info(`${A.log_deact}`);
285
- adapter.setState('status.siren', false, true);
286
- adapter.setState('status.silent_flash', false, true);
287
- adapter.setState('status.alarm_flash', false, true);
288
- adapter.setState('status.activated', false, true);
289
- adapter.setState('status.deactivated', true, true);
290
286
  adapter.setState('status.activated_with_warnings', false, true);
291
287
  adapter.setState('status.activation_failed', false, true);
292
- adapter.setState('status.siren', false, true);
293
- adapter.setState('status.burglar_alarm', false, true);
294
- adapter.setState('status.silent_alarm', false, true);
295
- adapter.setState('status.state', 'deactivated', true);
296
- adapter.setState('status.state_list',0, true);
297
- adapter.setState('homekit.CurrentState', 3, true);
298
- adapter.setState('homekit.TargetState', 3, true);
299
- adapter.setState('use.list',0, true);
300
288
  if(A.send_activation) messages(`${A.log_deact}`);
289
+ disableStates();
301
290
  }else if (inside) {
302
291
  inside_ends(true);
303
292
  }else if (night_rest) {
@@ -310,7 +299,7 @@ function disable(){
310
299
 
311
300
  //################# BURGALARY ####################################################
312
301
 
313
- function burglary(id, state, silent){
302
+ function burglary(id, state, silent, indoor){
314
303
  if(burgle) return;
315
304
  if(silent_timer && silent) return;
316
305
  let count = 0;
@@ -320,7 +309,8 @@ function burglary(id, state, silent){
320
309
  if(silent){
321
310
  adapter.setState('status.silent_alarm', true, true);
322
311
  adapter.setState('status.state', 'silent alarm', true);
323
- if(A.send_alarm_silent) messages(`${A.log_burgle} ${name}`);
312
+ if (A.send_alarm_silent_inside && indoor) messages(`${A.log_burgle} ${name}`);
313
+ if(A.send_alarm_silent && !indoor) messages(`${A.log_burgle} ${name}`);
324
314
  if(A.silent_flash > 0) {
325
315
  silent_interval = setInterval(()=>{
326
316
  if(silent_i) {
@@ -359,25 +349,22 @@ function burglary(id, state, silent){
359
349
  adapter.setState('status.burglar_alarm', true, true);
360
350
  adapter.setState('status.silent_alarm', false, true);
361
351
  adapter.setState('status.silent_flash', false, true);
362
- adapter.setState('status.siren', true, true);
352
+ adapter.setState('status.siren_inside', true, true);
353
+ siren_inside_timer = setTimeout(()=>{
354
+ adapter.setState('status.siren_inside', false, true);
355
+ }, timeMode(A.time_warning_select) * A.time_warning);
356
+ if (A.opt_siren && indoor) {
357
+ alarmSiren();
358
+ alarmFlash();
359
+ }
360
+ if (!indoor) {
361
+ adapter.setState('status.siren', true, true);
362
+ alarmSiren();
363
+ alarmFlash();
364
+ }
363
365
  adapter.setState('status.state', 'burgle', true);
364
366
  adapter.setState('status.state_list', 3, true);
365
367
  adapter.setState('homekit.CurrentState', 4, true);
366
- if(A.alarm_flash > 0) {
367
- alarm_interval = setInterval(()=>{
368
- if(alarm_i) {
369
- adapter.setState('status.alarm_flash', true, true);
370
- alarm_i = false;
371
- } else {
372
- adapter.setState('status.alarm_flash', false, true);
373
- alarm_i = true;
374
- }
375
- }, A.alarm_flash * 1000);
376
- }
377
- siren_timer = setTimeout(()=>{
378
- adapter.setState('status.siren', false, true);
379
- clearTimeout(siren_timer);
380
- }, timeMode(A.time_alarm_select) * A.time_alarm);
381
368
  }, timeMode(A.time_silent_select) * A.time_silent);
382
369
  }
383
370
  else if (!silent) {
@@ -385,7 +372,8 @@ function burglary(id, state, silent){
385
372
  clearTimeout(silent_timer);
386
373
  clearInterval(silent_interval);
387
374
  clearInterval(silent_contdown);
388
- if(A.send_alarm) messages(`${A.log_burgle} ${name}`);
375
+ if(A.send_alarm_inside && indoor) messages(`${A.log_burgle} ${name}`);
376
+ if(A.send_alarm && !indoor) messages(`${A.log_burgle} ${name}`);
389
377
  sayit(A.text_alarm, 6);
390
378
  text_alarm_interval = setInterval(()=> {
391
379
  if(count < alarm_repeat) {
@@ -398,21 +386,22 @@ function burglary(id, state, silent){
398
386
  adapter.setState('status.burglar_alarm', true, true);
399
387
  adapter.setState('status.silent_alarm', false, true);
400
388
  adapter.setState('status.silent_flash', false, true);
401
- adapter.setState('status.siren', true, true);
389
+ adapter.setState('status.siren_inside', true, true);
390
+ siren_inside_timer = setTimeout(()=>{
391
+ adapter.setState('status.siren_inside', false, true);
392
+ }, timeMode(A.time_warning_select) * A.time_warning);
393
+ if (A.opt_siren && indoor) {
394
+ alarmSiren();
395
+ alarmFlash();
396
+ }
397
+ if (!indoor) {
398
+ adapter.setState('status.siren', true, true);
399
+ alarmSiren();
400
+ alarmFlash();
401
+ }
402
402
  adapter.setState('status.state', 'burgle', true);
403
403
  adapter.setState('status.state_list', 3, true);
404
404
  adapter.setState('homekit.CurrentState', 4, true);
405
- if(A.alarm_flash > 0) {
406
- alarm_interval = setInterval(()=>{
407
- if(alarm_i) {
408
- adapter.setState('status.alarm_flash', true, true);
409
- alarm_i = false;
410
- } else {
411
- adapter.setState('status.alarm_flash', false, true);
412
- alarm_i = true;
413
- }
414
- }, A.alarm_flash * 1000);
415
- }
416
405
  siren_timer = setTimeout(()=>{
417
406
  adapter.setState('status.siren', false, true);
418
407
  clearTimeout(siren_timer);
@@ -583,10 +572,10 @@ function change(id, state){
583
572
  return;
584
573
  }
585
574
  else if(id === adapter.namespace + '.use.quit_changes'){
586
- clearTimeout(timer_inside_changes);
575
+ clearTimeout(siren_inside_timer);
587
576
  clearTimeout(timer_notification_changes);
588
577
  adapter.setState('status.activation_failed', false, true);
589
- adapter.setState('info.sharp_inside_siren', false, true);
578
+ adapter.setState('status.siren_inside', false, true);
590
579
  adapter.setState('info.notification_circuit_changes', false, true);
591
580
  adapter.setState('other_alarms.one_changes', false, true);
592
581
  adapter.setState('other_alarms.two_changes', false, true);
@@ -628,8 +617,8 @@ function change(id, state){
628
617
  shortcuts('status.state', state.val);
629
618
  return;
630
619
  }
631
- else if(id === adapter.namespace + '.info.sharp_inside_siren'){
632
- shortcuts('info.sharp_inside_siren', state.val);
620
+ else if(id === adapter.namespace + '.status.siren_inside'){
621
+ shortcuts('status.siren_inside', state.val);
633
622
  return;
634
623
  }
635
624
  else if(id === adapter.namespace + '.info.notification_circuit_changes'){
@@ -727,33 +716,9 @@ function change(id, state){
727
716
  return;
728
717
  }
729
718
  if(inside_ids.includes(id) && inside && isTrue(id, state)){
730
- let count = 0;
731
- const name = get_name(id);
732
- let say = A.text_changes;
733
- adapter.setState('info.log', `${A.log_warn} ${name}`, true);
734
- if (A.opt_list) adapter.setState('status.state', 'burgle', true);
735
- if (A.opt_list) adapter.setState('status.state_list', 3, true);
736
- if (A.opt_list) adapter.setState('homekit.CurrentState', 4, true);
737
- adapter.setState('info.sharp_inside_siren', true, true);
738
- if(log) adapter.log.info(`${A.log_warn} ${name}`);
739
- if(A.send_alarm_inside) messages(`${A.log_warn} ${name}`);
740
- if(A.opt_say_names){
741
- say = say + ' ' + name;
742
- }
743
- sayit(say, 5);
744
- text_changes_interval = setInterval(()=> {
745
- if(count < changes_repeat) {
746
- sayit(say, 5);
747
- count++;
748
- } else {
749
- clearInterval(text_changes_interval);
750
- }
751
- }, 5000);
752
- timer_inside_changes = setTimeout(()=>{
753
- adapter.setState('info.sharp_inside_siren', false, true);
754
- }, timeMode(A.time_warning_select) * A.time_warning);
755
- return;
719
+ burglary(id, state, isSilent(id, true), true);
756
720
  }
721
+
757
722
  if(notification_ids.includes(id) && isTrue(id, state)){
758
723
  if(!activated && !inside && !night_rest) return;
759
724
  const name = get_name(id);
@@ -844,7 +809,7 @@ function set_subs(){
844
809
  }
845
810
  });
846
811
  adapter.subscribeStates('info.log');
847
- adapter.subscribeStates('info.sharp_inside_siren');
812
+ adapter.subscribeStates('status.siren_inside');
848
813
  adapter.subscribeStates('info.notification_circuit_changes');
849
814
  adapter.subscribeStates('other_alarms.one_changes');
850
815
  adapter.subscribeStates('other_alarms.two_changes');
@@ -1002,6 +967,47 @@ function sayit(message, opt_val){
1002
967
 
1003
968
  //################# HELPERS ####################################################
1004
969
 
970
+ function alarmSiren() {
971
+ adapter.setState('status.siren', true, true);
972
+ siren_timer = setTimeout(()=>{
973
+ adapter.setState('status.siren', false, true);
974
+ clearTimeout(siren_timer);
975
+ }, timeMode(A.time_alarm_select) * A.time_alarm);
976
+ }
977
+
978
+ function alarmFlash() {
979
+ if(A.alarm_flash > 0) {
980
+ alarm_interval = setInterval(()=>{
981
+ if(alarm_i) {
982
+ adapter.setState('status.alarm_flash', true, true);
983
+ alarm_i = false;
984
+ } else {
985
+ adapter.setState('status.alarm_flash', false, true);
986
+ alarm_i = true;
987
+ }
988
+ }, A.alarm_flash * 1000);
989
+ }
990
+ }
991
+
992
+ function disableStates() {
993
+ adapter.setState('status.sharp_inside_activated', false, true);
994
+ adapter.setState('status.state', 'deactivated', true);
995
+ adapter.setState('status.deactivated', true, true);
996
+ adapter.setState('status.activated', false, true);
997
+ adapter.setState('status.state_list',0, true);
998
+ adapter.setState('homekit.CurrentState', 3, true);
999
+ adapter.setState('homekit.TargetState', 3, true);
1000
+ adapter.setState('use.list',0, true);
1001
+ adapter.setState('status.siren_inside', false, true);
1002
+ adapter.setState('status.siren', false, true);
1003
+ adapter.setState('info.notification_circuit_changes', false, true);
1004
+ adapter.setState('status.silent_flash', false, true);
1005
+ adapter.setState('status.alarm_flash', false, true);
1006
+ adapter.setState('status.burglar_alarm', false, true);
1007
+ adapter.setState('status.silent_alarm', false, true);
1008
+ }
1009
+
1010
+
1005
1011
  function check_doubles() {
1006
1012
  clean_ids.forEach((ele, i) => {
1007
1013
  one_ids.forEach((item, i) => {
@@ -1014,12 +1020,21 @@ function check_doubles() {
1014
1020
 
1015
1021
  }
1016
1022
 
1017
- function isSilent(id) {
1018
- const temp = A.circuits.findIndex((obj)=>{
1019
- const reg = new RegExp(id);
1020
- return reg.test(obj.name_id);
1021
- });
1022
- return A.circuits[temp].delay;
1023
+ function isSilent(id, indoor) {
1024
+ if (indoor) {
1025
+ const temp = A.circuits.findIndex((obj)=>{
1026
+ const reg = new RegExp(id);
1027
+ return reg.test(obj.name_id);
1028
+ });
1029
+ return A.circuits[temp].delay_inside;
1030
+ } else {
1031
+ const temp = A.circuits.findIndex((obj)=>{
1032
+ const reg = new RegExp(id);
1033
+ return reg.test(obj.name_id);
1034
+ });
1035
+ return A.circuits[temp].delay;
1036
+ }
1037
+
1023
1038
  }
1024
1039
 
1025
1040
  function timeMode(value) {
@@ -1064,8 +1079,8 @@ function inside_begins(){
1064
1079
  adapter.setState('homekit.CurrentState', 0, true);
1065
1080
  adapter.setState('homekit.TargetState', 0, true);
1066
1081
  adapter.setState('use.list', 2, true);
1067
- adapter.setState('status.activated', false, true);
1068
- adapter.setState('status.deactivated', true, true);
1082
+ adapter.setState('status.activated', true, true);
1083
+ adapter.setState('status.deactivated', false, true);
1069
1084
  }
1070
1085
  }
1071
1086
 
@@ -1073,20 +1088,13 @@ function inside_ends(off){
1073
1088
  if(inside){
1074
1089
  inside = false;
1075
1090
  if(off){
1076
- clearTimeout(timer_inside_changes);
1091
+ clearTimeout(siren_inside_timer);
1077
1092
  clearTimeout(timer_notification_changes);
1078
1093
  adapter.setState('info.log', `${A.log_warn_deact}`, true);
1079
1094
  if(log)adapter.log.info(`${A.log_warn_deact}`);
1080
1095
  if(A.send_activation_inside) messages(`${A.log_warn_deact}`);
1081
1096
  sayit(A.text_warn_end, 0);
1082
- adapter.setState('status.sharp_inside_activated', false, true);
1083
- adapter.setState('status.state', 'deactivated', true);
1084
- adapter.setState('status.state_list',0, true);
1085
- adapter.setState('homekit.CurrentState', 3, true);
1086
- adapter.setState('homekit.TargetState', 3, true);
1087
- adapter.setState('use.list',0, true);
1088
- adapter.setState('info.sharp_inside_siren', false, true);
1089
- adapter.setState('info.notification_circuit_changes', false, true);
1097
+ disableStates();
1090
1098
  }
1091
1099
 
1092
1100
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_from": "github:misanorot/ioBroker.alarm",
3
- "_id": "iobroker.alarm@2.2.1",
3
+ "_id": "iobroker.alarm@3.0.3",
4
4
  "_inBundle": false,
5
5
  "_integrity": "",
6
6
  "_location": "/iobroker.alarm",
@@ -22,7 +22,7 @@
22
22
  "#USER",
23
23
  "/"
24
24
  ],
25
- "_resolved": "github:misanorot/ioBroker.alarm#e8fde8b26f79d8a149e5fba89040a27bce9dcf1e",
25
+ "_resolved": "github:misanorot/ioBroker.alarm#c0dbb5f94a2e68082036829747dd3fc8c1f4615b",
26
26
  "_spec": "misanorot/ioBroker.alarm",
27
27
  "_where": "/opt/iobroker",
28
28
  "author": {
@@ -80,5 +80,5 @@
80
80
  "test:package": "mocha test/package --exit",
81
81
  "test:unit": "mocha test/unit --exit"
82
82
  },
83
- "version": "2.2.1"
83
+ "version": "3.0.3"
84
84
  }