• Herzlich willkommen im "neuen" DSLR-Forum!

    Wir hoffen, dass Euch das neue Design und die neuen Features gefallen und Ihr Euch schnell zurechtfindet.
    Wir werden wohl alle etwas Zeit brauchen, um uns in die neue Umgebung einzuleben. Auch für uns ist das alles neu.

    Euer DSLR-Forum-Team

  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • DSLR-Forum Fotowettbewerb neu erfunden!
    Nach wochenlanger intensiver Arbeit an der Erneuerung des Formates unseres internen Fotowettbewerbes ist es Frosty als Moderator
    und au lait als Programmierer gelungen, unseren Wettbewerb auf ein völlig neues Level zu heben!
    Lest hier alle Infos zum DSLR-Forum Fotowettbewerb 2.0
    Einen voll funktionsfähigen Demowettbewerb kannst du dir hier ansehen.
  • Neuer Partner: AkkuShop.de
    Akkus, Ladegeräte und mehr (nicht nur) für Digitalkameras und Drohnen
  • Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2024
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien der Eigenmarken "Upscreen", "Brotec", "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Mitmachen beim DSLR-Forum Fotowettbewerb Mai 2024.
    Thema: "Diagonale"

    Jeden Monat attraktive Gewinnprämien, gesponsert von unserem Partner PixelfotoExpress.
    Alle Infos zum Mai-Wettbewerb hier!
WERBUNG

FileReceiver für die Transcend WiFI SD Karte

Code:
#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket::INET;
use Net::Ping;


# ==== Config by User! ====
my $BroadcastIP = "192.168.178.24"; 
my $User="admin";
my $Password="admin";
my $Viewer="eog";
my $Viewer_arg="-f";
my $photo_dir="~/Bilder/"; #with ending slash
# ==== End Config by User / No Changes behind this line ====


my $CardIP = "0.0.0.0";
my $new_photo = "";
my @arr;
my $arr_length;

START:
#Check if card is alive and if so go to Shoot&View mode

print "Searching card...\n";
&GoFindCard;
#print "\nFound Card: ",$CardIP,"\n";


if (&KeepCardAlive eq "OK") {
  print "\nEnabling Shoot&View Mode\n";
  my $ShootAndView = IO::Socket::INET->new(Proto=>"tcp",PeerPort=>5566,PeerAddr=>$CardIP) 
    or die "Can't make TCP socket: $@";

  my ($datagram1,$flags1);

  until(1!=1) {  
    eval {
      local $SIG{ALRM} = sub { die "alarm\n" };
      alarm 5; # Set Timer to check if card is still alive every XX seconds by TCP ECHO (not ICMP!)

      $ShootAndView->recv($datagram1,250,$flags1);
      alarm 0; # if we get a info about new files we disable the alarm here
    };
  
    if ($@) {
      die unless $@ eq "alarm\n"; #if we got the alarmtime we have to check if card is alive
      
      #if card is unreachable we have to find it again!
      if (&KeepCardAlive eq "NOK") { 
        print "\nClosing Shoot And View...\n";
        close($ShootAndView);
        print "Back to start...\n";
        goto START;
        };
      }
    else {
      print "\nThere's something new on ", $ShootAndView->peerhost,": $datagram1\n"; 
      #And now for some regex! --> Remove >/mnt from >/mnt/sd/DCIM/200MSDCF/_DSC3233.JPG
      $datagram1 =~ s/^>\/mnt//;

      @arr = split('/',$datagram1);
      $arr_length = @arr;
      $new_photo = $arr[$arr_length-1];
      $new_photo =~ s/[^[:print:]]+//g;

      

      #system('wget http://admin:admin@192.168.11.254/sd/DCIM/200MSDCF/_DSC3233.JPG');     
      my $wget = join("","wget -qc http://",$User,":",$Password,"@",$CardIP,$datagram1,); 
      $wget =~ s/[^[:print:]]+//g;
      
      system($wget." -O $photo_dir".$new_photo);
      print "Open ".$new_photo."\n";
      system("killall $Viewer");
      system("$Viewer $Viewer_arg $photo_dir".$new_photo." &");
    };
  };
}
else {
  print "\nNothing found. Waiting 10 Seconds...\n";
  sleep(10);
  goto START;
};

