Ankündigung

Einklappen
Keine Ankündigung bisher.

Fotos von IP-Cam per GA einlesen

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Fotos von IP-Cam per GA einlesen

    Hallo,

    ich habe hier ein einfaches Plugin geschrieben um GA gesteuert Fotos von eine IP-Cam einzulesen und in einem Verzeichnis abzulegen.
    Vorraussetzung ist, dass die Kamera über einen HTTP-Aufruf ein Bild senden kann.
    Für jede GA lässt sich ein Name angeben, unter dem das Bild gespeichert wird. Die Anzahl der Bilder ist ebenfalls einstellbar. Das aktuellste Bild lautet immer Name1.jpg, die älteren werden entsprechend umbenannt bis zum Maximalwert.
    Das aktuellste Bild wird auch immer unter picture_latest.jpg abgespeichert.

    Ich nutze dies für die CometVisu um zu einer Meldungsliste auch ein aktuelles Bild einzublenden. In einem anderen Menü kann man dann noch auf auf die restlichen Bilder zugreifen, getrennt nach den Ereignissen.

    PHP-Code:

    # Eventgesteuert Bilder von der Kamera laden
    # Carsten Wolff 10.09.2015
    # COMPILE_PLUGIN

    use LWP::Simple;

    ### KONFIGURATION ###
    my $path '/var/www/camera/';
    my $filename_latest 'picture_latest.jpg';
    my $filename_src;
    my $filename_dst;
    my $j;
    my @config;

    # Für jedes Ereignis eine Zeile
    # Parameter
    # name  : Name unter dem das Bild abgespeichert wird -> Name_nn.jpg
    # ga    : Gruppenadresse
    # anzahl: Maximale Anzahl der Fotos pro GA (1-99). Das älteste wird jeweils überschrieben.
    # camera: HTTP-Abfrage für die Kamera.
    # Die Bilder werden nach Erstellungsdatum hinter dem Namen durchnummeriert.
    # Name_01.jpg ist immer das aktuellste Bild, usw.
     
    push @config, { name => 'Tuerklingel'ga => 'n/n/n'anzahl => '10',
                    
    camera => 'http://user:pass@192.168.0.n/Streaming/channels/1/picture'};
    push @config, { name => 'BWM_Hauseingang'ga => 'n/n/n'anzahl => '20',
                    
    camera => 'http://user:pass@192.168.0.n/Streaming/channels/1/picture'};

    # Aufrufgrund ermitteln
    my $event=undef;
    if (!
    $plugin_initflag) {
      
    $event='restart'; } # Restart des daemons / Reboot
    elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'}) {
      
    $event='modified'; }           # Plugin modifiziert
    elsif (%msg) { $event='bus'; }   # Bustraffic
    elsif ($fh) { $event='socket'; } # Netzwerktraffic
    else { $event='cycle'; }         # Zyklus

    # Variablen initialisieren

    # Plugin-Code fuer die verschiedenen Aufrufvarianten
    if($event=~/restart|modified/) {
      
    # Erster Aufruf nach Reboot, Daemon-Restart oder Plugin-Modifikation
      # Cleanup aller Variablen
      
    for my $k (grep /^$plugname\_/, keys %plugin_info) {
        
    delete $plugin_info{$k};
      }
      
    # Alle GAs abonnieren
      
    foreach my $ga (@config) {
        
    $plugin_subscribe{$ga->{ga}}{$plugname}=1;    
      }
      
    $plugin_info{$plugname.'_cycle'}=0;
      return 
    "initialisiert";
    }
    elsif($event=~/bus/ && $msg{apcieq 'A_GroupValue_Write') {
      
    # Aufruf durch Bustraffic
      
    if ($msg{data}>0) {
        
        
    $filename_latest $path.$filename_latest;
     
        foreach 
    my $element (@config) {
            if (
    $msg{dstne $element->{ga}) { next;}

            
    # Aktuelles Bild von der Kamera laden
            
    getstore($element->{camera}, $filename_latest);
            
            for(
    my $i $element->{anzahl}; $i 1$i--) {
                
    $j $i 1;
                
    $filename_src $path.$element->{name}."_".sprintf("%02s",$j).".jpg";
                
    $filename_dst $path.$element->{name}."_".sprintf("%02s",$i).".jpg";
                
    rename ($filename_src$filename_dst);
            }
            `
    cp $filename_latest $filename_src`;
        }
      }    
    }  
    return 
    "Foto gespeichert"

    Vielleicht hat jemand Verwendung dafür.

    Update: Tipps von Makki berücksichtigt, Nummerierung der Bilder geändert und Begrenzung auf eine Kamera aufgehoben.

    Gruß
    Carsten
    Zuletzt geändert von derwolff2010; 13.09.2015, 10:00.

    #2
    Sobald meine Kamera wieder läuft wurde ich das ausprobieren. Aber wahrscheinlich sollte man noch die Bilder auch automatisch wieder aufräumen. So kann es passieren das man durch klingeln deine Festplatte mit Bildern füllen kann. Vielleicht solltest du die Bilder über einen Ringsprecher limitieren.

    Kommentar


      #3
      Sehr schön!

      Nur ein paar Tipps am Rande:
      - use strict; kannste dir sparen, ist eh schon immer so.
      - bitte ins SVN (jetzt GIT) schicken
      - fast jedes PM ist ein potentielles memleak (hier ungeprüft), statt "use File::Copy" tuts auch `cp $src $dst`

      Makki
      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
      -> Bitte KEINE PNs!

      Kommentar


        #4
        Vielleicht habe ich das nicht genau genug beschrieben. Der Parameter "anzahl" ist praktisch die größe des Ringspeichers pro GA.

        makki Danke für den Hinweis. Ich kann das noch ändern und dann einchecken, habe allerdings noch keinen User.

        Gruß
        Carsten

        Kommentar


          #5
          Hi Carsten,

          achso...ich habe gedacht das ist die Anzahl der Bilder die du machst. Bei der Klingel reicht u.u ein Bild beim BWM glaub ich das nicht. Ich muss mal schauen das ich meinen BWM so konfiguriere das er im HLK Kanal alle 5s eine GA ausslöst.

          VG
          Jürgen

          Kommentar


            #6
            Ich wollte das Plugin nicht zu aufwändig machen, deshalb wird pro Event nur ein ein Bild von der Kamera geholt. Ich habe aber noch die Tipps von Makki eingebaut und es ist jetzt pro GA eine andere Kamera möglich. Somit können beliebig viele Kameras eingebunden werden.
            Die Nummerierung die Bilder habe ich auch noch angepasst, damit sie sich einfacher sortieren lassen (Name_01.jpg usw.) .

            Gruß
            Carsten

            Kommentar


              #7
              Hallo Carsten, wunderbares Plugin und schöne Idee.

              Meine Anerkennung

              lg

              Stefan

              Kommentar

              Lädt...
              X