Telegram Messenger Modul

Homematic Einfach Aktor.

Habe den Befehl gefunden der funktioniert.
HM_WriteValueBoolean

Hi,
bin noch nicht sooo arg mit php bewandert und würde mir gerne eine Telegram-Message schicken lassen wenn z.B meine Lüftung auf Störung geht. im Grundsatz funktioniert das auch ABER:
Da ich das Skript zyklisch aufrufe bekomme ich bei Störung jedes mal eine Message wenn das Skript abgearbeitet wird.
Ich hab versucht das Skript nur bei variable „true“ auszuführen aber da passiert das gleiche.
Ist es Möglich die Message nur bei Änderung UND „true“ zu senden?
Komme aus der IEC611 Wago Welt da geht das alles n bissl anders :banghead:
Ich hoffe es kann mir jemand helfen.

Grüßl Hannes

Die Variable wird selbstständig TRUE oder FALSE?
Falls ja, lege ein Eregnis an, triggere dieses auf „bei bestimmtem Wert“, mach den Haken bei „nachfolgende Ereignisse auführen“ weg und fertig. Dann wird das Skript einmal ausgeführt, wenn die Variable von FALSE auf TRUE geht.

Dann wird mir so lange die Variable True ist zyklisch eine Message geschickt!?
Es handelt sich hierbei um eine Modbusvariable. Weiss echt nicht mehr weiter :frowning:

Dann hast Du was falsch gemacht.

Hallo,
vielen Dank für das tolle Modul!

Wenn ich einen Link versende, kann der Empfänger diesen nicht anklicken, sondern er wird nur als Text angezeigt.
Was muss ich machen, damit ich Telegram dazu zwinge einen anklickbaren Link anzuzeigen?
Funktioniert irgendetwas in der Form „<http://www.url.de>“ bspw. mit spitzen Klammern oder so?

Hallo Zusammen,
soweit ich es sehe, haben die Telegram-Funktionen, welche man in IPS nutzen kann keinen Return-Wert. Somit kann man nicht auswerten, ob die Nachricht erfolgreich versendet wurde.

In Telegram.php ist noch folgendes:

...
    public function sendMessage(array $content) {
        return $this->endpoint("sendMessage", $content);
    }
...

In module.php fehlt jedoch die Weitergabe des Return-Werts:

...
		public function SendText($text, $userid) {
			include_once(__DIR__ . "/Telegram.php");
			$frmt = "Markdown";
			if ($this->ReadPropertyBoolean("HTML") == true) {
				$frmt = "HTML";
			}
			$telegram = new Telegram($this->ReadPropertyString("BotID"));
			$content = array('chat_id' => $userid, 'text' => $text, 'parse_mode' => $frmt);
			$telegram->sendMessage($content);
		}
...

Ich würde mich sehr freuen, wenn hier beim nächsten Update der Return-Value weitergereicht werden würde. :loveips:

Beispielsweise wie folgt:

...
		public function SendTextToAll($text) {
			$recips = explode(",",$this->ReadPropertyString("Recipients"));
			$returnValue = true;
			foreach($recips as $r) {
				$returnValue &= $this->SendText($text, $r)['ok'];
			}

			return $returnValue;
		}
		
		public function SendText($text, $userid) {
			include_once(__DIR__ . "/Telegram.php");
			$frmt = "Markdown";
			if ($this->ReadPropertyBoolean("HTML") == true) {
				$frmt = "HTML";
			}
			$telegram = new Telegram($this->ReadPropertyString("BotID"));
			$content = array('chat_id' => $userid, 'text' => $text, 'parse_mode' => $frmt);
			return $telegram->sendMessage($content)['ok'];
		}
...

Pull-Request bei Bitbucket werden gerne entgegen genommen :smiley:

Ist jetzt aber im neuesten Commit umgesetzt.

Hallo,
hatte es mit einem Pull-Request versucht. Habe ich jedoch mit SourceTree nicht gebacken bekommen.
Ich weis nicht warum…

Vielen Dank, aber du hast noch einen Fehler im Skript.
Der Return von Telegram ist standardmäßig ein Array, daher musst du hinter jedem Return-Wert „[‚ok‘]“ anhängen, um den boolean zu erhalten.
(vergleiche mein Beispiel oben)

Moin Titus,

hast du zufällig schon irgendwas in Richtung „Empfang von Bildern“ geplant?
Ich brauche für meine Anwendung diese Funktion (IPS soll die empfangenen Bilder dann einfach in einem Medienordner speichern). Laut einigen Hinweisen im Netz ist das über die API problemlos möglich; man bekommt wohl über die API einen Link wo man das Bild downloaden kann.