sub KeepCardAlive {
  my $RC;
  #Keep Card Alive!
  #Client sendet TCP an 192.168.11.254; Source Port variabel; Destination Port 7; Flag Set SYN
  #Karte sendet TCP an 192.168.11.12; Source Port 7; Destination Port variabel; Flag Set ACK; RST

  my $p=Net::Ping->new('tcp');

  if ($p->ping($CardIP, 5)==1) {
    $RC = "OK";
  }
  else {
    $RC = "NOK";
  };

  return($RC);
};

sub GoFindCard {
  #Find Transcend SD WiFi Card
  #Sending UDP stolen by: http://www.perlmonks.org/?node_id=129521
  STARTFIND:

  eval {
    local $SIG{ALRM} = sub { die "alarm\n" };
    alarm 5; # Set Timer to wait for card to answer, aboard and retry if card doesn't answer.

    #Open Port for Broadcast
    my $FindCard = IO::Socket::INET->new(Proto=>"udp",LocalPort=>58255,PeerPort=>55777,PeerAddr=>$BroadcastIP,Broadcast=>1) 
      or die "Can't make UDP socket for Broadcast. Reason: $@";

    #Send some nonsense, original AndroidAPP also does this
    $FindCard->send("");
    #Close Broadcastport
    close($FindCard);

    #Open Port for receiving Unicast from card (hopefully!)
    my $recvCard = IO::Socket::INET->new(Proto=>"udp",LocalPort=>58255)
      or die "Can't make UDP socket for catching Unicast. Reason: $@"; 
  
    my ($datagram,$flags);
    $recvCard->recv($datagram,200,$flags); #Datagramm may be longer than 200 chars! (depending on SSID!)
  
    if (index($datagram,"Transcend WiFiSD")>=0) {
      #print "Found Card!\n", $FindCard->peerhost,", flags ",$flags || "none",": $datagram\n";
      $CardIP=$recvCard->peerhost;
    };
    close($recvCard);
    alarm 0;
  };

  if ($@ eq "alarm\n") {
    print "No Transcend Card Found, trying again...\n";
    goto STARTFIND;
  };
};

Jetzt aber nochmal vollständig mit konfigurierbarem Zielverzeichnis für Bilder, Ihr könnt also das Script z.B. auf den Deskop legen und von da aus starten und Bilder wandern brav in den Bilderordner :)

Falls noch jemand ne Idee oder einen Wunsch hat, würde ich mich über eine Antwort freuen...
Ich bin nie dazu gekommen perl zu lernen, und freu mich über die Gelegenheit mit damit mal ein wenig auseinanderzusetzen.

@Sven
Vielen Dank für Deine klasse Arbeit, wenn Du etwas gebrauchen kannst, für deine Sourceforge-Seite: Feel free to use it :)
 
Ich hatte gestern meinen ersten Test aufs Exempel, Schwangerschaftsshooting im Studio.
Es hat eigentlich hervorragend funktioniert.

Nur ist immer ein Fehler passiert, es lässt sich dabei eigentlich nicht verhintern, dass die Kamera mal aus geht und den Kontakt verliert, zumindestens nicht bei meiner.
Und dann gibt es beim Reconnect immer mal wieder ausfälle, durch:

Code:
print "\nEnabling Shoot&View Mode\n";
  my $ShootAndView = IO::Socket::INET->new(Proto=>"tcp",PeerPort=>5566,PeerAddr=>$CardIP) 
    or die "Can't make TCP socket: $@";

Also wenn die Karte auf den Ping reagiert, (KeepAlive) kann sie bei mir bei 50% der Fälle nicht sofort wieder einen richtigen Connect aufbauen.

ich hab das jetzt damit umgangen, dass ich:

Code:
print "\nEnabling Shoot&View Mode\n";
  my $ShootAndView = IO::Socket::INET->new(Proto=>"tcp",PeerPort=>5566,PeerAddr=>$CardIP) 
    or goto START;

so geändert hab, jetzt kann ich das Notebook durchlaufen lassen, und sobald die Connection aufgebaut ist, erscheinen die neuen Bilder wieder, ohne dass ich das Programm neu starten muss.
 
Hallo,

ich bin jetzt auch Nutzer der Transcend WiFi-SC-Card und bin auf diesen Thread gestoßen.

