Hallo,
als Neuling stehe ich derzeit wie der Ochse vorm Berg. Ich hoffe Ihr habt einen Tipp:
Vorhaben:
Bild der Ipkamera auf Handy bei Bewegung (Motion detection über Kamera).
Im Prizip ist das schon gelöst, aber es gibt ein Detail was nicht funktioniert. Bislang hangel ich mich durch Youtube Tutoriuals die ich modifiziere.
Die Kamera legt auf dem Rapi die Bilder ab, alle ~2 Sekunden. Der Ordner wird überwacht von einem Skript. Das dummy device tuer.Bewegung setzt als current_file die letzte Datei die abgelegt wurde.
Das Notify PicPush sendet die Bilder per Telegram. Das funktioniert.
ABER: die Bilder werden (vorallem im Mobilnetz) nur halb übertragen. Heißt: die unteren 2/3 sind grau, ohne Inhalt. Ich VERMUTE es liegt daran, dass Telegramm die Bilder schneller raus jagt als meine IPKamera diese ordentlich ablegt (die Kamera ist über WLAN etwas
langsam)
Im Apache Ordner auf dem Raspi sind alle Bilder korrekt abgelegt.
Idee: Ich würde versuchen eine Verzögerung einzubauen. Die Bilder sollen von der Kamera abgelegt werden und erst dann - nach einer Verzögerung - soll der Telegram push erfolgen.
Ich verzweifel an der Formatierung mangels Skipt Kenntnisse. Gestoplert bin ich schon über das FHEM Sleep Kommando, bekomme es aber nicht hin dieses im DEF meines Notify einzubauen.
tuer.Bewegung set Telegram sendImage /var/www/upload/camera/FI9805W_C4D6553CEFB9/snap/$EVTPART1
Ich würde eine Verzögerung von 4 Sekunden versuchen.
Motion Detection -> Bild wird gespeichert -> Current_file wird mit dem Bilddateinamen definiert ->4 Sekunden Verzögerung ->Telegramm notifiy picPush
Könnt ihr mir helfen? :-[
Das mit dem sleep ist schon richtig, versuch doch einfach folgendes:
tuer.Bewegung sleep 4; set Telegram sendImage /var/www/upload/camera/FI9805W_C4D6553CEFB9/snap/$EVTPART1
Ich habe das mit einem DOIF gelöst:
define ipcam.vorgarten.teleBot DOIF ([OUT.Bewegung]) \
(set teleBot message Vorgarten - $EVENT) \
(set teleBot sendImage /var/www/upload/camera/[$DEVICE:current_file])
attr ipcam.vorgarten.teleBot do always
attr ipcam.vorgarten.teleBot wait 0,3
Die Nachricht wird sofort gesendet, das Bild 3sec später.
DOIF wirkt erst mal komplizierter. Man kann aber damit viele andere Ereignisse verschachtel / später nachrüsten. Alles mit einem DOIF. Ich möchte dieses Bsp. noch zusätzlich abhängig von der Uhrzeit oder Anwesenheit steuern.
VG
Alex
@viegener:
Vielen Dank für Deine Antwort.
Super geil!! Das funktioniert. Langsam liebe ich FHEM :D :D
Eine Frage noch: ist das jetzt der "gute" Sleep aus FHEM oder der "schlechte" sleep-Befehl der FEHM anhält?
@Heimbastler:
Ein interesanter Gedanke. Ich glaube das mit der SOFORT-Nachricht würde mir auch gefallen.
DOIF habe ich schonmal wo gelesen, aber nicht verstanden.
Schreibe ich das alles so untereinander in den DEF Bereich (s. Bild)?
Ich dachte erst ich müsse deine Zeile 1 define ipcam.Hasutuer.teleBot DOIF ([tuer.Bewegung]) \
[angepasst] in das Eingabefeld, ganz oben in FEHM, eingeben. Dann erhielt ich aber die Fehlermeldung:
ipcam.Haustuer.teleBot DOIF: expected DOELSEIF or DOELSE: \
Kannst du mir die 5 Zeilen mal erläutern? Wo muss ich was eintragen?
Die "wait 0,3" sind 0,3 Sekunden Verzögerung??
Inhaltlich sieht es so aus als hätten wir beide das gleiche youtube Tutorial geguckt. ;-)
Hi
die zeilen habe ich aus meiner cfg kopiert. Kannst so in die def eingeben ohne die \. Das entsteht dann wenn man absätze in der def erzeugt zwecks besserer sichtbarkeit.
Das DOIF hat cmd/ausführungsteile. Im 1sten wird der der dateiname gesendet, im 2ten das bild selbst.
Das Komma in wait trennt die "wait zeit" in sec. 0sec fürs 1ste cmd, 3sec fürs 2te cmd.
Die Commandref zu DOIF hat viele schöne Bsp. wie man Abhängigkeiten beschreibt.
Ich versuch die Tage noch andere Abhängigkeiten einzubauen. Gibt dann feedback dazu wieder.
Viel Spaß
Alex
Zitat von: Chrizzel am 18 Dezember 2016, 20:58:45
Eine Frage noch: ist das jetzt der "gute" Sleep aus FHEM oder der "schlechte" sleep-Befehl der FEHM anhält?
Das ist das "gute" sleep, da Du ja in diesem Fall einen fhem Befehl absetzt (im Gegensatz zu einem perl-aufruf)
Danke euch für die Antworten. Ich bastel mit den Infos über Weihnachten mal was rum :-)
Zusatzfrage: ;D
Interessant wäre doch noch eine Möglichkeit, das notity temporär zu unterdrücken.
Sollte z.B. vor der Kamera gearbeitet werden, so werde ich ja von Telegram zugespamt mit Meldungen. Um das zu verhindern stelle ich mit vor, einen Befehl an den TelegramBot zu schreiben, der einen Befehl auslöst. Dazu gibt es ja Tutorials.
ABER: Wie müsste ein solcher "blockier"- Befehl aussehen und eingetragen werden, um beispielsweise 60 Min. kein notity über Telegram für die Kamera auszulösen.
PS: das andere läuft dank euch richtig (!!) gut. Bin begeistert :-)
Im Prinzip brauchst Du ja 2 Befehle einmal das deaktivieren und dann nach einer Zeit wieder aktivieren.
Also die Stichworte wären jetzt bei einem notify
set ... inactive
set ... active
Das zweite Kommando sollte zusammen mit dem ersten aber zeitgesteuert abgesetzt werden. Sprich erst inaktiv setzen und dann einen Timer, der nach der vorgegebenen Zeit wieder aktiv setzt (Stichwort at)
Das gilt aber nur für eine Lösung mit notify
Das Telegram Commando soll heißen: "tonaus 15" für z.B. 15 Minuten keine Bilder senden. Die Minuten sollen variabel sein. Daher grabbe ich mir vermutlich $EVTPART1 (tonaus) und $EVTPART2 (die Minuten).
"Picpush" ist mein notify welches die Kamerabilder per telegram versendet. Dieses muss also temporär deaktiviert werden.
Ich versuche es mal für mich zu verstehen:
Eingetragen in dem notify "Inbox" welches auf eingehende Telegram Nachrichten reagiert:
Die Telegram Eingangsnachricht setzt "set PicPush incative".
dann gefolgt von
Variante 1 mit festen 10 Minuten-Abschaltungen (eigentlich nicht geplant)
"at +00:10:00 set PicPush active"
oder
Variante 2 (variabel)
"at +00:$EVTPART2:00 set Picpush active"
Das geht so niemals, oder?
Zitat von: Chrizzel am 24 Dezember 2016, 00:13:09
Das geht so niemals, oder?
Sorry, ich verstehe nicht genau, was geht dabei nicht? Generell ist das der von mir vorgeschlagene Weg für ein notify
sorry, da habe ich mich was blöd ausgedrückt.
Ich glaube es aber herausgefunden zu haben. Siehe Bild - Das funktioniert anscheint. Mit der Eingabe "tonaus 01" schalte ich den notify 1 min auf inactiv.
Mein Denkfehler war anzunhemen, das so ein "define" immer nur über die FHEM Eingabeleiste oben benutzt wird. Offenbar kann man es aber auch im DEF Bereich verwenden. Ich definiere so dynamisch die Ausschaltzeit.
Das LOG sieht dann so aus:
016.12.26 14:28:24 1: in MODIFIED
2016.12.26 14:28:24 1: in MODIFIED
2016.12.26 14:28:25 1: in SAVE
2016.12.26 14:28:25 1: in SAVE
2016.12.26 14:30:42 1: in MODIFIED
2016.12.26 14:30:42 1: in MODIFIED
2016.12.26 14:30:45 1: in SAVE
2016.12.26 14:30:45 1: in SAVE
2016.12.26 14:31:15 1: in DEFINED
2016.12.26 14:31:15 1: in DEFINED
2016.12.26 14:32:15 1: in DELETED
2016.12.26 14:32:15 1: in DELETED
Danke für Deinen Denkansatz. Ich arbeite mich voran.. ;)
Vielleicht hilft der Beitrag einem anderen Neuling auch mal weiter.
Zitat von: Chrizzel am 26 Dezember 2016, 14:03:36
Danke für Deinen Denkansatz. Ich arbeite mich voran.. ;)
Vielleicht hilft der Beitrag einem anderen Neuling auch mal weiter.
OK, kannst Du den Thread noch als gelöst markieren (Thema ändern), wenn Dein Problem gelöst ist
Hallo Chrizzel,
kannst du vielleicht mal was zu dem eingesetzten Script sagen, mit welchem du den Ordner überwachst (Link zum Youtube Video wäre auch nett)
LG
Norbert
Hallo Norbert,
ja klar, sehr gerne.
Ich habe mich bislang stark an den Tutorials von Matthias Kleine orientiert. Er hat einen Blog Beitrag und ein Video dazu:
https://haus-automatisierung.com/hardware/fhem/2016/07/14/fhem-tutorial-reihe-part-11-benachrichtigung-mit-bild-bei-bewegung.html (https://haus-automatisierung.com/hardware/fhem/2016/07/14/fhem-tutorial-reihe-part-11-benachrichtigung-mit-bild-bei-bewegung.html)
Nur die spätere Weiterleitung über Telegram habe ich mir anders zusammen gebaut, aber grundliegend basierend auf seinem Konzept.
Du musst nur schauen, ob Du alle Voraussetzungen bei Dir vorliegen hast. Er setzt in seinen Videos immer voraus, dass man alle vorherigen auch "abgearbeitet" hat. Es könnte sonst ein Dienst (bei mir war es der Apache Server) fehlen, den Du noch installieren musst.
Ich schließe das Thema dann. Danke an alle!