Derzeit schmeißt dein Modul auch einen Fehler ins Log (bzgl. fehlendem Text) wenn ein Bild an den Bot gesendet wird.

Viele Grüße,
Michael

Moin Zika,

nein, daran habe ich bisher nicht gedacht. Wenn die API das hergibt kann man das sicher nachpflegen.

Die Frage ist nur, was soll dann nach dem download passieren? Wer oder was soll benachrichtigt werden um irgendwas mit dem Bild anzufangen? Man kann ja, anders als bei Textnachrichten, nicht einfach per IF entscheiden wie das Bild verarbeitet werden soll.

Hi Michael darf man fragen was du vorhast mit den Bildern?

Gesendet von meinem SM-G950F mit Tapatalk

Hi Titus & Normi,

in meinem Use-Case sollen die Handyfotos der Telegram-Gruppen-User einfach auf dem Server archiviert werden. Ich denke also einfach an Abspeichern in diversen Unterordnern.

Da hier aber sicher jeder eine andere Anwendung hat, würde ich für das Modul vorschlagen: eingehende Bilder erzeugen im Modul einfach einen Downloadlink, der genauso reinkommt wie Textstrings.

Dann kann jeder im Incoming-Skript selbst entscheiden (if Downloadlink then curl)

Hallo alle,
ich habe nach Anleitung einen Bot erstellt, Modul eingebunden, ein Sendescript erstellt…

<?

/*

    Telegram_SendText($InstanzID, $text, $UserID, $ParseMode='Markdown')
    Telegram_SendTextToAll($InstanzID, $text, $ParseMode='Markdown')
    Telegram_SendImage($InstanzID, $text, $Path_To_ImageFile, $UserID)
    Telegram_SendImageToAll($InstanzID, $text, $Path_To_ImageFile)
    Telegram_SendDocumentToAll($InstanzID, $text, $Path_to_Document, $MimeType);
    Telegram_SendDocument($InstanzID, $text, $Path_to_Document, $MimeType, $UserID);

*/


$text = 'hallo';
$UserID = 'xxxxxxxxx';
Telegram_SendText(43110 /*[Scripte\TelegramMessenger]*/,$text, $UserID, $ParseMode='Markdown');

?>

aber wenn ich das Script ausführe kommt nirgendwo etwas an… :confused:

telegram_config.JPG

Wenn ich übers Handy eine Nachricht schreibe sehe ich im Meldungslog auch die entsprechende Nachricht, aber das angegebene Script für eingehende Nachrichten wird auch nicht ausgeführt… :banghead:

aber wenn ich das Script ausführe kommt nirgendwo etwas an…

habe gerade Neuinstallation von Telegram durchgeführt,
Empfang funzt, Senden hat keine Reaktion wie bei ChokZul

Ich das Modul seit Urzeiten im Einsatz, senden habe ich gerade getestet und auch Empfangen und Antworten klappt problemlos.

Mein Konfiguration ist identisch zu den Bildern von Bernd, das Sendescript auch.

Sind wirklich Bot ID und User ID korrekt?

Senden IPS -> Handy geht jetzt :slight_smile: - hatte nur die falsche ID eingetragen… :eek::banghead:
Empfang funzt noch nicht - Empfangsscript wird nicht getriggert obwohl das richtige ausgewählt ist. Im Meldungslog erscheint aber die eingegangene Nachricht

<?

/*
    $_IPS['SENDER'] (ist "Telegram" wenn das Skript durch eine eingehende Nachricht aufgerufen wird)
    $_IPS['INSTANCE'] (enthält die ID der empfangenden Instanz)
    $_IPS['CHAT'] (enthält die ID des Absenders)
    $_IPS['VALUE'] (enthält den vom User geschickten Text)
*/


if($_IPS['SENDER'] == "Telegram"){
    process_incoming($_IPS['INSTANCE'], $_IPS['CHAT'], $_IPS['VALUE']);
}

function process_incoming($instance, $senderid, $text) {
    $return = "";
	
    switch(strtolower($text)) {

        case "temp": // Aussentemperatur
           $return = "Die Aussentemperatur beträgt ";
            break;

        default:
           $return = "Der Befehl '".$text."' ist unbekannt.";
           break;
    }

    if ($return != "") {
        Telegram_SendText($instance, $return, $senderid);
    }
}

?>

Oh oh,
liegt wohl an der Uhrzeit, im Modul auch nicht den richtigen Empfänger eingetragen…:mad:

Jetzt funktioniert alles :):):wink:

Danke für eure Bemühungen

Sind wirklich Bot ID und User ID korrekt?

hatte bisher gedacht, BotID und UserID (123456789) sind identisch, nach Ändern (findet man im Meldungsfenster)
funzt es nun bei mir auch