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. [SOLVED] Wie werden Widgets genutzt, wenn ein Aktor getrennte Objekte für STATUS und Aktion hat?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    936

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[SOLVED] Wie werden Widgets genutzt, wenn ein Aktor getrennte Objekte für STATUS und Aktion hat?

Geplant Angeheftet Gesperrt Verschoben Ungelöst Visualisierung
23 Beiträge 4 Kommentatoren 3.6k Aufrufe 1 Watching
  • Ä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.
  • DutchmanD Offline
    DutchmanD Offline
    Dutchman
    Developer Most Active Administrators
    schrieb am zuletzt editiert von
    #21

    Hi,

    Script im Widget geht glaube ich aber Dan hat du wieder dasselbe Problem

    (Für jeden Schalter ein Script)

    Ich überlege gerade ob es nicht dynamischer gehen würde.

    In JavaScript ja, den kompletten Baum auslesen und per Funktionen die anderen Objekte erstellen und setzen

    Hmm müsste auch zum Teil in blockly machbar sein um wieviel Schalter geht es die dieselbe Logik haben müssen ?

    Sent from my iPhone using Tapatalk

    1 Antwort Letzte Antwort
    0
    • BreisgauerB Offline
      BreisgauerB Offline
      Breisgauer
      schrieb am zuletzt editiert von
      #22

      @Dutchman:

      … um wieviel Schalter geht es die dieselbe Logik haben müssen ? `

      Insgesamt betrifft es ungfähr 34 Kanäle.

      Im Moment helfe ich mir mit duplizieren der Blocky Skripts. Nicht elegant, aber für den Moment komme ich damit zurecht.

      In "https://forum.iobroker.net/viewtopic.php?f=30&t=15367" wird das Thema des Umgangs mit STATUS und AKTIONs-Objekten gerade auch diskutiert.

      Mal sehen was dort rauskommt, wird hierfür auch helfen.

      Auf jeden Fall: Ganz herzlichen Dank für Eure Hilfe!

      Produktiv: iobroker in Docker; latest stable versions for adapters. ETS 5 (aktuelle Version)

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        schrorg
        schrieb am zuletzt editiert von schrorg
        #23

        Hallo zusammen,

        ich habe das Script für meine Bedürfnisse optimiert und möchte euch das Ergebnis nicht vorenthalten.

        Jeder State besteht ja im Grunde genommen aus drei Elementen: KNX-Read, KNX-Write und der kombinierte State im JS. Daher habe ich mir überlegt, dass man das in JavaScript auch per Array lösen kann. Nach der Array-Definition geht man dann in einer Schleife darüber und setzt mit "on(...)" die Subscriptions.

        Das Array besteht aus Objekten, die jeweils drei properties haben: "knxread", "knxwrite" und "combined". Wird mit dem Adapter "web.0" der State "combined" verändert, so wird er nach "knxwrite" geschrieben. Wird per KNX (z.B. KNX-Taster) etwas verändert ("knxread" ändert sich), so wird der Wert nach "combined" übertragen.

        Damit die Zeilen im Array nicht unnötig lang werden, habe ich das Präfix ausgespart. Es ist ja prinzipiell immer gleich und wird im späteren Verlauf (erste Zeilen in der Schleife) dann einfach hinzugefügt.

        Das Script im Ganzen sieht dann so aus (Array ist nur auszugsweise und muss natürlich an die tatsächlichen Gegebenheiten angepasst werden!):

        var pairs = [
            // Erdgeschoss
            {knxread: 'EG.Gästezimmer.Status', knxwrite: 'EG.Gästezimmer.Schalten', combined: 'EG.Gästezimmer.Schalten'},
            {knxread: 'EG.Gästezimmer.Wert', knxwrite: 'EG.Gästezimmer.Wert_setzen_Deckenlicht', combined: 'EG.Gästezimmer.Wert'},
            {knxread: 'EG.Wohnzimmer.Status', knxwrite: 'EG.Wohnzimmer.Schalten', combined: 'EG.Wohnzimmer.Schalten'},
        
            // Obergeschoss
            {knxread: 'OG.Ankleidezimmer.Position_Rolladen', knxwrite: 'OG.Ankleidezimmer.Position_anfahren_Rolladen', combined: 'OG.Ankleidezimmer.Position_Rolladen'},
            {knxread: 'OG.Ankleidezimmer.Verfahrstatus_Rolladen', knxwrite: 'OG.Ankleidezimmer.Verfahrstatus_anfahren_Rolladen', combined: 'OG.Ankleidezimmer.Verfahrstatus_Rolladen'},
            {knxread: 'OG.Schlafzimmer.Position_Rolladen_Fenster', knxwrite: 'OG.Schlafzimmer.Position_anfahren_Rolladen_Fenster', combined: 'OG.Schlafzimmer.Position_Rolladen_Fenster'},
        
            // Aussenbereich
            {knxread: 'Außenbereich.Garten.Status_Licht', knxwrite: 'Außenbereich.Garten.Schalten_Licht', combined: 'Außenbereich.Garten.Schalten_Licht'},
            {knxread: 'Außenbereich.Garten.Status_Strom', knxwrite: 'Außenbereich.Garten.Schalten_Strom', combined: 'Außenbereich.Garten.Schalten_Strom'},
            {knxread: 'Außenbereich.Balkon.Status_Licht', knxwrite: 'Außenbereich.Balkon.Schalten_Licht', combined: 'Außenbereich.Balkon.Schalten_Licht'},
            {knxread: 'Außenbereich.Balkon.Status_Strom', knxwrite: 'Außenbereich.Balkon.Schalten_Strom', combined: 'Außenbereich.Balkon.Schalten_Strom'}
        ];
        
        pairs.forEach(function(pair) {
            pair.knxread = 'knx.0.' + pair.knxread;
            pair.knxwrite = 'knx.0.' + pair.knxwrite;
            pair.combined = 'javascript.0.KNX.' + pair.combined;
            createState(pair.combined);
        
            // Initialen Wert aus KNX in die kombinierten Objekte schreiben:
            setState(pair.combined, getState(pair.knxread).val, true);
        
            // Wert wird durch KNX geändert:
            on({id: pair.knxread, change: 'ne'}, function(obj) {
                setState(pair.combined, (obj.state ? obj.state.val : ''), true);
            });
        
            // Wert wird durch ioBroker web.0 geändert:
            on({id: pair.combined, change: 'ne'}, function(obj) {
                if ((obj.state ? obj.state.from : '') == 'system.adapter.web.0') {
                    setState(pair.knxwrite, (obj.state ? (obj.state.val === true ? 1 : (obj.state.val === false ? 0 : obj.state.val)) : ''), false);
                }
            });
        });
        

        Ich habe aktuell 138 Subscriptions, d.h. 46 (138/3) Objekte im Array und das Script läuft bei uns seit einigen Tagen völlig problemlos.

        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

        324

        Online

        32.6k

        Benutzer

        82.2k

        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