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. Skripten / Logik
  4. [gelöst] Datenpunkt aktualisieren ohne aktion

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    506

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

[gelöst] Datenpunkt aktualisieren ohne aktion

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
11 Beiträge 4 Kommentatoren 2.2k 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.
  • apollon77A Offline
    apollon77A Offline
    apollon77
    schrieb am zuletzt editiert von
    #2

    Erstmal gar nicht - bzw nur über tricks.

    Dur könntest ein zweites State (oder eine Variable wenn es das gleiche Skript ist) haben der sich merkt das dein Skript einmalig die Änderung ignorieren soll und das im Trigger prüfen.

    Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

    • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
    • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #3

      @doctorultra:

      wie ich einen Datenpunkt/ Zustand verändern kann ohne das ein Script reagiert, welcher diesen Zustand überwachen soll? `
      Welcher Zustand soll verändert werden ?

      Aus welchem Grund soll das überwachende Script nicht reagieren ?

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        doctorultra
        schrieb am zuletzt editiert von
        #4

        Ich habe einen Schalter gebaut, auf den ein Script reagieren soll. An- und ausschalten eines Receivers.

        Nur wenn der Receiver manuell angeschaltet wird, dann steht der Schalter natürlich immer noch auf aus.

        Deshalb habe ich mir ein Abfrage per parser gebaut um den Status des Receivers abzufragen .

        Meine Frage, ich würde gern aller 5 Sekunden den Schalter aktualisieren mit den tatsächlichen Status ohne etwas auszulösen.

        Ich hoffe ich konnte es verständlich rüber bringen?

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #5

          @doctorultra:

          …ein Abfrage per parser gebaut um den Status des Receivers abzufragen .

          Meine Frage, ich würde gern aller 5 Sekunden den Schalter aktualisieren mit den tatsächlichen Status ohne etwas auszulösen. `
          Du meinst sicherlich, dass der Receiver alle 5 s abgefragt wird ?

          Den Schalter muss man nur setzen, wenn dessen Zustand nicht dem des Receivers entspricht. Um den Ein-Befehl nicht zu senden, wenn der Receiver manuell eingeschaltet wurde, schickt man eine Bestätigung mit.

          setState(idSwi, true, true); // Receiver läuft (manuell), Schalteranzeige wird angepasst
          setState(idSwi, true);  // Receiver wird über Schalter eingeschaltet
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #6

            Beispielscript:

            const idSwi = '...'; // Datenpunkt-ID des Schalters
            const idRcv = '...'; // Datenpunkt-ID des Receivers (vom Parser)
            
            var swi = getState(idSwi).val;
            
            on({id: idSwi, ack: true}, function(dp) {
               swi = dp.state.val;
            }
            
            on(idRcv, function(dp) { // Triggert bei Wertänderung
               if(dp.state.val != swi) setState(idSwi, dp.state.val, true); // Wertänderung des Schalters ohne zu senden
            });
            

            EDIT: Der tatsächliche Schalterzustand entspricht bei dieser Version nicht dem Wert im Datenpunkt. Besser ist es, es wird an den Schalter gesendet, falls es nicht eine unerwünschte Reaktion auslöst:

               if(dp.state.val != swi) setState(idSwi, dp.state.val); // Senden des manuellen Receiver-Zustands an den Schalter
            
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              doctorultra
              schrieb am zuletzt editiert von
              #7

              Das funktioniert nicht, wenn ich den Schalter aktualisiere reagiert der andere Script immer drauf?

              Script für check des Datenpunktes

              var Intervall;
              
              Intervall = setInterval(function () {
                if (getState("parser.0.Dreambox_Standby").val == ('' + getState("javascript.0.myStates.Dreambox8000_switch").val)) {
                  if (getState("parser.0.Dreambox_Standby").val == 'true') {
                    setState("javascript.0.myStates.Dreambox8000_switch"/*Dreambox8000_switch*/, false, true);
                  } else {
                    setState("javascript.0.myStates.Dreambox8000_switch"/*Dreambox8000_switch*/, true, true);
                  }
                }
              }, 3000);
              

              Logik für anschalten

              on({id: "javascript.0.myStates.Dreambox8000_switch"/*Dreambox8000_switch*/, change: "any"}, function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                if (getState("parser.0.Dreambox_Standby").val == 'true') {
                  try {
                    require("request")('http://192.168.10.21/web/powerstate?newstate=4').on("error", function (e) {console.error(e);});
                  } catch (e) { console.error(e); }
                } else {
                  try {
                    require("request")('http://192.168.10.21/web/powerstate?newstate=5').on("error", function (e) {console.error(e);});
                  } catch (e) { console.error(e); }
                }
              });
              
              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #8

                Beide Funktionen (Reaktion auf Parser / Reaktion auf Schalter) sollten in ein gemeinsames Script, um eine gemeinsame Variable (Ist-Zustand Receiver) verwenden zu können. Die zyklische Abfrage des Parser-Datenpunktes ist unnötig, da der Parser-Adapter die zyklische Abfrage vornimmt (zu jedem Datenpunkt einstellbar). Versuche es mal mit folgendem Script:

                const idSwi = "javascript.0.myStates.Dreambox8000_switch"; // Datenpunkt-ID des Schalters
                const idStandby = "parser.0.Dreambox_Standby"; // Datenpunkt-ID Standby (vom Parser)
                const urlOn = 'http://192.168.10.21/web/powerstate?newstate=4';
                const urlOff = 'http://192.168.10.21/web/powerstate?newstate=5';
                const request = require("request");
                
                var rcv = true;  // Receiver ist Ein
                if(getState(idStandby).val == 'true') rcv = false;
                setState(idSwi, rcv, true);  // Scriptstart
                
                on(idStandby, function(dp) { // Triggert bei Wertänderung Standby
                   if(dp.state.val == 'true') rcv = false;
                   else rcv = true;
                   setState(idSwi, rcv, true);
                });
                
                on(idSwi, function(dp) {
                   if(dp.state.val != rcv) {  // Soll ungleich Ist
                      if(dp.state.val) {  // Soll: Ein
                         try {
                             request(urlOn).on("error", function (e) {console.error(e);});
                         } catch (e) { console.error(e); }
                      } else {  // Soll: Aus
                         try {
                             request(urlOff).on("error", function (e) {console.error(e);});
                         } catch (e) { console.error(e); }
                      }
                   }
                });
                
                

                Entscheidend ist die Abfrage Sollzustand != Istzustand,

                   if(dp.state.val != rcv) {  // Soll ungleich Ist
                
                

                die verhindert, dass eine Aktion erfolgt, wenn Sollzustand == Istzustand, also der Trigger die Folge von setState(idSwi, rcv, true) ist.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • D Offline
                  D Offline
                  doctorultra
                  schrieb am zuletzt editiert von
                  #9

                  Super hat funktioniert, aber noch eine kurze Frage

                  was bedeutet das dp in function ist, damit das Object gemeint?

                  function(dp)

                  1 Antwort Letzte Antwort
                  0
                  • modmaxM Offline
                    modmaxM Offline
                    modmax
                    schrieb am zuletzt editiert von
                    #10

                    Genau so ist es:

                    Manche schreiben "function(obj)", andere "function(dp)".

                    Ist nur die Benamselung einer variable oder objekts … die an die Funktion als Parameter übergeben wird.

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #11

                      @doctorultra:

                      was bedeutet das dp in function ist, damit das Object gemeint? `
                      Ja, das ist das Datenpunkt-Objekt, das mit dem Namen dp an die Funktion übergeben wird. Datenpunkte unterscheiden sich von anderen Objekten, da sie zusätzlich noch einen Zustand (state und oldState) enthalten.
                      @doctorultra:

                      Super hat funktioniert `
                      Dann markiere bitte das Thema als gelöst (im Betreff des ersten Beitrags).

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      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

                      894

                      Online

                      32.5k

                      Benutzer

                      81.8k

                      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