hi hab dir ne gif erstellt aber nicht getestet sollte aber gehen
viel glück
NEWS
Best posts made by Nahasapee
-
RE: Türsensor, Text2command und Telegram
-
RE: Telegram Meldung bei Spannungsausfall
Hi , ich hab mal gleich ein passendes Script zusammen gefrickelt
in die clientList müssen dann alle IPs deiner Endgeräte reinconst ping = require('ping'); const Promise = require('bluebird'); const clientList = [ '192.168.178.1','192.168.178.2','192.168.178.4']; let aliveClients; ping.sys.probeAsync = function(host) { return new Promise((resolve, reject) => { ping.sys.probe(host, function(isAlive) { resolve({"client": host, "status": isAlive}); }); }) } aliveClients = clientList.map((client)=> ping.sys.probeAsync(client)); Promise.all(aliveClients).then(function(results) { return {results: results, timestamp: new Date().getTime()}; }).then((results)=>{ let filterList = results.results.filter((obj) => obj.status == true); let percentage = filterList.length *100/clientList.length; if(percentage < 40.0) sendTo('telegram.0', { chatId : getState('telegram.0.communicate.requestChatId'/*Chat ID of last received request*/).val, text: "wahrscheinlich strom weg!", }); console.log( (percentage)); });
-
Telegram Menü dynamisch aus Aufzählung generieren.
Hi,
ich habe eine kleines Script gebastelt welches mir ein Menü für Telegram baut hierfür werden die enums(Aufzählungen) in IOBroker verwendet.
In Telegram kann ich dann im Menü navigieren und bestimmt Funktionen ausführen tiggern.
Vielleicht kann es ja noch jemand gebrauchen...Es muss der Telegramadapter installiert sein und die Aufzählungen entsprechend konfiguriert.
Zur Zeit gehen nur boolesche Schalter. Das Skript liegt in der index.js Datei diese müsst ihr einfach nur in euren IOBroker einfügen(copy & paste) und die Zeile 284 anpassen in der die Enums ausgewählt werden welche ihr entsprechend verwendet wollt.Ich möchte anmerken das ich IOBroker noch nicht so lange verwende und ich mich noch zurecht finden muss
genauso beherrsche ich kein JavaScript hab es nur für dieses Projekt ein wenig angeeignet, Verbesserungsvorschläge nehme ich gerne an da ich vermute , dass man so einige Sachen in JavaScript besser umsetzen kann
Ich hatte auch versucht mir ein npm paket zu erstellen und die eigentlichen Klassen in unterschiedliche Dateien zu separieren, bin dann aber an der
Integration beim IoBroker gescheitert und hab dann alles in einer Datei gelassen. Was mir nicht unbedingt gefällt , vielleicht könnte mir dabei jemand helfen?
oder müsste man daraus ein Adapter basteln?
https://github.com/Nahasapeemapetilon/MyTelegramMenuViele Grüße
-
RE: [gelöst] Telegram ChatID+MsgID von Bot-Empfängern speichern
@foodfighter ich glaub du machst es dir viel zu schwer statisch hin oder her.... der telegram adapter schickt wenn du keine user angibst pauschal eh an alle users ansonsten hat der adapter einen state users
den kannst du abfragen mitgetState('telegram.0.communicate.users'/).val;
der enthält alle users den könntest du verwenden , wenn du da einen user nicht verwendet willst filterst du einen raus oder nimmst ne eigene liste mit der entsprechenden IDs an den du du senden möchtest
zb.sendTo('telegram.0', { text: "TestList", chatId: "UserID1"});
Wenn du jetzt an alle User raus schreibst "wäsche aufhängen!"
mit z.b.sendTo('telegram.0', { text: "Wäsche abhängen"});
und ein user antwortet "erledigt"
dann guckst du wer "erledigt" geschrieben hat, dass steht im State des Adapters
im Object : telegram.0.communicate.requestChatId
diese ID nimmst du um zu antworten:let ID = getState('telegram.0.communicate.requestChatId').val; sendTo('telegram.0', { text: "danke", chatId:ID});
wenn du jetzt allen anderen user schreiben möchtest wurde abgehängt dann einfach die Liste der user filtern:
const allUsers =JSON.parse( getState('telegram.0.communicate.users').val); const userIDs = Object.keys(allUsers); let lastID = getState('telegram.0.communicate.requestChatId').val; const filterList = userIDs.filter((id) => id != lastID); filterList.forEach((id)=>{ sendTo('telegram.0', { text:"wude aufgehängt", chatId:id}); });
viele grüße
-
RE: Shelly - Rollo via einen Taster
Hi
dein erstes Skript fand ich ganz gut deshalb korrigiere ich das mal:@thomson sagte in Shelly - Rollo via einen Taster:
if("open" || "close") { setState('shelly.0.SHSW-25#0045xx#1.Shutter.Pause'/*Pause*/,true);
die letzte Bedingung ist immer true und stoppt dann immer deine Rollofahrt gleich wieder
sollte vermutlich:if(state==="open" || state ==="close")
heißen.
und bei dem ersten If müsste es wohl heißen >80, statt kleiner und aus der zweiten würde ich nen else if machen
und die dritte am besten gleich auchif(pos > 80 && state === "stop") //..... else if(pos <20 && state === "stop") //...
Außerdem sind deine ID vom Shelly alle unterschiedlich, die sollten alle vom selben Shelly sein, falls du sie nicht absichtlich verfremdet hast....
bei deinem zweiten Skript steig ich gar nicht richtig durch was du machen willst wirkt irgendwie strange,kommen deine Konsolen ausgaben?
vermutlich ist die erste Bedingung schon nicht richtig.@thomson sagte in Shelly - Rollo via einen Taster:
if((obj.state ? obj.state.val : "")) {
viele grüße
-
RE: Variablen in Schleifen anlegen
@MeinzIsAs sagte in Variablen in Schleifen anlegen:
for (var a = 1; i <= 3; a++) {
die schleife ist ne endlos schleife......i ist immer kleiner gleich 3 da du sie nicht erhöhst
vermutlich sollte es a<=3 heißen
Viele Grüße -
RE: Telegram Menü dynamisch aus Aufzählung generieren.
Hi,
ich habe mal ein kleines Update eingespielt.- paar kleine Fehler wurden behoben
- die untere Navigationsleiste hat neue Icons bekommen
- Konfigurationsmöglichkeiten hinzugefügt
- Sprache(DE,EN)
- welche Auswahllisten verwendet werden sollen
- welche Telegraminstanz im IoBroker verwendet werden soll
- soll das Menü über Telegramm Rückmeldung geben, ob ein State geschaltet wurde
- desweiteren sind die Anzahl an Köpfe in Spalte/Zeile steuerbar
- z.b. 2x3 :
- z.b. 3x2
- boolesche States werden unterstützt (Switch und Buttons)
- Nummerische States können gesteuert werden z.B. Rollopositionen
- falls states schreibgeschützt sind, erfolgt eine Ausgabe des momentanen Wertes
Hier mal eine kleine Animation vom Menü und Navigation
Das wars erst mal Viele Grüße
-
RE: Türsensor, Text2command und Telegram
@br0kly sagte in Türsensor, Text2command und Telegram:
Danke. Das Problem ist, dass diese "60 Sek"-Schleife endlos läuft, da die Abbruchbedingung außerhalb liegt und somit nie überprüft wird.
das stimmt nicht wenn du es so geplant hast wie in der gif, beendet er die meldung wenn du das fenster zumachst.
das sieht man auch gut im code , da die intervall variable außerhalb der zwei events(schließen /öffnen) deklariert wird.var Intervall; on({id: 'zigbee.0.00158d00025312b0.opened', val: true}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; sendTo("telegram.0", "send", { text: 'Fenster offen!' }); Intervall = setInterval(function () { sendTo("telegram", "send", { text: 'Fenster zu machen' }); }, 60000); }); on({id: 'zigbee.0.00158d00025312b0.opened', val: false}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; sendTo("telegram.0", "send", { "parameter1": 'Fenster zu' }); (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})(); });
-
RE: Türsensor, Text2command und Telegram
@br0kly die objekt id für schließen scheint ne andere als beim öffnen zu sein....
Latest posts made by Nahasapee
-
RE: Telegram Bot Nachrichten löschen
@agreen
ich würde versuchen den bot erstmal als admin in der gruppe zu erzeugen :
und danach musst du wohl oder übel den passwortschutz entfernen (iobroker)
-
RE: Telegram Bot Nachrichten löschen
@agreen ist dein Bot - Admin in der Gruppe?
-
RE: [gelöst] Telegram ChatID+MsgID von Bot-Empfängern speichern
@foodfighter ich glaub du machst es dir viel zu schwer statisch hin oder her.... der telegram adapter schickt wenn du keine user angibst pauschal eh an alle users ansonsten hat der adapter einen state users
den kannst du abfragen mitgetState('telegram.0.communicate.users'/).val;
der enthält alle users den könntest du verwenden , wenn du da einen user nicht verwendet willst filterst du einen raus oder nimmst ne eigene liste mit der entsprechenden IDs an den du du senden möchtest
zb.sendTo('telegram.0', { text: "TestList", chatId: "UserID1"});
Wenn du jetzt an alle User raus schreibst "wäsche aufhängen!"
mit z.b.sendTo('telegram.0', { text: "Wäsche abhängen"});
und ein user antwortet "erledigt"
dann guckst du wer "erledigt" geschrieben hat, dass steht im State des Adapters
im Object : telegram.0.communicate.requestChatId
diese ID nimmst du um zu antworten:let ID = getState('telegram.0.communicate.requestChatId').val; sendTo('telegram.0', { text: "danke", chatId:ID});
wenn du jetzt allen anderen user schreiben möchtest wurde abgehängt dann einfach die Liste der user filtern:
const allUsers =JSON.parse( getState('telegram.0.communicate.users').val); const userIDs = Object.keys(allUsers); let lastID = getState('telegram.0.communicate.requestChatId').val; const filterList = userIDs.filter((id) => id != lastID); filterList.forEach((id)=>{ sendTo('telegram.0', { text:"wude aufgehängt", chatId:id}); });
viele grüße
-
RE: [Script] Telegram eingaben
@jwerlsdf ich hab es mal selber zum testen nachgebaut
so sieht es bei mir aus:
folgende States hinzugefügt :Die Auflistung liste sah bei mir so aus :
und dann noch kleines TestScript dazu:
let myShoppingList = []; on({id: 'javascript.0.TestEinkaufsliste' , change: 'any'}, (pMeldung) => { if(pMeldung.state.val) myShoppingList.push(pMeldung.state.val); console.log(["Einkaufsliste :",myShoppingList]); }); on({id: 'javascript.0.TestEinkaufsListeRemoveAll', change: 'any'}, (pMeldung) => { if(myShoppingList.length > 0) myShoppingList = []; console.log(["Einkaufsliste :",myShoppingList]); }); on({id: 'javascript.0.TestEinkausListeRemoveItem'/*Eintrag löschen*/ , change: 'any'}, (pMeldung) => { console.log([pMeldung.state.val,myShoppingList.length]); if(pMeldung.state.val>=0 && pMeldung.state.val <= myShoppingList.length) myShoppingList = myShoppingList.splice(pMeldung.state.val,1); console.log(["Einkaufsliste :",myShoppingList]); });
geht zwar, ich find es aber bisschen "bucklig" vielleicht sollte man nen speziellen Modi "Einkaufsliste" in das TelegramMenü einbauen,
da könnte man mit der Report-Funktion auch die Einkaufsliste vernünftig anzeigen lassen.und zu Punkt 2. das ist die Struktur vom IOBroker und das Menü generiert sich komplett daraus
Viele Grüße -
RE: [Script] Telegram eingaben
@jwerlsdf du könntest in deinem anderen Script einfach bei Änderungen deine Liste füllen :
so in etwa ://.... let myShoppingList = []; on({id: 'javascript.0.TestEinkaufsliste' , change: 'any'}, (pMeldung) => { if(pMeldung.state.val) myShoppingList.push(pMeldung.state.val); console.log(["Einkaufsliste :",myShoppingList]); }); //.....
und mit der MyShoppingList kannst du dann machen was immer du machen willst
oder du legst dir gleich noch nen State dafür an anstatt ne lokale Variable und füllst diese
Eine gute Idee wäre wahrscheinlich auch in dem Menü ein zusätzlichen Eintrag zu machen um deine Einkaufsliste zu leeren oder einzelne Elemente zu löschen -
RE: [Script] Telegram eingaben
Ich hab die Version vom Menü auf 0.0.17 geupdatet, diese sollte States die vom typ String sind supporten. Falls was nicht gehen sollte bitte ich um feedback ich hatte es nur rudimentär getestet.
Viele Grüße -
RE: [Script] Telegram eingaben
@jwerlsdf was funktioniert genau nicht?
ich hatte jetzt noch nichts weiter am TelegramMenü geändert, weil ich dachte du brauchst es nicht.
Die aktuelle Version auf Git unterstütz noch keine States vom Typ String.
Wenn du das nutzen willst würde ich es die nächsten Tage einbauen.(ich hatte es mir nur temporär zum Testen eingebaut)Viele Grüße
-
RE: [Script] Telegram eingaben
na meine idee für dich wäre ja gewesen du nutzt nur das menü als eingabe, könntest du ja ne separate telegram instanz und bot dazu verwenden und deine 6 scripte reagieren auf die 6 states wo die eingabe desn menüs hingeht
du nutzt quasi nen separaten bot der das menü für die eingabe nimmt. dort hättest du dann z.b. menü (einkaufen, schichtplan ,....)
vg
-
RE: [Script] Telegram eingaben
@nahasapee sorry die quali vom video ist unterirdisch hier noch mal bisschen bessere Auflösung :
https://1drv.ms/v/s!ApNXnkLEcciklX3Hx_KOOUqnl-Cl?e=PEeYM1 -
RE: [Script] Telegram eingaben
@ignis-draco hi, nette Idee mit der Einkaufsliste, man könnte mein Telegram-Menu zur Eingabe verwenden
man müsste sich bloß :- eine Variable (state) vom Typ string anlegen.
- eine neue Aufzählung erstellen z.b. Einkaufsliste in diese Liste fügt man die neue Variable ein
- anschließen registriert man das Menü auf die Liste und man hat ne Eingabe in telegram
- müsste dein Script sich einfach auf die neue Variable bei Änderungen registrieren (on)
- und dann mit den neuen Werten arbeiten.
hier kurzes Beispiel Video :
StringInput(1).avi
das menü findest du hier : https://github.com/Nahasapeemapetilon/MyTelegramMenu
allerdings muss ich dazu sagen, dass momentan noch keine string eingabe von der version von github unterstützt wird nur number , ich hatte mir die Erweiterung nur temporär eingebaut, falls du das verwenden möchte würde ich es noch mal testen und dann hochladen
Viele Grüße