ioBroker: Offene und geschlossene Fenster als Liste ausgeben

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Zur Fensterüberwachung nutze ich die Kontaktsensoren von Aqara im versteckten Einbau am Fenster (mehr dazu).

Verschiedene Varianten

Vorbereitung

Zuerst benötigst einen neuen Datenpunkt

Zunächst legst du dir einen eigenen Datenpunkt der Art „gemischt“ an. Als Name nimmst du zum Beispiel „Fenster“.

Sensoren einer Aufzählung zuweisen

Um später nur auf Änderungen deiner Fenster oder Türen zu triggern, solltest du den State jedes Sensors, den du überwachen willst, einer „Funktion“ hinzufügen, zum Beispiel „Fenster“. Lege dazu unter „Aufzählungen“ eine neue Funktion an:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Danach wechselst du in „Objekte“ und wählst deinen Kontaktsensor aus. Dem State, der den „geöffnet“-Zustand überwacht, weist du die Funktion „Fenster“ zu:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Datenpunkt benennen

Außerdem solltest du den State in der Spalte “Name” einen aussagekräftigen Namen geben, beispielsweise “Badfenster” (hier im Beispiel: “Fenster”):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Raum zuweisen

Damit zusätzlich der Raum, in dem sich das Fenster befindet, angezeigt wird, solltest du dem State (oder dem übergreifendem Kanal) einen Raum zuweisen:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Blockly-Script aufbauen

Variante 1: Ausgabe als reine Textliste

Listen “geöffnet” und “geschlossen” erstellen

Dann erstellst du ein neues Blockly-Script und fügst einen „falls“-Trigger ein. Als Auslöser wählst du „IDs vom Selektor“ (in diesem Artikel erfährst du mehr über diesen Selektor):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.
state[id=*](functions=fenster)

Dadurch reagiert das Script auf alle Änderungen innerhalb der Aufzählung bzw. Funktion „Fenster“.

Als nächstes benötigst du 3 neue Variablen, die du wie folgt auf Text bzw eine leere Liste setzt:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Dann fügst du aus dem Bereich “Schleifen” eine neuen “für jeden Wert aus Liste”-Block ein. An den Eingang hängst du ebenfalls einen „IDs vom Selektor“ mit dem gleichen Inhalt wie eben (mehr zum Thema “automatische Listen” erfährst du hier):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Ziehe dir nun einen “falls mache”-Block aus der Logik in die grüne Schleife und stelle ihn über das Zahnrad auf “falls mache sonst” um:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Als Bedingung hängst du einen “Wert von Objekt” aus dem Bereich “System” an und weißt ihm die Variable “i” (aus der Schleife) zu. Damit löst die Bedingung “mache” aus, wenn der Wert von “i” wahr ist:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Dann steckst du einen „in der Liste setze für“-Block aus dem Bereich „Liste“ in den grünen Schleifen-Block. Als Einstellung benötigst du „füge als Erste“. Als Listen-Variable nimmst du die Variable “Liste offen“:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Anschließend steckst du einen “erzeuge Liste mit”-Block aus dem Bereich “Listen” an den Ausgang “ein”. An den Eingang des neuen “erzeuge Liste mit”-Blocks fügst du die Javascript-Funktion “Name” mit “i” an:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Hinweis: je nach Version deines Javascript-Adapters musst du für das “Raum”-Script einen anderen Code verwenden! Mehr dazu hier im Artikel.

Nun kopierst du dir den „in der Liste setze für“-Block und fügst ihn unter “sonst” ein. Dann änderst du die Variable hinter “in der Liste” auf “Liste-geschlossen”:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.
Sortieren und Ausgabe

Füge außer- und unterhalb der grünen Schleife 2 weitere “falls dann”-Blöcke aus der “Logik” ein und stecke an den Eingang jeweils einen “nicht”-Block aus “Logik” sowie ein “ist leer”-Block aus “Listen”. Füge in diese wie unten zu sehen deine beiden Variablen ein:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Jetzt brauchst du zweimal den “Text”-Block “zu Element Text anhängen”. Setze ihn jeweils in die “falls mache”-Logik und stelle “Liste-komplett” als Variable ein:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Text für “Liste-offen”:

Geöffnet: 

Text für “Liste-geschlossen”:

Geschlossen: 

Für das Sortieren benötigst du das Sortieren-Script (absteigende Sortierung) und eine neue “für jeden Wert aus der Liste”-Schleife. Erstelle die Sortieren-Funktion und hänge diese an den Eingang der Schleife. An den Eingang “Liste” der Funktion sollte die Variable “Liste-offen” gesteckt werden und an den “Wert” die Zahl “3” (letzte Änderung):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Anschließend baust du die eigentliche Ausgabe-Logik zusammen. Füge dazu wieder einen “Text”-Block “zu Element Text anhängen” in die grüne Schleife:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.
  • Eingang: “in der Liste nimm das Element”
    mit Variable “j” und Wert “1” als Zahl
Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Als vorletzten Schritt kopierst du die grüne Schleife (Rechtsklick -> kopieren) und fügsr sie im nächsten, noch leeren “falls mache”-Block ein, allerdings mit der Variable “Liste-geschlossen”:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Zum Schluss kannst du nun die Variable “Liste-komplett” an einen “sendto”-Block stecken und dir die Liste schicken lassen. In diesem Beispiel habe ich den “pushover”-Block genutzt:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.
Fertiges Script
Blockly
<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id="Fwt*3`3ScyT(qDt?gf(T">ObjectID</variable>
    <variable id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</variable>
    <variable id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</variable>
    <variable id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</variable>
    <variable id="9sl@{VQ/amrd~ZTB}e/O">i</variable>
  </variables>
  <block type="procedures_defcustomreturn" id="]lQM=r`L^2M}s^@n(USH" x="-112" y="-887">
    <mutation statements="false">
      <arg name="ObjectID" varid="Fwt*3`3ScyT(qDt?gf(T"></arg>
    </mutation>
    <field name="NAME">Name</field>
    <field name="SCRIPT">bGV0IG5hbWUgPSBnZXRPYmplY3QoT2JqZWN0SUQpLmNvbW1vbi5uYW1lOwovL2lmKHR5cGVvZiByb29tID09ICdvYmplY3QnKSByZXR1cm4gcm9vbS5kZTsKcmV0dXJuIG5hbWU7</field>
    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
  </block>
  <block type="on_ext" id="RT3@Kxqxg#w3f=(kzwCu" x="-112" y="-862">
    <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid" id="0)0sp$I1ccfm%4Sde-mT">
        <field name="oid">default</field>
      </shadow>
      <block type="selector" id=",lvP%A]1J?Mf^@0s2D%[">
        <field name="TEXT">state[id=*](functions=fenster)</field>
      </block>
    </value>
    <statement name="STATEMENT">
      <block type="variables_set" id="EaZb.Nmx4%jg9Z;%%B!-">
        <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
        <value name="VALUE">
          <block type="text" id="Wh^sL0z$W-HIc=.KAWpS">
            <field name="TEXT"></field>
          </block>
        </value>
        <next>
          <block type="variables_set" id="SS-}=kJy|nP`aiAV1-xb">
            <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
            <value name="VALUE">
              <block type="lists_create_with" id="$AFtq:sq?.LYHWTSs$x|">
                <mutation items="0"></mutation>
              </block>
            </value>
            <next>
              <block type="variables_set" id="o_#fa#./grwL0VYZXhV1">
                <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                <value name="VALUE">
                  <block type="lists_create_with" id="P~^2(u_E4rR`PYMfolf}">
                    <mutation items="0"></mutation>
                  </block>
                </value>
                <next>
                  <block type="controls_forEach" id="~PaFX`X@5n{TM9K^{Jw6">
                    <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                    <value name="LIST">
                      <block type="selector" id="xQ^Q5{h5V@5PLI+YO@i.">
                        <field name="TEXT">state[id=*](functions=fenster)</field>
                      </block>
                    </value>
                    <statement name="DO">
                      <block type="controls_if" id="-3J;6~}7Ac!D}IR`/Dr1">
                        <mutation else="1"></mutation>
                        <value name="IF0">
                          <block type="get_value_var" id=")kSAuROX6lA-U2N,FJ1Q">
                            <field name="ATTR">val</field>
                            <value name="OID">
                              <shadow type="text" id="e+?Z+-m0_DLYGl{zT3ix">
                                <field name="TEXT"></field>
                              </shadow>
                              <block type="variables_get" id="!fALmmY3PSF+?rGHUXQ,">
                                <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                              </block>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="lists_setIndex" id="-zUiNM(}BsoQ].Hu.|mx" inline="false">
                            <mutation at="false"></mutation>
                            <field name="MODE">INSERT</field>
                            <field name="WHERE">FIRST</field>
                            <value name="LIST">
                              <block type="variables_get" id="Q0Hct8=ken4m!!W]js)U">
                                <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
                              </block>
                            </value>
                            <value name="TO">
                              <block type="procedures_callcustomreturn" id="2fUjFt9g8rVF/XheoN.x">
                                <mutation name="Name">
                                  <arg name="ObjectID"></arg>
                                </mutation>
                                <value name="ARG0">
                                  <block type="variables_get" id="k:Is?gkGPl/=r1X^,k3K">
                                    <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </statement>
                        <statement name="ELSE">
                          <block type="lists_setIndex" id="-jTzj32XiFWfi?n1Y/LN" inline="false">
                            <mutation at="false"></mutation>
                            <field name="MODE">INSERT</field>
                            <field name="WHERE">FIRST</field>
                            <value name="LIST">
                              <block type="variables_get" id="2~tv/YW~42Q$E*%G;Pqi">
                                <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                              </block>
                            </value>
                            <value name="TO">
                              <block type="procedures_callcustomreturn" id="`Zdw5Kh*[(IY72pyr_o(">
                                <mutation name="Name">
                                  <arg name="ObjectID"></arg>
                                </mutation>
                                <value name="ARG0">
                                  <block type="variables_get" id="dTq}?1$ruG%K+237sR}z">
                                    <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </statement>
                      </block>
                    </statement>
                    <next>
                      <block type="controls_if" id="%xroGCihVu8$~$xQ{]ke">
                        <value name="IF0">
                          <block type="logic_negate" id="u(+LUZ2=D}K8JRKt()tg">
                            <value name="BOOL">
                              <block type="lists_isEmpty" id="zS,AjUzHt0uWh$(li$,h">
                                <value name="VALUE">
                                  <block type="variables_get" id="b),0*5k:oMF~4H^Xx.Hw">
                                    <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="text_append" id="xgCK}K@KSx){tg%A(xl5">
                            <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                            <value name="TEXT">
                              <shadow type="text">
                                <field name="TEXT"></field>
                              </shadow>
                              <block type="text" id="-HV%tM;_jbL/K_)=V78_">
                                <field name="TEXT">Geöffnet: </field>
                              </block>
                            </value>
                            <next>
                              <block type="text_append" id="mQWs]oKZy!!UBi#)2pN:">
                                <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                <value name="TEXT">
                                  <shadow type="text">
                                    <field name="TEXT"></field>
                                  </shadow>
                                  <block type="lists_split" id="vo;Gre#7RVr3M6$mk7E:">
                                    <mutation mode="JOIN"></mutation>
                                    <field name="MODE">JOIN</field>
                                    <value name="INPUT">
                                      <block type="variables_get" id="o(LRYzD:?:_v5aTHyYuJ">
                                        <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
                                      </block>
                                    </value>
                                    <value name="DELIM">
                                      <shadow type="text" id="lIp}_n+[0|`={eJh]aEe">
                                        <field name="TEXT">, </field>
                                      </shadow>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </next>
                          </block>
                        </statement>
                        <next>
                          <block type="controls_if" id="L!}N25QKJ[D61;a?bf%?">
                            <value name="IF0">
                              <block type="logic_negate" id="P#;v$=eLxCHvoTF^|O)k">
                                <value name="BOOL">
                                  <block type="lists_isEmpty" id="7GdP`ErgKtT#V1*MU9gK">
                                    <value name="VALUE">
                                      <block type="variables_get" id="T`YMrp]-^RFDhRULk,7z">
                                        <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <statement name="DO0">
                              <block type="text_append" id="rr-Lu!{,+|n3Pz}r,/|q">
                                <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                <value name="TEXT">
                                  <shadow type="text" id="u#~AR/M~-4pVtl1Oc_:7">
                                    <field name="TEXT"></field>
                                  </shadow>
                                  <block type="text" id="rHg4[Q1;k=YZ/r;j3e$B">
                                    <field name="TEXT">Geschlossen: </field>
                                  </block>
                                </value>
                                <next>
                                  <block type="text_append" id="(`NHR}HYpw]:P`ZNgy6X">
                                    <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                    <value name="TEXT">
                                      <shadow type="text" id="LHw-8A|w9lQp3_kLp8XM">
                                        <field name="TEXT"></field>
                                      </shadow>
                                      <block type="lists_split" id="s{W^YIjtci(NGf{R![Df">
                                        <mutation mode="JOIN"></mutation>
                                        <field name="MODE">JOIN</field>
                                        <value name="INPUT">
                                          <block type="variables_get" id="u4US1gL%m8Myl{MI]BFp">
                                            <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                                          </block>
                                        </value>
                                        <value name="DELIM">
                                          <shadow type="text" id="),t^.5%yN_V(;k~5h}?^">
                                            <field name="TEXT">, </field>
                                          </shadow>
                                        </value>
                                      </block>
                                    </value>
                                  </block>
                                </next>
                              </block>
                            </statement>
                            <next>
                              <block type="debug" id="U,|}xqE%tY43.c|@LblL">
                                <field name="Severity">log</field>
                                <value name="TEXT">
                                  <shadow type="text" id="]gA]y`d?X#o3Te0Qtj7?">
                                    <field name="TEXT">test</field>
                                  </shadow>
                                  <block type="variables_get" id="1nD3!n%U[$sq3eX2[GiY">
                                    <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                  </block>
                                </value>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </next>
          </block>
        </next>
      </block>
    </statement>
  </block>
