NEWS
Benachrichtigung, wenn iobroker nicht mehr erreichbar ist?
-
@dan_ce Es gibt vom Tasker Developer die App Join, die mit Tasker super interagiert. Das ganze funktioniert allerdings nur mit Android. Jedes Device auf dem Join installiert ist registriert sich über den gleichen Google Account.
Mittles der Join App können die Devices dann miteinander kommunizieren.
Z.B. Kann man per Join App den Standort eines Devices abfragen, einen Screenshot auf einem Remote Device erstellen und angezeigt bekommen, usw. Das Ganze geht dann auch per Tasker.Auf der Web Oberfläche von Join kann man einen eindeutigken Key angezeigt bekommen und kann http requests erstellen. Das benutze ich in einem Script, das einen http request erstellt und damit eine Nachricht an mein Handy schickt. Diese Nachricht triggered auf dem Handy ein Script in Tasker.
Umgekehrt schicke ich Tasker/Join Nachrichten von meinem Handy an mein Tablet (das die VIS darstellt) und auf dem Tablet triggered das auch wieder Tasker und kann per SMTP Datenpunkte in iobroker ändern und damit Aktionen triggern.
Als Einstieg die Join Seiten lesen, Youtube gucken, und die Api: https://joaoapps.com/join/api/
-
@simplyclever Klasse, danke! Werde ich mir mal näher ansehen.
-
@dan_ce Gern. Ich kann bei Fragen gerne helfen und auch Code hier posten. Bin nur gerade unterwegs.
Als Tipp: Wenn man Daten in Join Http definiert gibt es den speziellen String "=:=". Damit kann man später in Tasker super einfach die verschiedenen Datenfelder in Variablen zerlegen.
Im iobroker Script nutze ich das. Z.B. habe ich dort ein Datenfeld "command". Im Tasker Script gibt es dann eine If/Else If/... Konstrukt, dass "command" prüft und dann unterschiedliche Aktionen ausführt.
Das "Alive" 1x pro Stunde ist nur ein Anwendungsfall. Anderer Fall bei mir ist z.B. die Benachrichtigung wenn eine Tür im Haus geöffnet wurde obwohl niemand zu Hause sein sollte. Die Möglichkeiten sind nahezu unbegrenzt und der Phantasie überlassen. -
@darkdevil kann dir das mal zeigen mit telegram - brauch noch ein wenig, bis ich wieder am rechner bin
-
also:
tasker und telegram sind keine wirklichen freunde - es gibt kein gutes plugin dafür - daher muss man das über einen api call machen. der kann in tasker einfach definiert werden und super einfach in einem browser getestet werden
ein api aufruf sieht so aus:
https://api.telegram.org/bot[YourKey]/sendMessage?chat_id=[@YourChannelName]&text=[YourText]
an einem beispiel von mir:
https://api.telegram.org/bot989xxxxxxxxxxxxxxxxxxxxxxxxeO-E020b3bPXuw9gry0rc/sendMessage?chat_id=9yyyyyy65&text=testmessage
der key ist z.b. in deiner telegram instanz zu bekommen und die chat-id habe ich auch im setting der instanz bekommen.
dann kannst du einen eigenen aufruf gestalten und in einem browser eingeben - dort bekommst du eine antwort zu sehen, wenn etwas nicht klappt und in der telegram app siehst du "testmessage", wenn es geklappt hatdas war der schwierige teil
in tasker
- erstmal ein ping
- dann wird die antwort gecheckt
- und je nachdem der http post (api aufruf) gestartet
diese ablauf (genannt task) wird dann über einen trigger (z.b. alle 10 min ) aufgerufen (genannt profile)
zum rumspielen hier der task allein zum import
und hier das ganze mit profile (es reicht das hier zu importieren)
sieht dann so aus:
du musst das ganze (ip und api key und chatid) anpassen und evtl brauchst du auch den ein oder anderen task nicht
hofffe, das hilft
-
Und hier das ganze mit Join:
Zunächst habe ich ein globales JavaScript. Dazu muss man in den Expertenmodus bei Script, im Folder global dann ein Script anlegen:
function sendGlobalJoin(deviceNames, title, sender, command, rest){
// Build join message and send to deviceNames HttpMessage = getState("0_userdata.0.Join.Join_Url").val; HttpMessage += 'apikey='; HttpMessage += String(getState("0_userdata.0.Join.API_Key").val); HttpMessage += '&deviceNames=' + String(deviceNames); HttpMessage += '&title=' + String(title); HttpMessage += '&text=' + String('from=:=' + sender + '=:=' + command + '=:=' + rest); // Replace all " " with "+" HttpMessage = HttpMessage.replace(/ /ig, '+'); // Send message try { require("request")(HttpMessage).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } console.log("*** GLOBALJOIN *** request: " + HttpMessage); console.log("*** GLOBALJOIN *** result: " + String(getState("0_userdata.0.BlocklyTest.HttpResult").val));
}
Der Join API Key ist als Benutzer Datenpunkt definiert.
Und JoinUrl=https://joinjoaomgcd.appspot.com/_ah/api/messaging/v1/sendPush?In Blockly Scripten kann man dann die globale Funktion benutzen.
Dazu muss man im Blockly eine lokale JavaScript Funktion definieren die das globale Script aufruft:sendGlobalJoin(deviceNames, title, sender, command, rest);
Und dann kann man die lokale Funktion in Blockly benutzen.
Oben das Beispiel der stündlichen "Alive" Nachricht.
Der Empfänger ist wieder ein Datenpunkt. Der Inhalt dieses muss dem Namen entsprechen, dem man in Join unter "This Device" definiert hat.In Tasker wird dann ein Profil angelegt mit:
Event: Join Received Push
Und in der Konfiguration dieses Events wird nur dieser Parameter geändert:
Text -> Variable Names: From,Command,RestIn der Task die ausgeführt wird, wenn der Event getriggered wird, sind dann die Variable %from, %command und %rest schon definiert und können in der Logik benutzt werden.
U.a. habe ich dort also:
if %command = iobrokerAlive then
... %Alive_Iobroker = true
...Und eine andere Task setzt den Wert auf False und wenn nicht Innerhalb einer Stunde der Wert wieder True ist, gibt es eine Warnung.
Hoffe, das war halbwegs verständlich und hilfreich?
Der Console Log beinhalte den kompletten http request. Den kann man copy/paste im Browser eingeben um zu testen, ob es funktioniert.
-
@liv-in-sky Nachfrage zu Telegram:
Sehe ich das richtig, dass eine Telegram Bot Nachricht die per API (http request) erstellt wurde NICHT in iobroker ankommt?
Ich habe den iobroker Telegram Adapter installiert. Wenn ich im Browser per API sendMessage ausführe kommt die Nachricht auf dem Handy in Telegram an.
Aber leider nicht im Telegram Datenpunkt "request".
Gebe ich im Bot aber direkt eine Nachricht ein, so wird der Datenpunkt in iobroker mit der Nachricht gesetzt.
Mit anderen Worten: Ich kann von extern keine Telegram Nachricht direkt an iobroker schicken (über den Telegram Adapter) sondern muss auch hier über ein Android Device im lokalen Netzwerk mit Tasker gehen? -
@simplyclever sagte in Benachrichtigung, wenn iobroker nicht mehr erreichbar ist?:
Gebe ich im Bot aber direkt eine Nachricht ein, so wird der Datenpunkt in iobroker mit der Nachricht gesetzt.
Mit anderen Worten: Ich kann von extern keine Telegram Nachricht direkt an iobroker schicken (über den Telegram Adapter) sondern muss auch hier über ein Android Device im lokalen Netzwerk mit Tasker gehen?Widersprechen sich die beiden Aussagen nicht ?
Fazit ist doch:
Wenn du auf dem Handy in telegram etwas eingibst dann erscheint dies doch im DP request.
Und darauf kannst du dann per Script, etc. reagieren. -
@simplyclever sagte in Benachrichtigung, wenn iobroker nicht mehr erreichbar ist?:
@liv-in-sky Nachfrage zu Telegram:
Sehe ich das richtig, dass eine Telegram Bot Nachricht die per API (http request) erstellt wurde NICHT in iobroker ankommt?ja - es gab ja keinen request vom client, der hier ja die telegram instanz ist - es ist ja der tasker der requestet", der die meldung auch zurückbekommt
wenn du mit einem z.b. buttons erzeugst - kommt die antwort, welcher button gedrückt ist zurück - so nutze ich das z.b. im postit script - dort werden postit's - erstellt in einem script - wie ein button angezeigt - wenn ich den button in der telgeram app drücke, bekomme ich eine antwort und lösche das postit aus telegram und meiner vis. in telegram sende erstelle ich ein neues postit mit dem text: "postit butter kaufen" - das kommt bei iob an und ich erstelle ein postit ! also man kann schon befehle von der app an iob senden.
-
@bahnuhr Ja, Nachrichten, die ich direkt in Telegram auf dem Handy eintippe erscheinen in iobroker. Wenn ich aber im Browser per API eine Nachricht sende, erscheint die in Telegram aber eben nicht in iobroker.
-
@simplyclever da hast du recht - wenn du da was weiterverarbeiten willst, wird das wohl nicht funktionieren
du wolltest ja nur eine telegram benachrichtigung
evtl ist es möglich, dass irgendwie zu erreichen - evtl muss man sowas wie ein forcereply nutzen - wenn du dir eine nachricht mit der api sendest und diese dann in der app beantwortest - langer click auf die nachricht - dann kommt das im iobroker an - also die nachricht
wenn man das automatisieren könnte, müßte es klappen, das du ein feedback zur api in iob siehst -
was ich auf die schnelle hinbekomme:
https://api.telegram.org/bot98943xxxxxxxxxxxeO-E020b3bPXuw9gry0rc/sendMessage?chat_id=989yyyyy5&text=clickAnswersToDP&reply_markup={%22inline_keyboard%22:%20[[{%22text%22:%20%22hi%22,%20%22callback_data%22:%20%22hi%22}]]}
erzeugt einen button im bot - wenn du den drückst, wird das in den instanz-dp angezeigt
ist nur im browser getestet - evtl muss man in tasker noch was ändern - kann ich erst später probieren
-
@liv-in-sky Danke!.
Was ich gerne hätte, wäre von Tasker eine Nachricht per Telegram an iobroker zu schicken ohne weitere User Interaction. Das scheint nicht zu gehen. Ich habe ja eine Lösung via Join und Tablet im Heimnetz, aber ein direktes Interface wäre besser und man hätte auch ncoh Plan B, falls join aus irgendeinem Grund nicht funktioniert. -
bei join ist es halt schwierig mit iobroker zu reagieren - ist eindimensional - hatte mal mit nodered was gemacht, dass ich auch in iob empfangen konnte - aber dasvertug sich nicht so richtig mit nodered-adapter
oder kann man das auch irgendwie abfragen - periodisch über api
-
@liv-in-sky Wie gesagt, ich mache das über ein Android Tablet (meine VIS).
Tasker auf dem Handy wird durch irgendwas getriggert, dann schickt Tasker eine entsprechende Join Nachricht an das Tablet zu Hause. Diese Nachricht triggered Tasker auf dem Tablet und je nach Nachricht werden dann verschiene Aktionen durchgeführt.
Z.B. Habe ich eine generische Nachricht auf dem Handy: command="SetDatapoint" und rest="<dp-name>:<dp-value>".
Das Tablet setzt dann den Datenpunkt 0.userdata.0.Join.<dp-name> auf den Wert <dp-value>.
Das mache ich wiederum mit Tasker auf dem Tablet per SimpleApi. (also ein http request im lokalen Heimnetz).
Die Änderung eines DP kann dann wie gewohnt in iobroker ein Script triggern.Umgekehrt kann ich in einem iobroker Script per http request direkt eine Nachricht von iobroker an mein Handy schicken (ohne Umweg über das Tablet). Das habe ich oben im Post beschrieben.
-
So richtig verstanden hab ich nicht was ihr hier macht.
Wenn ich am Handy bin:
Eintrag in telegram; request wird erzeugt; reagiere per Script.Wenn ich am Tablet bin:
DP direkt per vis ändern.Wofür braucht man dieses join ?
Warum will man vom Tablet über tasker dann wieder zurück nach Hause was senden ?
versteh ich nicht ! -
wenn du bestimmte Meldung bekommst kannst du mir einer Antwort zb den Server neu starten
Oder ähnliches -
@bahnuhr Was ich hier mache:
Join verbindet Devices (Nachrichten senden, Standort Abfragen, Screenshot remote aufnehmen usw.). Das funktioniert in Android und auch im Browser (und noch mehr).
Das ganze funktioniert Remote auch wenn man nicht im Heimnetz ist.
Damit kann man also auch von unterwegs Aktionen in iobroker auslösen, bzw. von iobroker informationen zum Handy bekommen.
Ich weiss, für die Remote Verbindung gibt es auch andere Lösungen. Join ist halt super einfach und in Verbindung mit Tasker einfach genial.Nur ein paar Beispiele die ich für mich implementiert habe:
Von iobroker ans Handy:
- Tür/Fenster wird geöffnet bei Status "Alarm Enabled". Also z.b. wenn wir in Urlaub sind.
Ähnllich wenn ein Bewegungsmelder anspringt. - Information wenn Raspi rebootet
- Info wenn Filesystem auf Pi vollläuft.
- Batteriestand von Geräten (z.B. Heizung Thermostat) ist unter definiertem Threshold
Beispiele von Handy (via Tablet zu Hause) an iobroker:
- Handy verbindet sich mit Android Auto -> Aktion: iobroker loggt Daten über den Auto Adapter und speichert diese u.a. in einer Google Tabelle
- Ich geh joggen -> Alle x Sekunden wird mein Standort nach Hause gefunkt und meine Frau kann auf einer Karte im VIS sehen, wo ich bin (nutzt influxDB und Grafana)
- Auf Knopfdruck und Eingabe einer Pin wird die Haustür geöffnet (ohne iobroker, das geht nur über den Raspi und ein Script für mein Smartlock. Das Script wird vom Tablet per SSH gestartet).
All das mit Tasker/Join zu einem grossteil halb/voll automatisch. Z.B. Das Jogging Profil startet sobald ich meine BT Kopfhörer benutze. Oder obiges verbinden mit Android Auto triggered die nötigen Aktionen.
Edit:
Per Telegram kann man natürlich dann auch vieles Steuern, aber mir geht es um die Automatisierung, und das geht mit Tasker. Und dazu halt alles von überall. Mein Tablet dient fast nur zur Visualisiereung. - Tür/Fenster wird geöffnet bei Status "Alarm Enabled". Also z.b. wenn wir in Urlaub sind.
-
@simplyclever sagte in Benachrichtigung, wenn iobroker nicht mehr erreichbar ist?:
Von iobroker ans Handy:
Tür/Fenster wird geöffnet bei Status "Alarm Enabled". Also z.b. wenn wir in Urlaub sind.
Ähnllich wenn ein Bewegungsmelder anspringt.
Information wenn Raspi rebootet
Info wenn Filesystem auf Pi vollläuft.
Batteriestand von Geräten (z.B. Heizung Thermostat) ist unter definiertem Thresholdmach ich mit einer normalen telegram meldung
@simplyclever sagte in Benachrichtigung, wenn iobroker nicht mehr erreichbar ist?:
Handy verbindet sich mit Android Auto -> Aktion: iobroker loggt Daten über den Auto Adapter und speichert diese u.a. in einer Google Tabelle
Ich geh joggen -> Alle x Sekunden wird mein Standort nach Hause gefunkt und meine Frau kann auf einer Karte im VIS sehen, wo ich bin (nutzt influxDB und Grafana)
Auf Knopfdruck und Eingabe einer Pin wird die Haustür geöffnet (ohne iobroker, das geht nur über den Raspi und ein Script für mein Smartlock. Das Script wird vom Tablet per SSH gestartet).mach ich mit iob.pro und simple api; da brauchst du nicht einmal vpn
@simplyclever sagte in Benachrichtigung, wenn iobroker nicht mehr erreichbar ist?:
Das Jogging Profil startet sobald ich meine BT Kopfhörer benutze.
Das geht mit tasker, also auch kein join
Ich mach auch alles von überall:
entweder mit- iob.pro und simple api
- oder mit fip-box
- oder mit vpn
Aber alles gut; wenn man dieses join brauch.
Ich brauch es nicht. Nur wieder ein zusätzliches Programm. -
Die Frage habe ich mir in der Tat auch neulich gestellt.
Hab es mit Tasker gelöst. Schaue einfach ob ich den iobroker über iot erreichen kann.
Solange iot klappt, ist das denke recht zuverlässig.
Hab es seit ca einer Woche ohne Fehlalarme am laufen.Edit:
Ggf ist es schlau, vorher noch zu prüfen ob das Handy online ist.
Baue ich mal noch ein.