NEWS
(gelöst) Status Kontakte über Telegramm
-
Hallo zusammen,
ich würde gern übereinen Button den Status der Kontakte abfragen.
Es soll ein Popup dann kommen das geht auch schon soweit. Allerdings werden true/false bzw 0/1 ausgegeben.
kann mir jemand helfen wie das zusammensetzt das dann offen/geschlossen steht.
on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) { var stateval = getState('telegram.0.communicate.request').val; // Statevalue in Variable schreiben var benutzer = stateval.substring(1,stateval.indexOf("]")); // Benutzer aus Statevalue extrahieren var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length); // Befehl/Text aus Statevalue extrahieren if (befehl.search(/(?=.*(\bKontakte\b)).+/ig) != -1) { sendTo('telegram', { user: benutzer, text: 'Für welchen Raum möchtest du die Kontakte abfragen?', reply_markup: { inline_keyboard: [ [{ text: 'alle Räume', callback_data: '%Konalle'}], ] } }); } else if (befehl === "%Konalle") { sendTo('telegram', { user: benutzer, text: "Kontakte alle Räume angefragt", answerCallbackQuery: { text: ' Haustür ' + getState("hm-rpc.1.LEQ1059968.1.STATE").val + ' \nBalkon ' + getState("hm-rpc.1.LEQ0403648.1.STATE").val + '', showAlert: true } }); } });
Kann mir hier jemand helfen…
Muss das irgendwie mit einbinden das er mir den richtigen Status in Text anzeigt:
function fensterstatus(zustand) { var meldung; switch (zustand) { case 1: meldung = 'RHS gekippt'; break; case 2: meldung = 'RHS offen'; break; case true: meldung = 'TFK offen'; break; default: meldung = 'geschlossen'; break; } return(meldung);
if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) { // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt ++anzahlFensterauf; textFensterauf.push(devicename + ' (' + fensterstatus(status) + ')'); // Name und Zustand zum Array hinzufügen }
Viellen Dank
Grüße Sven
-
Naja, im Endeffekt hast du ja schon alles zusammen.
Du musst nur den Teil
text: ' Haustür ' + getState("hm-rpc.1.LEQ1059968.1.STATE").val + ' \nBalkon ' + getState("hm-rpc.1.LEQ0403648.1.STATE").val + '',
(die getStates())
anpassen, von mir aus auch über die function fensterstatus.
Alles abhängig davon, wie du es genau angezeigt haben willst.
text: ' Haustür ' + fensterstatus(getState("hm-rpc.1.LEQ1059968.1.STATE").val) + ' \nBalkon ' + fensterstatus(getState("hm-rpc.1.LEQ0403648.1.STATE").val) + '',
Wäre eine von vielen Möglichkeiten.
-
Hi danke für deine Atwort.
sind alles schnipsel bekomme das nicht zusammengesetzt.
kannst du mir beim zusammensetzen helfen.
danke
grüße
Sven
-
Ein großen Dank an dslraser er hat mir geholfen und es klappt prima.
Will es keinem vorenthalten denke dslraser ist damit einverstanden
on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) { var stateval = getState('telegram.0.communicate.request').val; // Statevalue in Variable schreiben var benutzer = stateval.substring(1,stateval.indexOf("]")); // Benutzer aus Statevalue extrahieren var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length); // Befehl/Text aus Statevalue extrahieren var UGFensterwert, UGstatus; /** * Function um umsetzen von 0,1,2 true / false nach geschlossen / gekippt / offen / offen / geschlossen */ function zu_gek_auf(UGFensterwert, UGstatus) { if (UGFensterwert === 0) { UGstatus = 'geschlossen'; } else if (UGFensterwert === 1) { UGstatus = 'gekippt'; } else if (UGFensterwert === 2) { UGstatus = 'offen'; } else if (UGFensterwert === false) { UGstatus = 'ausgeschaltet'; } else if (UGFensterwert === true) { UGstatus = 'eingeschaltet'; } return UGstatus; } var value = obj.state.val; var oldValue = obj.oldState.val; Geschirrspueler = getState("hm-rpc.0.0001D3C99C7343.3.STATE").val; Waschmaschine = getState("hm-rpc.0.0001D3C99C72EE.3.STATE").val; Werkstattfenster = getState("hm-rpc.0.0007D7099D0094.1.STATE"/*Werkstattkellerfenster.STATE*/).val; Saunafensterlinks = getState("hm-rpc.0.0007D7099D006C.1.STATE"/*Saunakellerfenster links.STATE*/).val; if (befehl.search(/(?=.*(\bKontakte\b)).+/ig) != -1) { sendTo('telegram', { user: benutzer, text: 'Für welchen Raum möchtest du die Kontakte abfragen?', reply_markup: { inline_keyboard: [ [{ text: 'alle Räume', callback_data: '%Kontalle'}], ]}});} else if (befehl === "%Kontalle") { sendTo('telegram', { user: benutzer, text: "Fernbedienungen Batterien angefragt", answerCallbackQuery: { text: 'Geschirrspüler: ' + (zu_gek_auf(getState("hm-rpc.0.0001D3C99C7343.3.STATE").val, Geschirrspueler)) + '\nWaschmaschine: ' + (zu_gek_auf(getState("hm-rpc.0.0001D3C99C72EE.3.STATE").val, Waschmaschine)) + '\nWerkstattfenster: ' + (zu_gek_auf(getState("hm-rpc.0.0007D7099D0094.1.STATE").val, Werkstattfenster)) + '\nSauna Fenster links : ' + (zu_gek_auf(getState("hm-rpc.0.0007D7099D006C.1.STATE").val, Saunafensterlinks)), showAlert: true } }); } });
https://www.bilder-upload.eu/bild-5f2282-1548759732.jpg.html ~~Grüße
Svemo~~
-
@Svemo
Habe den Script auf meine Komponenten angepasst. Passt auch soweit.
Ich bekomme nur bei der Auswahl für alle Kontakte folgende Fehlermeldung im LOG.Gibt es eine Begrenzung bei der Anzahl der Anzeige und kann man die nicht abschalten. Da ich nicht so viel Ahnung habe vom Scripten, bin ich auf eure Hilfe angewiesen.
pdulles