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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Status eines Aktors abfragen per Script

NEWS

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

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

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

[gelöst] Status eines Aktors abfragen per Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 5 Kommentatoren 2.9k 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.
  • M Offline
    M Offline
    michihorn
    schrieb am zuletzt editiert von
    #1

    Hallo

    ich möchte gerne den Status "EIN/AUS" eines Strommess-Zwischenstecker ermitteln,

    Bei folgenden Script wird nur angezeigt, wenn ausgeschaltet wird.

    Kann mir jemand zeigen wo mein Fehler liegt?

    Gruß Michael

    createState('HWR.WM_Status', 0);
    var WM = "hm-rpc.0.LEQ1272850.1.STATE"; 
    
    on({id: WM, change: 'any'}, function (obj){ 
      var status=obj.state.val;
    
       if (status === false) {
           var neu = 'AUS';
       setState('HWR.WM_Status', neu);
       log("***Waschmaschine Status:  " +neu);
       } else {
          neu = 'EIN';  
        setState('HWR.WM_Status', neu);
       log("***Waschmaschine Status:  " +neu);
       }
    
    });
    
    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Hallo Michael,

      probier man die Subscription mit "not equal" auszulösen:

      on({id: WM, change: 'ne'}, function (obj){ 
      

      Ausserdem definierst du die Variable "neu" im ersten Teil der If-Abfrage unter false, setzt sie aber auch im zweiten Teil bei true. Heisst, wenn der Aktor auf true geht, weiß das Skript nichts von einer Variable "neu".

      Besser so:

      createState('HWR.WM_Status', {
          name: "Status HWR Waschmaschine",
          def: "AUS",
          type: "string"
      });
      var WM = "hm-rpc.0.LEQ1272850.1.STATE"; 
      
      on({id: WM, change: 'ne'}, function (obj){ 
        var status=obj.state.val;
        var neu;
        if (status === false) {
            neu = 'AUS';
            setState('HWR.WM_Status', neu);
            log("***Waschmaschine Status:  " +neu);
        } else {
            neu = 'EIN';  
            setState('HWR.WM_Status', neu);
            log("***Waschmaschine Status:  " +neu);
        }
      });
      ````Ob es in diesem kurzen Skript Sinn macht, den Wert extra aus einer Variablen zu holen, statt zB direkt setState('HWR.WM_Status', "AUS"); zu schreiben, bezweifele ich. Ist aber eine gute Übung.
      
      Ausserdem solltest du dir nochmal die Parameter von createState ansehen. In deinem Skript setzt du den ersten Wert mit 0\. Also eine Zahl. später schreibst du aber nur "AUS" oder "EIN", also eine Zeichenkette.
      
      Du kannst aber trotzdem den Type Boolean verwenden und dann Wörter "AUS" und "EIN" als States mit false/true verknüpfen. Ich guck mal, wie das geht…
      
      Gruß
      
      Pix
      
      EDIT: Habe den Edit hier raus genommen und unten dran gepostet, da es zwischendurch schon neuen Antworten gab

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

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

        @michihorn:

        Kann mir jemand zeigen wo mein Fehler liegt? `
        Einen Fehler kann ich nicht entdecken. Es lässt sich etwas kürzer programmieren.

        createState('HWR.WM_Status', {
            desc: "Status Waschmaschine",
            def:  "AUS",
            type: "string"
        });
        var WM = "hm-rpc.0.LEQ1272850.1.STATE"; 
        
        on(WM, function (obj) {   // bei Änderung auslösen
          var neu = 'EIN';
          if (!obj.state.val) neu = 'AUS';
          setState('HWR.WM_Status', neu);
          log("***Waschmaschine Status:  " + neu);
        });
        
        

        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
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #4

          Oder probier mal so (paul53 war schneller):

          ! ````
          createState('HWR.WM_Status', {
          name: 'Status HWR Waschmaschine',
          def: false,
          type: 'boolean',
          states: {false:'Aus',true:'Ein'}
          });
          ! var WM = "hm-rpc.0.LEQ1272850.1.STATE";
          ! on({id: WM, change: 'ne'}, function (obj){
          if (obj.state.val) setState('HWR.WM_Status', 'EIN');
          else setState('HWR.WM_Status', 'AUS');
          log("***Waschmaschine Status: " + getState('HWR.WM_Status').val);
          });

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

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

            @pix: Wenn ein Datenpunkt vom Typ "boolean" mit "states" verwendet wird, kann dieser nur mit Werten vom Typ "boolean" beschrieben werden:

            ! createState('HWR.WM_Status', { name: 'Status HWR Waschmaschine', def: false, type: 'boolean', states: {false:'Aus',true:'Ein'} }); ! var WM = "hm-rpc.0.LEQ1272850.1.STATE"; ! on({id: WM, change: 'ne'}, function (obj){ setState('HWR.WM_Status', obj.state.val); log("***Waschmaschine Status: " + getObject('HWR.WM_Status').common.states[obj.state.val]); }); !

            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
            • M Offline
              M Offline
              michihorn
              schrieb am zuletzt editiert von
              #6

              Hallo Pix, Hallo Paul53

              vielen Dank für eure Mühe , ich werde sicher noch viele Fragen zum Programmieren haben.

              Ich habe Eure Änderungen alle Probiert, sie machen im Prinzip das selbe wie mein Script.

              Die VAR "HWR.WM_Status" wird geändert, bei Status false wird "AUS" geschrieben und bei Status true wird "true" geschrieben und nicht "EIN", auch die LOG Zeile wird nur auf false gesetzt aber bei Statuswechsel nicht auf EIN.

              Aktuell beschreibe ich das letzte Script von Paul53

              Ähnlich ist das Verhalten auch bei PIX Script,

              so als ob die "else" ignoriert wird.

              ich habe zum testen, ob das Script überhaupt "else" ausführt, direkt die Zeile darunter mal ein LOG geschrieben, Ergebnis ist, das die "ELSE" tatsächlich ignoriert wird.

              createState('HWR.WM_Status', {
                  name: "Status HWR Waschmaschine",
                  def: "AUS",
                  type: "string"
              });
              var WM = "hm-rpc.0.LEQ1272850.1.STATE"; 
                var neu;
              on({id: WM, change: 'ne'}, function (obj){ 
                var status=obj.state.val;
              
                if (status === false) {
                    neu = 'AUS';
                    setState('HWR.WM_Status', neu);
                    log("***Waschmaschine Status:  " +neu);
                } else {
                  log("**else");
                 var neu1 = 'EIN';  
                    setState('HWR.WM_Status', neu1);
                    log("***Waschmaschine Status:  " +neu1);
                }
              });
              

              Michael

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

                Das Log im letzten Script habe ich so geändert, dass die Zustandstexte (states) im Log ausgegeben werden.

                log("***Waschmaschine Status: " + getObject('HWR.WM_Status').common.states[obj.state.val]);
                

                Wichtig :!: Bevor Du das Script mit dem geänderten Datenpunkttyp (boolean mit states) startest, muss der alte Datenpunkt 'javascript.0.HWR.WM_Status' im Reiter "Objekte" gelöscht werden.

                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
                • M Offline
                  M Offline
                  michihorn
                  schrieb am zuletzt editiert von
                  #8

                  Die alten Datenpunkte sind gelöscht. 326_unbenannt.jpg

                  Habs es so mit meinem alten Script am laufen…Juhu

                  createState('HWR.WM_Status', 0);
                  var WM = "hm-rpc.0.LEQ1272850.1.STATE"; 
                  
                  var neu;
                  on({id: WM, change: 'ne'}, function (obj){ 
                    var status=obj.state.val;
                  
                     if (status === false) {
                         neu = 'AUS';
                     setState('HWR.WM_Status', neu);
                     log("***Waschmaschine Status:  " +neu);
                     } else {
                        neu = 'EIN';  
                      setState('HWR.WM_Status', neu);
                     log("***Waschmaschine Status:  " +neu);
                     }
                  
                  });
                  
                  

                  Danke nochmal für die Unterstützung

                  Bis bald

                  Michael

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

                    > Cannot read property 'common' of null
                    Kann sein, dass man bei getObject(id) die komplette ID angeben muss ?

                    log("***Waschmaschine Status: " + getObject('javascript.' + instance + '.HWR.WM_Status').common.states[obj.state.val]);
                    

                    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
                    • M Offline
                      M Offline
                      michihorn
                      schrieb am zuletzt editiert von
                      #10

                      Ich habe jetzt meine Visualisierung für Waschmaschine und Trockner im Feintuning.

                      Wenn die Waschmaschine über den Strommesser geschaltet wird, gibt es entweder 0 oder 1, für AUS oder EIN in der VAR HWR.WM_Status.

                      Ein weiteres Script ermittelt den Stromfluß in Grenzen vom 1000mA bis 75mA, alles dazwischen bekommt den Wert 2 in der HWR.WM_Status.

                      Wenn die Stromaufnahme länger 4 Minuten auf unter 75mA bleibt, gehe ich davon aus, dass der Waschvorgang beendet ist, dann wird der Wert 3 in der VAR HWR.WM_State gesetzt.

                      Entsprechend der Wertigkeiten der VAR HWR.WM_Status ändere ich in der VIS im Widget metro-Tile ValueList8 die farbliche Darstellung.

                      Status 0 und 1 erhalten die selbe Farbe "GRAU", lediglich die Beschriftung wird geändert. (EIN / AUS)

                      Status 2 wird Farbe rot. Beschriftung: WM läuft

                      Status 3 wird Farbe grün. Beschriftung: WM fertig.

                      326_unbenannt.jpg

                      Es wird sicher noch etwas Optimierungsbedarf geben. Der erste Waschgang läuft gerade. ;-)

                      Ich suche noch ein Widget mit dem gerade beschriebenen Eigenschaften und zusätzlich beim "Klicken" das Ausschalten des Aktors.

                      Hat jemand einen Tip?

                      Michael

                      1 Antwort Letzte Antwort
                      0
                      • A Offline
                        A Offline
                        Alchy
                        schrieb am zuletzt editiert von
                        #11

                        @michihorn:

                        Ich suche noch ein Widget mit dem gerade beschriebenen Eigenschaften und zusätzlich beim "Klicken" das Ausschalten des Aktors.

                        Hat jemand einen Tip?

                        Michael `

                        Metro Tile Toogle

                        Und wenn du unten im Widget die Signalbilder benutzt, brauchst du noch nicht mal ein Script für den größten Teil deiner Funktionen.

                        Allgemein:

                        Object ID: State Datenpunkt deines Aktors zum Ein und Ausschalten des Aktors als solches

                        Signalbilder

                        Objekt ID [0]: z.B Stromdatenpunkt deines Aktors größer 75 dann bei Beschreibung WM läuft und / oder passendes Signalbild

                        Objekt ID [1]: z.B Stromdatenpunkt deines Aktors kleiner 75 dann bei Beschreibung WM aus und / oder passendes Signalbild

                        ….

                        Alchy

                        Im Anhang mal schnell zusammengeklickt für eine Pumpe: nur Beschreibungstext bei Signalbildern verwendet

                        1495_metro_tile_toogle_summe.jpg

                        1 Antwort Letzte Antwort
                        0
                        • HomoranH Nicht stören
                          HomoranH Nicht stören
                          Homoran
                          Global Moderator Administrators
                          schrieb am zuletzt editiert von
                          #12

                          Hallo alchy und Willkommen im Forum!

                          Wenn du der bist, der ich denke, dass du der bist, hast du wahrscheinlich immer noch Langeweile?

                          Gruß

                          Rainer

                          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                          1 Antwort Letzte Antwort
                          0
                          • A Offline
                            A Offline
                            Alchy
                            schrieb am zuletzt editiert von
                            #13

                            Hallo Homoran

                            Ich bin alchy aus dem Homematicforum, wenn du das denkst wer ich bin.

                            Ich weiß, kann ja jeder behaupten, aber das wird sich schon ergeben. :mrgreen:

                            Langeweile - nö - kann nicht klagen. Eher das Gegenteil - wenn auch nicht aus Homematic Sicht.

                            Aber ich habe mir neues Spielzeug zugelegt und nun bin ich dabei, ernsthaft auf iBroker umzusteigen,

                            da CCU.IO und Dashui zwar laufen, aber eben auch nicht mehr weiter entwickelt werden.

                            Außerdem schadet es nie, sich mit weiteren Scriptsprachen usw. zu beschäftigen. Man lernt ja nie aus.

                            Hier bin ich wieder Anfänger und muss erst mal viel lesen und lernen.

                            Wenn ich mal irgendwann helfen kann, werde ich das natürlich auch hier tun, wenn ich darf.

                            Alchy

                            1 Antwort Letzte Antwort
                            0
                            • HomoranH Nicht stören
                              HomoranH Nicht stören
                              Homoran
                              Global Moderator Administrators
                              schrieb am zuletzt editiert von
                              #14

                              Hallo Alchy
                              @Alchy:

                              Wenn ich mal irgendwann helfen kann, werde ich das natürlich auch hier tun, wenn ich darf. `
                              Ich freue mich schon drauf.

                              @Alchy:

                              Außerdem schadet es nie, sich mit weiteren Scriptsprachen usw. zu beschäftigen. Man lernt ja nie aus `
                              Dauernd unterwegs und immer noch nicht ausgelastet.

                              Wenn wir dir hier etwas helfen können, sag Bescheid.

                              Gruß

                              Rainer

                              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                              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

                              696

                              Online

                              32.4k

                              Benutzer

                              81.4k

                              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