Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. [gelöst]Zähler bei on event im Script zählt doppelt.

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.0k

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

Geplant Angeheftet Gesperrt Verschoben Visualisierung
3 Beiträge 2 Kommentatoren 990 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    Phantomio
    schrieb am zuletzt editiert von
    #1

    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 :D ).

    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

    Geräte: CCU2, RaspberryPi2,

    Adapter: email, feiertage, flot, fritzbox, history, hm-rpc.0, hm-rpc.1 (Für Homematic IP), ical, javascript, sayit, scenes, socketio, sonos, tankerkoenig, telegram, text2command, vis, web, yr

    1 Antwort Letzte Antwort
    0
    • L Offline
      L Offline
      looxer01
      schrieb am zuletzt editiert von
      #2

      Hi,

      schau mal hier zum doppelten on id aufruf:

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

      vG Looxer

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        Phantomio
        schrieb am zuletzt editiert von
        #3

        Hi Looxer,

        vielen Dank :P 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

        Geräte: CCU2, RaspberryPi2,

        Adapter: email, feiertage, flot, fritzbox, history, hm-rpc.0, hm-rpc.1 (Für Homematic IP), ical, javascript, sayit, scenes, socketio, sonos, tankerkoenig, telegram, text2command, vis, web, yr

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        771

        Online

        32.4k

        Benutzer

        81.5k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe