Hallo,
ich habe eine Frage, wie kann man Bilder via Telegram schicken die durch 2 Daten punkte aktiviert werden?
ich habe eine Javascript gefunden was durch 1 Daten Punkt aktiviert wird (den bewegung02 habe ich hinzugefügt):
// Konfiguration
// -------------------------------------------------------------------------
//2. Bewerbungs angabe
const bewerbung02 ="mqtt.1.Philipp_Lindner_Überwachung.arlamStatus";
// Objekt-ID des Bewegungsmelders
const oidLichtBewmelderTuer = "mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion";
// URL zur Kamera um ein Image (jpg) zu erhalten
const cam_url = "http://192.168.1.23:8090/grab.jpg?oid=2&size=1280x720";
// Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren
const dest_path = '/opt/iobroker/temp/cam';
// Anzahl der Bilder, die vorgehalten werden sollen
const imageCountMax = 4;
// Prefix für die Bildnamen
const imageNamePre = "Flur_";
// -------------------------------------------------------------------------
// Scriptteil
// -------------------------------------------------------------------------
var request = require('request');
var fs = require('fs');
// Bild an telegram schicken
function sendImage (path) {
try {
var stats = fs.statSync(path);
var msg = formatDate(stats.birthtime,"DD.MM.YYYY hh:mm:ss") + " " + path.substring(path.lastIndexOf('/')+1);
sendTo('telegram.0', {
text: path,
caption: msg,
disable_notification: true
});
}
catch(err) { if (err.code != "ENOENT") log(err); }
}
// löscht eine Datei synchron (wartet auf das Ergebnis)
function fsUnlinkSync(path) {
try {
var stats = fs.statSync(path);
try { fs.unlinkSync(path); }
catch(err) { if (err.code != "ENOENT") log(err); }
}
catch(err) { if (err.code != "ENOENT") log(err); }
}
// benennt eine Datei synchron um (wartet auf das Ergebnis)
function fsRenameSync(oldPath, newPath) {
try {
var stats = fs.statSync(oldPath);
try { fs.renameSync(oldPath, newPath); }
catch(err) { if (err.code != "ENOENT") log(err); }
}
catch(err) { if (err.code != "ENOENT") log(err); }
}
// Bild speichern und senden
function saveImage() {
// Bild imageCountMax-1 löschen
fsUnlinkSync( dest_path + imageNamePre + (imageCountMax-1) + ".jpg" );
// Bilder 0..imageCountMax-2 umbenennen
for (var i=imageCountMax-2; i >= 0; i-- ) {
fsRenameSync(dest_path + imageNamePre + i + ".jpg", dest_path + imageNamePre + (i+1) + ".jpg");
}
// Bild 0 löschen
var fname = imageNamePre + "0.jpg";
fsUnlinkSync( fname );
// Bild holen und speichern
request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) {
fs.writeFile(dest_path + fname, body, 'binary', function(err) {
if (err) {
log('Fehler beim Bild speichern: ' + err, 'warn');
} else {
// dem Filesystem 2 Sek Zeit zum Speichern lassen
setTimeout(function() { sendImage(dest_path + fname); }, 2000);
}
});
});
}
// sofort ein Bild senden und nach 10 Sek erneut
function onEvent() {
saveImage();
setTimeout(function() { saveImage(); }, 10 * 1000);
}
// Ereignisroutine
on({id: oidLichtBewmelderTuer, val: true}, function (obj) {
onEvent( obj );
})
// manuelle Ausführung (Test)
onEvent();
Alles anzeigen
Zu meine Aufbau:
ich verwende als IP Kamera die TP-Link Tapo C100 wie dies auch über das ONVIF Standard verfügt. Dies und 2 weiter laufen in die IP Kamera Überwachungssoftware iSpy auf. Dies ist mit meine MQTT Broker verbunden so bekomme ich mit wen eine Bewerbung Stad findet. Dies soll aber nur ausgelöst werden wenn die Software in Arlammodus gestezt ist. Dies kann ich dank der mitgelieferten API Schitstelle an und aus Schalten, welches ich über ein PHP script ereiche:
<?php
$rfid =$_REQUEST["rf"];
$modi =$_REQUEST["modi"];
$MYSQL_Host ="192.168.X.X:XXXX";
$MYSQL_User ="smarthome";
$MYSQL_pass ="XXXXXXXX";
$MYSQL_DBNa ="smarthome";
require "/var/www/html/ESP/vendor/autoload.php";
$MQTT_Server="192.168.X.XX";
$MQTT_Port =1883;
$MQTT_CID ="SmartHomeSteuetung";
$MQTT_User ="XXXXXXX";
$MQTT_Pass ="XXXXXXX";
$MQTT_Pfad ="Philipp Lindner Überwachung/arlamStatus";
//Ausage;
echo "RFID: ".$rfid."<br>";
echo "Modi: ".$modi."<br>";
//programm
$db=mysqli_connect("192.168.X.X:XXXX","smarthome","XXXXXXX","smarthome");
$sql="SELECT * FROM user WHERE rfid LIKE '".$rfid."'";
$res=mysqli_query($db,$sql);
$num=mysqli_num_rows($res);
if($num>"2" or $num=="0"){echo"Error no RFID"; mysqli_error($db); exit;}
while($d=mysqli_fetch_assoc($res))
{
//Berechtigung Prüfen Ob RFID ID Schalten Darf (Mindesten level 5)
if($d["level"]=="5")
{
//Dar nur Aktivirt werden
if($modi==="Aktiv")
{
shell_exec("curl http://192.168.1.23:8090/command.cgi?cmd=Arm");
echo"Alles OK AKTIV<br><a href='http://192.168.1.23:8082/vis/?pi#Überwaung'>Zurück</a>";
//MQTT Meldung!
$mqtt = new \PhpMqtt\Client\MQTTClient($MQTT_Server, $MQTT_Port, $MQTT_CID);
$mqtt->connect($MQTT_User,$MQTT_Pass);
$mqtt->publish($MQTT_Pfad, '1', 0);
$mqtt->close();
}
//Dar nur Aktivirt werden
if($modi==="DeAktivieren")
{
shell_exec("curl http://192.168.1.23:8090/command.cgi?cmd=disArm");
echo"Alles OK DEAKTVIRT<br><a href='http://192.168.1.23:8082/vis/?pi#Überwaung'>Zurück</a>";
//MQTT Meldung!
$mqtt = new \PhpMqtt\Client\MQTTClient($MQTT_Server, $MQTT_Port, $MQTT_CID);
$mqtt->connect($MQTT_User,$MQTT_Pass);
$mqtt->publish($MQTT_Pfad, '0', 0);
$mqtt->close();
}
else
{
echo"Kein Modi gesetzt Bitte wählem<br><a href='?rf=".$rfid."&modi=Aktiv'>Aktiviren</a> | <a href='?rf=".$rfid."&modi=DeAktivieren'>DeAktivieren</a><br><a href='http://192.168.1.23:8082/vis/?pi#Überwaung'>Zurück</a>";
}
}
echo"<br><a href='http://192.168.1.23:8082/vis/?pi#Überwaung'>Zurück</a>";
}
?>
Alles anzeigen
das zu Verschickende Kamera Bild kommt auch über die API Schnitstelle.
Es soll wie Folgt ablaufen: System ist Schaft geschalten (MQTT: Philipp Lindner Überwachung/arlamStatu = 1) und wir über den Daten Punkt (mqtt.1.Philipp_Lindner_Überwachung.cameras.flurcam_01.motion) eine Bewegung festgestellt > Bild über Telegram Ferschicken.
Vielen Dank in voraus.