Die Birdcam!

Es ist endlich mal wieder richtig Winter bei uns. Und auch wenn der Schnee nicht ganz so viel ist denken wir natürlich an die armen Vögelchen die gerne leckeres Futter haben wollen. Wer jetzt denkt wir stellen den Vögelchen einfach so ein Vogelhäuschen mit Futter hin, der irrt natürlich. Das Ding muss natürlich überwacht sein…

Und schon hat man eine günstige, regenfeste Webcam auf Amazon geschossen (klick) und sich das Ding mal angesehen.

Prinzipiell gibt es ein paar Möglichkeiten auf diese Webcam zuzugreifen, der Aufruf der IP im Browser führt das Konfigurationsinterface zu Tage – und das ohne dass man irgendeine chinesische ich-stell-alle-meine-Daten-in-die-Cloud-App aufrufen muss. Nimmt man von dort den Link ‚/snap.jpg‘ so sieht man das aktuelle Kamerabild. Ruft man die IP mit ‚ rtsp://IP_DER_CAM:554/11 ‚ auf, so bekommt man den Livestream 1 (gute Qualität) und mit ‚ rtsp:// IP_DER_CAM :554/12‘ den Livestream 2 (nicht so gute Qualität). Auch hierfür kann man im Interface konfigurieren dass ein Passwort beim Aufrufen verlangt wird. Den rtsp-Stream kann man also direkt ins Internet rausgeben. Das Passwort ist aber das gleiche wie für das Webinterface, deshalb sollte man das nicht unbedingt jedem geben.

Auf Nachtsicht schaltet die Kamera übrigens vollautomatisch um und die Sichtweite im dunkeln beträgt ca. 5 Meter. Durchaus nicht schlecht für den Preis!

Fürs Bilder ansehen kann man ein kleines PHP-Wrapper Script bauen welches das Passwort hat und das Bild holt und auf einer Page ohne Passwort anzeigt, das ist kein Hexenwerk:

<?php
   /* globals */
   $url = 'http://meine_externe_ip:123/snap.jpg';
   $username = 'meinuser';
   $password = 'meinpasswort';

   /* get picture */
   $context = stream_context_create(array(
       'http' => array(
           'header'  => "Authorization: Basic " . base64_encode("$username:$password")
       )
   ));
   $picture = file_get_contents($url, false, $context);

   /* show picture */
   header("Content-Type: image/jpeg");
   echo $picture;
?>

Das ganze kommt noch in eine html-Datei und fertig ist die Vogel-Spanner Page:

<!DOCTYPE html>
<html lang="de">
   <head>
       <meta charset="utf-8">
       <title>Birdcam!</title>
   </head>
   <body lang="de">
       <img id="birdpic" src="bird.php?rand_number=42" style="max-width: 100%; max-height: 98vh; height: auto;">
       <p>
       Auto-Aktualisierung:
       <select id="autorefreshval" onchange="setAutoRefresh();">
           <option value="0">Aus</option>
           <option value="5">5 Sekunden</option>
           <option value="10">10 Sekunden</option>
           <option value="30">30 Sekunden</option>
           <option value="60">1 Minute</option>
           <option value="300">5 Minuten</option>
       </select>
       <script>
           "use strict";
           let refreshvalue = 0;
           let refreshtimer;
           
           /* Reset Optionfield */
           document.getElementById("autorefreshval").value = 0;
       
           function reloadImage() {
               console.log('Reloading Image');
               document.getElementById("birdpic").src = document.getElementById("birdpic").src.split('?')[0] + '?rand_number=' + Math.random();
           }
       
           function setAutoRefresh() {
               refreshvalue = document.getElementById("autorefreshval").value;
               if (refreshvalue != "0") {
                   console.log('Setting Auto-Refresh to ' + refreshvalue + ' seconds');
                   clearInterval(refreshtimer);
                   refreshtimer = setInterval(reloadImage, refreshvalue * 1000);
               } else {
                   console.log('Setting Auto-Refresh OFF');
                   clearInterval(refreshtimer);
               }
               
           }
       </script>
   </body>
</html>

Die Kamera kann übrigens bei Bewegung in mehreren (auswählbaren) Quadranten das Bild (und einen kurzen Videoclip) auf einen FTP-Server laden, oder das Bild (bis zu drei um genau zu sein) direkt per Mail senden. Somit erwischt man die Vögel auch:

Lustigerweise geht das Konfigurieren der Bewegungserkennung nur im Internet Explorer 🙁

Und wer sich damit abquält wie er die Videos der Kamera abspielen kann, ich hab eine Website gefunden bei der es den Programmcode gibt um diese Videodateien so zu kodieren damit normale Programme sie lesen können: Hier gehts lang!


Beitrag veröffentlicht

in

, , ,

von

Schlagwörter:

Kommentare

7 Antworten zu „Die Birdcam!“

  1. Lars

    Ich weiß nicht, bei dem Aufwand mit der Fertiglösung hätte ich es mit einem Raspi+ Kamera probiert.

    Außerdem erinnert mich die Überschrift an das hier https://m.youtube.com/watch?v=gaXigSu72A4

    1. Thomas

      Ich fände es aber kompliziert den Raspi wasserdicht zu kriegen. Außerdem bräuchte ich dann auch noch die IR-Leds dazu. Ich denke so war es ein kleines bisschen einfacher…

  2. Und als nächstes, unter Verwendung eines Machine Learning Tools, eine automatische Erkennung der verschiedenen Vogelarten die an dein Häuschen kommen. Bonuspunkte gibt es, wenn Eichhörnchen oder Katzen als „nicht vogelartige Tiere“ erkannt werden 😉

  3. Thomas

    Also die Google Vision API ( https://cloud.google.com/vision ) ist sich bei dem Bild relativ sicher Einen Baum und ein Dach im Winter zu erkennen…
    Haut mich jetzt ned so ganz vom Hocker. Aber ja, da ein neurales Netzt mit verschiedensten Vogelbildern zu trainieren um dann die Vögel zu erkennen wäre schon cool.
    Ich stecks mal in die „Wenn ich mal Zeit habe“ Tüte 🙂

  4. senf

    1. „Herzlich willkommen bei BirdBook“ – Vögel zahlen das Futter mit Ihren optischen Daten
    2. Dein PHP Script hat einen Bug, der so offensichtlich ist, daß es peinlich wäre, das auszusprechen. Ich vermute, daß das Script oben intern bereits gefixt wurde, Du aber vergessen hast das hier auch zu beheben.=>Z.16.

    1. Thomas

      Hab Herzlich über BirdBook lachen müssen. Am Tag des Lachens genau richtig 🙂
      Ja, der peinliche Fehler kam weil ich zwei verschiedene Versionen hatte und die dann vermatscht hab. Habs korrigiert und werde mich in der Ecke schämen!

  5. Dennis

    Hey, mega cool. Das kommt mir genau richtig. Danke dafür.
    Gibst du noch support dafür?
    Meine Frage ob sich das script durch einen sichtbaren Timer erweitern lässt. Derzeit nutze ich diesen hier:

    var timeleft = 1;
    var downloadTimer = setInterval(function(){
    if(timeleft <= 0){
    clearInterval(downloadTimer);
    document.getElementById("birdtimer").innerHTML = "Refresh";
    } else {
    document.getElementById("birdtimer").innerHTML = timeleft + "s";
    }
    timeleft += 1;
    }, 1000);

    So lässt sich ein Timer ins bild einbauen der sich dann entsprechend anpasst sobald jedes bild sich aktualisiert hat. Ich kanns nicht. Eventuell hast du zeit und lust. ?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert