NEWS
Motion.adapter mit motionEye
-
Hallo zusammen,
erstmal ein Kompliment von mir an alle die hier soviel Arbeit und Wissen reinstecken… Ihr seid super
Nun aber auch ohne umschweife zu meinem Problem/Frage.
Ich habe das Wochenende genutzt um meine Hausautomatisation mal neu aufzusetzen und dabei auch gleich meine beiden Kameras (Foscam FI9900p) mit einzubinden. Das Setup sieht jetzt folgendermaßen aus:
1x RPi 3 Motioneye + ioBroker (motion.adapter + javascript.adapter)
1x RPi 2 ioBroker (Licht etc.)
Motioneye läuft super und auch die beiden ioBroker arbeiten im Multihost zusammen. Was ich jetzt aber noch möchte ist eine Telegram-Benachrichtigung, Lampenschaltung bei Bewegung + Button im VIS zum ein/ausschalten der Motiondetection.
Der Adapter ist so wie im Git beschrieben installiert und er hat scheinbar auch die Kameras erkannt (ich habe 2 Threads mit config etc). Jedoch reagiert er nicht auf die Events. hatte ein kleines Script welches bei motion_detect ein Telegram senden soll. Nix kam an und auch in den Logs steht kein Empfangenes Event.
Har das zufällig von euch schon jemand am laufen und kann mir sagen wo es haken könnte ?
Viele Grüße und einen schönen Abend
-
Wenn du motioneye und iobroker laufen hast, brauchst du eigentlich keinen motion-Adapter mehr.
Du machst bei motioneye unter Motion Notification -> Call a web hook zum simple-API des iobrokers, z.B.: http://IP_ioBroker:Port_von_SimpleAPI/set/javascript.0.Pi-detection?value=true
HTTP Methode: GET
Die Variable Pi-detection legst du dir vorher in ioBroker an. Ein weiteres Script macht z.B. aus true nach 1min wieder false.
-
Guten Morgen lobomau,
danke für den Tip. Die Webhook hat aber scheinbar den "Nachteil" das ich wirklich nur auf das Motion-Event reagieren kann oder ?
Hier wüsste ich z.B. nicht wie ich dann an das dazugehörige Image komme um das per Telegram zu verschicken.
Auch kann ich mit der Lösung (glaube ich) die Detection nicht per Button Ein/Aus-schalten oder ?
-
Ja, das wäre dann der nächste Schritt. Mit dem oben beschriebenen hättest du erstmal eine Variable, die true wird wenn detection erkannt wird.
Dann habe ich ein Script, dass ein Foto zu telegram schickt, sobalt detection true wird:
var request = require('request'); var fs = require('fs'); function sendImage() { request.get({url: 'http://IP_motioneye_PiCam/picture/1/current/', encoding: 'binary'}, function (err, response, body) { fs.writeFile("/tmp/snap-pi1.jpg", body, 'binary', function(err) { if (err) { console.error(err); } else { console.log('Snapshot sent'); sendTo('telegram.1', '/tmp/snap-pi1.jpg'); //sendTo('telegram.0', {text: '/tmp/snap.jpg', caption: 'Snapshot'}); } }); }); } on("javascript.0.Variablen.Pi1-detection"/*Variablen.Pi1-detection*/, function (obj) { if (obj.state.val) { // send 4 images: immediately, in 5, 15 and 30 seconds sendImage(); setTimeout(sendImage, 2000); // setTimeout(sendImage, 10000); // setTimeout(sendImage, 15000); } });
So würde es direkt mit der Raspi-Cam funktionieren. Bei anderen Cams muss man wohl die 5. Zeile anpassen.
Ein weiteres Script schreibt true wieder nach einer Zeit auf false. Könnte man auch in ein Script packen, wenn man es könnte. Kann ich nicht deswegen dann mit javascript im Blockly Format.
Die detection in der Cam schalte ich nicht ab. Aber man kann trotzdem es so schreiben, dass die Fotos nur unter bestimmten Bedingungen geschickt werden, z.B. durch eine weitere Variable, welche du über VIS true/false setzt.
-
Hey, so hab mich heute morgen mal rangesetzt. Nun läuft es. Danke erstmal für deine Hilfe
Meine Lösung ist nun folgende (ohne den motion Adapter).
Jede Kamera hat drei Datenpunkte (lastImage, detected, state)
Ändert man nun den State auf true, wird das aktuelle Kameraobjekt von motioneye geholt, verändert und wieder zum speichern zurückgeschickt. Somit ist das schonmal regelbar.
Wird nun eine Bewegung erkannt schickt Motioneye den webhook los und setzt detect für eine minute auf true. Gleichzeitig wird ein Foto an Telegram geschickt und der Pfad zum Bild temporär gespeichert (der Pfad ist in der lastImage). Hier soll nachher noch etwas dran geschraubt werden
Jetzt muss ich mir nur noch überlegen wie ich Netzwerkschonend einen Statusabgleich mit Motioneye hinbekomme damit sichergestellt ist das True/False synchron sind.
Gesendet von meinem SM-G950F mit Tapatalk
-
Ich scheitere leider auch an einer Lösung mit Motion Adapter, da ich trotz funktionierendem motion und Bewegungserkennung keine events an iobroker übergeben bekomme.
Hat jemand evtl Erfahrung wieviele Kameras der raspi3 mit motioneyeos gleichzeitig packt?
-
Hi,
danke für die Lösung mit dem JavaScript. Hat bei mir funktioniert. Hab eine Xiaomi Cam mit dem Dafang Hack, die via rstp in motioneye eingebunden ist.
Momentan hackt es noch ein wenig, weil die Motion Detection nicht immer auslöst. Muss aber an der Kamera oder Motioneye liegen.
ciao
Martin
-
Kleine Ergänzung von heute morgen. Es läuft jetzt deutlich flüssiger. Hab die Cams jetzt mal auf den Unifi AP umgestellt anstelle des alten TP Links.
Erkennung läuft flüssig. Habe das Skript jetzt noch ergänzt und mache das zurücksetzen der Motion Variabel direkt dort anstatt in einem separaten Skript.
-
Hallo Martin,
kannst du ggf. dein Script posten ?
Würde mir meine bevorstehende integration immens vereinfachen ;-).
Dank und Gruß
MM
-
@lobomau said in Motion.adapter mit motionEye:
Wenn du motioneye und iobroker laufen hast, brauchst du eigentlich keinen motion-Adapter mehr.
Du machst bei motioneye unter Motion Notification -> Call a web hook zum simple-API des iobrokers, z.B.: http://IP_ioBroker:Port_von_SimpleAPI/set/javascript.0.Pi-detection?value=true
HTTP Methode: GET
Die Variable Pi-detection legst du dir vorher in ioBroker an. Ein weiteres Script macht z.B. aus true nach 1min wieder false.
ich bin recht neu in der Materie, das mit dem call a web hook habe ich verstanden, könntest du mir vielleicht kurz erläutern wie ich ein weiteres script erstelle um aus true nach einer min wieder false zu machen (und wo ich das dann hinpacken muss)
-
@Lutz74 hast du schon mit Blockly Scripte erzeugt? Dann könnten die Bildschirm Fotos schon weiterhelfen. Leider etwas fummelig am Handy, deswegen auf zwei Fotos. Es geht eigentlich nur um den zweiten Block von unten. Wenn p1-detection = wahr, dann nach 120s wieder unwahr.
Zur Sicherheit macht der andere Block immer um Mitternacht unwahr und der andere Block ganz oben macht bei einem Script-Start unwahr.
-
@lobomau Vielen Dank dafür, hast mir sehr geholfen... ich hoffe das ich den Rest mit deer Cam&Telegram auch noch hinbekomme
-
@lobomau Ich muss dich leider nochmal nerven....
Habe nun alles soweit stehen und es läuft.... bis auf...... motionEye gibt mir keine Notification ab. Gebe ich den Link des Web Hook in einen Browser ein, funktioniert alles und ich bekomme auch ein Bild in Telegram.....
Hast du da vielleicht eine Idee warum motionEye da "querschiesst"?!
-
Hast den link unter Motion Notifications -> call a Web Hook eingegeben?
Gruß
Christian -
@Lutz74 du musst erstmal feststellen ob motioneye überhaupt eine Bewegung feststellt.
Show frame changes ON würde dir die Anzahl der veränderten frames anzeigen. Du hast auf frame change threshold 10% eingestellt. Bei z. B. 1 Megapixel Auflösung müssen sich also 100.000 Pixel ändern.
Man kann auch einstellen dass ein rotes Feld um die Bewegungen gezeichnet wird.
Funktioniert das? -
-
gerade durch zufall entdeckt, als eine katze rein wollte, das es wohl den roten rahmen gibt... den gab es aber erst als ich im hausflur das licht angemacht habe... demnach scheint er ja eine motion detection zu haben! Nichts desto trotz funktioniert es leider wohl nicht immer... mal ja, mal nein.... bin da echt ratlos
-
@Lutz74 já, genau den roten Kasten meine ich.
Aber nicht übertreiben mit 0%. Dann ist Dauer-motion-detection! Man hat immer paar Pixel, die sich ändern. Man muss sich da antasten. Mach mal 5% und schau ab was für einer Bewegung der rote Kasten kommt. Noise Level würde ich auch etwas hochstellen. -
hast als Methode "GET" gewählt?
-
@mikiline Ja, das habe ich