Da ich Mac-Nutzer bin kann ich das letzte vollständige Script nur soweit nutzen, dass die Fotos auf den Mac kopiert werden. Das klappt gut, danke (y)

Mich würde jetzt aber auch interessieren, wie ich das Foto anschließend automatisch angezeigt bekomme.

Das scheint bei OS X nicht so einfach zu sein.

Danke für eine Antwort.

Gruß
 
Mein ganzes Skript ist Quick und Dirty, das passt perfekt ;-)

Wie läuft es mit der Weiterentwicklung? ;-)

Ich hätte da noch einen Wunsch:
Wäre schön, wenn man den Zielordner in den Einstellungen am Anfang eintragen könnte. Damit könnte das Skript von den Bildern getrennt werden.

Gruß Matthias
 
Hi,

mangels echter Rückmeldung hab ich das die letzte Zeit ziemlich vernachlässigt.

Ja, klingt gut. Schau ich mir mal an.

Gruß,
Sven
 
Hey,

erst einmal danke für das Programm und, dass du es hier veröffentlichst.
Du hast ja geschrieben, du hast das Protokoll abgehört. Kannst du mir eine ausführliche Beschreibung geben, wie das Protokoll funktioniert und was dein Programm nacheinander macht (Ich kann leider kein Pearl)?

Ich bin C++ und Java-Programmierer und überlege, das Programm mit einer kleinen GUI nachzubauen, damit man grafisch einstellen kann, wo die Bilder gespeichert werden sollen und das neue Bild dann auch direkt auf dem Bildschirm angezeigt bekommt.

Habe dazu erst in ca. zwei Monaten Zeit, aber besser spät als nie :D

Viele Grüße
Dani
 
Hi,

ich habe das bereits gemacht :)

features momentan:
die files auf der karte anzeigen.
- die files (auch raw) in einen lokalen ordner kopieren.
- die files mit standard viewer anzeigt
- nur thumbs zeigt, wenn man die bilder nicht ganz kopieren möchte
- funktioniert überall wo auch python läuft, nicht nur win
- bei raw+jpeg wird bei bedarf nur jpeg copiert
- wenn die verbindung abbricht und wieder hergestellt wird, werden alle neuen dateien kopiert.

ist noch etwas work in progress, aber es klappt ausgezeichnet.

in lightroom bekommt man die bilder einfach, wenn man den ordner überwacht.

todo:
- qt gui inkl. anzeiger.
- android version. die vorhanden gefallen mir nicht und sind mir zu fehlerintollerant.

oben die variablen einsetzen und fertig.
ab while true das hauptprogramm.
wenn man "my_WIFISD.showImagePnS(my_WIFISD.nr_oldfiles)" auskommentiert, werden die bilder nur kopiert und nicht angezeigt

hier nun das script:

https://www.dropbox.com/s/syokswwti8cp0f9/Teather.py
 

Anhänge

[...]Kannst du mir eine ausführliche Beschreibung geben, wie das Protokoll funktioniert und was dein Programm nacheinander macht

Klar doch :)
Ich hatte versucht hier mal alles zu beschreiben. Ist wirklich nichts wildes, und vor allem kann man das alles abkürzen und verändern wie man will, die Karte reagiert da nicht all zu streng.

Wenn dir da was unklar ist einfach melden.

Gruß,
Sven
 
das programm ist fast vollständig.
es fehlt die thumbnail anzeige und die bilder werden mit dem default viewer angezeigt und nicht intern. falls der onlinestatus nicht stimmt, kann man noch auf den radio button klicken. final soll der read-only werden. mit extended_select wird man später mehrere bilder auswählen können zum kopieren.

für mich funktioniert jetzt alles so wie es soll. qt und jpeg gucke ich mir nochmal an. ansonsten bin ich auf euere meinung/ fehlerberichte gespannt.

hier nochmal die adresse zu der letzten version: https://dl.dropboxusercontent.com/u/18477781/Teather.exe

auf anfrage gebe ich auch den py code für andere plattformen als windoof raus.
 
Zuletzt bearbeitet:
das programm ist fast vollständig.

hier nochmal die adresse zu der letzten version: https://dl.dropboxusercontent.com/u/18477781/Teather.exe