</xml>
Javascript
var ObjectID, Liste, Wert, Liste_komplett, Liste_offen, Liste_geschlossen, i;

function Name(ObjectID) {
    let name = getObject(ObjectID).common.name;
    //if(typeof room == 'object') return room.de;
    return name;
}

on({id: Array.prototype.slice.apply($("state[id=*](functions=fenster)")), change: "ne"}, function (obj) {
  var value = obj.state.val;
  var oldValue = obj.oldState.val;
  Liste_komplett = '';
  Liste_offen = [];
  Liste_geschlossen = [];
  var i_list = Array.prototype.slice.apply($("state[id=*](functions=fenster)"));
  for (var i_index in i_list) {
    i = i_list[i_index];
    if (getState(i).val) {
      Liste_offen.unshift(Name(i));
    } else {
      Liste_geschlossen.unshift(Name(i));
    }
  }
  if (!!Liste_offen.length) {
    Liste_komplett += 'Geöffnet: ';
    Liste_komplett += String(Liste_offen.join(', '));
  }
  if (!!Liste_geschlossen.length) {
    Liste_komplett += 'Geschlossen: ';
    Liste_komplett += String(Liste_geschlossen.join(', '));
  }
  console.log(Liste_komplett);
});

Variante: Ausgabe als HTML-Liste

Listen “geöffnet” und “geschlossen” erstellen

Dann erstellst du ein neues Blockly-Script und fügst einen „falls“-Trigger ein. Als Auslöser wählst du „IDs vom Selektor“ (in diesem Artikel erfährst du mehr über diesen Selektor):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.
state[id=*](functions=fenster)

Dadurch reagiert das Script auf alle Änderungen innerhalb der Aufzählung bzw. Funktion „Fenster“.

Als nächstes benötigst du 3 neue Variablen, die du wie folgt auf Text bzw eine leere Liste setzt:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Dann fügst du aus dem Bereich “Schleifen” eine neuen “für jeden Wert aus Liste”-Block ein. An den Eingang hängst du ebenfalls einen „IDs vom Selektor“ mit dem gleichen Inhalt wie eben (mehr zum Thema “automatische Listen” erfährst du hier):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Ziehe dir nun einen “falls mache”-Block aus der Logik in die grüne Schleife und stelle ihn über das Zahnrad auf “falls mache sonst” um:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Als Bedingung hängst du einen “Wert von Objekt” aus dem Bereich “System” an und weißt ihm die Variable “i” (aus der Schleife) zu. Damit löst die Bedingung “mache” aus, wenn der Wert von “i” wahr ist:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Dann steckst du einen „in der Liste setze für“-Block aus dem Bereich „Liste“ in den grünen Schleifen-Block. Als Einstellung benötigst du „füge als Erste“. Als Listen-Variable nimmst du die Variable “Liste offen“:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Anschließend steckst du einen “erzeuge Liste mit”-Block aus dem Bereich “Listen” an den Ausgang “ein” und stellst über das blaue Zahnrad den Wert auf 3. An den ersten Eingang des neuen “erzeuge Liste mit”-Blocks fügst du die Javascript-Funktion “Name” mit “i”, an den zweiten Eingang die Javascript-Funktion “Raum” mit “i” und an den dritten Eingang einen “Wert von Objekt ID” mit “i” aus dem Bereich “System” mit der Eeinstelung “letzte Änderung”.

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Hinweis: je nach Version deines Javascript-Adapters musst du für das “Raum”-Script einen anderen Code verwenden! Mehr dazu hier im Artikel.

Nun kopierst du dir den „in der Liste setze für“-Block und fügst ihn unter “sonst” ein. Dann änderst du die Variable hinter “in der Liste” auf “Liste-geschlossen”:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Sobald du nun ein Fenster öffnest oder schließt, wird es mit Namen und Zustand in die entsprechende Liste geschrieben. Weiter geht es mit der Sortierung und der Ausgabe.

Sortieren und Ausgabe

Jetzt brauchst du zweimal den “Text”-Block “zu Element Text anhängen”. Setze ihn jeweils in die “falls mache”-Logik und stelle “Liste-komplett” als Variable ein:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Als Text fügst du folgenden HTML-Code ein. Dieser formatiert die Ausgabe nachher als Tabelle. Über die CSS-Klassen “table-status” und “inactive” kannst du die beiden Tabellen nachher unterschiedlich gestalten (siehe auch meine iobroker-Visualisierung für FireHD bzw. 1024 x 640 Pixel).

Text für “Liste-offen”:

<div class="headline"><b>Geöffnet</b></div><table class="table-status"><tbody>

Text für “Liste-geschlossen”:

<div class="headline"><b>Geschlossen</b></div><table class="table-status inactive"><tbody>

Jetzt folgt die Sortierung und das Einsetzen der einzelnen Listeneinträge in die HMTL-Tabelle. Hierfür benötigst du das Sortieren-Script (absteigende Sortierung) und eine neue “für jeden Wert aus der Liste”-Schleife. Erstelle die Sortieren-Funktion und hänge diese an den Eingang der Schleife. An den Eingang “Liste” der Funktion sollte die Variable “Liste-offen” gesteckt werden und an den “Wert” die Zahl “2” Zahl “3” (letzte Änderung):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Zusätzlich benötigst du noch einen “Text”-Block “zu Element Text anhängen”. Setze ihn unter die “falls mache”-Logik und stelle “Liste-komplett” als Variable ein. Als Text fügst du wieder folgenden HTML-Code ein:

</tbody></table>

Anschließend baust du die eigentliche Ausgabe-Logik zusammen. Füge dazu wieder einen “Text”-Block “zu Element Text anhängen” in die grüne Schleife und stecke an den Einang einen “erstelle Text aus”-Block mit 8 Eingängen (blaues Zahnrad):

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.
  • Eingang 1: Leeres Text-Feld
    (Das Bild dazu findest du weiter unten zum Download)
<tr><td><img src="/vis.0/main/icons/noun_open.png"></td><td>
  • Eingang 2: “in der Liste nimm das Element”
    mit Variable “j” und Wert “1” als Zahl
  • Eingang 3: “in der Liste nimm das Element”
    mit Variable “j” und Wert “2” als Zahl
  • Eingang 4: Leeres Text-Feld
</td><td><span class=""><i>Letzte Änderung:</i><br>
  • Eingang 5: “Datum/Zeit” mit “in der Liste nimm das Element”
    mit Variable “j” und Wert “3” als Zahl, formatiert nach “TT.MM”
  • Eingang 6: Leeres Text-Feld
, [1 x LEERTASTE]
  • Eingang 7: “Datum/Zeit” mit “in der Liste nimm das Element”
    mit Variable “j” und Wert “3” als Zahl, formatiert nach “SS.mm”
  • Eingang 7: Leeres Text-Feld
 Uhr</span></td></tr>

Als vorletzten Schritt kopierst du die grüne Schleife (Rechtsklick -> kopieren) und fügsr sie im nächsten, noch leeren “falls mache”-Block ein, allerdings mit der Variable “Liste-geschlossen”:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Jetzt fehlt nur noch der Befehl, die komplette Ausgabe in deinen Datenpunkt zu schreiben. Dafür benötigst du den “steuere mit”-Block aus dem Bereich “System”. Wähle den oben erstellten Datenpunkt (“Fenster”) aus. In das leere Feld “mit” setzt du die Variable “Liste-komplett” ein:

Wie du eine automatische Übersicht von deinen geschlossenen und geöffneten Fenster als reinte Textliste oder formatierte HTML-Tabelle generieren kannst, erfährst du in diesem Artikel.

Sobald du nun deine Fenster öffenst oder schließt, wird automatisch eine Liste erstellt, die nach beiden Zuständen unterscheidet. Füge in deiner Visualisierung ein “Basic – String (unescaped)”-Widget ein und verknüpfe es mit dem Datenpunkt:

ioBroker: Smart Home-Dashboard mit der machs-smart.de-FireHD-Visualisierung

Du kannst dieser Aufzählung jederzeit weitere Datenpunkte/Geräte hinzufügen, ohne das Script anpassen zu müssen.

Hinweis: Nach dem ersten Start des Scripts ist es notwendig, dass du eins deiner Fenster testweise öffnest/schließt, damit die Script-Logik initiiert wird und alle Fenster-Zustände ausgewertet werden.

Notwendige Bilder

Bitte lade das Bild über den Dateimanager des VIS-Editors in das Verzeichnis:

vis.0/main/icons
Notwendiges Stylesheet / CSS

Damt deine Ausgabe wie die in meiner ioBroker-Visualisierung (oben dargestellt) aussieht, musst du im Reiter “CSS” folgende Styles einfügen:

.table-status {
    width: 100%; 
    margin: 0px 0px 40px;
}

.table-status tr {
    background: none!important;
    border-bottom: 1px dotted #ccc;
    height: 48px;
}

.table-status tr:last-child {
    background: none!important;
    border-bottom: 0px solid #ccc;
}


.table-status th:nth-child(1),
.table-status td:nth-child(1) {
    padding: 5px 0px 0px!important;
    text-align: left!important;
    width: 10%!important;
    vertical-align: top;
}

.table-status th:nth-child(1) img,
.table-status td:nth-child(1) img {
    width: 40px;
    height: auto;
    margin-left: -6px;
}

.table-status.inactive img {
    opacity: 0.6;
}

.table-status th:nth-child(2),
.table-status td:nth-child(2) {
    padding: 0px 0px 0px 10px!important;
    text-align: left;
    width: *;
    -moz-hyphens: none;
    -o-hyphens: none;
    -webkit-hyphens: none;
    -ms-hyphens: none;
    hyphens: none;
    white-space: nowrap;
    font-size: large;
    line-height: 1;
}

.table-status th:nth-child(3),
.table-status td:nth-child(3) {
    padding: 9px 0px 0px!important;
    vertical-align: top;
    text-align: right;
}

Hier geht es zum Download des Visualisierungs-Templates.

