NEWS
Popup und Counter bei Bewegung
-
Hallo zusammen
Ich habe folgendes vor und keine ahnung wie ich das genau umsetzen soll:
Ich habe die volle Ausrüstung (CCU2 mit über 60 Geräten) da ist auch ein Bewegungsmelder HM-Sen-MDIR-O-2 dabei.
Ich möchte gerne bei erkannter Bewegung dass sich ein Pop up öffnet mit rotem Hintergrund und einem vordefinierten Text (ähnlich einem Alarm) für eine vordefinierte Zeit und mit der Möglichkeit dieses Popup mit einem Button zu "quittieren".
Weiters möchte ich das bei jeder Bewegung ein Counter um eins nach oben gezählt wird um herauszufinden wie oft er ausgelöst wurde.
Kann mir dabei jemand helfen?
Danke euch
Lg
Manuel
Ich habe die aktuelle Version von ioBroker auf einer CuBox i4 laufen.
-
Hallo hofi77,
hab dir mal was gebaut:
Skript (Seriennummer anpassen!):
! ````
/* Bewegung zaehlen und in VIS anzeigen
! für hofi77 http://forum.iobroker.net/viewtopic.php?f=21&t=1703#p14520
! Bitte var idBewegungsmelder = 'hm-rpc.0.GEQ0007961.1.MOTION'/IR Büro.MOTION/, anpassen mit eigener Seriennummer
! erstellt: 14.11.2015 von Pix
*/
! createState('VIS.Bewegung_zeigen', false, {
read: true,
write: true,
type: 'boolean',
name: 'Bewegung im VIS Widget anzeigen',
desc: 'Steuervariable für VIS Widget Sichtbarkeit'
});
! createState('VIS.Bewegung_zaehlen', 0, {
read: true,
write: true,
type: 'number',
name: 'Bewegungen zählen',
desc: 'Counter für Auslösungen des Bewegungsmelders XYZ, wird mit schedule zurückgesetzt'
});
! var idBewegungsmelder = 'hm-rpc.0.GEQ0007961.1.MOTION'/IR Büro.MOTION/,
idCountMotion = 'VIS.Bewegung_zaehlen',
idShowMotion = 'VIS.Bewegung_zeigen';
! on({
id: idBewegungsmelder,
val: true
}, function (obj) {
var counter = getState(idCountMotion).val; // bisherige Zahl aus Variable einlesen
setState(idCountMotion, ++counter); // eins hochzählen
setState(idShowMotion, true); // Steuerung VIS-Widget Sichtrbarkeit auf wahr
setStateDelayed(idShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden});
! // Mitternacht Zähler zurücksetzen
schedule('0 * * * *', function () {
setState(idCountMotion, 0);
});Das meiste macht allerdings VIS selbst: * Script in Javascript Adapter einfügen und speichern (auf Log schauen, dass es keine Fehler gibt) * VIS Editor neu laden damit die Datenpunkte angezeigt werden können * Neue View anlegen mit Namen "Bewegungsalarm" und Hintergund rot einfärben. ![261_bildschirmfoto_2015-11-14_um_14.14.40.jpg](/assets/uploads/files/261_bildschirmfoto_2015-11-14_um_14.14.40.jpg) * Neues Widget "val number" in diese View einfügen und in OID das Feld Bewegung_zaehlen einfügen ![261_bildschirmfoto_2015-11-14_um_14.19.09.jpg](/assets/uploads/files/261_bildschirmfoto_2015-11-14_um_14.19.09.jpg) * ich habe noch einen Knopf zum Zurücksetzen des Zähler eingebaut * Im VIS Editor zum normalen View wechseln (wo das später eingeblendet werden soll) * Neues Widget "basic View in Widget" anlegen und als View "Bewegungsalarm" eintragen * Sichtbarkeit dieses Views in Widget über die OID Sichtbarkeit konfigurieren: "unsere" javascript-Variable triggert die Sichtbarkeit bei true ![261_bildschirmfoto_2015-11-14_um_14.34.00.jpg](/assets/uploads/files/261_bildschirmfoto_2015-11-14_um_14.34.00.jpg) EDIT: Der Screenshot ist nicht aktuell, der schließen-Knopf sieht besser aus setzt jetzt nur Sichtbarkeit auf false Jetzt wird bei Bewegung des HM-Bewegungsmelders der Zähler um 1 erhöht und für 10s die View eingeblendet. Die View ist kein Dialog, sondern eine View in Widget. Ein Resetknopf ist eingebaut und ein Knopf um die View vor Ablauf der 10s wieder auszublenden (indem Sichtbarkeit auf false gesetzt wird). Der Zähler wird zusätzlich um Mitternacht automatisch genullt. Hier nochmal die View "Bewegungslarm" zum importieren in VIS: >! ```` { "settings": { "style": { "background": "rgba(0, 0, 0, 0) none repeat scroll 0% 0% / auto padding-box border-box", "background-color": "red" }, "theme": "redmond", "sizex": "", "sizey": "", "gridSize": "" }, "widgets": { "e00001": { "tpl": "tplValueFloat", "data": { "oid": "javascript.0.VIS.Bewegung_zaehlen", "visibility-cond": "==", "visibility-val": 1, "is_comma": true, "factor": "1", "html_prepend": "Bewegungszähler: ", "name": "Bewegungszähler" }, "style": { "left": "57px", "top": "51px", "width": "245px", "height": "32px", "z-index": "5", "color": "white", "font-size": "20px", "font-family": "Verdana, Geneva, sans-serif" }, "widgetSet": "basic" }, "e00002": { "tpl": "tplMetroTileState", "data": { "visibility-cond": "==", "visibility-val": 1, "hover": "true", "transform": "true", "bg_class_false": "bg-transparent", "bg_class_true": "bg-transparent", "icon_class_false": "", "icon_class_true": "", "icon_badge_false": "", "icon_badge_true": "", "badge_bg_class_false": "", "badge_bg_class_true": "", "brand_bg_class_false": "", "brand_bg_class_true": "", "state_oid": "javascript.0.VIS.Bewegung_zaehlen", "value": "0", "select_on_value": false, "label_false": "zähler zurücksetzen", "label_true": "zähler zurücksetzen" }, "style": { "left": "49px", "top": "97px", "width": "116px", "height": "36px", "z-index": "20" }, "widgetSet": "metro" }, "e00003": { "tpl": "tplMetroTileState", "data": { "visibility-cond": "==", "visibility-val": 1, "hover": "true", "transform": "true", "bg_class_false": "bg-transparent", "bg_class_true": "bg-transparent", "icon_class_false": "", "icon_class_true": "", "icon_badge_false": "", "icon_badge_true": "", "badge_bg_class_false": "", "badge_bg_class_true": "", "brand_bg_class_false": "", "brand_bg_class_true": "", "state_oid": "javascript.0.VIS.Bewegung_zeigen", "value": "false", "select_on_value": false, "label_false": "Alarm ausblenden", "label_true": "Alarm ausblenden" }, "style": { "left": "49px", "top": "158px", "width": "130px", "height": "35px", "z-index": "20" }, "widgetSet": "metro" } }, "name": "Bewegungsalarm", "rerender": false, "filterList": [] }
Und hier das Widget zum Plazieren in deinem normalen View:
! ````
[{"tpl":"tplContainerView","data":{"visibility-cond":"==","visibility-val":"true","contains_view":"Bewegungsalarm","visibility-oid":"javascript.0.VIS.Bewegung_zeigen","name":"Bewegung anzeigen"},"style":{"left":"1025px","top":"189px","z-index":"20","width":"327px","height":"255px"},"widgetSet":"basic"}]Gib mir bescheid, ob es bei Dir geht. Viele Grüße, Pix
-
Hallo Pix!
Entschuldige die verspätete Antwort!
Vielen Dank für deine Hilfe ich werde es sofort versuchen.
Noch mal vielen Dank!
LG
Manuel
-
Hallo Pix,
ich habe grade versucht dein Script für mich umzuändern. Leider stecke ich momentan fest. Vielleicht kannst du mir ja weiterhelfen.
Mein Ziel ist es das am Tablet (also in Vis) ein Popup öffnet wenn der Briefträger einen Brief einwirft (möglichst mit der Einwurfzeit). Das Popup soll erst geschlossen werden, wenn es bestätigt wird. Oder wenn der Briefkasten geleert wird.
Bisher habe ich dein Script wie folgt geändert:
/* Oeffnungen zaehlen und in VIS anzeigen für hofi77 http://forum.iobroker.net/viewtopic.php?f=21&t=1703#p14520 Bitte var idBewegungsmelder = 'hm-rpc.0.MEQ0215699.1', anpassen mit eigener Seriennummer erstellt: 14.11.2015 von Pix */ createState('VIS.Briefkasten_voll_zeigen', false, { read: true, write: true, type: 'boolean', name: 'Briefkasten voll in VIS Widget anzeigen', desc: 'Steuervariable für VIS Widget Sichtbarkeit' }); createState('VIS.Briefwürfe_zaehlen', 0, { read: true, write: true, type: 'number', name: 'Briefwürfe zählen', desc: 'Counter für Briefwürfe, wird mit schedule zurückgesetzt' }); var idBewegungsmelder = 'hm-rpc.0.MEQ0215699.1', idCountMotion = 'VIS.Briefwürfe_zaehlen', idShowMotion = 'VIS.Briefkasten_voll_zeigen'; on({ id: idBewegungsmelder, val: true }, function (obj) { var counter = getState(idCountMotion).val; // bisherige Zahl aus Variable einlesen setState(idCountMotion, ++counter); // eins hochzählen setState(idShowMotion, true); // Steuerung VIS-Widget Sichtrbarkeit auf wahr setStateDelayed(idShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden }); // Mitternacht Zähler zurücksetzen schedule('0 * * * *', function () { setState(idCountMotion, 0); });
Die IdBewegungsmelder habe ich in die ID von der Schließerkontaktschnittstelle geändert.
Die beiden Variablen Briefwürfe_zaehlen, und VIS.Briefkasten_voll_zeigen sind angelegt und stehen auf 0 bzw. auf false.
Dann habe ich das View Briefkasten angelgt und im View in dem es nachher angezeigt werden sooll eingebunden.
Leider ändert sich die Variable nicht von null auf 1 beim öffnen des Briefkastens und die Zweite Variable geht auch nicht von false auf true.
Hier der Widget Text für die Einbindung:
[{"tpl":"tplContainerView","data":{"visibility-cond":"==","visibility-val":"true","gestures-offsetX":0,"gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":"","contains_view":"Briefkasten","visibility-oid":"javascript.1.VIS.Briefkasten_voll_zeigen"},"style":{"left":"340px","top":"130px","width":"600px","height":"600px","z-index":"10"},"widgetSet":"basic"}]
Und hier der Text für den View:
{ "settings": { "style": { "background": "orange", "background-size": "auto", "color": "white", "background_class": "" }, "theme": "redmond", "sizex": "600", "sizey": "600", "gridSize": "" }, "widgets": { "e00001": { "tpl": "tplHtml", "data": { "hm_id": 65535, "digits": "", "factor": 1, "min": 0, "max": 1, "step": 0.01, "html": "Die Post ist da :-)", "visibility-cond": "==", "visibility-val": 1, "refreshInterval": "0", "views": [ "OG", "Garten" ], "gestures-offsetX": 0, "gestures-offsetY": 0, "gestures-swiping-value": "", "gestures-rotating-value": "", "gestures-pinching-value": "", "gestures-swipeRight-value": "", "gestures-swipeLeft-value": "", "gestures-swipeUp-value": "", "gestures-swipeDown-value": "", "gestures-rotateLeft-value": "", "gestures-rotateRight-value": "", "gestures-pinchIn-value": "", "gestures-pinchOut-value": "" }, "style": { "left": "106px", "top": "102px", "width": "400px", "height": "69px", "text-shadow": "", "color": "darkred", "font-size": "45px", "font-family": "", "line-height": "", "font-weight": "700", "padding": "" }, "widgetSet": "basic" }, "e00002": { "tpl": "tplValueTimestamp", "data": { "oid": "hm-rega.0.16540", "visibility-cond": "==", "visibility-val": 1, "gestures-offsetX": 0, "gestures-offsetY": 0, "gestures-swiping-value": "", "gestures-rotating-value": "", "gestures-pinching-value": "", "gestures-swipeRight-value": "", "gestures-swipeLeft-value": "", "gestures-swipeUp-value": "", "gestures-swipeDown-value": "", "gestures-rotateLeft-value": "", "gestures-rotateRight-value": "", "gestures-pinchIn-value": "", "gestures-pinchOut-value": "", "format_date": "DD.MM.YYYY hh:mm:ss" }, "style": { "left": "128px", "top": "174px", "width": "350px", "height": "58px", "color": "darkred", "font-size": "xx-large" }, "widgetSet": "basic" }, "e00003": { "tpl": "tplImage", "data": { "visibility-cond": "==", "visibility-val": 1, "refreshInterval": "0", "refreshOnWakeUp": "false", "refreshOnViewChange": "false", "gestures-offsetX": 0, "gestures-offsetY": 0, "gestures-swiping-value": "", "gestures-rotating-value": "", "gestures-pinching-value": "", "gestures-swipeRight-value": "", "gestures-swipeLeft-value": "", "gestures-swipeUp-value": "", "gestures-swipeDown-value": "", "gestures-rotateLeft-value": "", "gestures-rotateRight-value": "", "gestures-pinchIn-value": "", "gestures-pinchOut-value": "", "src": "/icons-mfd-png/message_mail_open.png" }, "style": { "left": "169px", "top": "214px", "width": "218px", "height": "193px" }, "widgetSet": "basic" }, "e00004": { "tpl": "tplValueFloat", "data": { "oid": "javascript.1.VIS.Briefwürfe_zaehlen", "visibility-cond": "==", "visibility-val": 1, "is_comma": "true", "is_tdp": "false", "factor": "1", "gestures-offsetX": 0, "gestures-offsetY": 0, "gestures-swiping-value": "", "gestures-rotating-value": "", "gestures-pinching-value": "", "gestures-swipeRight-value": "", "gestures-swipeLeft-value": "", "gestures-swipeUp-value": "", "gestures-swipeDown-value": "", "gestures-rotateLeft-value": "", "gestures-rotateRight-value": "", "gestures-pinchIn-value": "", "gestures-pinchOut-value": "" }, "style": { "left": "224px", "top": "420px", "width": "107px", "height": "58px", "color": "darkred", "font-size": "45px" }, "widgetSet": "basic" } }, "name": "Briefkasten", "rerender": false, "filterList": [] }
Kannst du mir sagen was falsch ist, das sich die Variablen nicht ändern?
Und was muss ich noch hinzufügen, damit das Popup immer offen bleibt bzw. bis zu Bestätigung?
Und wie bekomme ich den Bestätigen Button?
Über deine Hilfe würde ich mich sehr freuen.
Danke Gruß Sven
-
Hallo,
da fehlt der komplette Datenpunkt.
Statt````
var idBewegungsmelder = 'hm-rpc.0.MEQ0215699.1',muss da```` var idBewegungsmelder = 'hm-rpc.0.MEQ0215699.1.STATE', ````rein. In dieser Zeile```` setStateDelayed(idShowMotion, false, 10000); // nach 10.000 ms wieder ausblenden ````wird noch festgelegt, dass das Popup nach 10s wieder verschwindet. Wenn das nicht sein soll, einfach auskommentieren ("//" an den Zeilenanfang schreiben) Gruß Pix [655_img_20190206_160552.jpg](/assets/uploads/files/655_img_20190206_160552.jpg)
-
Danke Pix,
das ging ja wirklich sehr schnell. Ich habe es geändert und jetzt funktioniert es perfekt.
Jetzt bleiben mir noch 2 Fragen übrig:
1. Wie kann ich einen "Schließen" Button einfügen? Wenn ich das richtig verstehe, müsste das ja ein widget sein, das die Variable auf false setzt oder? Welche nehme ich da am besten?
2. Wenn ich die Briefkastentür öffne, muss die Variable und der Zähler ja wieder auf null gesetzt werden. Wie bekomme ich das hin?
Grus Sven
-
Hallo,
freut mich, dass es klappt.
zu 1)
Du kannst ein Metro Tiel State Widget nehmen und false in "Wert" eintragen.
zu 2)
Dazu muss der Sensor, der die Tür überwacht, abgefragt werden. Wenn der true/false geht, dann Zähler auf 0.
Gruß
Pix
-
Hallo Pix,
zu 2 klar wird die tür überwacht und zwar mit der gleichen Schnittstelle ist ja extra mit 3 Anschlüssen.
Hier zielte meine Frage ganu darauf, welches widget mir diese Möglichkeit bietet sowohl die Variable auf false und den Zähler auf null zu stzen?
Gruß Sven
-
Hallo,
also, wenn es der gleiche Sensor, mit anderem Kanal ist, dann einfach den anderen Kanal in das Widget eintragen: hm-rpc.0.MEQ0215699.2.STATE oder hm-rpc.0.MEQ0215699.3.STATE
Und zum Setzen von Werten eignet sich - wie gesagt - das Metro Tile State Widget. In OID dann zB "javascript.0.VIS.Briefkasten_voll_zeigen" eintragen und in Wert "false". Beim Drücken des Widgets wird der Wert gesetzt, das Popup verschwindet. Für das Zurücksetzen des Zählers beim Öffnen der Tür (ich gehe einfach von hm-rpc.0.MEQ0215699.2.STATE für die Tür aus) diesen Code mit ins Skript schreiben:
on({ id: "hm-rpc.0.MEQ0215699.2.STATE", val: true // hier ggf. false eintragen. Abhängig davon, ob Tür offen = true oder false }, function (obj) { setState(idCountMotion, 0); // reset setState(idShowMotion, false); // Steuerung VIS-Widget Sichtrbarkeit auf aus });
-
Hallo Pix,
Sorry für die verspätete Antwort. 1000 dank für deine Hilfe es funktioniert wunderbar.
Ich freue mich über die schnelle und fachlich super gelungene Unterstützung.
Kannst du mir vielleicht auch noch einen Tipp geben was in das Script muss, damit bei der Briefkastenöffnung automatisch in das passende View (in dem mein popup geöffnet wird) gewechselt wird.
Gruß Sven
Gesendet von iPhone mit Tapatalk
-
Hallo Sven,
dafür gibt es in vis.0 die Datenpunkte control.instance, control.data und control.command (auch als Objekt), Beschreibung https://github.com/ioBroker/ioBroker.vis/blob/master/README.md#control-interface
Allerdings nutze ich das nicht, da es auf dem iPad im Vollbildmodus http://forum.iobroker.de/viewtopic.php?f=30&t=1477&p=19858&hilit=ipad+instanz&sid=23758ed301991316f9ef1b6d59c7fc9a#p19858 nicht funktioniert :?
Du kannst auf den Bewegungsmelder reagieren
deklariert ist ja bereits
<size size="85">var idBewegungsmelder = 'hm-rpc.0.MEQ0215699.1.STATE'</size>
Dann geht
on(idBewegungsmelder, function (obj) { log('Briefkasten betätigt, View wird gewechselt'); setState (vis.0.control.command, {instance: 'FFFFFFFF', command: 'cmd', data: 'name_der_view'}); // hier den Namen der Ziel-View eintragen });
Gruß
Pix
-
Hallo Pix,
leider klappt das mit dem View wechsel bei mir leider nicht.
Wenn ich das Script um deinen angegebenen Text erweitere, hat das Script ein Problem mit der Zeile: … vis.0. usw. wenn ich die 0 lösche, erscheint folgender fehler im Log.
javascript.1 2016-03-05 21:06:29 error ReferenceError: vis is not defined at Object. (script.js.Briefkasten:58:15) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1190:48) at /op
javascript.1 2016-03-05 21:06:29 error message hm-rpc.0.MEQ0215699.1.STATE [object Object] vis is not defined
javascript.1 2016-03-05 21:06:29 info javascript.1 script.js.Briefkasten: Briefkasten betätigt, View wird gewechselt
javascript.1 2016-03-05 21:06:28 error ReferenceError: vis is not defined at Object. (script.js.Briefkasten:58:15) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1190:48) at /op
javascript.1 2016-03-05 21:06:28 error message hm-rpc.0.MEQ0215699.1.STATE [object Object] vis is not defined
javascript.1 2016-03-05 21:06:28 info javascript.1 script.js.Briefkasten: Briefkasten betätigt, View wird gewechselt
javascript.1 2016-03-05 21:06:26 info javascript.1 script.js.Betriebsstundenzähler: Licht_Haustür.STATE;Betriebsstundenzaehler.System.Grp00MSec;false ; 000:00:01:48 ; 108360 ; 001:12:42:29 ; 132149522
javascript-1 2016-03-05 21:05:23 info script.js.Briefkasten: registered 3 subscriptions and 1 schedule
javascript-1 2016-03-05 21:05:23 info Start javascript script.js.Briefkasten
Wofür steht denn die "0" mit der das Script das Problem hat?
Vielleicht ist noch wichtig zu wissen, das bei mir die Javascript Instanz javascript.1 heißt.
Gruß en
-
Hallo, schreib mal 'vis.0.control.command' in Anführungszeichen.
Gruß,
Pix
Gesendet mit Tapatalk
-
Ok,
jetzt erscheint kein Fehler mehr im Log, aber das View wechselt leider auch nicht.
Gibt es noch eine Möglichkeit den Fehler zu finden?
Gruß Sven
-
Hallo Pix, bisher habe ich es leider noch nicht hinbekommen den View automatisch zu wechseln. Kannst du mir nochmal helfen?
Vielleicht hilft mir das auch bei meinem anderen Fred
Gruß Sven
Gesendet von iPhone mit Tapatalk