Mit deinem Script kann ich zur Wifi SD Karte eine Verbindung aufbauen. Der Zugriff auf meinen Ordner (101ND600) der Speicherkarte ist nicht möglich. Es wird eventuell die Änderung aus der Config nicht übernommen?
Es wäre auch nett, wenn sich das Script die Einstellungen merken würde, bei jedem Neustart sind die von Dir eingetragenen Daten hinterlegt (IP, Passwort, Pfade)


Gruß
Dietmar
 
Hi,

lad nochmal runter unter dem link. ist bereits ein update und das problem ist behoben. wenn man auf speichern geht in den einstellungen, wird nun eine config datei erstellt. habe es mit unterschiedlichen ordnern getestet und es funktioniert bei mir.

thumbnails gehen auch. online status auch ok.

freu mich auf feedback.

Alex
 

Anhänge

Zuletzt bearbeitet:
@adoeller
Hallo!
Ich habe dein Programm Teather.exe ausprobiert. Leider funktioniert es bei mir nicht. Es hat den Anschein, dass sich das Programm mit der Karte verbindet jedoch kann es die Bilder nicht laden. Neben der IP steht online, aber das Feld WIFI SD content ist leer. Den Ordner habe ich angepasst auf meine Canon. DCIM/100CANON

Das Python Sktript funktioniert jedoch Problem los (auch Danke hierfür)

Hast du eine Idee was ich falsch mache?

Ich selbst programmiere auch sehr gerne und viel. Wenn du Unterstützung bei der Weiterentwicklung brauchst sag bescheid :)

lg Testnetz
 
Hi,

wenn es "online" anzeigt, dann hat die verbindung auch geklappt. Der von dir gepostete pfad ist im richtigen format. soweit alles gut. welches skript meinst Du genau? das allererste von mir?

grossklein-schreibung beim pfad ist wichtig.

wie heissen die bilder? enden sie auf .jpg?

VG,
Alexander
 
Mir ist nur aufgefallen, in den anderen Bildern die im Forum sind, wird der connect Button bei erfolgreichem Verbindungsaufbau zum disconnect Button.
Das passiert bei mir nicht, der Button bleibt gedrückt mit connect hängen.

Ich meinte das Skript vom 14.05.2014, 00:14. Ich musste es ein wenig anpassen, denn ich glaube dass ich eine andere Python Version benutze. Der Fehler lag im requests.get(url) teil. (der wurde zu requests.get(url, auth=(User, Pass))) Ich habe aber das Skript soweit erweitert, dass es die Funktion erfüllt, die es können sollte.

Interessant wäre nur noch den Shoot & View abzufangen. Kann das dein Programm?
Vielen Dank nochmals.

Die Bilder enden alle auf .JPG (Großbuchstaben).

Lg
Testnetz
 
Hi,

in der tat. so wollte er sich verhalten. versuch doch einmal, die ip direkt einzugeben.

die gross kleinschreibung bezog sich nur auf die ordnerstruktur, die in der config seite steht. solange oben nicht online und disconnect steht, klappt die verbindung zur karte und das auslesen des ordners an sich nicht.

Shoot & View kann das skript auch schon. heisst dort noch fälschlicher weise showImagePnS(self, nr), aber wenn Du es aktivierst, wird es funktionieren.

solltest Du die karte nicht hinbekommen mit den überlegungen bis jetzt, wrede ich eine debug version erstellen, dann kommen wir dem problem vielleicht auf die schliche.

VG,
Alexander
 
Morgen,

Ich arbeite die ganze Zeit schon mit der IP. Die Karte ist direkt mit dem PC verbunden.

Wenn ich die Adressen selbst in den Browser eingebe funktioniert es wunderbar. Auch mit dem Skript funktioniert es. Ich habe auch ein wenig herum experimentiert. Im Skript funktioniert der socket nicht. Der Befehl socket.gethostbyadd [11004] liefert immer einen Fehler. So versuchte ich es in C#, auch hier hatte ich das gleiche Problem mit dem gleichen Fehler.

Eventuell könnte hier der Fehler versteckt sein.
Übrigens habe ich die Firmware 2.1 auf der Karte.

LG
Testnetz
 
WERBUNG
Zurück
Oben Unten