NEWS
Telegram mit mehreren Benutzer / Telegram Multi-User
-
Hi zusammen,
ich habe heute meine Frau zum Telegram-Bot hinzugefügt. Funktioniert auch alles so weit. Da ich aber nun möchte, dass nur der Benutzer eine Antwort vom ioBroker geschickt bekommt, welcher die Anfrage gestellt hat, habe ich ich versucht dies wie im Folgenden Blockly-Export zu realisieren:
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="IW;6/1xi%KJWmNIQ,4P(">user</variable> <variable type="" id="*!Bmpdb3yv*WOa^_rLA_">command</variable> </variables> <block type="on" id="g3aDrH#Soce(0kJQD75q" x="-24" y="-85"> <field name="OID">telegram.0.communicate.requestMessageId</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="Q*`MKH@3!9a`[+C~Lh:^"> <field name="VAR" id="IW;6/1xi%KJWmNIQ,4P(" variabletype="">user</field> <value name="VALUE"> <block type="text_getSubstring" id="!aLPf0LcS7[6v!Ye_~jj"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="get_value" id="%Z%=G;4uS%^/arP53+aT"> <field name="ATTR">val</field> <field name="OID">telegram.0.communicate.request</field> </block> </value> <value name="AT1"> <block type="math_number" id="n@c3`bdznuWoLhnD_gUI"> <field name="NUM">2</field> </block> </value> <value name="AT2"> <block type="math_arithmetic" id=".ax5-{i1P?f6cq`Hel;b"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="40pqa@W?hEb.zDI1XARh"> <field name="NUM">1</field> </shadow> <block type="text_indexOf" id="H43RvF9[jm5_%_OdwXyb"> <field name="END">FIRST</field> <value name="VALUE"> <block type="get_value" id="2hb$e`+WEUm$9=LJod%D"> <field name="ATTR">val</field> <field name="OID">telegram.0.communicate.request</field> </block> </value> <value name="FIND"> <shadow type="text" id="K^bx}Cfo:Jkn[3pfi7c9"> <field name="TEXT">]</field> </shadow> </value> </block> </value> <value name="B"> <shadow type="math_number" id="{Q3`:ezU:d=RKInc5D#+"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="=6*M[Rpy.J1Ge)}Csb{f"> <field name="VAR" id="*!Bmpdb3yv*WOa^_rLA_" variabletype="">command</field> <value name="VALUE"> <block type="text_getSubstring" id="W+yUoSRmtFZ0l?uujGtY"> <mutation at1="true" at2="false"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">LAST</field> <value name="STRING"> <block type="get_value" id="cn@_DK62ex-CxP2tn1ro"> <field name="ATTR">val</field> <field name="OID">telegram.0.communicate.request</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="rmooafbyhdV!OfnKUsoL"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="jj(6%+jj-dmJo!xzs-GS"> <field name="NUM">1</field> </shadow> <block type="text_indexOf" id=":|J?[NX7_7nnc+xC-/Fx"> <field name="END">FIRST</field> <value name="VALUE"> <block type="get_value" id="@NZok/mg?fims`{^BR};"> <field name="ATTR">val</field> <field name="OID">telegram.0.communicate.request</field> </block> </value> <value name="FIND"> <shadow type="text" id="[bOtRtW_,)/`!Al6%z}/"> <field name="TEXT">]</field> </shadow> </value> </block> </value> <value name="B"> <shadow type="math_number" id="eFV2%Cv!gV@2+IKa|mSZ"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> <next> <block type="controls_if" id="7W$v-l)B{@3Q-RxwKF+J"> <value name="IF0"> <block type="logic_compare" id="b(7*]sVG-lhQb2hRw!z["> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="/X|x6Syi+j69^k|-9L@d"> <field name="VAR" id="*!Bmpdb3yv*WOa^_rLA_" variabletype="">command</field> </block> </value> <value name="B"> <block type="text" id="JOvl}W`Z?$pZ|pKib:qE"> <field name="TEXT">Temperaturanzeige</field> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="#x[w$_f`_1gQp;i~1AJ!"> <field name="INSTANCE">.0</field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="~^XQP;0o8JhqdRip6~ZU"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="V%]-8R}dK~[WRQ2Js@H_"> <mutation items="18"></mutation> <value name="ADD0"> <block type="text_join" id="nD!N:v}%riqIw[Ge,T+5"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id="3dahHbE#6oRAuD6%%-O9"> <field name="VAR" id="IW;6/1xi%KJWmNIQ,4P(" variabletype="">user</field> </block> </value> </block> </value> <value name="ADD1"> <block type="get_value" id="|Fw[TzJC,Xqf07J;Pq$W"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d00032252b9.temperature</field> </block> </value> <value name="ADD2"> <block type="text" id="J)y7N=Mm+{IK6RBY_RDo"> <field name="TEXT">°C | </field> </block> </value> <value name="ADD3"> <block type="get_value" id="lHB!CH+j%GRjOv251g,_"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d00032252b9.humidity</field> </block> </value> <value name="ADD4"> <block type="text" id="ot(;ZACfPIKSitMcI,e,"> <field name="TEXT">%</field> </block> </value> <value name="ADD5"> <block type="text_newline" id="gQeA()uVX?YxANZ@vS5g"> <field name="Type">\n</field> </block> </value> <value name="ADD6"> <block type="text" id="FSIF`#a/mwYowz9^%Ez|"> <field name="TEXT">Schlafzimmer: </field> </block> </value> <value name="ADD7"> <block type="get_value" id="jCE!qUT:;Oz0M9#_EU~/"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d00036699a8.temperature</field> </block> </value> <value name="ADD8"> <block type="text" id="hS#(5)t?#@2,zO,qByiB"> <field name="TEXT">°C | </field> </block> </value> <value name="ADD9"> <block type="get_value" id="oNh09mv5_N,Sd3bXpAXk"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d00036699a8.humidity</field> </block> </value> <value name="ADD10"> <block type="text" id="Gl|m]^uH2+[WD#tYp)lC"> <field name="TEXT">%</field> </block> </value> <value name="ADD11"> <block type="text_newline" id="tYGEOD*;9!-pwq)+mf)J"> <field name="Type">\n</field> </block> </value> <value name="ADD12"> <block type="text" id="k{t=1lS9C[^L0i]2uDDW"> <field name="TEXT">Home Office: </field> </block> </value> <value name="ADD13"> <block type="get_value" id="q0*x@Yd[H?h*RKt)h:s0"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d00036b742c.temperature</field> </block> </value> <value name="ADD14"> <block type="text" id="5|bIIlN18enl^YDp}klO"> <field name="TEXT">°C | </field> </block> </value> <value name="ADD15"> <block type="get_value" id="=:_t/NOts1qI#`+i!!o!"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d00036b742c.humidity</field> </block> </value> <value name="ADD16"> <block type="text" id="Kz|w2)r4I1mou[=:rhEb"> <field name="TEXT">%</field> </block> </value> <value name="ADD17"> <block type="text_newline" id="F}X|efNPIY[gte6kgjmS"> <field name="Type">\n</field> </block> </value> </block> </value> <value name="USERNAME"> <block type="variables_get" id="f-]Dc%9.f-`EKT-_1UDV"> <field name="VAR" id="IW;6/1xi%KJWmNIQ,4P(" variabletype="">user</field> </block> </value> </block> </statement> <next> <block type="variables_set" id="rtgk)GlU#yd[nZY6o%|?"> <field name="VAR" id="IW;6/1xi%KJWmNIQ,4P(" variabletype="">user</field> <value name="VALUE"> <block type="text" id=",($j@Xx[Fus?]?[y!-v("> <field name="TEXT">null</field> </block> </value> <next> <block type="variables_set" id="V];bT7Jk!o6,rg@a{OL9"> <field name="VAR" id="*!Bmpdb3yv*WOa^_rLA_" variabletype="">command</field> <value name="VALUE"> <block type="text" id="u5S9v26Juwg9CDOsBxtz"> <field name="TEXT">null</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </xml>
Nun habe ich folgendes Problem: Wenn ich mit User X den Befehl "Temperaturanzeige" absetzte, bekomme ich diese auch angezeigt. Dies funktioniert so oft ich will hintereinander. Wenn jetzt aber User Y (meine Frau) den Befehl absetzt, dann bekomme ich die Temperaturen geschickt und nicht sie. Erst ab der zweiten Anfrage meiner Frau wird die Temperaturanzeige zu ihr geschickt. Es scheint also irgendwie eine Verzögerung zu geben bis die Variablen entsprechend up-to-date gebracht werden.
Habt ihr eine Idee wie ich das gelöst bekomme? Oder wie handhabt ihr es, wenn ihr mehrere User auf einer Telegram-Instanz laufen lasst?
Danke euch
elsmarto -
Blockly kann ich nicht.
Per Script geht es so:
auslesen der Anfrage:
var vEingabe = getState("telegram.0.communicate.request").val; // Test Eingabe per telegram auf dem Handy var vUser = vEingabe.substring(1, vEingabe.indexOf("]")); vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length); log (vUser);
Dann hast du in "vUser" den User der die Anfrage gestellt hat.
Und in "vEingabe" den Text der Anfrage.Und weiter kannst du dann nur an den vUser senden:
vText = vText + "xyz"; sendTo('telegram', { user: vUser, text: vText, parse_mode: 'HTML' });
mfg
-
@bahnuhr vielen Dank schon mal.
Wenn ich dies mal testweise bei mir laufen lasse, dann kommt weder ein Log-Eintrag, noch eine Telegram-Message bei mir an. Hier mein Code:
on({id: "telegram.0.communicate.requestMessageId"/, change: "ne"}, function (obj) { var vEingabe = getState("telegram.0.communicate.request").val; // Test Eingabe per telegram auf dem Handy var vUser = vEingabe.substring(1, vEingabe.indexOf("]")); vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length); log (vUser); sendTo('telegram', { user: vUser, text: "hallo", parse_mode: 'HTML' }); });
-
@elsmarto sagte in Telegram mit mehreren Benutzer / Telegram Multi-User:
@bahnuhr vielen Dank schon mal.
Wenn ich dies mal testweise bei mir laufen lasse, dann kommt weder ein Log-Eintrag, noch eine Telegram-Message bei mir an. Hier mein Code:
on({id: "telegram.0.communicate.requestMessageId"/, change: "ne"}, function (obj) { var vEingabe = getState("telegram.0.communicate.request").val; // Test Eingabe per telegram auf dem Handy var vUser = vEingabe.substring(1, vEingabe.indexOf("]")); vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length); log (vUser); sendTo('telegram', { user: vUser, text: "hallo", parse_mode: 'HTML' }); });
trigger mal auf das:
on({id: "telegram.0.communicate.request"}, function() { // Nachricht von telegram -
@bahnuhr sagte in Telegram mit mehreren Benutzer / Telegram Multi-User:
on({id: "telegram.0.communicate.request"}, function() { // Nachricht von telegram
Damit klappt es einwandfrei (gerade probiert)
on({id: "telegram.0.communicate.request"}, function() { // Nachricht von telegram var vEingabe = getState("telegram.0.communicate.request").val; // Test Eingabe per telegram auf dem Handy var vUser = vEingabe.substring(1, vEingabe.indexOf("]")); vEingabe = vEingabe.substring(vEingabe.indexOf("]") + 1, vEingabe.length); log (vUser); sendTo('telegram', { user: vUser, text: "hallo", parse_mode: 'HTML' }); });
-
Jetzt funktioniert es einwandfrei - vielen Dank @bahnuhr
Hier mein Code:
on({id: "telegram.0.communicate.request"}, function() { var command = getState("telegram.0.communicate.request").val; var user = command.substring(1, command.indexOf("]")); command = command.substring(command.indexOf("]") + 1, command.length); if (command == 'Temperaturanzeige') { sendTo('telegram', { user: user, text: (['Wohnzimmer: ',getState("zigbee.0.00158d00032252b9.temperature").val,'°C | ',getState("zigbee.0.00158d00032252b9.humidity").val,'%','\n','Schlafzimmer: ',getState("zigbee.0.00158d00036699a8.temperature").val,'°C | ',getState("zigbee.0.00158d00036699a8.humidity").val,'%','\n','Home Office: ',getState("zigbee.0.00158d00036b742c.temperature").val,'°C | ',getState("zigbee.0.00158d00036b742c.humidity").val,'%','\n'].join('')), }); }; });
Weißt du warum es jetzt funktioniert? Also warum ändert der entsprechende Trigger das Verhalten?
-
@elsmarto sagte in Telegram mit mehreren Benutzer / Telegram Multi-User:
Jetzt funktioniert es einwandfrei - vielen Dank @bahnuhr
Daumen hoch wäre schön.
-
Hallo Leute, ich habe das gleiche problem wie der @elsmarto hätte.
es scheint jetzt mit dem script gelöst zusein.
Leider ich mit meine mangelhafte script Kenntnisse kann damit nicht viel anfangen.
Kennt vielleicht einer vergleichbares lösung mit den Blockly?