Fertiges Script
Blockly
<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id="Fwt*3`3ScyT(qDt?gf(T">ObjectID</variable>
    <variable id="./q,SFeGV,;)[@g=ERgm">Liste</variable>
    <variable id="K@h0-NY5VaI|@t!5/iJh">Wert</variable>
    <variable id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</variable>
    <variable id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</variable>
    <variable id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</variable>
    <variable id="9sl@{VQ/amrd~ZTB}e/O">i</variable>
    <variable id="}7$%uuGc-M*ZU6ZQ%SJ[">j</variable>
  </variables>
  <block type="procedures_defcustomreturn" id="]lQM=r`L^2M}s^@n(USH" x="-112" y="-887">
    <mutation statements="false">
      <arg name="ObjectID" varid="Fwt*3`3ScyT(qDt?gf(T"></arg>
    </mutation>
    <field name="NAME">Name</field>
    <field name="SCRIPT">bGV0IG5hbWUgPSBnZXRPYmplY3QoT2JqZWN0SUQpLmNvbW1vbi5uYW1lOwovL2lmKHR5cGVvZiByb29tID09ICdvYmplY3QnKSByZXR1cm4gcm9vbS5kZTsKcmV0dXJuICI8Yj4iK25hbWUrIjwvYj4iOw==</field>
    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
  </block>
  <block type="procedures_defcustomreturn" id="v;YxDy}cJ+i39]iq7oim" x="-112" y="-862">
    <mutation statements="false">
      <arg name="ObjectID" varid="Fwt*3`3ScyT(qDt?gf(T"></arg>
    </mutation>
    <field name="NAME">Raum</field>
    <field name="SCRIPT">bGV0IHJvb20gPSBnZXRPYmplY3QoT2JqZWN0SUQsICdyb29tcycpLmVudW1OYW1lc1swXTsKcmV0dXJuICI8YnI+PHNwYW4gY2xhc3M9Jyc+PHNtYWxsPiIrcm9vbS5kZSsiPC9zbWFsbD48L3NwYW4+Ijs=</field>
    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
  </block>
  <block type="procedures_defcustomreturn" id="!t;U0AgoNU@W*^{W;)1~" x="-112" y="-837">
    <mutation statements="false">
      <arg name="Liste" varid="./q,SFeGV,;)[@g=ERgm"></arg>
      <arg name="Wert" varid="K@h0-NY5VaI|@t!5/iJh"></arg>
    </mutation>
    <field name="NAME">Multisort</field>
    <field name="SCRIPT">dmFyIFdlcnQgPSBXZXJ0IC0gMTsgCkxpc3RlLnNvcnQoZnVuY3Rpb24oYSwgYil7CiAgICByZXR1cm4gYltXZXJ0XSAtIGFbV2VydF07Cn0pOwpyZXR1cm4gTGlzdGU7</field>
    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
  </block>
  <block type="on_ext" id="RT3@Kxqxg#w3f=(kzwCu" x="-112" y="-762">
    <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid" id="0)0sp$I1ccfm%4Sde-mT">
        <field name="oid">default</field>
      </shadow>
      <block type="selector" id=",lvP%A]1J?Mf^@0s2D%[">
        <field name="TEXT">state[id=*](functions=fenster)</field>
      </block>
    </value>
    <statement name="STATEMENT">
      <block type="variables_set" id="EaZb.Nmx4%jg9Z;%%B!-">
        <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
        <value name="VALUE">
          <block type="text" id="Wh^sL0z$W-HIc=.KAWpS">
            <field name="TEXT"></field>
          </block>
        </value>
        <next>
          <block type="variables_set" id="SS-}=kJy|nP`aiAV1-xb">
            <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
            <value name="VALUE">
              <block type="lists_create_with" id="$AFtq:sq?.LYHWTSs$x|">
                <mutation items="0"></mutation>
              </block>
            </value>
            <next>
              <block type="variables_set" id="o_#fa#./grwL0VYZXhV1">
                <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                <value name="VALUE">
                  <block type="lists_create_with" id="P~^2(u_E4rR`PYMfolf}">
                    <mutation items="0"></mutation>
                  </block>
                </value>
                <next>
                  <block type="controls_forEach" id="~PaFX`X@5n{TM9K^{Jw6">
                    <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                    <value name="LIST">
                      <block type="selector" id="xQ^Q5{h5V@5PLI+YO@i.">
                        <field name="TEXT">state[id=*](functions=fenster)</field>
                      </block>
                    </value>
                    <statement name="DO">
                      <block type="controls_if" id="-3J;6~}7Ac!D}IR`/Dr1">
                        <mutation else="1"></mutation>
                        <value name="IF0">
                          <block type="get_value_var" id=")kSAuROX6lA-U2N,FJ1Q">
                            <field name="ATTR">val</field>
                            <value name="OID">
                              <shadow type="text" id="e+?Z+-m0_DLYGl{zT3ix">
                                <field name="TEXT"></field>
                              </shadow>
                              <block type="variables_get" id="!fALmmY3PSF+?rGHUXQ,">
                                <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                              </block>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="lists_setIndex" id="-zUiNM(}BsoQ].Hu.|mx">
                            <mutation at="false"></mutation>
                            <field name="MODE">INSERT</field>
                            <field name="WHERE">FIRST</field>
                            <value name="LIST">
                              <block type="variables_get" id="Q0Hct8=ken4m!!W]js)U">
                                <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
                              </block>
                            </value>
                            <value name="TO">
                              <block type="lists_create_with" id="6a@[p]s)BEL%k0#L3dY#">
                                <mutation items="3"></mutation>
                                <value name="ADD0">
                                  <block type="procedures_callcustomreturn" id="2fUjFt9g8rVF/XheoN.x">
                                    <mutation name="Name">
                                      <arg name="ObjectID"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="variables_get" id="k:Is?gkGPl/=r1X^,k3K">
                                        <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <value name="ADD1">
                                  <block type="procedures_callcustomreturn" id="}$wVs/^YVcjh{n/kS,q!">
                                    <mutation name="Raum">
                                      <arg name="ObjectID"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="variables_get" id="E+iVny-H8b?jxnc3eZ/_">
                                        <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <value name="ADD2">
                                  <block type="get_value_var" id="ZH.h{PJzN,EeXI-)JVDH">
                                    <field name="ATTR">lc</field>
                                    <value name="OID">
                                      <shadow type="text">
                                        <field name="TEXT"></field>
                                      </shadow>
                                      <block type="variables_get" id="!@Z.|vd8M+75I$7U.crR">
                                        <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </statement>
                        <statement name="ELSE">
                          <block type="lists_setIndex" id="-jTzj32XiFWfi?n1Y/LN">
                            <mutation at="false"></mutation>
                            <field name="MODE">INSERT</field>
                            <field name="WHERE">FIRST</field>
                            <value name="LIST">
                              <block type="variables_get" id="2~tv/YW~42Q$E*%G;Pqi">
                                <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                              </block>
                            </value>
                            <value name="TO">
                              <block type="lists_create_with" id="2h-G=W]Wb-8[:@[C~H,Y">
                                <mutation items="3"></mutation>
                                <value name="ADD0">
                                  <block type="procedures_callcustomreturn" id="`Zdw5Kh*[(IY72pyr_o(">
                                    <mutation name="Name">
                                      <arg name="ObjectID"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="variables_get" id="dTq}?1$ruG%K+237sR}z">
                                        <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <value name="ADD1">
                                  <block type="procedures_callcustomreturn" id="U=T2KtRYql2nS!LoW{0d">
                                    <mutation name="Raum">
                                      <arg name="ObjectID"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="variables_get" id="gkj|GlgH+B$28{6w8,WN">
                                        <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <value name="ADD2">
                                  <block type="get_value_var" id="mc2z(j0*wy9u3b.3zwJ[">
                                    <field name="ATTR">lc</field>
                                    <value name="OID">
                                      <shadow type="text">
                                        <field name="TEXT"></field>
                                      </shadow>
                                      <block type="variables_get" id="Voni%mnoR.KzD5a!J:7a">
                                        <field name="VAR" id="9sl@{VQ/amrd~ZTB}e/O">i</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </statement>
                      </block>
                    </statement>
                    <next>
                      <block type="controls_if" id="%xroGCihVu8$~$xQ{]ke">
                        <value name="IF0">
                          <block type="logic_negate" id="u(+LUZ2=D}K8JRKt()tg">
                            <value name="BOOL">
                              <block type="lists_isEmpty" id="zS,AjUzHt0uWh$(li$,h">
                                <value name="VALUE">
                                  <block type="variables_get" id="b),0*5k:oMF~4H^Xx.Hw">
                                    <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="text_append" id="+f`#OFcL{@YyO@sI#uCn">
                            <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                            <value name="TEXT">
                              <shadow type="text">
                                <field name="TEXT"></field>
                              </shadow>
                              <block type="text" id="_u=h#j1gG^*i^j^JZqD6">
                                <field name="TEXT">&lt;div class="headline"&gt;&lt;b&gt;Geöffnet&lt;/b&gt;&lt;/div&gt;&lt;table class="table-status"&gt;&lt;tbody&gt;</field>
                              </block>
                            </value>
                            <next>
                              <block type="controls_forEach" id="eWuU?Rt40RRVcn@?$@eq">
                                <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                <value name="LIST">
                                  <block type="procedures_callcustomreturn" id="(AShS`,jO5uhez@2%ZNO">
                                    <mutation name="Multisort">
                                      <arg name="Liste"></arg>
                                      <arg name="Wert"></arg>
                                    </mutation>
                                    <value name="ARG0">
                                      <block type="variables_get" id="a;$8#B,;I75h-Hy}~}q3">
                                        <field name="VAR" id="MLrrG!H:mqglsc.Y_Ljh">Liste-offen</field>
                                      </block>
                                    </value>
                                    <value name="ARG1">
                                      <block type="math_number" id="y28xQ%[n;@7Wa:a77wl!">
                                        <field name="NUM">3</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <statement name="DO">
                                  <block type="text_append" id="gf^b8UA.=3P(K5[$j)Bj">
                                    <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                    <value name="TEXT">
                                      <shadow type="text">
                                        <field name="TEXT"></field>
                                      </shadow>
                                      <block type="text_join" id=";7`[nwtLmM9SXh2[VePK">
                                        <mutation items="8"></mutation>
                                        <value name="ADD0">
                                          <block type="text" id="j?`NI/7Gacv}dFN.+$PE">
                                            <field name="TEXT">&lt;tr&gt;&lt;td&gt;&lt;img src="/vis.0/main/icons/noun_open.png"&gt;&lt;/td&gt;&lt;td&gt;</field>
                                          </block>
                                        </value>
                                        <value name="ADD1">
                                          <block type="lists_getIndex" id="@5OV65,;$.kv#!TecfHZ">
                                            <mutation statement="false" at="true"></mutation>
                                            <field name="MODE">GET</field>
                                            <field name="WHERE">FROM_START</field>
                                            <value name="VALUE">
                                              <block type="variables_get" id="EWa-I_dccB@]^nQe/W^d">
                                                <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                              </block>
                                            </value>
                                            <value name="AT">
                                              <block type="math_number" id="g}BE:?b{VIm/+ZX2V0__">
                                                <field name="NUM">1</field>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                        <value name="ADD2">
                                          <block type="lists_getIndex" id="q)iY@.m/$og@3$~)uH,K">
                                            <mutation statement="false" at="true"></mutation>
                                            <field name="MODE">GET</field>
                                            <field name="WHERE">FROM_START</field>
                                            <value name="VALUE">
                                              <block type="variables_get" id="g@zqTh)Ok*(KS$Z@eyc2">
                                                <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                              </block>
                                            </value>
                                            <value name="AT">
                                              <block type="math_number" id="xcqlR!$Dwpu}DNdHJgy5">
                                                <field name="NUM">2</field>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                        <value name="ADD3">
                                          <block type="text" id=",FstDM5*y1X5@,$t;^[k">
                                            <field name="TEXT">&lt;/td&gt;&lt;td&gt;&lt;span class=""&gt;&lt;i&gt;Letzte Änderung:&lt;/i&gt;&lt;br&gt;</field>
                                          </block>
                                        </value>
                                        <value name="ADD4">
                                          <block type="convert_from_date" id="jhQmJJ_|F9dP%V#G7f2(">
                                            <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                            <field name="OPTION">DD.MM.</field>
                                            <value name="VALUE">
                                              <block type="lists_getIndex" id="P3nC5W6:Y!7hvvwb[W4(">
                                                <mutation statement="false" at="true"></mutation>
                                                <field name="MODE">GET</field>
                                                <field name="WHERE">FROM_START</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id="J]=7|JP6XXE0=iPV#!cV">
                                                    <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                                  </block>
                                                </value>
                                                <value name="AT">
                                                  <block type="math_number" id=",;WKYc]epU}2fK^CNY~Q">
                                                    <field name="NUM">3</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                        <value name="ADD5">
                                          <block type="text" id="@n3wTEG3`D{hPv(e[Wr)">
                                            <field name="TEXT">, </field>
                                          </block>
                                        </value>
                                        <value name="ADD6">
                                          <block type="convert_from_date" id="XCt-c7RmMEAIAg:,hF]Y">
                                            <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                            <field name="OPTION">hh:mm</field>
                                            <value name="VALUE">
                                              <block type="lists_getIndex" id="[aoz%*sr^}=m)|rI2a(t">
                                                <mutation statement="false" at="true"></mutation>
                                                <field name="MODE">GET</field>
                                                <field name="WHERE">FROM_START</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id="{#={{3Gtp:2fb/o-ure(">
                                                    <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                                  </block>
                                                </value>
                                                <value name="AT">
                                                  <block type="math_number" id="2k8J6XGU%Y%uqN%8q5H|">
                                                    <field name="NUM">3</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                        <value name="ADD7">
                                          <block type="text" id="w]zt{}A*8rLlwGa7H=Ty">
                                            <field name="TEXT"> Uhr&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;</field>
                                          </block>
                                        </value>
                                      </block>
                                    </value>
                                  </block>
                                </statement>
                                <next>
                                  <block type="text_append" id="yrfmMVllibE1D[1,T-8c">
                                    <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                    <value name="TEXT">
                                      <shadow type="text">
                                        <field name="TEXT"></field>
                                      </shadow>
                                      <block type="text" id="^^w-UuG$rGsR==gG(FoC">
                                        <field name="TEXT">&lt;/tbody&gt;&lt;/table&gt;</field>
                                      </block>
                                    </value>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </statement>
                        <next>
                          <block type="controls_if" id="L!}N25QKJ[D61;a?bf%?">
                            <value name="IF0">
                              <block type="logic_negate" id="P#;v$=eLxCHvoTF^|O)k">
                                <value name="BOOL">
                                  <block type="lists_isEmpty" id="7GdP`ErgKtT#V1*MU9gK">
                                    <value name="VALUE">
                                      <block type="variables_get" id="T`YMrp]-^RFDhRULk,7z">
                                        <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <statement name="DO0">
                              <block type="text_append" id="rr-Lu!{,+|n3Pz}r,/|q">
                                <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                <value name="TEXT">
                                  <shadow type="text" id="u#~AR/M~-4pVtl1Oc_:7">
                                    <field name="TEXT"></field>
                                  </shadow>
                                  <block type="text" id="rHg4[Q1;k=YZ/r;j3e$B">
                                    <field name="TEXT">&lt;div class="headline"&gt;&lt;b&gt;Geschlossen&lt;/b&gt;&lt;/div&gt;&lt;table class="table-status inactive"&gt;&lt;tbody&gt;</field>
                                  </block>
                                </value>
                                <next>
                                  <block type="controls_forEach" id=",E%-hd9aNijDQS~xb6IG">
                                    <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                    <value name="LIST">
                                      <block type="procedures_callcustomreturn" id="zJBJ-|TKh/:ffe,W~G//">
                                        <mutation name="Multisort">
                                          <arg name="Liste"></arg>
                                          <arg name="Wert"></arg>
                                        </mutation>
                                        <value name="ARG0">
                                          <block type="variables_get" id="u4US1gL%m8Myl{MI]BFp">
                                            <field name="VAR" id="}K$K4dup~Vnv!`[}vnQy">Liste-geschlossen</field>
                                          </block>
                                        </value>
                                        <value name="ARG1">
                                          <block type="math_number" id="sRy6vLJv{L4*zM1h$Vw.">
                                            <field name="NUM">3</field>
                                          </block>
                                        </value>
                                      </block>
                                    </value>
                                    <statement name="DO">
                                      <block type="text_append" id="IM7}q13Z,USrjHB5d^`n">
                                        <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                        <value name="TEXT">
                                          <shadow type="text">
                                            <field name="TEXT"></field>
                                          </shadow>
                                          <block type="text_join" id="5rJbRkW+.9IHmSei:Rem">
                                            <mutation items="8"></mutation>
                                            <value name="ADD0">
                                              <block type="text" id="Lx-~aJu?UNp)TMQLkg}`">
                                                <field name="TEXT">&lt;tr&gt;&lt;td&gt;&lt;img src="/vis.0/main/icons/noun_open.png"&gt;&lt;/td&gt;&lt;td&gt;</field>
                                              </block>
                                            </value>
                                            <value name="ADD1">
                                              <block type="lists_getIndex" id="AoaEUJWKFdo)%+D*Yk3`">
                                                <mutation statement="false" at="true"></mutation>
                                                <field name="MODE">GET</field>
                                                <field name="WHERE">FROM_START</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id="HP7dg7+GTepvUBFM3uVT">
                                                    <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                                  </block>
                                                </value>
                                                <value name="AT">
                                                  <block type="math_number" id="bpTIbgw@cw;ar+uBuXbB">
                                                    <field name="NUM">1</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <value name="ADD2">
                                              <block type="lists_getIndex" id="9?X`MaNlZ1NZS6C-SYS|">
                                                <mutation statement="false" at="true"></mutation>
                                                <field name="MODE">GET</field>
                                                <field name="WHERE">FROM_START</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id="k%z{z]Lw~_bKfP=YRX^;">
                                                    <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                                  </block>
                                                </value>
                                                <value name="AT">
                                                  <block type="math_number" id="MFyongfno_TN#AtpmSJm">
                                                    <field name="NUM">2</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <value name="ADD3">
                                              <block type="text" id="$$]eY9QbaR[AgXw{/~~j">
                                                <field name="TEXT">&lt;/td&gt;&lt;td&gt;&lt;span class=""&gt;&lt;i&gt;Letzte Änderung:&lt;/i&gt;&lt;br&gt;</field>
                                              </block>
                                            </value>
                                            <value name="ADD4">
                                              <block type="convert_from_date" id="aBK1xf.=O3@4B{}t+hse">
                                                <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                                <field name="OPTION">DD.MM.</field>
                                                <value name="VALUE">
                                                  <block type="lists_getIndex" id="v4J?rf;_y|w){2wYgI}^">
                                                    <mutation statement="false" at="true"></mutation>
                                                    <field name="MODE">GET</field>
                                                    <field name="WHERE">FROM_START</field>
                                                    <value name="VALUE">
                                                      <block type="variables_get" id="9UQY?lUs2WHo1:QMD*,.">
                                                        <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                                      </block>
                                                    </value>
                                                    <value name="AT">
                                                      <block type="math_number" id="k:!a*P$0iS!w(w=%ZI#~">
                                                        <field name="NUM">3</field>
                                                      </block>
                                                    </value>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <value name="ADD5">
                                              <block type="text" id="s.!yxzz@DmF9$ljS.E[4">
                                                <field name="TEXT">, </field>
                                              </block>
                                            </value>
                                            <value name="ADD6">
                                              <block type="convert_from_date" id="BdIPI^$}|(8fhQ`Lg-@]">
                                                <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                                <field name="OPTION">hh:mm</field>
                                                <value name="VALUE">
                                                  <block type="lists_getIndex" id="~A$+{3Nnp%6Sw6m$nef$">
                                                    <mutation statement="false" at="true"></mutation>
                                                    <field name="MODE">GET</field>
                                                    <field name="WHERE">FROM_START</field>
                                                    <value name="VALUE">
                                                      <block type="variables_get" id="S_D%98-`g28xsoQgC@*a">
                                                        <field name="VAR" id="}7$%uuGc-M*ZU6ZQ%SJ[">j</field>
                                                      </block>
                                                    </value>
                                                    <value name="AT">
                                                      <block type="math_number" id="=gOAYbL~nFne0k:Eo/^|">
                                                        <field name="NUM">3</field>
                                                      </block>
                                                    </value>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <value name="ADD7">
                                              <block type="text" id="F7-vgXOBbexh|4M^!v5G">
                                                <field name="TEXT"> Uhr&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;</field>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                      </block>
                                    </statement>
                                    <next>
                                      <block type="text_append" id="WRGYm57Dr)oU(kB+1fT?">
                                        <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                        <value name="TEXT">
                                          <shadow type="text">
                                            <field name="TEXT"></field>
                                          </shadow>
                                          <block type="text" id="`r/el3B4b=](jn!@`y,1">
                                            <field name="TEXT">&lt;/tbody&gt;&lt;/table&gt;</field>
                                          </block>
                                        </value>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </statement>
                            <next>
                              <block type="control" id="dI4yke%zrI0vqI$=7|!P">
                                <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                <field name="OID">Eigene.0.Vis.Fenster</field>
                                <field name="WITH_DELAY">FALSE</field>
                                <value name="VALUE">
                                  <block type="variables_get" id="1Q0Efv^4i*zZNN~`bBg,">
                                    <field name="VAR" id="cTIvd#0frb]}?DN^7oUd">Liste-komplett</field>
                                  </block>
                                </value>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </next>
          </block>
        </next>
      </block>
    </statement>
  </block>
</xml>
Javascript
var ObjectID, Liste, Wert, Liste_komplett, Liste_offen, Liste_geschlossen, i, j;

// Beschreibe diese Funktion …
function Name(ObjectID) {
    let name = getObject(ObjectID).common.name;
    //if(typeof room == 'object') return room.de;
    return "<b>"+name+"</b>";
}

// Beschreibe diese Funktion …
function Raum(ObjectID) {
    let room = getObject(ObjectID, 'rooms').enumNames[0];
    return "<br><span class=''><small>"+room.de+"</small></span>";
}

// Beschreibe diese Funktion …
function Multisort(Liste, Wert) {
    var Wert = Wert - 1;
    Liste.sort(function(a, b){
        return b[Wert] - a[Wert];
    });
    return Liste;
}


on({id: Array.prototype.slice.apply($("state[id=*](functions=fenster)")), change: "ne"}, function (obj) {
  var value = obj.state.val;
  var oldValue = obj.oldState.val;
  Liste_komplett = '';
  Liste_offen = [];
  Liste_geschlossen = [];
  var i_list = Array.prototype.slice.apply($("state[id=*](functions=fenster)"));
  for (var i_index in i_list) {
    i = i_list[i_index];
    if (getState(i).val) {
      Liste_offen.unshift([Name(i), Raum(i), getState(i).lc]);
    } else {
      Liste_geschlossen.unshift([Name(i), Raum(i), getState(i).lc]);
    }
  }
  if (!!Liste_offen.length) {
    Liste_komplett += '<div class="headline"><b>Geöffnet</b></div><table class="table-status"><tbody>';
    var j_list = Multisort(Liste_offen, 3);
    for (var j_index in j_list) {
      j = j_list[j_index];
      Liste_komplett += String(['<tr><td><img src="/vis.0/main/icons/noun_open.png"></td><td>',j[0],j[1],'</td><td><span class=""><i>Letzte Änderung:</i><br>',formatDate(getDateObject((j[2])), "DD.MM."),', ',formatDate(getDateObject((j[2])), "hh:mm"),' Uhr</span></td></tr>'].join(''));
    }
    Liste_komplett += '</tbody></table>';
  }
  if (!!Liste_geschlossen.length) {
    Liste_komplett += '<div class="headline"><b>Geschlossen</b></div><table class="table-status inactive"><tbody>';
    var j_list2 = Multisort(Liste_geschlossen, 3);
    for (var j_index2 in j_list2) {
      j = j_list2[j_index2];
      Liste_komplett += String(['<tr><td><img src="/vis.0/main/icons/noun_open.png"></td><td>',j[0],j[1],'</td><td><span class=""><i>Letzte Änderung:</i><br>',formatDate(getDateObject((j[2])), "DD.MM."),', ',formatDate(getDateObject((j[2])), "hh:mm"),' Uhr</span></td></tr>'].join(''));
    }
    Liste_komplett += '</tbody></table>';
  }
  setState("Eigene.0.Vis.Fenster"/*Fenster*/, Liste_komplett);
});
War dieser Beitrag hilfreich?
Hat dir der Beitrag geholfen?
Die mit Sternchen (*) gekennzeichneten Links sind sogenannte Affiliate-Links. Wenn du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekomme ich von dem betreffenden Online-Shop oder Anbieter eine Provision. Für dich verändert sich der Preis nicht.

22 Kommentare

Kommentieren

Habe jetzt eine geschlagene Stunde versucht das Blocky zu debuggen bei mir,… ich habe testweise was in das Feld reinschreiben lassen, aber ich springt nicht in die erste Schleife mit i.
Muss ich denn außer dem Blockly Script was importieren?
Fenster sind alle mit Aufzählung “Fenster” geschlüsselt.
Die Ausgabe heißt bei mir Fensterstatus, das hab ich ganz unten geändert.

Sorry,..
ich hab das blockly importiert und das Feld angelegt. Zudem meine Fenster als Fenster markiert.
Skript schreibt aber nix in mein Feld nix rein beim öffnen und schließen.
Ich habe dann versucht zu debuggen, leider ohne Erfolg.
Meine Frage war, muss ich noch etwas importieren, außer dein Blockly?
Hast du eine Ahnung woran es liegen könnte 🙂 ?

Hallo Max, bin vor ein paar Tagen auf deiner Seite gelandet und muss sagen, sehr gut gemachte Anleitungen, die man so selten findet.
Ich habe mir die Erstellung der Fenster-offen/geschlossen-Tabellen vorgenommen. Das Blokly habe ich nicht importiert, sondern Stück für Stück erstellt. Anpassungen auf meine Homematic Fensterkontakte waren nötig bei IDs vom Selektor — [state.id=*STATE](functions=fenster) –. Dann der erste Startversuch: Keine Errors, aber es wurden auch keine Räume aufgelistet. Ursache war/ist offensichtlich die letze Zeile der entsprechenden Funktion — return room.de; –.Ich dachte, das Anhängsel Punkt de kann nicht sein und das habe ich an vergleichbarer Stelle auch noch nicht gesehen. Nachdem ich es entfernt hatte, sind die Räume erschienen. Anschließend habe ich das Sortierverhalten überprüft und festgestell, dass nichts sortiert wird. Nach langer Suche auf einschlägigen Javascript-Seiten bin ich hier fündig geworden: stackoverflow.com/questions/16096872/how-to-sort-2-dimensional-array-by-column-value und habe den Code im Funktionsblock sortieren geändert in:

var Wert = Wert – 1;
Liste.sort(sortFunction);

function sortFunction(a, b) {
if (a[Wert] === b[Wert]) {
return 0;
}
else {
return (a[Wert] < b[Wert]) ? -1 : 1;
}
}

return Liste;

Danach hat das Sortieren nach Spalten entsprechend dem eingegebenen Wert funktioniert.

Getestet habe ich mit dem Beispiel Apfel-Birne-Salat. Das Sortieren in Abhängigkeit von Wert funktioniert, wenn die Listenelemente aus Ziffern bestehen. Sobald Zeichen a-z A-Z vorkommen wird nicht mehr danach sortiert.
Vielen Dank für den Beitrag, der mir beim Einstieg mit Listenblöcken sehr geholfen hat.

Viele Grüße Herbert

Hallo Herbert, danke für dein Feedback! Ich hatte bereits mit dem Javascript-Adapüter 4.10 gearbeitet, der offenbar anders sortiert und die Räume anders ausliest. Mit 4.8.4 jedoch erhalte ich auch den Raum mit “rooms.de”. Ich habe die Anleitungen aber um einen entsprechenden Hinweis ergänzt.

Zum Sortieren: Dein Script hat bei mir nicht funktioniert und einen Fehler produziert, jedoch habe ich festgestellt, dass der Wert nicht “2” sein sollte, sondern “3”. Auch das habe ich oben überarbeitet.

Grüße, Max

Hallo Max,

wie bekomme ich den Datenpunkt in meiner VIS dargestellt?
Wenn ich eine basic-HTML-widget nehme wird es viel zu groß. So wie du es darstellst gefällt es mir schon ganz gut.
Ich hab dein Blockly-Skript verwendet und angepasst. Die entsprechenden Daten erhalte ich.
Danke für deine Hilfe

Hallo Ronny, die Größe der Bilder und der Tabelle kannst du über CSS anpassen, genauer gesagt über die Klassen, die die Tabellen haben. Lade dir gerne mal meine Visualisierung für das Fire HD herunter und kopiere dir die entsprechenden Zeilen aus dem CSS-Reiter heraus (table-status). Viele Grüße

wenn ich mir die Visualisierung herunterlade bekomm ich sie nicht angezeigt sondern nur eine Demoview.

Hallo Ronny, bitte nutze das “Basic – String (unescaped)”-Widget und den CSS-Code, den ich dir gesendet habe. Zusätzlich habe ich diesen im Artikel hinterlegt. Grüße

Hallo Max,

ich habe, wie bei dir beschrieben, den Namen des State geändert. Jetzt ist es aufgetreten das wieder alle ihren Ursprünglichen Namen bekommen haben. Woran kann das liegen?

Gruß Ronny

Hallo Ronny, bisher konnte ich mich nicht damit beschäftigen. Du kannst aber gerne im ioBroker-Forum oder in der ioBroker-Facebook-Gruppe mal nachfragen. Grüße

Schreibe einen Kommentar