NEWS
[gelöst]Zähler bei on event im Script zählt doppelt.
-
Hallo 8-),
ich möchte gerne für diverse Aktoren eine Variable haben die bei jedem Schaltvorgang um einen hochgezählt wird.
Egal ob: Direkt am Gerät / Homedroid / Fernbedienung / CCU2 / ioBroker.vis
Folgende Widgets habe ich in einem View eingerichtet:
! [{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"Terrassenlicht\n"},"style":{"left":"23px","top":"32px","width":"103px","height":"18px","font-style":""},"widgetSet":"basic"},{"tpl":"tplValueStringRaw","data":{"oid":"javascript.0.TerrassenlichtZaehler.Tag","visibility-cond":"==","visibility-val":1},"style":{"left":"216px","top":"35px","width":"30","color":"#FFFFFF","z-index":2},"widgetSet":"basic"},{"tpl":"tplBulbOnOffCtrl","data":{"oid":"hm-rpc.0.LEQ0182115.1.STATE","visibility-cond":"==","visibility-val":"","icon_off":"img/bulb_off.png","icon_on":"img/bulb_on.png","filterkey":"Licht","name":"Living Room Status","min":"","max":""},"style":{"left":"141px","top":"17px","z-index":"1","background-color":"#4575b5","border-radius":"40px","width":"55px","height":"57px","box-shadow":"0 0 30px 10px #4575b5"},"widgetSet":"basic"}]
Als Script im Javascript Adapter ist folgender Code hinterlegt:! /* –-----------------------------------------------------------------------------------------------------------------------------------------------------------
! Variablen anlegen / Deklarieren
! -------------------------------------------------------------------------------------------------------------------------------------------------------------- /
! createState('TerrassenlichtZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Terrasse Bewegungsmelder"});
! createState('PoolpumpeZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Poolpumpe"});
! var Terrassenlicht = "hm-rpc.0.LEQ0182115.1.STATE"; // Terrassenlicht Aktor:1.STATE
! var Poolpumpe = "hm-rpc.0.KEQ0970830.1.STATE"; // Poolpumpe Aktor:1.STATE
! / -------------------------------------------------------------------------------------------------------------------------------------------------------------
! Tür- Fensterkontakte abfragen
! -------------------------------------------------------------------------------------------------------------------------------------------------------------- /
! on ({id: Terrassenlicht, val: true}, fTerrassenlicht);
! on ({id: Poolpumpe, val: true}, fPoolpumpe);
! / -------------------------------------------------------------------------------------------------------------------------------------------------------------
! Funktionen
! -------------------------------------------------------------------------------------------------------------------------------------------------------------- */
! function fPoolpumpe (){
! setState("javascript.0.PoolpumpeZaehler.Tag", ++getState("javascript.0.PoolpumpeZaehler.Tag").val);
! log(" fPoolpumpe");
! if (getState("javascript.0.Alarmanlage").val === true){
! sendTo("email", {
! from: "iobroker@edv-team.de",
! to: "bm@edv-team.de",
! subject: "Test",
! text: "Alarm Haustür!",
! // HTML body
! //html: '
! Hello to myself "hm-rega.0.44073"/Automatik Ping Handy A und B/
! ' +
! // '
! Here's a nyan cat for you as an embedded attachment:
! ',
! });
! }
! }
! function fTerrassenlicht (){
! setState("javascript.0.TerrassenlichtZaehler.Tag", ++getState("javascript.0.TerrassenlichtZaehler.Tag").val);
! log(" fTerrassenlicht");
! }
Wenn ich den Aktor direkt oder über mein Handy mit Homedroid schalte, wird der Zähler um einen hochgezählt (so wie ich es haben möchte ).Sobald ich z.B. das Terrassenlicht über ioBroker.vis schalte werden 2 hochgezählt.
In dem Script ist ja auch noch eine Poolpumpe mit drinnen inkl. e-Mail Versand (hier werden auch jedesmal 2 e-Mails gesendet).
Kann mir jemand sagen was ich falsch mache?
Vielen Dank schon einmal für eure Antworten.
Verbesserungsvorschläge für die Script Gestaltung nehme ich gerne an !!! Bin noch sehr unerfahren mit javascript. Daher versuche ich die Scripte erst mal für mich lesbarer zu gestalten.
Hier noch einmal das vollständige Script. Ich stelle mit das wie folgt vor:
Für jede auslösende Gerätegruppe mal ein eigenes Script z.B. Tür-Fensterkontakte, Bewegungsmelder, Zeitsteuerung.
Oder ist es besser nur ein großes Script zu schreiben?
! /* –-----------------------------------------------------------------------------------------------------------------------------------------------------------
! Variablen anlegen / Deklarieren
! -------------------------------------------------------------------------------------------------------------------------------------------------------------- /
! createState('WohnzimmerSchrankwandZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Wohnzimmer Schrankwand"});
! createState('Alarmanlage', false, {read: true, write: true, type: 'boolean', name: "Alarmanlage"});
! createState('AutomatikRolladenAlleAuf', false, {read: true, write: true, type: 'boolean', name: "Automatik Rolladen alle auf"});
! createState('AutomatikRolladenTerrassentuerAuf', false, {read: true, write: true, type: 'boolean', name: "Automatik Rolladen Terrassentuer auf"});
! createState('WohnzimmerTerrassentuerZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Wohnzimmer Terrassentuer"});
! createState('HaustuerZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Haustuer"});
! createState('TerrasseBewegungsmelderZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Terrasse Bewegungsmelder"});
! createState('TerrassenlichtZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Terrasse Bewegungsmelder"});
! createState('PoolpumpeZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Poolpumpe"});
! createState('JustinFensterZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Justin Fenster"});
! createState('DannyFensterZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Danny Fenster"});
! createState('BadFensterRechtsZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Bad Fenster Rechts"});
! createState('BadFensterLinksZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Bad Fenster Links"});
! createState('ArbeitFensterZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Arbeit Fenster"});
! createState('SchlafenFensterZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Schlafen Fenster"});
! createState('GaragentorZaehler.Tag', 0, {read: true, write: true, type: 'number', name: "Garagentor"});
! var WohnzimmerSchrankwand = "hm-rpc.0.KEQ1061148.1.STATE"; // Wohnzimmer Schrankwand:1.STATE
! var WohnzimmerRolladenTuer = "hm-rpc.0.LEQ0050435.1.LEVEL"; // Wohnzimmer Rolladen Terrassentuer:1.LEVEL
! var Haustuer = "hm-rpc.0.MEQ0266834.1.STATE"; // Haustuer:1.STATE
! var Terrassentuer = "hm-rpc.0.KEQ1096158.1.STATE"; // Wohnzimmer-Drehgriff Tuer:1.STATE
! var TerrasseBewegungsmelder = "hm-rpc.0.LEQ0161342.1.MOTION"; // Bewegungsmelder Terrasse:1.MOTION
! var Terrassenlicht = "hm-rpc.0.LEQ0182115.1.STATE"; // Terrassenlicht Aktor:1.STATE
! var Poolpumpe = "hm-rpc.0.KEQ0970830.1.STATE"; // Poolpumpe Aktor:1.STATE
! var JustinFenster = "hm-rpc.0.LEQ0565227.1.STATE"; // Justin-Drehgriff Fenster:1.STATE
! var DannyFenster = "hm-rpc.0.LEQ0565203.1.STATE"; // Danny-Drehgriff Fenster:1.STATE
! var BadFensterRechts = "hm-rpc.0.LEQ0403280.1.STATE"; // Bad Drehgriff Fenster rechts:1.STATE
! var BadFensterLinks = "hm-rpc.0.LEQ0403269.1.STATE"; // Bad Drehgriff Fenster links:1.STAT
! var ArbeitFenster = "hm-rpc.0.MEQ0172779.1.STATE"; // Arbeitszimmer Fenster:1.STATE
! var SchlafenFenster = "hm-rpc.0.MEQ0172760.1.STATE"; // Schlafzimmer Fenster:1.STATE
! var Garagentor = "hm-rpc.0.MEQ0173049.1.STATE"; // Garagentor:1.STATE
! var idSayIt = "sayit.0.tts.text"; // Hier die entsprechende SayIt Text ID
! var vol = "sayit.0.tts.volume";
! / -------------------------------------------------------------------------------------------------------------------------------------------------------------
! Tür- Fensterkontakte abfragen
! -------------------------------------------------------------------------------------------------------------------------------------------------------------- /
! on ({id: WohnzimmerSchrankwand, val: true}, fWohnzimmerSchrankwand);
! on ({id: Haustuer, val: true}, fHaustuer);
! on ({id: Terrassentuer, val: 1}, fTerrassentuer);
! on ({id: Terrassentuer, val: 2}, fTerrassentuer);
! on ({id: TerrasseBewegungsmelder, val: true}, fTerrasseBewegungsmelder);
! on ({id: Terrassenlicht, val: true}, fTerrassenlicht);
! on ({id: Poolpumpe, val: true}, fPoolpumpe);
! on ({id: JustinFenster, val: 1}, fJustinFenster);
! on ({id: JustinFenster, val: 2}, fJustinFenster);
! on ({id: DannyFenster, val: 1}, fDannyFenster);
! on ({id: DannyFenster, val: 2}, fDannyFenster);
! on ({id: BadFensterRechts, val: 1}, fBadFensterRechts);
! on ({id: BadFensterRechts, val: 2}, fBadFensterRechts);
! on ({id: BadFensterLinks , val: 1}, fBadFensterLinks);
! on ({id: BadFensterLinks , val: 2}, fBadFensterLinks);
! on ({id: ArbeitFenster, val: true}, fArbeitFenster);
! on ({id: SchlafenFenster, val: true}, fSchlafenFenster);
! on ({id: Garagentor, val: true}, fGaragentor);
! / -------------------------------------------------------------------------------------------------------------------------------------------------------------
! Funktionen
! -------------------------------------------------------------------------------------------------------------------------------------------------------------- /
! function fWohnzimmerSchrankwand (){
! setState("javascript.0.WohnzimmerSchrankwandZaehler.Tag", ++getState("javascript.0.WohnzimmerSchrankwandZaehler.Tag").val);
! }
! function fHaustuer (){
! setState("javascript.0.HaustuerZaehler.Tag", ++getState("javascript.0.HaustuerZaehler.Tag").val);
! setState (vol, 5);
! if(isTimeInRange("07:00:00", "12:20:00")){
! if (getState(DannyFenster).val !== 0){
! setState (idSayIt, "Das Fenster von Denni ist noch offen");
! }
! if (getState(JustinFenster).val !== 0){
! setState (idSayIt, "Das Fenster von Jastin ist noch offen");
! }
! if (getState(Terrassentuer).val !== 0){
! setState (idSayIt, "Die Terrassentür ist noch offen");
! }
! if (getState(BadFensterRechts).val !== 0 || getState(BadFensterLinks).val !== 0){
! setState (idSayIt, "Ein Fenster im Badezimmer ist noch offen");
! }
! }else{
! log("Nicht im Zeitbereich");
! }
! }
! function fTerrassentuer (){
! setState("javascript.0.WohnzimmerTerrassentuerZaehler.Tag", ++getState("javascript.0.WohnzimmerTerrassentuerZaehler.Tag").val);
! setState (vol, 5);
! if(isTimeInRange("07:00:00", "12:20:00")){
! if (getState(DannyFenster).val !== 0){
! setState (idSayIt, "Das Fenster von Denni ist noch offen");
! }
! if (getState(JustinFenster).val !== 0){
! setState (idSayIt, "Das Fenster von Jastin ist noch offen");
! }
! if (getState(BadFensterRechts).val !== 0 || getState(BadFensterLinks).val !== 0){
! setState (idSayIt, "Ein Fenster im Badezimmer ist noch offen");
! }
! }else{
! log("Nicht im Zeitbereich");
! }
! }
! function fTerrasseBewegungsmelder (){
! setState("javascript.0.TerrasseBewegungsmelderZaehler.Tag", ++getState("javascript.0.TerrasseBewegungsmelderZaehler.Tag").val);
! }
! function fPoolpumpe (){
! setState("javascript.0.PoolpumpeZaehler.Tag", ++getState("javascript.0.PoolpumpeZaehler.Tag").val);
! log(" fPoolpumpe");
! if (getState("javascript.0.Alarmanlage").val === true){
! sendTo("email", {
! from: "iobroker@edv-team.de",
! to: "bm@edv-team.de",
! subject: "Test",
! text: "Alarm Haustür!",
! // HTML body
! //html: '
! Hello to myself "hm-rega.0.44073"/Automatik Ping Handy A und B/
! ' +
! // '
! Here's a nyan cat for you as an embedded attachment:
! ',
! });
! }
! }
! function fTerrassenlicht (){
! setState("javascript.0.TerrassenlichtZaehler.Tag", ++getState("javascript.0.TerrassenlichtZaehler.Tag").val);
! log(" fTerrassenlicht");
! }
! function fJustinFenster (){
! setState("javascript.0.JustinFensterZaehler.Tag", ++getState("javascript.0.JustinFensterZaehler.Tag").val);
! }
! function fDannyFenster (){
! setState("javascript.0.DannyFensterZaehler.Tag", ++getState("javascript.0.DannyFensterZaehler.Tag").val);
! }
! function fBadFensterRechts (){
! setState("javascript.0.BadFensterRechtsZaehler.Tag", ++getState("javascript.0.BadFensterRechtsZaehler.Tag").val);
! }
! function fBadFensterLinks (){
! setState("javascript.0.BadFensterLinksZaehler.Tag", ++getState("javascript.0.BadFensterLinksZaehler.Tag").val);
! }
! function fArbeitFenster (){
! setState("javascript.0.ArbeitFensterZaehler.Tag", ++getState("javascript.0.ArbeitFensterZaehler.Tag").val);
! }
! function fSchlafenFenster (){
! setState("javascript.0.SchlafenFensterZaehler.Tag", ++getState("javascript.0.SchlafenFensterZaehler.Tag").val);
! }
! function fGaragentor (){
! setState("javascript.0.GaragentorZaehler.Tag", ++getState("javascript.0.GaragentorZaehler.Tag").val);
! // if (getState(WohnzimmerRolladenTuer).val === 0 && isTimeInRange("12:20:00", "13:30:00")){
! // setState (WohnzimmerRolladenTuer, 100);
! //}
! }
! function currentDate() {
! var d = new Date();
! return new Date(d.getFullYear(), d.getMonth(), d.getDate());
! }
! function addTime(strTime) {
! var time = strTime.split(':');
! var d = currentDate();
! d.setHours(time[0]);
! d.setMinutes(time[1]);
! d.setSeconds(time[2]);
! return d;
! }
! function isTimeInRange(strLower, strUpper) {
! var now = new Date();
! var lower = addTime(strLower);
! var upper = addTime(strUpper);
! var inRange = false;
! if (upper > lower) {
! // opens and closes in same day
! inRange = (now >= lower && now <= upper) ? true : false;
! } else {
! // closes in the following day
! inRange = (now >= upper && now <= lower) ? false : true;
! }
! return inRange;
! }
! / –-----------------------------------------------------------------------------------------------------------------------------------------------------------
! Scheduler / jeden Tag um Mitternacht -- Wochentags = schedule("0 0 * * 1-5
! -------------------------------------------------------------------------------------------------------------------------------------------------------------- */
! schedule("0 0 * * *", function () {
! log('Schedule Aktion Tuer Fenster Kontakte Zaehler reset');
! setState("javascript.0.WohnzimmerSchrankwandZaehler.Tag", 0);
! setState("javascript.0.HaustuerZaehler.Tag", 0);
! setState("javascript.0.WohnzimmerTerrassentuerZaehler.Tag", 0);
! setState("javascript.0.TerrasseBewegungsmelderZaehler.Tag", 0);
! setState("javascript.0.TerrassenlichtZaehler.Tag", 0);
! setState("javascript.0.PoolpumpeZaehler.Tag", 0);
! setState("javascript.0.JustinFensterZaehler.Tag", 0);
! setState("javascript.0.DannyFensterZaehler.Tag", 0);
! setState("javascript.0.BadFensterRechtsZaehler.Tag", 0);
! setState("javascript.0.BadFensterLinksZaehler.Tag", 0);
! setState("javascript.0.ArbeitFensterZaehler.Tag", 0);
! setState("javascript.0.SchlafenFensterZaehler.Tag", 0);
! setState("javascript.0.GaragentorZaehler.Tag", 0);
! });
Ich weiß das ich gerade ein wenig in das Thema Script abschweife, aber der Fehler ist ja mit diesem Script nur im ioBroker.vis zu sehen.Also dann bis bald.
Phantomio
-
Hi,
schau mal hier zum doppelten on id aufruf:
http://forum.iobroker.com/viewtopic.php?f=21&t=2172
vG Looxer
-
Hi Looxer,
vielen Dank Das sieht besser aus.
Nun funktioniert es auch mit ioBroker.vis
Das Leben kann so einfach sein …
wenn man weiß wie es geht.
Gruß
Phantomio