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. Script ein/aus erweitern - aber wie ?

NEWS

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

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

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

Script ein/aus erweitern - aber wie ?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
20 Beiträge 6 Kommentatoren 2.6k 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.
  • ldittmarL Offline
    ldittmarL Offline
    ldittmar
    Developer
    schrieb am zuletzt editiert von
    #8

    Du hast doch geschrieben, dass wenn dein tv an ist sollen die Sachen gemacht werden und dann Sonos play

    Sonst nur sonos play.

    Also wird sonos play immer gemacht egal ob tv an ist oder nicht. Also braucht man kein Else Zweig und können so den Befehl ganz unten schreiben. :)

    1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      my-knx-shop
      schrieb am zuletzt editiert von
      #9

      Ja ja…. aber wo fragt das Script ob TV auf true oder False ist ?

      1 Antwort Letzte Antwort
      0
      • ldittmarL Offline
        ldittmarL Offline
        ldittmar
        Developer
        schrieb am zuletzt editiert von
        #10

        Ohh… mein Fehler. Das kommt wenn man.am Handy programmieren will :lol: Sorry!

        if(getState('knx.0.Multimedia.WHZ_Samsung.Aus-Schalten').val){...
        
        

        So sieht es schon besser aus

        1 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          my-knx-shop
          schrieb am zuletzt editiert von
          #11

          Danke, dass ".val" ist dann der Punkt der entscheidet ob TV ( 'samsung2016.0.tvOn' ) true or false bereits ist und dann den Rest des Scripts ausführt ?

          1 Antwort Letzte Antwort
          0
          • P Offline
            P Offline
            pix
            schrieb am zuletzt editiert von
            #12

            Hallo,

            Ja .val ist wichtig. 'samsung2016.0.tvOn' ist ein Objekt. Vereinfacht gesagt, da sind zB noch .val (aktueller Wert), .ts (Timestamp), .lc (lastchange) … drin.

            Pix

            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
            • M Offline
              M Offline
              my-knx-shop
              schrieb am zuletzt editiert von
              #13

              Verdammt … warum kapiere ich das nicht ;-)

              on({id: 'knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_PlayPause'}, function (obj) {
              if(getState('knx.0.Multimedia.WHZ_Samsung.Aus-Schalten').val){
              console.log("Switch off Samsung TV");
              setState ('samsung2016.0.tvOn', false);
              setState ('knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_LineIn_mit_1', false);
              }
              setState ('knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_PlayPause', true);
              });
              

              Der Datenpunkt: knx.0.Multimedia.WHZ_Samsung.Aus-Schalten hat doch nur true oder false

              und wenn nun dieser Datenpunkt ein true hat, soll der Datenpunkt samsung2016.0.tvOn das false bekommen.

              Was macht denn ein .val bei dem Datenpunkt "knx.0.Multimedia.WHZ_Samsung.Aus-Schalten" ?

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

                @my-knx-shop:

                Was macht denn ein .val bei dem Datenpunkt `
                dass der Wert und nicht der name des Datenpunkts geändert wird.

                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
                • M Offline
                  M Offline
                  my-knx-shop
                  schrieb am zuletzt editiert von
                  #15

                  Hallo Rainer, ich komme da nicht mit !

                  Muss nicht erst einmal eine Abfrage stattfinden welcher Wert aktuell auf dem Datenpunkt liegt, bevor ein anderer Datenpunkt geändert wird ? Das getstate fragt also ab ! Jetzt muss aber doch entschieden werden was passieren soll wenn der Status aktuell bei true ist bzw. auf false ist.

                  Wo wird dieses entschieden und damit dann das weitere ausgeführt ?

                  1 Antwort Letzte Antwort
                  0
                  • M Offline
                    M Offline
                    my-knx-shop
                    schrieb am zuletzt editiert von
                    #16

                    Also mit dem o.g. Script kommt es zu zuvielen Daten die geendet werden und zu Problemen und auch Fehlern. Bei Sonos ein geht der TV nicht aus.

                    Ich vermute noch immer das die Abfrage nicht richtig ist.

                    1 Antwort Letzte Antwort
                    0
                    • ldittmarL Offline
                      ldittmarL Offline
                      ldittmar
                      Developer
                      schrieb am zuletzt editiert von
                      #17

                      Hi KNX-Shop,

                      das Programm sollte genau das tun was du gesagt hast.

                      on({id: 'knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_PlayPause'}, function (obj) {
                      	if(getState('knx.0.Multimedia.WHZ_Samsung.Aus-Schalten').val){
                      		console.log("Switch off Samsung TV");
                      		setState ('samsung2016.0.tvOn', false);
                      		setState ('knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_LineIn_mit_1', false);
                      	}
                      	setState ('knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_PlayPause', true);
                      });
                      
                      

                      Übersetzt steht im Code das hier:

                      Wenn sich Sonos PlayPause ändert, dann führe folgendes aus:

                      • Wenn mein Samsung.Aus-Schalter wahr ist, dann logge mal "Switch off Samsung TV", setze den Status tvOn auf unwahr, setze Sonos LineIn auf unwahr und stelle Sonos PlayPause auf wahr (was dazu führen könnte, dass das Skript nochmal ausgeführt wird)

                      • Sonst setze nur Sonos PlayPause auf wahr (was dazu führen könnte, dass das Skript nochmal ausgeführt wird)

                      Ok… irgendwas läuft da falsch, denn du hast hier eine Dauerschleife. Also nochmal: Was ist dein Trigger? Wenn dein Trigger stimmt, warum willst du PlayPause nochmal auf true setzen? Wenn das unbedingt notwendig sein sollte, musst du vorher eine Variable erstellen, der verhindert das es zu eine Dauerschleife kommt, denn sobald du PlayPause auf true stellst, wird dein Skript wieder ausgeführt. So ungefähr...

                      var schondurchgelaufen = false;
                      on({id: 'knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_PlayPause'}, function (obj) {
                      	if(!schondurchgelaufen){
                      		if(getState('knx.0.Multimedia.WHZ_Samsung.Aus-Schalten').val){
                      			console.log("Switch off Samsung TV");
                      			setState ('samsung2016.0.tvOn', false);
                      			setState ('knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_LineIn_mit_1', false);
                      		}
                      		setState ('knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_PlayPause', true);
                      		schondurchgelaufen = true;
                      	}else{
                      		schondurchgelaufen = false;
                      	}
                      });
                      
                      

                      Hier wird vorher geschaut, ob es schon durchgelaufen ist. Wenn ja, dann führe das ganze nicht nochmal aus. Ich gehe hier davon aus, dass dein Skript immer zwei mal getriggert wird. Bedenke: Ich kann nur theoretisch für dich testen, denn ich habe die Komponenten ja nicht.

                      Versuche mal mit Logs zu arbeiten. Geb einfach nach jede Zeile eine Meldung und ggf. auch den Wert zurück. So kannst du genau verfolgen was passiert.

                      Grüße,

                      ldittmar

                      1 Antwort Letzte Antwort
                      0
                      • BluefoxB Offline
                        BluefoxB Offline
                        Bluefox
                        schrieb am zuletzt editiert von
                        #18

                        Da fehlt die Entscheidung ob man auf Kommando (IoB => KNX/Sonos) oder auf Status (KNX/Sonos => IoB ) triggern will.

                        Das hängt davon ab, ob KNX/Sonos => IoB überhaupt möglich ist.

                        Falls ja, dann sollte den Code so aussehen:

                        on({id: 'knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_PlayPause', ack: true}, function (obj) { ...
                        

                        Aber trotzdem ist mir nicht klar was du erreichen willst.

                        1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          my-knx-shop
                          schrieb am zuletzt editiert von
                          #19

                          Ich will erreichen, dass der Sonos wenn ich auf Play gehe auch gleich läuft. Denn wenn ich vorher den TV an hatte, steht der nicht mehr auf Radio sondern auf TV und spielt dann nichts ab.

                          Also soll es wenn der TV aus ist per Play direkt Radio Abspielen und wenn TV an ist, erst TV aus und umschalten auf Radio, damit abgespielt werden kann ! Oder ist der LineIn dazu das falsche ?

                          1 Antwort Letzte Antwort
                          0
                          • justrJ Offline
                            justrJ Offline
                            justr
                            schrieb am zuletzt editiert von
                            #20

                            Ich habe keine Ahnung, was dein Datenpunkt 'knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_LineIn_mit_1' macht und ich kenne auch knx nicht. Aber wenn du versuchst, damit den "current_type" deiner Sonos zu setzen, wird das nicht klappen, da dieser Status "read-only" ist.

                            Zum Umschalten der Sonos von TV auf Radio nutze ich den "favorite_set":

                            setState("sonos.0.root.192_168_xx_yy.favorites_set", "Bayern 3");
                            

                            Dafür musst du in der Sonos-App natürlich einen entsprechenden Favoriten angelegt haben.

                            Übrigens, da du oben mehrfach nachgehakt hast: Mit "if (statement)" wird das statement auf true abgefragt, also z.B. ob a größer b (a>b) oder c gleich d (c==d). Wenn das statement für sich bereits eine Variable vom Typ boolean ist, steht der Wert ja bereits auf true oder false, d.h. die Abfrage auf true kannst du weglassen. "if (a == true)" ist das gleiche wie "if(a)".

                            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

                            369

                            Online

                            32.5k

                            Benutzer

                            81.6k

                            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