Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skriptsammlung für den neuen ALEXA2.0 Adapter

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Skriptsammlung für den neuen ALEXA2.0 Adapter

    This topic has been deleted. Only users with topic management privileges can see it.
    • dslraser
      dslraser Forum Testing Most Active last edited by

      @Rene.Home:

      Hallo,

      ich habe da mit dem triggern des Fensterskriptes ein Logik-Problem. Es werden die Fenster gezählt aber ich bekomme es gedanklich nicht auf die Reihe wie die Zählung angetriggert wird

      Die Einrichtung habe ich wie folgt gemacht:

      1. das Skript "Fensterstatus" mit dem folgenden Inhalt angelegt und laufen gelassen.

      ! ````
      // Status Fenster. Das Script zählt alle Fenster im Gewerk Verschluss mit der id=*.STATE
      !
      ! var logging = false;
      !
      ! var
      ! idAnzahlAuf = 'javascript.0.Status.Fenster.Anzahl_auf',
      ! idAnzahl = 'javascript.0.Status.Fenster.Anzahl',
      ! idText = 'javascript.0.Status.Fenster.Text',
      ! idRaum = 'javascript.0.Status.Fenster.Raum',
      ! idAnsage = 'javascript.0.Status.Fenster.Ansage';
      !
      ! // Ab hier nix mehr ändern
      ! createState(idAnzahl, { // Anzahl der vorhandenen Fenster
      ! type: 'number',
      ! name: 'Anzahl aller Fenster',
      ! min: 0,
      ! def: 0,
      ! role: 'value'
      ! });
      ! createState(idAnzahlAuf, { // Anzahl der Fenster, die auf sind
      ! type: 'number',
      ! name: 'Anzahl der geoeffneten Fenster',
      ! min: 0,
      ! def: 0,
      ! role: 'value'
      ! });
      ! createState(idText, { // Anzahl der geoeffneten Fenster und deren Namen
      ! type: 'string',
      ! name: 'geoeffnete Fenster',
      ! desc: 'Namen der geoeffneten Fenster',
      ! def: ' ',
      ! role: 'value'
      ! });
      ! createState(idAnsage, {
      ! type: 'string',
      ! name: 'geoeffnete Fenster (Ansage)',
      ! desc: 'Namen der geoeffneten Fenster (für Ansage aufbereitet)',
      ! def: ' ',
      ! role: 'value'
      ! });
      ! createState(idRaum, { // Räume, in denen Fenster geoeffnet sind
      ! type: 'string',
      ! name: 'Räume mit geoeffneten Fenster',
      ! desc: 'Namen der Räume, in denen Fenster geoeffnet sind',
      ! def: ' ',
      ! role: 'value'
      ! });
      !
      ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Verschluss
      ! function checkDevices(obj) {
      ! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Verschluss auf 0
      ! var anzahlFensterAuf = 0;
      ! var anzahlFenster = 0;
      ! var textFensterAuf = [];
      ! var textRaum = [];
      ! if (logging) {
      ! log('++++++ Fenster Anzahl ++++ ');
      ! log('#### SCHALTER ##### ');
      ! }
      ! cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Verschluss
      ! var obj = getObject(id);
      ! var name = getObject(id).common.name;
      ! var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
      ! var devicename = name.substring(0, name.indexOf(".STATE")); //.STATE aus Text entfernen
      ! var raumname = getObject(id, "rooms");
      !
      ! if (logging) {
      ! log('-------');
      ! log('Kanal: ' + name);
      ! log('Status: ' + status);
      ! }
      ! if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt
      ! ++anzahlFensterAuf;
      ! textFensterAuf.push(devicename); // Zu Array hinzufügen
      ! textRaum.push(raumname.enumNames); //
      ! }
      ! ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
      ! });
      ! textRaum = deleteDuplicates(textRaum);
      !
      ! // Array mit Fensternamen sortieren
      ! textFensterAuf.sort();
      ! textRaum.sort();
      ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon auf) ausgegeben
      ! if (logging) log("Text: " + textFensterAuf);
      ! if (logging) log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster auf: " + anzahlFensterAuf);
      ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
      ! setState(idText, textFensterAuf.join(',\nund\n')); // Schreibt die aktuelle Namen der geoeffneten Fenster
      ! setState(idAnzahlAuf, textFensterAuf.length); // Schreibt die aktuelle Anzahl der geoeffneten Fenster
      ! setState(idAnzahl, anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Verschluss
      ! // setState(idRaum, textRaum.join(',
      ')); // Räume, in denen Fenster geoeffnet sind
      ! setState(idRaum, textRaum.join(',\nund\n')); // Räume, in denen Fenster geoeffnet sind
      ! }
      !
      ! // Trigger
      ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Verschluss
      ! if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
      ! checkDevices();
      ! });
      !
      ! function main() {
      ! setTimeout(function() {
      ! if (logging) log('Auslöser Skriptstart');
      ! checkDevices();
      ! }, 2000);
      ! }
      !
      ! main(); // Skriptstart-Auslöser
      !
      ! // Aufbereitung für Ansage
      ! function strip_tags(data) {
      ! var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
      ! return (rueckgabe);
      ! }
      !
      ! on(idText, function(obj) {
      ! var text = obj.state.val;
      ! text = (text.length > 1) ? ' ' + strip_tags(text) : 'Alle Fenster geschlossen';
      ! setState(idAnsage, text);
      ! });

      
      das Ergebnis war dann die richtige Anzahl an Fenster
      
      2\. das Skript "deleteDuplicates" unter Global gepackt
      
      3\. das Blocky Skript mit dem Namen "Fensterabfrage" eingerichtet und entsprechend an den Echo angepasst. Die Ausgabe funktioniert.
      
      4\. in der Cloud das Skript "scriptEnabled.rules.Alexa_sagt.Fensterabfrage" als Smart Gerät eingefügt.
      
      Jetzt kommt mein Verständnisproblem. Das Fensterabfrage-Blocky-Skript macht ja nur eine Ausgabe. Die Ermittlung der offenen und geschlossenen Fenster erfolgt ja in dem Skript unter Punkt 1\. Müsste ich dieses dann nicht als Smart Gerät einbinden? Wenn ich das aber mache, wie wird dann das Blocky aufgerufen um die Ausgabe an den Speak vom Echo zu geben?
      
      Kann mir das bitte einer erklären. Wo liegt mein Fehler in der Logik.Für mich ist das interessant da ich noch andere Themen umsetzen will und entsprechende Skripte entwickeln und implementieren möchte.
      
      Vielen Dank schon mal im Vorfeld `  
      

      Ich habe mir einen extra Datenpunkt angelegt, denn wenn Du das Script in den Cloudadapter packst sabbelt Alexa ja auch beim Scriptstart los. Bei mehreren Scripten wird das dann lustig. (oder beim JS Adapter Neustart….oder mitten in der Nacht)

      z.B. so,

      //Alexa Fensterabfrage-Ansage
      createState("Eigene_Datenpunkte.Alexa_antwortet.Fensteransage", {
          name: 'Alexa_Fensteransage', 
          role: 'switch',
          type: 'boolean', 
          read:  true, 
          write: true,
          "smartName": {
          "de": "Alexa Fensteransage",
          "smartType": "SWITCH"
      }
      });
      

      kannst aber auch einen Button machen

      //Alexa Fensterabfrage-Ansage
      createState("Eigene_Datenpunkte.Alexa_antwortet.Fensteransage", {
          name: 'Alexa_Fensteransage', 
          "type": "object",
          "role": "button",
          read:  true, 
          write: true,
          "smartName": {
          "de": "Alexa Fensteransage",
          "smartType": "SWITCH"
      }
      });
      

      Dann noch ein Blockly was die Fensterdatenpunkte (oder auch Licht, oder Steckdosen usw) von Deinem Script abfragt.

      z.B. so (Screenshot passt nicht ganz drauf)
      3822_bildschirmfoto_2018-11-08_um_21.44.59.png

      Und in der Alexa App auf dem Handy eine neue Routine anlegen, wo dann Dein neuer Datenpunkt geschaltet wird….z.B. Alexa, sind noch Fenster auf.

      Hier noch der Blockly Export

      ! ````
      <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="4O(a~f,K8t9;VKQ1gVX*" x="-538" y="-1138"><mutation items="1"></mutation>
      <field name="CONDITION">any</field>

      <value name="OID0"><shadow type="field_oid" id="gVMgi@bFNV0L^d#eht9#"><field name="oid">javascript.0.Eigene_Datenpunkte.Alexa_antwortet.Fensteransage</field></shadow></value> 
      <statement name="STATEMENT"><block type="controls_if" id="{_JT|3Mpv*tSOVWD3Pz6"><value name="IF0"><block type="logic_compare" id="D?,*QGBBwauCm,Qte=Q-"><field name="OP">EQ</field>
              <value name="A"><block type="get_value" id="]irLwLWGul].x{m`.#.@"><field name="ATTR">val</field>
                  <field name="OID">javascript.0.Status.Fenster.Anzahl_auf</field></block></value> 
              <value name="B"><block type="math_number" id="5LL6xi4F_7}-aEi^jHY@"><field name="NUM">0</field></block></value></block></value> 
          <statement name="DO0"><block type="variables_set" id="5VFfHYTB!S7A^A*?SicA"><field name="VAR">Ausgabetext</field>
              <value name="VALUE"><block type="text_join" id="4?k[0reCRn.mjkxHg41~"><mutation items="2"></mutation>
                  <value name="ADD0"><block type="text" id="75Z)Wn`YF@;38~bIM;pA"><field name="TEXT">aktuell sind,</field></block></value> 
                  <value name="ADD1"><block type="get_value" id="Vh/8rxU]yD!3mT}0y[eC"><field name="ATTR">val</field>
                      <field name="OID">javascript.0.Status.Fenster.Ansage</field></block></value></block></value> 
              <next><block type="timeouts_settimeout" id="xA_MJ^@=AB=-WtDTe(3}"><field name="NAME">timeout</field>
                  <field name="DELAY">500</field>
                  <field name="UNIT">ms</field>
                  <statement name="STATEMENT"><block type="comment" id="s30b2{fSQ:a0uC3`+QWU"><field name="COMMENT">Wohnzimmer</field>
                      <next><block type="controls_if" id="l(E24=q]l]b,GJDj4dSj"><value name="IF0"><block type="logic_compare" id="MKwJn0C!O]xc!~.9|B`*"><field name="OP">EQ</field>
                              <value name="A"><block type="get_value" id="p-SHbJ5Dmwr6djxg2ohH"><field name="ATTR">val</field>
                                  <field name="OID">alexa2.0.History.name</field></block></value> 
                              <value name="B"><block type="text" id="?}A;8(IyMF%F@(t]Kc~+"><field name="TEXT">Wohnzimmer</field></block></value></block></value> 
                          <statement name="DO0"><block type="control" id=")M^jLcZ!hCpj,X={-`nV"><mutation delay_input="false"></mutation>
                              <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                              <field name="WITH_DELAY">FALSE</field>
                              <value name="VALUE"><block type="variables_get" id="p)bNOdcZFVoq1e^M5V-."><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                          <next><block type="comment" id="As,dG(xO[B@wIYcyAG?h"><field name="COMMENT">Küche</field>
                              <next><block type="controls_if" id="wrH-}P(84mn7Y/rg8A[."><value name="IF0"><block type="logic_compare" id="kg.QKB751NaS#Ihk1Vlg"><field name="OP">EQ</field>
                                      <value name="A"><block type="get_value" id="qnTz1Oe31sq:NXjmbxIJ"><field name="ATTR">val</field>
                                          <field name="OID">alexa2.0.History.name</field></block></value> 
                                      <value name="B"><block type="text" id="3=W.?c8BZN+QrGX4xL}h"><field name="TEXT">Küche</field></block></value></block></value> 
                                  <statement name="DO0"><block type="control" id="}?dK++*V.7JQcjG{3uhB"><mutation delay_input="false"></mutation>
                                      <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                      <field name="WITH_DELAY">FALSE</field>
                                      <value name="VALUE"><block type="variables_get" id="qHoN]~u1FI@iDQs*2C2v"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                  <next><block type="comment" id="_amxz6B=9F}_2uEGsK}`"><field name="COMMENT">Badezimmer</field>
                                      <next><block type="controls_if" id=".n7JtGwDJDGfaeyl!8*B"><value name="IF0"><block type="logic_compare" id="I-@9%{Ng!%}9rE#IESc;"><field name="OP">EQ</field>
                                              <value name="A"><block type="get_value" id="c?dSeG!fu]W8UO@?D4I3"><field name="ATTR">val</field>
                                                  <field name="OID">alexa2.0.History.name</field></block></value> 
                                              <value name="B"><block type="text" id="MivGV@*kt)3rY9COKpKA"><field name="TEXT">Badezimmer</field></block></value></block></value> 
                                          <statement name="DO0"><block type="control" id="zTwXc~r8Ldt0u-5TNcVn"><mutation delay_input="false"></mutation>
                                              <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                              <field name="WITH_DELAY">FALSE</field>
                                              <value name="VALUE"><block type="variables_get" id="*X*~qQG3]~[NC{WMMndW"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                          <next><block type="comment" id="CJNG59[?CJ|U-=Bf]c)z"><field name="COMMENT">Gästezimmer</field>
                                              <next><block type="controls_if" id="OC]k1_}iDlExQPVc=(ib"><value name="IF0"><block type="logic_compare" id="OBIXw6hJ@]2Xr`HBIz5h"><field name="OP">EQ</field>
                                                      <value name="A"><block type="get_value" id="=x~5W)ns/VV;c|RFqQcE"><field name="ATTR">val</field>
                                                          <field name="OID">alexa2.0.History.name</field></block></value> 
                                                      <value name="B"><block type="text" id="IxW:hplIvDQm1ax=@X+M"><field name="TEXT">Gästezimmer</field></block></value></block></value> 
                                                  <statement name="DO0"><block type="control" id="g+2]wvsrhR8vxv7c,kJ_"><mutation delay_input="false"></mutation>
                                                      <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                      <field name="WITH_DELAY">FALSE</field>
                                                      <value name="VALUE"><block type="variables_get" id="5q6/z~S`0DeJ6sYrWhj1"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                  <next><block type="comment" id="C6,wSh?BEZ,G:B9Tl@#w"><field name="COMMENT">Flur</field>
                                                      <next><block type="controls_if" id="l/g@UNw6pzeQ6_698R:-"><value name="IF0"><block type="logic_compare" id="=Z)D6qrCzY2oU/fVV93A"><field name="OP">EQ</field>
                                                              <value name="A"><block type="get_value" id="StsaG2CB;*5f5wIvH,kE"><field name="ATTR">val</field>
                                                                  <field name="OID">alexa2.0.History.name</field></block></value> 
                                                              <value name="B"><block type="text" id="7N;yy7cC=tE`}MYOFfF6"><field name="TEXT">Flur</field></block></value></block></value> 
                                                          <statement name="DO0"><block type="control" id="5#-V887QhCCSAzI+twok"><mutation delay_input="false"></mutation>
                                                              <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                              <field name="WITH_DELAY">FALSE</field>
                                                              <value name="VALUE"><block type="variables_get" id="NurE:%K_z!^Vlj(fn5qI"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                          <next><block type="comment" id="qKD3bDxHV;NBtuFFs|e."><field name="COMMENT">Schlafzimmer</field>
                                                              <next><block type="controls_if" id="iMz(H}c1#NO@KVNnhnlQ"><value name="IF0"><block type="logic_compare" id="z`vyyAWvaYdxt8YZt,0O"><field name="OP">EQ</field>
                                                                      <value name="A"><block type="get_value" id="mEF)naqwJ#xLCe1NeKO:"><field name="ATTR">val</field>
                                                                          <field name="OID">alexa2.0.History.name</field></block></value> 
                                                                      <value name="B"><block type="text" id="F7::fb4cokeJJD:fk~pV"><field name="TEXT">Schlafzimmer</field></block></value></block></value> 
                                                                  <statement name="DO0"><block type="control" id="{2s/h/xpkm]F+1ik-f4m"><mutation delay_input="false"></mutation>
                                                                      <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                                      <field name="WITH_DELAY">FALSE</field>
                                                                      <value name="VALUE"><block type="variables_get" id="ft7Uf33@IB1zu_xdTAxn"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                                  <next><block type="comment" id="wIYZ1bLOSjFi=NxT9WcM"><field name="COMMENT">Keller-Flur</field>
                                                                      <next><block type="controls_if" id="%EEK(pKJ%lGo)32cR7qF"><value name="IF0"><block type="logic_compare" id="7Mb(anM]kR9056)gxqnW"><field name="OP">EQ</field>
                                                                              <value name="A"><block type="get_value" id="xF~b7`{fV||4n}zB-}.u"><field name="ATTR">val</field>
                                                                                  <field name="OID">alexa2.0.History.name</field></block></value> 
                                                                              <value name="B"><block type="text" id="VH^2CJsPGOd!6hGoqdK4"><field name="TEXT">Keller-Flur</field></block></value></block></value> 
                                                                          <statement name="DO0"><block type="control" id="F_[xezXeyr~*(A=q.YFJ"><mutation delay_input="false"></mutation>
                                                                              <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                                              <field name="WITH_DELAY">FALSE</field>
                                                                              <value name="VALUE"><block type="variables_get" id="SjtrIJ?gA20oj88N|srb"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                                          <next><block type="comment" id="E#D1a/,rcH`dm3?Nx^:q"><field name="COMMENT">Werkstatt</field>
                                                                              <next><block type="controls_if" id="=s~d:-WIg1#TE`^zf9[4"><value name="IF0"><block type="logic_compare" id="*:X%VM^+2MoYl-:u!WK`"><field name="OP">EQ</field>
                                                                                      <value name="A"><block type="get_value" id="6fnRWyK0;P(.x;H{)22T"><field name="ATTR">val</field>
                                                                                          <field name="OID">alexa2.0.History.name</field></block></value> 
                                                                                      <value name="B"><block type="text" id="S:#keRENw1gGjHWLUD!-"><field name="TEXT">Werkstatt</field></block></value></block></value> 
                                                                                  <statement name="DO0"><block type="control" id="ql@`4(PNtjS_AM0bEqD+"><mutation delay_input="false"></mutation>
                                                                                      <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                                                      <field name="WITH_DELAY">FALSE</field>
                                                                                      <value name="VALUE"><block type="variables_get" id="P[ojMqQDVRouu#vN~{[%"><field name="VAR">Ausgabetext</field></block></value></block></statement></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></next></block></statement> 
          <next><block type="controls_if" id="N+F+/fYbDeMZL#(HaEo|"><value name="IF0"><block type="logic_compare" id="T+)nZ(]w4LgDY/|?p56g"><field name="OP">NEQ</field>
                  <value name="A"><block type="get_value" id="k=BXdEuQo7?Mo%bdfdng"><field name="ATTR">val</field>
                      <field name="OID">javascript.0.Status.Fenster.Anzahl_auf</field></block></value> 
                  <value name="B"><block type="math_number" id="j-blGyC;V4jTLHKvikXr"><field name="NUM">0</field></block></value></block></value> 
              <statement name="DO0"><block type="variables_set" id="mk,--n%8x}e1WshOCBc."><field name="VAR">Ausgabetext</field>
                  <value name="VALUE"><block type="text_join" id="Ew3VTw7qG|Fx:}vq3hIR"><mutation items="3"></mutation>
                      <value name="ADD0"><block type="text" id="Lo0@rGsN^gt1iZ#@~A/7"><field name="TEXT">aktuell sind im,</field></block></value> 
                      <value name="ADD1"><block type="get_value" id="i?[Ze,W23|M`_S5@d?;q"><field name="ATTR">val</field>
                          <field name="OID">javascript.0.Status.Fenster.Raum</field></block></value> 
                      <value name="ADD2"><block type="text" id="NqEob9;8UT11wT`dCQi#"><field name="TEXT">geöffnete Fenster</field></block></value></block></value> 
                  <next><block type="timeouts_settimeout" id="^c,bQ)^![(HGz2QrWw/u"><field name="NAME">timeout2</field>
                      <field name="DELAY">500</field>
                      <field name="UNIT">ms</field>
                      <statement name="STATEMENT"><block type="comment" id="3e5[cR-lQ2P@g3-V]T.*"><field name="COMMENT">Wohnzimmer</field>
                          <next><block type="controls_if" id="KauxWUEJAP2sp)D%Cdm9"><value name="IF0"><block type="logic_compare" id="F4MK(fbY8WU[yWO)@Z~O"><field name="OP">EQ</field>
                                  <value name="A"><block type="get_value" id="Oe@)VM+1Y`_1YJn?6xyl"><field name="ATTR">val</field>
                                      <field name="OID">alexa2.0.History.name</field></block></value> 
                                  <value name="B"><block type="text" id="Q8@T8q|P]D*WR6aG#*j0"><field name="TEXT">Wohnzimmer</field></block></value></block></value> 
                              <statement name="DO0"><block type="control" id="r|w?GKF2R8A%WSX@AP[|"><mutation delay_input="false"></mutation>
                                  <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                  <field name="WITH_DELAY">FALSE</field>
                                  <value name="VALUE"><block type="variables_get" id="HTcKd2V9F)=k:Ae4mS}F"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                              <next><block type="comment" id="Lg@:ha-a2x,0rfhC.]_="><field name="COMMENT">Küche</field>
                                  <next><block type="controls_if" id="DTWD3KK_f2CmowWl}Dw+"><value name="IF0"><block type="logic_compare" id="*r~k%Po!vzUQHybU`)sv"><field name="OP">EQ</field>
                                          <value name="A"><block type="get_value" id="285L,qT@eWkZS(#hgXnl"><field name="ATTR">val</field>
                                              <field name="OID">alexa2.0.History.name</field></block></value> 
                                          <value name="B"><block type="text" id="w!HtM,nb,KI1aqaOeI36"><field name="TEXT">Küche</field></block></value></block></value> 
                                      <statement name="DO0"><block type="control" id="_H{%k4b|sj!:P^rDu%};"><mutation delay_input="false"></mutation>
                                          <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                          <field name="WITH_DELAY">FALSE</field>
                                          <value name="VALUE"><block type="variables_get" id="~51B8(3{stq1BpR1J~p%"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                      <next><block type="comment" id="0Y;8c=RG%f;qqP2yyjbm"><field name="COMMENT">Badezimmer</field>
                                          <next><block type="controls_if" id="JS`zfpqZ~NiBhWxa_;gH"><value name="IF0"><block type="logic_compare" id="-7AVWpsa42LalJseqzv{"><field name="OP">EQ</field>
                                                  <value name="A"><block type="get_value" id="cm6sMr|*pCsxx{9uCMrm"><field name="ATTR">val</field>
                                                      <field name="OID">alexa2.0.History.name</field></block></value> 
                                                  <value name="B"><block type="text" id="7+szyIbBBP!dtC~D1h)O"><field name="TEXT">Badezimmer</field></block></value></block></value> 
                                              <statement name="DO0"><block type="control" id="Hg;Dq%gJEXg{SLV;t6{6"><mutation delay_input="false"></mutation>
                                                  <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                  <field name="WITH_DELAY">FALSE</field>
                                                  <value name="VALUE"><block type="variables_get" id="*lX{ZM`VBTc}A`1!gM9H"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                              <next><block type="comment" id=":Ka+W*uwIV:h(pjzq_h,"><field name="COMMENT">Gästezimmer</field>
                                                  <next><block type="controls_if" id="Ug#8mH1FI!icK/)QEYjQ"><value name="IF0"><block type="logic_compare" id=")@76q4MZ/}oCH_mLKWO4"><field name="OP">EQ</field>
                                                          <value name="A"><block type="get_value" id="iI-HkvUXFC@;;_+[TcRP"><field name="ATTR">val</field>
                                                              <field name="OID">alexa2.0.History.name</field></block></value> 
                                                          <value name="B"><block type="text" id="#:=Dp]Dt1gil*WOPj/h{"><field name="TEXT">Gästezimmer</field></block></value></block></value> 
                                                      <statement name="DO0"><block type="control" id="yoHnz^WG58=+X)|S-u8#"><mutation delay_input="false"></mutation>
                                                          <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                          <field name="WITH_DELAY">FALSE</field>
                                                          <value name="VALUE"><block type="variables_get" id="Y8LHCPPH..OnEJN^sjFQ"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                      <next><block type="comment" id="!40Mmgu)T0A3-qPaF9yO"><field name="COMMENT">Flur</field>
                                                          <next><block type="controls_if" id="b/SgE1YjT,ld[nn}{%RH"><value name="IF0"><block type="logic_compare" id="c)SjW;jeX|#Fh/Cha,,3"><field name="OP">EQ</field>
                                                                  <value name="A"><block type="get_value" id="H9=}F/!XKY9UBnnbr~D/"><field name="ATTR">val</field>
                                                                      <field name="OID">alexa2.0.History.name</field></block></value> 
                                                                  <value name="B"><block type="text" id="r^EgI!FQ;-DPWFF_D!C1"><field name="TEXT">Flur</field></block></value></block></value> 
                                                              <statement name="DO0"><block type="control" id=";7jyou9f+V(`5**;CDV?"><mutation delay_input="false"></mutation>
                                                                  <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                                  <field name="WITH_DELAY">FALSE</field>
                                                                  <value name="VALUE"><block type="variables_get" id="Q_k9kSJVNP5e%a8((xhe"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                              <next><block type="comment" id="`?k8YL[;!mE5;-NddVTc"><field name="COMMENT">Schlafzimmer</field>
                                                                  <next><block type="controls_if" id="zyeAn3wMc!;hYZDhK)hy"><value name="IF0"><block type="logic_compare" id="bq=B-rG}sw}7gG1{/Y-."><field name="OP">EQ</field>
                                                                          <value name="A"><block type="get_value" id="Zr`S-l8E!}8.4{,qM9*i"><field name="ATTR">val</field>
                                                                              <field name="OID">alexa2.0.History.name</field></block></value> 
                                                                          <value name="B"><block type="text" id="te+gSwhWiVR4,scYV%ca"><field name="TEXT">Schlafzimmer</field></block></value></block></value> 
                                                                      <statement name="DO0"><block type="control" id="grH6#whY1.N-q[pLM5X."><mutation delay_input="false"></mutation>
                                                                          <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                                          <field name="WITH_DELAY">FALSE</field>
                                                                          <value name="VALUE"><block type="variables_get" id="[hMf^;p|,CaZVyd+qTm~"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                                      <next><block type="comment" id="N3@K2BRC7C5N9daBycv_"><field name="COMMENT">Keller-Flur</field>
                                                                          <next><block type="controls_if" id="HPxOdxs4N%j2umWTfUNG"><value name="IF0"><block type="logic_compare" id="DX=kCQ/,E6kqYsQ}/=[e"><field name="OP">EQ</field>
                                                                                  <value name="A"><block type="get_value" id="XionPRa91nQ16NK(N9+."><field name="ATTR">val</field>
                                                                                      <field name="OID">alexa2.0.History.name</field></block></value> 
                                                                                  <value name="B"><block type="text" id="ZB}mEWERKZ/fb~*Lwd1A"><field name="TEXT">Keller-Flur</field></block></value></block></value> 
                                                                              <statement name="DO0"><block type="control" id="kPLG+9decg*iGUm87`-2"><mutation delay_input="false"></mutation>
                                                                                  <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                                                  <field name="WITH_DELAY">FALSE</field>
                                                                                  <value name="VALUE"><block type="variables_get" id="}.I+7-Frw4fjj1-N[AeP"><field name="VAR">Ausgabetext</field></block></value></block></statement> 
                                                                              <next><block type="comment" id="C~L9w[G_b.Hb*%7oT~aE"><field name="COMMENT">Werkstatt</field>
                                                                                  <next><block type="controls_if" id="`;ot|i:*)I|EwW@zS,B2"><value name="IF0"><block type="logic_compare" id="H!ldSYtR|C|^VcqxS;Xt"><field name="OP">EQ</field>
                                                                                          <value name="A"><block type="get_value" id="I)o6A2U2(,A7e|4.8lo."><field name="ATTR">val</field>
                                                                                              <field name="OID">alexa2.0.History.name</field></block></value> 
                                                                                          <value name="B"><block type="text" id="s4owS.Ww){6ayek?VzFb"><field name="TEXT">Werkstatt</field></block></value></block></value> 
                                                                                      <statement name="DO0"><block type="control" id="5Gh*aVl-x(IPCnF@5,5/"><mutation delay_input="false"></mutation>
                                                                                          <field name="OID">alexa2.0.Echo-Devices.xxx.Commands.speak</field>
                                                                                          <field name="WITH_DELAY">FALSE</field>
                                                                                          <value name="VALUE"><block type="variables_get" id="dmO{yR;|g@(rZJE,HX4k"><field name="VAR">Ausgabetext</field></block></value></block></statement></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></next></block></statement></block></next></block></statement></block></xml> 
      
      1 Reply Last reply Reply Quote 0
      • Rene.Home
        Rene.Home last edited by

        Ja verstehe… aber damit löse ich doch immer nur das Blocky-Skript aus. Dieses liest aber nur den Inhalt der Variablen aus.

        Aber wie werden die Inhalte der Variablen aktualisiert. Dieses wird doch in dem ersten Skript gemacht. Ich sehe immer noch nicht die Verbindung oder ist es so das das erste Skript zum aktualisieren der Variablen einen Timer bekommen muss der unabhängig von der Abfrage via Alexa läuft.

        Ich bin immer davon ausgegangen das die Aufforderung an Alexa erst einmal eine Prüfung ablaufen lässt gefolgt von der Ausgabe.

        1 Reply Last reply Reply Quote 0
        • dslraser
          dslraser Forum Testing Most Active last edited by

          @Rene.Home:

          Ja verstehe… aber damit löse ich doch immer nur das Blocky-Skript aus. Dieses liest aber nur den Inhalt der Variablen aus.

          Aber wie werden die Inhalte der Variablen aktualisiert. Dieses wird doch in dem ersten Skript gemacht. Ich sehe immer noch nicht die Verbindung oder ist es so das das erste Skript zum aktualisieren der Variablen einen Timer bekommen muss der unabhängig von der Abfrage via Alexa läuft.

          Ich bin immer davon ausgegangen das die Aufforderung an Alexa erst einmal eine Prüfung ablaufen lässt gefolgt von der Ausgabe. ` ich verstehe nicht so ganz was Du meinst. Das Fensterscript läuft ja immer, somit sind die Datenpunkte auch immer aktuell (offene Fenster).

          Das Blockly greift ja wiederum nur diese Datenpunkte vom Fensterscript ab und gibt diese per Speak wieder.

          Das Blockly selbst wird nur über einen Datenpunkt getriggert damit es los läuft wenn der Datenpunkt aktualisiert wurde. Das geschiet durch Deine Anfrage bei Alexa.

          Vielleicht verstehe ich auch nicht was Du meinst ?

          1 Reply Last reply Reply Quote 0
          • dslraser
            dslraser Forum Testing Most Active last edited by

            …...

            hier stand was für einen anderen Beitrag drinn...

            1 Reply Last reply Reply Quote 0
            • Rene.Home
              Rene.Home last edited by

              Das mit dem Blocky war mir klar und ich habe mich nochmals mit dem Fensterskript beschäftigt und den trigger-Part in dem Skript übersehen der auf die Änderung in dem Status des betreffenden Objekte reagiert.

              ! ````
              // Trigger
              ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Verschluss
              ! if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              ! checkDevices();
              ! });

              
              Dadurch schläft das Skript und aktualisiert nur die Werte in den Variablen wenn ein Triggerevent durch die Gewerke ausgelöst wurde.
              
              Somit ist alles klar…..
              1 Reply Last reply Reply Quote 0
              • M
                Mr.X last edited by

                Hätte vielleicht noch jemand ideen, warum der skill die History nicht updatet?

                1 Reply Last reply Reply Quote 0
                • H
                  HoffmannOs last edited by

                  Was mache ich bei diesem Script falsch?

                  on({id: '"hm-rpc.1.NEQxxxxx1.PRESS_SHORT"/', change: "any"}, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    setState("alexa2.0.Echo-Devices.XXX.Commands.speak"/*speak*/, 'Mach die scheisse Tür auf!');
                  });
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • modmax
                    modmax last edited by

                    Schon mal so versucht?

                    on({id: '"hm-rpc.1.NEQxxxxx1.PRESS_SHORT"/', val: true}, function (obj) {
                      log("Sprich Alexa, sprich!");
                      setState("alexa2.0.Echo-Devices.XXX.Commands.speak"/*speak*/, 'Mach die scheisse Tür auf!');
                    });
                    
                    

                    Hinzugefügt habe ich nur val=true, da das immer auf true gesetzt wird; dafür change gelöscht.

                    Log-Ausgabe nur um zu sehen, ob der Trigger greift.

                    1 Reply Last reply Reply Quote 0
                    • H
                      HoffmannOs last edited by

                      @modmax:

                      Schon mal so versucht?

                      on({id: '"hm-rpc.1.NEQxxxxx1.PRESS_SHORT"/', val: true}, function (obj) {
                        log("Sprich Alexa, sprich!");
                        setState("alexa2.0.Echo-Devices.XXX.Commands.speak"/*speak*/, 'Mach die scheisse Tür auf!');
                      });
                      
                      

                      Hinzugefügt habe ich nur val=true, da das immer auf true gesetzt wird; dafür change gelöscht.

                      Log-Ausgabe nur um zu sehen, ob der Trigger greift. ` Vielen Dank, hab den Fehler gefunden! Funzt!

                      Gesendet von meinem SM-G965F mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • S
                        Sprite01 last edited by

                        Ich hatte ja mal von diesem Thread das Lichtscript verwendet und mir daraus das Fensterscript gebastelt.

                        Haben auch beide funktioniert. Nun habe ich mit dem Fensterstatus ein Problem, bei alles geschlossen

                        bleibt das Objekt Ansage leer. Dort sollte ja dann eigentlich "Alle Fenster geschlossen" stehen.
                        137_fenster.jpg
                        Der berühmte Spruch: Ich habe nichts geändert - ist mir zwar peinlich, aber stimmt. 🙂

                        Außer Updates habe ich hier nichts verändert.

                        Kann mal jemand darüber schauen warum das Objekt Fenster Ansage dann leer bleibt ?

                        Das von 19 Fenstern 0 offen sind wird ja richtig gezählt.

                        ! ````
                        // Status Zahl Fenster
                        ! var logging = true;
                        ! var idAnzahlAuf = 'javascript.0.Status.Fenster.Anzahl_auf',
                        idAnzahl = 'javascript.0.Status.Fenster.Anzahl',
                        idText = 'javascript.0.Status.Fenster.Text',
                        idRaum = 'javascript.0.Status.Fenster.Raum',
                        idAnsage = 'javascript.0.Status.Fenster.Ansage';
                        ! // Ab hier nix mehr ändern
                        createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Fenster
                        type: 'number',
                        name: 'Anzahl aller Fenster',
                        min: 0,
                        def: 0,
                        role: 'value'
                        });
                        createState(idAnzahlAuf, { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
                        type: 'number',
                        name: 'Anzahl der geoeffneten Fenster',
                        min: 0,
                        def: 0,
                        role: 'value'
                        });
                        createState(idText, { // Anzahl der geoeffneten Fenster und deren Namen als Variable unter Javascript.0 anlegen
                        type: 'string',
                        name: 'geoeffnete Fenster',
                        desc: 'Namen der geoeffneten Fenster',
                        def: ' ',
                        role: 'value'
                        });
                        createState(idAnsage, {
                        type: 'string',
                        name: 'geoeffnete Fenster (Ansage)',
                        desc: 'Namen der geoeffneten Fenster (für Ansage aufbereitet)',
                        def: ' ',
                        role: 'value'
                        });
                        createState(idRaum, { // Räume, in denen Fenster geoeffnet sind
                        type: 'string',
                        name: 'Räume mit geoeffneten Fenster',
                        desc: 'Namen der Räume, in denen Fenster geoeffnet sind',
                        def: ' ',
                        role: 'value'
                        });
                        ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Fenster
                        ! function checkDevices(obj) {
                        // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
                        var anzahlFensterAuf = 0;
                        var anzahlFenster = 0;
                        var textFensterAuf = [];
                        var textRaum = [];
                        if (logging) {
                        log('++++++ Fenster Anzahl ++++ ');
                        log('#### SCHALTER ##### ');
                        }
                        cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
                        var obj = getObject(id);
                        var name = getObject(id).common.name;
                        var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                        var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                        var raumname = getObject(id, "rooms");
                        ! if (logging) {
                        log('-------');
                        log('Kanal: ' + name);
                        log('Status: ' + status);
                        }
                        if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt
                        ++anzahlFensterAuf;
                        textFensterAuf.push(devicename); // Zu Array hinzufügen
                        textRaum.push(raumname.enumNames); //
                        }
                        ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
                        });

                        textRaum = deleteDuplicates(textRaum);

                        // Array mit Fensternamen sortieren
                        textFensterAuf.sort();
                        textRaum.sort();
                        // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon auf) ausgegeben
                        if (logging) log("Text: " + textFensterAuf);
                        if (logging) log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster auf: " + anzahlFensterAuf);
                        // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                        setState(idText, textFensterAuf.join(', und ')); // Schreibt die aktuelle Namen der geoeffneten Fenster
                        setState(idAnzahlAuf, textFensterAuf.length); // Schreibt die aktuelle Anzahl der geoeffneten Fenster
                        setState(idAnzahl, anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
                        // setState(idRaum, textRaum.join(',
                        

                        ')); // Räume, in denen Fenster geoeffnet sind
                        setState(idRaum, textRaum.join(', und ')); // Räume, in denen Fenster geoeffnet sind
                        }

                        ! // Trigger
                        cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Fenster
                        if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                        checkDevices();
                        });
                        ! function main() {
                        setTimeout(function() {
                        if (logging) log('Auslöser Skriptstart');
                        checkDevices();
                        }, 2000);
                        }
                        ! main(); // Skriptstart-Auslöser
                        ! // Aufbereitung für Ansage
                        function strip_tags(data) {
                        var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                        return (rueckgabe);
                        }
                        ! on(idText, function(obj) {
                        var text = obj.state.val;
                        text = (getState(idAnzahl).val > 0) ? '' + strip_tags(text) : 'Alle Fenster geschlossen';
                        setState(idAnsage, text);
                        });

                        1 Reply Last reply Reply Quote 0
                        • dslraser
                          dslraser Forum Testing Most Active last edited by

                          @Sprite01:

                          Ich hatte ja mal von diesem Thread das Lichtscript verwendet und mir daraus das Fensterscript gebastelt.

                          Haben auch beide funktioniert. Nun habe ich mit dem Fensterstatus ein Problem, bei alles geschlossen

                          bleibt das Objekt Ansage leer. Dort sollte ja dann eigentlich "Alle Fenster geschlossen" stehen.
                          filename="fenster.JPG" index="0">~~
                          Der berühmte Spruch: Ich habe nichts geändert - ist mir zwar peinlich, aber stimmt. 🙂

                          Außer Updates habe ich hier nichts verändert.

                          Kann mal jemand darüber schauen warum das Objekt Fenster Ansage dann leer bleibt ?

                          Das von 19 Fenstern 0 offen sind wird ja richtig gezählt.

                          ! ````
                          // Status Zahl Fenster
                          ! var logging = true;
                          ! var idAnzahlAuf = 'javascript.0.Status.Fenster.Anzahl_auf',
                          idAnzahl = 'javascript.0.Status.Fenster.Anzahl',
                          idText = 'javascript.0.Status.Fenster.Text',
                          idRaum = 'javascript.0.Status.Fenster.Raum',
                          idAnsage = 'javascript.0.Status.Fenster.Ansage';
                          ! // Ab hier nix mehr ändern
                          createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Fenster
                          type: 'number',
                          name: 'Anzahl aller Fenster',
                          min: 0,
                          def: 0,
                          role: 'value'
                          });
                          createState(idAnzahlAuf, { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
                          type: 'number',
                          name: 'Anzahl der geoeffneten Fenster',
                          min: 0,
                          def: 0,
                          role: 'value'
                          });
                          createState(idText, { // Anzahl der geoeffneten Fenster und deren Namen als Variable unter Javascript.0 anlegen
                          type: 'string',
                          name: 'geoeffnete Fenster',
                          desc: 'Namen der geoeffneten Fenster',
                          def: ' ',
                          role: 'value'
                          });
                          createState(idAnsage, {
                          type: 'string',
                          name: 'geoeffnete Fenster (Ansage)',
                          desc: 'Namen der geoeffneten Fenster (für Ansage aufbereitet)',
                          def: ' ',
                          role: 'value'
                          });
                          createState(idRaum, { // Räume, in denen Fenster geoeffnet sind
                          type: 'string',
                          name: 'Räume mit geoeffneten Fenster',
                          desc: 'Namen der Räume, in denen Fenster geoeffnet sind',
                          def: ' ',
                          role: 'value'
                          });
                          ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Fenster
                          ! function checkDevices(obj) {
                          // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
                          var anzahlFensterAuf = 0;
                          var anzahlFenster = 0;
                          var textFensterAuf = [];
                          var textRaum = [];
                          if (logging) {
                          log('++++++ Fenster Anzahl ++++ ');
                          log('#### SCHALTER ##### ');
                          }
                          cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
                          var obj = getObject(id);
                          var name = getObject(id).common.name;
                          var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                          var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                          var raumname = getObject(id, "rooms");
                          ! if (logging) {
                          log('-------');
                          log('Kanal: ' + name);
                          log('Status: ' + status);
                          }
                          if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt
                          ++anzahlFensterAuf;
                          textFensterAuf.push(devicename); // Zu Array hinzufügen
                          textRaum.push(raumname.enumNames); //
                          }
                          ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
                          });

                          textRaum = deleteDuplicates(textRaum);

                          // Array mit Fensternamen sortieren
                          textFensterAuf.sort();
                          textRaum.sort();
                          // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon auf) ausgegeben
                          if (logging) log("Text: " + textFensterAuf);
                          if (logging) log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster auf: " + anzahlFensterAuf);
                          // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                          setState(idText, textFensterAuf.join(', und ')); // Schreibt die aktuelle Namen der geoeffneten Fenster
                          setState(idAnzahlAuf, textFensterAuf.length); // Schreibt die aktuelle Anzahl der geoeffneten Fenster
                          setState(idAnzahl, anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
                          // setState(idRaum, textRaum.join(',
                          

                          ')); // Räume, in denen Fenster geoeffnet sind
                          setState(idRaum, textRaum.join(', und ')); // Räume, in denen Fenster geoeffnet sind
                          }

                          ! // Trigger
                          cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Fenster
                          if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                          checkDevices();
                          });
                          ! function main() {
                          setTimeout(function() {
                          if (logging) log('Auslöser Skriptstart');
                          checkDevices();
                          }, 2000);
                          }
                          ! main(); // Skriptstart-Auslöser
                          ! // Aufbereitung für Ansage
                          function strip_tags(data) {
                          var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                          return (rueckgabe);
                          }
                          ! on(idText, function(obj) {
                          var text = obj.state.val;
                          text = (getState(idAnzahl).val > 0) ? '' + strip_tags(text) : 'Alle Fenster geschlossen';
                          setState(idAnsage, text);
                          });
                          ```` ` starte mal den JavaScript Adapter neu und probiere noch mal.

                          1 Reply Last reply Reply Quote 0
                          • dslraser
                            dslraser Forum Testing Most Active last edited by

                            Unten im Script habe ich das bei mir auch mal geändert

                            on(idText, function(obj) {
                                var text = obj.state.val;
                                text = (text.length > 1) ? ' ' + strip_tags(text) : 'Alle Fenster geschlossen';
                                setState(idAnsage, text);
                            });
                            
                            1 Reply Last reply Reply Quote 0
                            • S
                              Sprite01 last edited by

                              dslraser, ich habe den unteren Teil mal geändert. Leider mit gleichem Ergebnis.

                              (Könntest du dein komplettes Script hier bitte noch mal zur Verfügung stellen ?)

                              PS:

                              Kommando zurück, Neustart Javascript und reales öffnen/schließen eines Fensters hat geholfen.

                              Das Programm im Script neu aufzurufen (hatte ich vorher probiert) brachte noch nicht das Ergebnis.

                              1 Reply Last reply Reply Quote 0
                              • dslraser
                                dslraser Forum Testing Most Active last edited by

                                prima, mit geädertem Scriptteil, oder so wie es war ?

                                1 Reply Last reply Reply Quote 0
                                • S
                                  Sprite01 last edited by

                                  Öffnen/Schließen habe ich nur mit dem neuen Teil probiert.

                                  Daher kann ich dir nicht sagen ob es auch mit dem alten Teil funktioniert hätte.

                                  Da hatte ich nur Javascript neu gestartet und Script neu geladen, ohne positivem Ergebnis.

                                  1 Reply Last reply Reply Quote 0
                                  • totocotonio
                                    totocotonio last edited by

                                    @Chaot:

                                    @Blackeye

                                    Türklingel über Sonoff?

                                    War eigentlich ganz einfach.

                                    • Einen schönen Taster ausgesucht:

                                    https://www.amazon.de/gp/product/B00YS9 … UTF8&psc=1

                                    • Am Eingangsbereich einen Sonoff Basic installiert.

                                    • Am Sonoff DHT22 und Taster angeschlossen

                                    • Zusätzlich die Ausßenbeleuchtung aufgeklemmt und dazu ebenfalls Taster am Sonoff angeschlossen

                                    • Im ioBroker den Taster des Sonoff (GPIO 14) auslesen und per TR064 Adapter am Hasutelefon klingeln lassen.

                                    • Dazu noch an Alexa2 Adapter senden um die Klingel noch Ansagen zu lassen.

                                    Was ich noch vergessen habe, aber in den nächsten Tagen ändern werde ist die Steuerung der Außenbeleuchtung.

                                    Ich werde zusätzlich zur bisherigen Steuerung (bei Dämmerung an bis 23 Uhr und ab 5 Uhr bis Sonnenaufgang) noch eine Funktion einbauen die die Außenbeleuchtung für 5 Minuten Einschaltet (nur Nachts) wenn die Klingel betätigt wird.

                                    Ist zwar bisschen Bastelarbeit, aber ich bin der Meinung das sich das echt gelohnt hat. Mein Vorteil ist das ich neben der Eingangstür eine Unterverteilung habe in der ich den ganzen Kram verstauen konnte.

                                    Der Basic ist jetzt allerdings auch komplett ausgereizt.

                                    GPIO 14 - Klingeltaster

                                    GPIO 1 - DHT 22

                                    GPIO 3 - Taster für Außenleuchte

                                    Das Gehäuse des Sonoff musste dran glauben und ich habe das Ganze in eine Schalterdose verbaut. `

                                    Hi,

                                    das hört sich interassant an.

                                    Hast du das über ein blockly gemacht?

                                    Wie kann man den das Telefon über den TR64 ansteuern, wie oft klingelt es denn, nur wenn der Taster gedrückt wird.

                                    1 Reply Last reply Reply Quote 0
                                    • Chaot
                                      Chaot last edited by

                                      @ totocotonio

                                      Das Script ist in JS geschrieben:

                                      var sperre = false;
                                      
                                      on({id: 'sonoff.0.Eingang.POWER2', change: "any"}, function (obj) {
                                        if(!sperre) {
                                          sperre = true;
                                          setState("tr-064.0.states.ring"/*ring*/, '**610, 15');
                                          sendTo("pushover", "send", {
                                             message: 'Klingel',
                                             sound: ""
                                          });
                                          setState("alexa2.0.Echo-Devices.G2A0P30XXXXXXLLE.Commands.speak"/*speak*/, 'Mach ma Tür auf');
                                          setTimeout(function() {
                                             sperre = false;
                                          }, 5000); 
                                        }  
                                      });
                                      

                                      Der Teil "Sperre" wird benötigt, da der erste der geklingelt hat ein kleiner Nachbarsjunge war. Der hat dann mehrfach schnell hintereinander auf den Taster gedrückt und dadurch das Klingeln gestoppt.

                                      Der Bereich :````
                                      */, '**610, 15');

                                      
                                      Weiter unten ist dann noch Pushover integriert das mir eine Meldung aufs Smartphone zaubert wenn ich nicht zu Hause bin.
                                      
                                      Zu guter Letzt ist dann noch die Sprachausgabe über Alexa realisiert die mit beliebigen Text gefüttert werden kann.
                                      
                                      Den Originaltext: "Mach mal de scheiße Tür auf" musste ich nach kleineren Diskussionen mit meiner Frau dann doch ändern :(
                                      
                                      Dabei war der eigentlich gut: [https://www.youtube.com/watch?v=-kxXSk7nqcw](https://www.youtube.com/watch?v=-kxXSk7nqcw)
                                      1 Reply Last reply Reply Quote 0
                                      • totocotonio
                                        totocotonio last edited by

                                        Sau gut :lol: :lol: :lol:

                                        Danke für die Info´s.

                                        Welchen sonoff hast du den da gewählt?

                                        Die Sperre ist das eine variable?

                                        Ich versuche das morgen mal umzusetzen

                                        1 Reply Last reply Reply Quote 0
                                        • Chaot
                                          Chaot last edited by

                                          Der Sonoff ist ein Basic über den noch zusätzlich verschiedene andere Sachen laufen:

                                          Relais schaltet Außenlicht

                                          GPIO 1 und 3 sind mit einem BMP 280 verbunden für Außen-Temperatur, -Druck und - Feuchte

                                          GPIO 14 ist der Taster für die Klingel.

                                          Die Sperre wird gesetzt solange das Script abgearbeitet wird.

                                          1 Reply Last reply Reply Quote 0
                                          • N
                                            noleck123 last edited by

                                            Hallo ich habe das Fenster / Zählen Script und das Lichter Zählen Script Installiert.. Funktioniert soweit ganz gut, nur wird die Eingeschaltete Lichter / Fenster Variable nicht richtig angezeigt bzw ausgewertet.. 2453_io.jpg

                                            ! /* Status Zahl Lichter
                                            ! zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
                                            ! Daten kommen vom Gewerk "licht"
                                            ! erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
                                            ! 23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
                                            ! Log Ausgabe auskommentiert
                                            ! 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php … t=20#p9267
                                            ! 24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
                                            ! 06.05.2016 Datenpunkt für Ansagen zugefügt
                                            ! 02.07.2016 abgeschaltet, da Fehler
                                            ! 03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
                                            ! search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
                                            ! 27.11.2016 Verschoben in Status
                                            ! Code optimiert
                                            ! 23.12.2016 Räume eingebaut
                                            ! */
                                            ! var logging = true;
                                            ! var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
                                            ! idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
                                            ! idText = 'javascript.0.Status.Lichter.Text',
                                            ! idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU
                                            ! idAnsage = 'javascript.0.Status.Lichter.Ansage';
                                            ! // Ab hier nix mehr ändern
                                            ! createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
                                            ! type: 'number',
                                            ! name: 'Anzahl aller Lichter',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
                                            ! type: 'number',
                                            ! name: 'Anzahl der eingeschalteten Lichter',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
                                            ! type: 'string',
                                            ! name: 'Eingeschaltete Lichter',
                                            ! desc: 'Namen der eingeschalteten Lichter',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! createState(idAnsage, {
                                            ! type: 'string',
                                            ! name: 'Eingeschaltete Lichter (Ansage)',
                                            ! desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
                                            ! type: 'string',
                                            ! name: 'Räume mit eingeschalteten Lichter',
                                            ! desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk licht
                                            ! var cacheSelectorLevel = $('channelstate.id=*.level');
                                            ! var cacheSelectorPOWER = $('channelstate.id=*.POWER'); // Sonoff Lampen (müssen im Gewerk Licht sein)
                                            ! function checkDevices(obj) {
                                            ! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
                                            ! var anzahlLichterAn = 0;
                                            ! var anzahlLichter = 0;
                                            ! var textLichterAn = [];
                                            ! var textRaum = [];
                                            ! if (logging) {
                                            ! log('++++++ Lichter Anzahl ++++ ');
                                            ! log('#### SCHALTER ##### ');
                                            ! }
                                            ! cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                            ! var obj = getObject(id);
                                            ! var name = getObject(id).common.name;
                                            ! var status = getState(id).val; // Zustand .STATE abfragen (jedes Element)
                                            ! var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                                            ! var raumname = getObject(id, "rooms"); // <–-- NEU
                                            ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                            ! // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                                            ! /

                                            ! if (logging) {
                                            ! log('-------');
                                            ! log('Kanal: ' + name);
                                            ! log('Status: ' + status);
                                            ! }
                                            ! */
                                            ! if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                            ! ++anzahlLichterAn;
                                            ! textLichterAn.push(devicename); // Zu Array hinzufügen
                                            ! textRaum.push(raumname.enumNames); // <---- NEU
                                            ! }
                                            ! ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                            ! // } // ENDE VK-Abfrage
                                            ! });
                                            ! if (logging) log('#### DIMMER ##### ');
                                            ! cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
                                            ! var obj = getObject(id);
                                            ! var name = getObject(id).common.name;
                                            ! var status = getState(id).val; // Zustand .LEVEL abfragen (jedes Element)
                                            ! var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
                                            ! var raumname = getObject(id, "rooms"); // <---- NEU
                                            ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                            ! // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
                                            ! /

                                            ! if (logging) {
                                            ! log('-------');
                                            ! log('Kanal: ' + name);
                                            ! log('Status: ' + status + '%');
                                            ! }
                                            ! */
                                            ! if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
                                            ! ++anzahlLichterAn;
                                            ! textLichterAn.push(devicename); // Zu Array hinzufügen
                                            ! textRaum.push(raumname.enumNames); // <---- NEU
                                            ! }
                                            ! ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                            ! // } // Ende Abfrage VK
                                            ! });
                                            ! if (logging) {
                                            ! log('++++++ Lichter Anzahl ++++ ');
                                            ! log('#### SCHALTER ##### ');
                                            ! }
                                            ! cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Licht
                                            ! var obj = getObject(id);
                                            ! var name = getObject(id).common.name;
                                            ! var status = getState(id).val; // Zustand .STATE abfragen (jedes Element)
                                            ! var devicename = name.substring(0, name.indexOf("POWER")); //.state aus Text entfernen
                                            ! var raumname = getObject(id, "rooms"); // <---- NEU
                                            ! // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
                                            ! // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
                                            ! /

                                            ! if (logging) {
                                            ! log('-------');
                                            ! log('Kanal: ' + name);
                                            ! log('Status: ' + status);
                                            ! }
                                            ! */
                                            ! if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                            ! ++anzahlLichterAn;
                                            ! textLichterAn.push(devicename); // Zu Array hinzufügen
                                            ! textRaum.push(raumname.enumNames); // <---- NEU
                                            ! }
                                            ! ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                                            ! // } // ENDE VK-Abfrage
                                            ! });
                                            ! // Array mit Lichternamen sortieren
                                            ! textLichterAn.sort();
                                            ! textRaum.sort(); // <---- NEU
                                            ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                            ! if (logging) log("Text: " + textLichterAn);
                                            ! if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
                                            ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                            ! setState(idText, textLichterAn.join(',
                                            ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
                                            ! setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                                            ! setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                                            ! // setState(idRaum, textRaum.join(',
                                            ')); // Räume, in denen Licht brennt // <---- NEU
                                            ! setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
                                            ! }
                                            ! // Trigger
                                            ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                            ! if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                            ! checkDevices();
                                            ! });
                                            ! cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht
                                            ! if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                            ! checkDevices();
                                            ! });
                                            ! cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
                                            ! if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                            ! checkDevices();
                                            ! });
                                            ! function main() {
                                            ! setTimeout(function(){
                                            ! if (logging) log('Auslöser Skriptstart');
                                            ! checkDevices();
                                            ! }, 2000);
                                            ! }
                                            ! main(); // Skriptstart-Auslöser
                                            ! // Aufbereitung für Ansage
                                            ! function strip_tags(data) {
                                            ! var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                                            ! return(rueckgabe);
                                            ! }
                                            ! on(idText, function (obj) {
                                            ! var text = obj.state.val;
                                            ! text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
                                            ! setState(idAnsage, text);
                                            ! });

                                            ! // Status Fenster. Das Script zählt alle Fenster im Gewerk Fenster (Aufzählungen-Funktion)
                                            ! // Telegramnachricht bei Abwesenheit wenn sich der Fensterstatus ändert. Bei Anwesenheit in der Homezone keine Nachricht senden.
                                            ! // Anwesenheit Datenpunkte separat erstellt und durch die Adapter google-sharedlocation und Places geschaltet
                                            ! var logging = true;
                                            ! var
                                            ! idAnzahlAuf = 'javascript.0.Status.Fenster.Anzahl_auf',
                                            ! idAnzahl = 'javascript.0.Status.Fenster.Anzahl',
                                            ! idText = 'javascript.0.Status.Fenster.Text',
                                            ! idRaum = 'javascript.0.Status.Fenster.Raum',
                                            ! idAnsage = 'javascript.0.Status.Fenster.Ansage';
                                            ! // Ab hier nix mehr ändern
                                            ! createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Fenster
                                            ! type: 'number',
                                            ! name: 'Anzahl aller Fenster',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idAnzahlAuf, { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
                                            ! type: 'number',
                                            ! name: 'Anzahl der geoeffneten Fenster',
                                            ! min: 0,
                                            ! def: 0,
                                            ! role: 'value'
                                            ! });
                                            ! createState(idText, { // Anzahl der geoeffneten Fenster und deren Namen als Variable unter Javascript.0 anlegen
                                            ! type: 'string',
                                            ! name: 'geoeffnete Fenster',
                                            ! desc: 'Namen der geoeffneten Fenster',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! createState(idAnsage, {
                                            ! type: 'string',
                                            ! name: 'geoeffnete Fenster (Ansage)',
                                            ! desc: 'Namen der geoeffneten Fenster (für Ansage aufbereitet)',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! createState(idRaum, { // Räume, in denen Fenster geoeffnet sind
                                            ! type: 'string',
                                            ! name: 'Räume mit geoeffneten Fenster',
                                            ! desc: 'Namen der Räume, in denen Fenster geoeffnet sind',
                                            ! def: ' ',
                                            ! role: 'value'
                                            ! });
                                            ! var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Fenster
                                            ! function checkDevices(obj) {
                                            ! // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster auf 0
                                            ! var anzahlFensterAuf = 0;
                                            ! var anzahlFenster = 0;
                                            ! var textFensterAuf = [];
                                            ! var textRaum = [];
                                            ! if (logging) {
                                            ! log('++++++ Fenster Anzahl ++++ ');
                                            ! log('#### SCHALTER ##### ');
                                            ! }
                                            ! cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Fenster
                                            ! var obj = getObject(id);
                                            ! var name = getObject(id).common.name;
                                            ! var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
                                            ! var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                                            ! var raumname = getObject(id, "rooms");
                                            ! if (logging) {
                                            ! log('–-----');
                                            ! log('Kanal: ' + name);
                                            ! log('Status: ' + status);
                                            ! }
                                            ! if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt
                                            ! ++anzahlFensterAuf;
                                            ! textFensterAuf.push(devicename); // Zu Array hinzufügen
                                            ! textRaum.push(raumname.enumNames); //
                                            ! }
                                            ! ++anzahlFenster; // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
                                            ! });
                                            ! textRaum = deleteDuplicates(textRaum);
                                            ! // Array mit Fensternamen sortieren
                                            ! textFensterAuf.sort();
                                            ! textRaum.sort();
                                            ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon auf) ausgegeben
                                            ! if (logging) log("Text: " + textFensterAuf);
                                            ! if (logging) log("Anzahl Fenster: " + anzahlFenster + " # davon Fenster auf: " + anzahlFensterAuf);
                                            ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                            ! setState(idText, textFensterAuf.join(',\nund\n')); // Schreibt die aktuelle Namen der geoeffneten Fenster
                                            ! setState(idAnzahlAuf, textFensterAuf.length); // Schreibt die aktuelle Anzahl der geoeffneten Fenster
                                            ! setState(idAnzahl, anzahlFenster); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
                                            ! // setState(idRaum, textRaum.join(',
                                            ')); // Räume, in denen Fenster geoeffnet sind
                                            ! setState(idRaum, textRaum.join(',\nund\n')); // Räume, in denen Fenster geoeffnet sind
                                            ! }
                                            ! // Trigger
                                            ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Fenster
                                            ! if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                            ! checkDevices();
                                            ! });
                                            ! function main() {
                                            ! setTimeout(function() {
                                            ! if (logging) log('Auslöser Skriptstart');
                                            ! checkDevices();
                                            ! }, 2000);
                                            ! }
                                            ! main(); // Skriptstart-Auslöser
                                            ! // Aufbereitung für Ansage
                                            ! function strip_tags(data) {
                                            ! var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
                                            ! return (rueckgabe);
                                            ! }
                                            ! on(idText, function(obj) {
                                            ! var text = obj.state.val;
                                            ! text = (text.length > 1) ? ' ' + strip_tags(text) : 'Alle Fenster geschlossen';
                                            ! setState(idAnsage, text);
                                            ! });
                                            ! // Bei Anwesenheit zu Hause keine Telegramnachricht–-Bei Abwesenheit sendet Telegram eine Nachricht
                                            ! // on({id: 'javascript.0.Status.Fenster.Ansage', change: "ne"}, function (obj) {
                                            ! // var value = obj.state.val;
                                            ! // var oldValue = obj.oldState.val;
                                            ! // if (getState("javascript.0.Anwesenheit.Heiko.Home.Heiko_Home").val === false) {
                                            ! // sendTo("telegram", "send", {
                                            ! // text: getState("javascript.0.Status.Fenster.Ansage").val,
                                            ! // disable_notification: true // ohne Ton am Handy
                                            ! //});
                                            ! //}
                                            ! //});

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            878
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            45
                                            184
                                            40600
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo