Hallo
Ich möchte gern mit hilfe eines Bewegungsmelders und IPCAM mit Pushover
und per email Bilder zusenden lassen die mit meiner Webcam aufgenommen wurden.
Das Pushover funktioniert es soweit nur per email bekomme ich zwar eine Nachricht aber es wird kein bild mit versendet
Hier das notify
define not_IPCam_Push notify ipcam {system ("curl -s -F 'token=xxxxxxxxxxxxxxx' -F 'user=xxxxxxxxxxxxxxxxxxx' -F 'message=Wohnzimmer\nBewegung erkannt\nhttp://xxxxxxx.xxxxx.xxx:8083/fhem/jsf/ipcam_snapshot.jpg' https://api.pushover.net/1/messages.json");;DebianMail('xxxxxxxxx@@gmail.com','Wohnzimmer Bild','Bewegung erkannt ',' -a /opt/fhem/FHEM/ipcam_snapshot.jpg')}
Was ist da falsch?
Wenn ich per sendEmail versende bekomme ich die email mit bild
sendemail -f xxxxxxx@gmail.com -t xxxxxx@gmail.com -u bildsenden -m bewegung -s smtp.gmail.com -xu xxxxxxxx@gmail.com -xp pass -a /opt/fhem/FHEM/ipcam_snapshot.jpg
Wenn ich die funktion DebianMail erweitere mit Pfadangabe
my $path = "/opt/fhem/FHEM/ipcam_snapshot.jpg";
wird mir ebenfalls ein email mit Bild geschickt nur dann jedesmal auch wenn die Waschmaschine fertig ist was ja nicht gewollt ist.
Gibt es her keinen der mir helfen kann in der comman.ref wird leider auch nicht darauf eingegangen wie man das bewerkstelligen kann
Ich mache das so:
[Quelle: http://www.fischer-net.de/hausautomation/fhem/49-fhem-modul-ipcam-holt-bilder.html]
##############
1. Sendmail scheint ja bei Dir zu laufen. Für das Verschicken von n Bildern füge in 99_myUtils.pm ein:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
#######################################
sub
sendSnapshot(@)
{
my ($cam,$snapshots) = @_;
my $storage = AttrVal($cam,"storage","");
my $rcpt = 'empfängeradresse@provider1.tld1';
my $from = 'absenderadresse@provider2.tld3;
my $usr = "username_beim SMTP-Provider2";
my $pw = "<mein passwort>" ;
my $smtp = "smtp.provider2.tld2:587";
my $subj = "FHEM: Kamera $cam hat eine Bewegung aufgezeichnet";
my $last = ReadingsTimestamp($cam,"last","");
my $mess = "Kamera $cam hat eine Bewegung am $last aufgezeichnet:";
if(!-d $storage) {
Log 1, "IPCAM $cam storagepath does not exists: $storage";
return "storagepath for $cam does not exists: $storage";
}
if(!$last) {
Log 1, "IPCAM $cam no snapshots available";
return "no snapshots available for $cam";
}
my $cmd = "sendemail -f $from -t $rcpt -s $smtp -xu $usr -xp $pw -u $subj -m $mess ";
$cmd .= "-o message-content-type=text -o message-charset=utf-8 -a";
for (my $s=1;$s<$snapshots+1;$s++) {
$cmd .= " $storage/".ReadingsVal($cam,"snapshot$s","");
}
my $ret = `$cmd`;
$ret =~ s/[\r\n]//g;
Log 4, "IPCAM sendSnapshot: $ret";
return undef;
}
1;
Wenn Du schon eine 99_myUtils.pm hast, brauchst Du natürlich den Header vor "Sub sendSnapshot(@)" und die 1; am Ende nicht mehr einzugeben. Die Anführungszeichen bei den Webadressen müssen stehenbleiben.
Ich habe nun einen Tür/Fensterkontakt TF_Haustür und schicke im Auslösefall 9 Bilder von der instar-Kamera Kam2 (angenommener IP:Port: 10.0.0.8:81) in das vorher erstellte Verzeichnis /media/usb1/Haus/Kamera2 (dort Schreibrechte für FHEM vorsehen!). Jetzt definieren wir in der fhem.cfg:
define Kam2_Alarm IPCAM 10.0.0.8:81
attr Kam2_Alarm delay 5
# das ist die Zeit in Sekunden zwischen 2 Bildern
attr Kam2_Alarm path snapshot.cgi?user=Kamerauser&pwd=Kamerapasswort
attr Kam2_Alarm snapshots 9
attr Kam2_Alarm storage /media/usb1/Haus/Kamera2
attr Kam2_Alarm timestamp 0
2. Mache erst ein notify, ob die Haustür geöffnet wurde und lasse Bilder abspeichern:
define Haustuer_auf1 notify TF_Haustuer:.*open get Kam2_Alarm image
3. Mache Notify, ob die Bilder fertig geschrieben sind und maile sie unter Benutzung der oben beschriebenen Routine fort:
define Haustuer_auf_Bilder notify Kam2_Alarm:.*snapshots.* { sendSnapshot("%NAME","%EVTPART1") }
Fertig!
Möchtest Du diese 9 Bilder auch auf der FHEM-Seite anzeigen lassen (ich hab ein Dashboard dafür, das 3x3 Bilder anzeigt), dann brauchst Du 9 Einträge der Art:
define Kamera2_Alarm1 weblink image /fhem/webcam/Kamera2/Kam2_Alarm_snapshot_1.jpg
attr Kamera2_Alarm1 group K2Al1
attr Kamera2_Alarm1 htmlattr width="200" height="150" frameborder="0" marginheight="0" marginwidth="0" style="background-color: grey;; -webkit-border-radius: 10px;; -moz-border-radius: 10px;; border-radius: 10px;;"
Vorher muss im fhem-www-Verzeichnis (auf dem Raspi ist das /opt/fhem/WWW) der symbolische link auf /media/usb1/Haus gesetzt werden.
Hallo,
ZitatGibt es her keinen der mir helfen kann in der comman.ref wird leider auch nicht darauf eingegangen wie man das bewerkstelligen kann
Nur mal die Pferde hier nicht scheu machen ;)
Knapp 6 Stunden nach deiner Anfangsfrage schon nachfragen ist etwas "........................" - sag ich mal so salopp.
Vielleicht hatte topfi ja ein schönes ruhiges Wochenende.
Dafür hat er dir ja heute geantwortet.
Und da hast ja explizit nochmal nach
Zitatder mir helfen kann
gefragt.
Das war nun eben topfi - übrigens, das wär ja was für Wiki @topfi ;D
Da ich dir nicht helfen konnte hab ich auch nichts dazu geschrieben 8)
Bis jetzt :P
Also das nächste Mal ein bischen Zeit geben bitte.
idR findet sich eigentlich immer schnell jemand der dir hilft (und auch helfen kann).
Und selbst wenn es mal ein paar Tage dauert - wir sind alle freiwillig und gerne hier (und jeder hier opfert seine Zeit - auch du ;) ).
Und bitte nicht beleidigt sein wegen meinem Post jetzt.
Grüße
Kein Problem kann auch warten dachte halt mein Problem ist hier untergegangen.
Bin eigenlich ansonst kein Drängler :)
Hallo Topfi
Habe die sache bei Fischer auch schon probiert
hat aber bei nicht funktioniert obwohl ich die Funktion
noch um user und pass erweitert habe.Von dort bekommt
man keine Antwort wenn Probleme auftreten.
Werde es jetzt mit deinen Vorschlag testen und berichten
wenn es klappt. Danke für deine Hilfe
Hallo zusammen!
Ich habe eine mail-function für euch, mit der man mehrere Bilder versenden kann.
Bei mir auf meinem Raspberry PI klappt es wunderbar.
Ich hoffe, ihr kommt damit klar.
Liebe Grüße
Werner
Anhang: 99_myMailUtils.pm (alte Version, neue siehe weiter hinten im Thema)
Warum gibt es hier eigentlich nirgendwo einen "like-Button"? Den drücke ich jetzt mal imaginär. Danke für die sehr gut dokumentierte Routine. Ich probiere das demnächst aus und stelle meine Version gegebenenfalls um. Deine ist nämlich viel übersichtlicher. Außerdem steht da der Empfänger nicht im Quelltext, denn ich möchte ausgewählte Alarmmails an eine andere Adresse (meine Hauptmailadresse) schicken lassen. Die normalen Systemmails gehen an ein anderes Sammelpostfach.
Hihi, ich habe auch eine gute Stunde damit verschwendet, zu finden, dass das Dollarzeichen aus der ssl.pm gelöscht werden muss.
Ach ja, hast Du eigentlich auch ab und zu mal so eine Meldung im Log?
IPCAM Kam2_Alarm Wrong or not supported image format: error while reading source image: Eingabe-/Ausgabefehler
Dann speichert er die Serie nicht ab und schickt auch keine Mail. Kommt selten vor.
Hallo Topfi
Habe die Funktion mal per copy paste in meine myutils
eingefügt, bekomme dann aber wie bei letzten mal vom fhem fehler gemeldet.Muss dann die emails wieder
Mit\@ maskieren damit fhem ruhe gibt.Den rest habe
ich so übernommen wie du geschrieben hast nur halt
an meine Geräte angepaßt.Es werden einfach keine emails
verschickt. Im log erscheint komischerweise auch keine
Fehlermeldung.Die Bilder werden ja gemacht und unter
/opt/fhem/FHEM abgespeichert.
Hallo Werner
Ich denke mal deine Funktion ist so ähnlich muss
dann nur meine fhem.cfg entsprechend anpassen??
Die conf-Dateien neu eingelesen hast Du aber?!
Da im log nichts steht: löst denn das notify überhaupt aus? Was passiert denn, wenn Du in die fhem-Maske einfach get Kam2_Alarm image
eingibst? Werden dann neue Bilder generiert?
Was passiert, wenn man
{ sendSnapshot("%NAME","%EVTPART1") }
eingibt?
Hi zusammen!
In der fhem.cfg beim notify muss die emailadresse mit @@ maskiert werden.
Also: ....... sendSnapshots ("AnzBilder", "me@@provicer-smtp-server.de")
In Perlcode kann man mit \@ maskieren oder einfache Hochkommas verwenden!
Also: sendSnapshots ("AnzBilder", "me\@provicer-smtp-server.de") oder besser gleich
sendSnapshots ("AnzBilder", 'me@provicer-smtp-server.de')
Ich hoffe es hilft!
Liebe Grüße
Werner
Hallo topfi
Wenn ich get ipcam image eingebe werden bilder gemacht
Im log erscheint dann auch ein IPCAM ipcam snapshots: 3
Aber es wird keine email versendet. :(
Hallo wmeiners
Kannst du das mal kurz erklären wie ich das in der fhem.cfg
nuzen kann danke
Hallo inesa!
In der fhem.cfg muss ein notify definiert werden.
Beispiel:
define nfy_ipcam1_snapshots notify ipcam1:snapshots.* { sendmailSnapshots ("%",'you@@provider.de')}
Wichtig sind die beiden @@, es ist kein Tippfehler! Sonst wird das @ als ipcam1 interpretiert.
Das % sind die Anzahl der bilder, die mit ipcam1 get image generiert werden, abhängig von
dem attribut snapshots der cam.
Liebe Grüße
Werner
Hallo Topfi,
diese Fehlermeldung hatte ich heute auch bei "ipcam get image" erhalten!
IPCAM Kam2_Alarm Wrong or not supported image format: error while reading source image: Eingabe-/Ausgabefehler
Ursache: cam war aus, also nicht erreichbar!
lg Werner
Hallo Werner,
dann liegt das bei meiner Kamera wohl daran, dass diese nebenbei auch mit ihrer eigenen Bewegungserkennung noch eine E-Mail generiert. Wenn sie doppelt beschäftigt ist, klappt das wahrscheinlich nicht immer. Das kommt aber wie gesagt nur selten vor.
Hallo Werner
Ich bekomme diesen Fehler
"my" variable $tmp masks earlier declaration in same scope at ./FHEM/99_myMailUtils.pm line 102.
einfach rauslöschen? Eintrag ist ja doppelt
Meine mysendmail.conf sieht so aus für gmail
{accountname@gmail.com}
{passwort}
{smtp.gmail.com:465}
{tls=yes}
und das notify so
define MOTION.not.04 notify ipcam:snapshots.* { sendmailSnapshots ("3",'inesaxxx@@gmail.com')}
angepaßt habe ich dann noch den Pfad zu den Bildern
sub sendmailSnapshots{
my ($cnt, $to) = @_;
my $subj = 'ipcam: Moving-Alarm';
my $text = "Attention:\n\n";
my $file = '/opt/fhem/FHEM/ipcam_snapshot_';
my $ext = '.jpg';
Trotzdem kommt nicht bei mir an
Gruß Inesa
Zwischenzeitlich habe ich mal wieder zeit gefunden und meinen fehler gefunden.
In dem Script von Werner mußte diese zeile angepaßt werden
$nr = sprintf ("%02d", $i); in $nr = sprintf ("%01d", $i);
Da ipcam die bilder mir als ipcam_scnapshot_1.jpg abgelegt hatte und
sendEmail nach ipcam_scnapshot_01.jpg suchte.
Jetzt funktioniert jedenfalls alles danke noch für das Script.
hallo inesa,
das ist richtig. Ich habe die Datei so verändert, dass man nun bis 9 oder halt bis 99 Dateien
übermitteln kann.
Ich hänge die aktualisierte Version 1.2 an!
Liebe Grüße
Werner
Guten Abend,
sorry, dass ich auf dem alten Thema herumhacken muss, aber leider komme ich genau mit dem Teil nicht weiter :(
Ich habe die 99_myUtils.pm soweit zum laufen bekommen, dass die Mail mit Anhang rausgeht.
Überwachen möchte ich das Keyamtic der Haustüre.
Das Notify, dass bei Aktion der Keymatic die Bilder auf den Fhem-Server verschubst läuft ebenfalls sauber.
Leider reagiert das Notify zum Versand der Mail etwas "über".
Es sieht so aus:
EG_Kamera_Flur:.*snapshots.* sleep 5; { sendSnapshot("%NAME","%EVTPART1")
Nun ist es so, dass EG_Kamera_Flur scheinbar mehrfach das Reading "snapshots = 9" während der Übertragung ändert.
Habe mal ein LOG für EG_Kamera_Flur angelegt und dort erscheinen binnen weniger Sekunden mehrere Einträge.
Achso, es sollen 9 Bilder im Abstand von 1 Sekunde erstellt werden.
Braver Weise sendet das Notify dann leider auch so um die 11 Mails mit den Bildern im Anhang an die Mail-Adresse.
Bin völlig ratlos wie ich das in den Griff bekomme, sleep verzögert den Mail-Angriff lediglich, die Readings werden aber weiterhin abgearbeitet.
Ich hoffe Ihr könnt mir nochmal helfen.
Viele Grüße
Manuel
Hallo Manuel,
so wie ich es einschätze, ist für die 11 emails das notify verantwortlich, dass die mails mit "get ipcamxx image" von der cam holt. Denn nachdem die Bilder geholt wurden, folgt das event "ipcamxx:snapshots.*"!
Schau es dir doch mal im Event monitor an.
Liebe Grüße
Werner
Guten Morgen Werner,
ja, genau so sieht es auch aus :( Bei dem Abholvorgang wird das Reading mehrfach mit "9" überschrieben und bei jedem Überschreiben läuft mein notify los.
Hast Du eine Idee, wie ich das Notify so einbremse, dass es auf das erste reagiert, dann aber X schläft, oder erst nach x Event reagiert, und dann die Mail abschickt.
Ich habe zwar schon ein bisschen in fhem gearbeitet, aber die Nuss ist mir zu hart.
Sorry.
Manuel
Hallo Martin,
wie sieht dein notify aus, dass die Bilder mit "get image x" holt aus. Welches Device gibt das Event hierfür?
Ist es die Cam, ein Bewegunsmelder oder ...?
Hier musst du ansetzen.
Liebe Grüße
Werner
Morgen Werner,
ich vermute, ich weiß was du meinst, aber hier die Aufstellung des Ganzen:
An der Haustür ist eine Keymatic im Einsatz, diese soll später bei unerlaubter Öffnung die Mail auslösen.
Derzeit sieht das Notfiy so aus:
EG_Flur_HT.*{fhem ("get EG_Kamera_Flur image")}
dannn werden die Bilder verarbeitet:
EG_Kamera_Flur:.*snapshots.* sleep 5; { sendSnapshot("%NAME","%EVTPART1") }
Viele Grüße
Manuel
Hallo Martin,
genau hier must du ansetzen!
EG_Flur_HT.*{fhem ("get EG_Kamera_Flur image")}
Alle Ereignisse (.*) des Gerätes EG_Flur_HT Triggern das notify!
Du musst es einschränken. Dazu schaue dir im Event Monitor an, welche Ereignisse es sind und dann wähle das richtige aus.
Beispiel:
EG_Flur_HT:Open{fhem ("get EG_Kamera_Flur image")}
Werner
Hallo,
ich versuche nun auch Bilder einer Cam per mail zu senden.
was klappt:
1. Bilder per notify aufnehmen lassen und speichern
2. nach erfolgreichen speichern email senden
was nicht klappt:
1. Bilder anhängen
hier mal die sendSnapshot(@) sub rutine in der 99myUtils
######################### Sende Bilder an Email ##############
sub
sendSnapshot(@)
{
my ($cam,$snapshots) = @_;
my $storage = AttrVal($cam,"storage","");
my $rcpt = 'xxxxx@xxx.de';
my $from = "xxxxx\@xxx.de";
my $usr = "xxxxx";
my $pw = "xxxxx";
my $smtp = "smtp.xxx.de:25";
my $subj = "FHEM: Kamera $cam hat eine Bewegung aufgezeichnet";
my $last = ReadingsTimestamp($cam,"last","");
my $mess = "Kamera $cam hat eine Bewegung am $last aufgezeichnet:";
Log 1, "IPCAM $cam : $storage";
if(!-d $storage) {
Log 1, "IPCAM $cam storagepath does not exists: $storage";
return "storagepath for $cam does not exists: $storage";
}
if(!$last) {
Log 1, "IPCAM $cam no snapshots available";
return "no snapshots available for $cam";
}
my $cmd = "sendemail -f $from -t $rcpt -s $smtp -xu $usr -xp $pw -u $subj -m $mess ";
$cmd .= "-o message-content-type=text -o message-charset=utf-8 -a";
for (my $s=1;$s<$snapshots+1;$s++) {
$cmd .= " $storage/".ReadingsVal($cam,"snapshot$s","");
}
my $ret = `$cmd`;
$ret =~ s/[\r\n]//g;
Log 4, "IPCAM sendSnapshot: $ret";
return undef;
}
wo liegt der Fehler???
mfg Maik
Fehler gefunden!
es lag nicht an der 99MyUtils , der aufruf in FHEM war falsch (veraltet)
alt: Cam1:.*snapshots.* { sendSnapshot("%NAME","%EVTPART1") }
geht so nicht mehr seit Version 5.7
neu Cam1:.*snapshots.* { sendSnapshot("$NAME","$EVTPART1") }
nun geht auch der Dateiversand.
mfg maik