Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [gelöst]Zähler bei on event im Script zählt doppelt.

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst]Zähler bei on event im Script zählt doppelt.

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Phantomio last edited by

      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

      1018_vis.jpg

      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

      1 Reply Last reply Reply Quote 0
      • L
        looxer01 last edited by

        Hi,

        schau mal hier zum doppelten on id aufruf:

        http://forum.iobroker.com/viewtopic.php?f=21&t=2172

        vG Looxer

        1 Reply Last reply Reply Quote 0
        • P
          Phantomio last edited by

          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

          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          850
          Online

          31.7k
          Users

          79.7k
          Topics

          1.3m
          Posts

          2
          3
          942
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo