[PTP] CHDKptp liveView: Shoot&Download-Button

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

CHDKptp liveView: Shoot&Download-Button

Beitragvon matzgp » 20.05.2013, 18:03

Hallo Allerseits und frohe Pfingsten
kurze Vorgeschichte: Hab mir wegen (typischem) Kratzer auf der Frontlinse meiner G9 eine gebrauchte G12 gekauft und wollte wieder Fotos per Laptop aufnehmen...Fernsteuerung ging aber nicht mehr, hat Canon ja bekanntlich abgeschaltet. Zum Glück gibts PTP, also OpenSource Programm gesucht und CHDKptp liveView gefunden Genial!! Da meine Frau Artikelfotos für ihren shop hiermit machen muss, habe ich das gui.lua ein wenig verschlankt und eingedeutscht.
Was mir/uns aber fehlt ist ein simpler download button, worüber die letzte Aufnahme auf ein entspr. Zielverzeichnis heruntergeladen wird. Das geht momentan nur mit der tree Funktion (etwas umständlich). Im ptpgui ist es ja implementiert, aber halt nicht in lua.

Daher meine Frage: gibt es evtl. eine Datei-download Routine, die ich in das gui.lua file von CHDKptp einfügen kann? so fit bin ich in lua noch nicht...(c++/lisp ist ok ;_))

VIELEN Dank

Matthias
Zuletzt geändert von msl am 29.05.2013, 10:59, insgesamt 2-mal geändert.
Grund: edit by mod:Titel ergänzt
matzgp
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 20.05.2013, 17:50
Kamera(s): Canon G12

Re: CHDKptp liveView

Beitragvon msl » 20.05.2013, 20:56

Hallo und willkommen,

prinzipiell musst du bei so einer Aufgabe den Pfad der letzten Aufnahme auf der SD-Karte herausfinden. Wenn du den kennst, brauchst du nur noch die in chdkptp eingebaute Download-Funktion mit den entsprechenden Pfaden zu versehen und das ganze auf einen GUI-Button zu legen.

Es gibt 2 Arten von Lua-Skripten in Verbindung mit chdkptp. Die, die auf der Kamera laufen und die, die auf dem PC unter dem chdkptp-Klienten verwendeten werden.

Um den Pfad der letzten JPG-Datei zu ermitteln, kannst du folgende Zeile an die Kamera senden und ausführen lassen:
Code: Alles auswählen
string.format('%s/IMG_%04d.JPG',get_image_dir(),get_exp_count())
Diese Zeile gibt den Pfad als String zurück.

Im USAGE.TXT sind alle weiteren PC-seitigen Kommandos beschrieben. Damit sollte es möglich sein, eine Funktion zum Downloaden zu bauen.

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4507
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: CHDKptp liveView

Beitragvon matzgp » 21.05.2013, 07:24

Hallo, msl
vielen Dank für die schnelle Antwort und Danke für die Aufnahme ins Forum!
Soweit ich das bisher verstanden habe brauche ich die entspr. download routine als LUA script, das auf dem pc läuft.
Wo finde ich die in chdkptp eingebaute download-Funktion als lua script ??
DANKE
lg Matthias
matzgp
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 20.05.2013, 17:50
Kamera(s): Canon G12

Re: CHDKptp liveView

Beitragvon msl » 21.05.2013, 22:09

Hallo,

deine Frage wird im oben verlinkten USAGE.TXT beantwortet.

Code: Alles auswählen
download (d) [-nolua] <remote> [local]
oder
Code: Alles auswählen
mdownload (mdl) [options] <remote, remote, ...> <target dir>

Die Optionsbeschreibung steht im genannten Text.

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4507
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: CHDKptp liveView

Beitragvon matzgp » 21.05.2013, 23:46

Hallo msl
Danke für Deine Geduld,
die entspr. usage hatte ich gefunden, ich komme wohl mit der syntax noch nicht klar...
hatte im gui.lua folgenden Button hinzugefügt:

expand="HORIZONTAL",
iup.button{
title='Testdownload',
size='95x15',
action=function(self)
gui.execquick([[
shoot()
pfad = (string.format('%s/IMG_%04d.JPG',get_image_dir(),get_exp_count()))
mdownload pfad c:\Temp
end
]])
end,
},

leider funzt das mit dem download danach noch nicht. pfad hat die letzte Datei erwischt (hatte ich mit print pfad überprüft) scheinbar funzt die variablenübergabe noch nicht..
DANKE
Matthias
matzgp
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 20.05.2013, 17:50
Kamera(s): Canon G12

Re: CHDKptp liveView

Beitragvon msl » 22.05.2013, 13:11

Hallo,

ganz so einfach geht es dann nicht. :)

Zuerst sollte bedacht werden, was in der Kamera und was mit chdkptp ausgeführt wird. Außerdem muss man auch die zeitlichen Abläufe berücksichtigen. Es nützt nichts, den Download einzuleiten, wenn das Shooting noch garnicht fertig ist. Deshalb würde ich den Shoot-Befehl und das Herunterladen trennen.

Außerdem müssen die Konsolenbefehle für die GUI angepasst werden.

Ein Button für das Shooting ist vorhanden. Deshalb hier nun eine Lösung, die den Download organisiert. Dazu habe ich das Auslesen von Pfad und Dateiname auf der SD-Karte getrennt, um den Namen auch beim Speichern auf den PC verwenden zu können. Das Herunterladen der Datei wird nur eingeleitet, wenn das Auslesen von Pfad und Name erfolgreich war. Damit unterbinden wir mögliche Fehler im nächsten Schritt.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
expand="HORIZONTAL",
iup.button{
    title="Testdownload",
    size="95x15",
    action=function(self)
        state1, path=con:execwait([[return get_image_dir()]])
        state2, name=con:execwait([[return string.format("/IMG_%04d.JPG",get_exp_count())]])
        if state1 and state2 then con:download(path..name, "D:/tmp"..name) end
    end,
},
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9


Theoretisch müsste man nun eine Routine erarbeiten, die auf ein mögliches Überschreiben einer existierenden Datei reagiert.

Gruß msl

P.S. Der GeSHi-Parser für Lua keine Hochkommas anzeigen, deshalb sind alle Hochkommas als Anführungszeichen dargestellt. Für Lua ist es egal, ob man Hochkomma oder Anführungszeichen verwendet.
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4507
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: CHDKptp liveView

Beitragvon matzgp » 22.05.2013, 14:59

Hallo msl
super Danke, war schon klar, dass das soo einfach nicht geht.
Daher nochmals vielen Dank für Deine Mühe.
Manchmal gibt es einen Punkt wo Autodidakik nicht mehr geht...
vielleicht kann ich mich ja mal revanchieren ;-)
Matthias
matzgp
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 20.05.2013, 17:50
Kamera(s): Canon G12

Re: CHDKptp liveView

Beitragvon matzgp » 25.05.2013, 14:03

Hallo, ich nochmal,
wie müsste man den shoot() Befehl einbauen damit man gleichzeitig mit einer Taste auslöst UND den download veranlasst...
(klappt irgendwie nicht bei mir)
Danke
Matthias
matzgp
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 20.05.2013, 17:50
Kamera(s): Canon G12

Re: CHDKptp liveView

Beitragvon msl » 26.05.2013, 10:43

Hallo,

prinzipiell sollte das kein Problem sein. Allerdings würde mich interessieren, unter welchen Bedingungen fotografiert wird? Es muss ja sichergestellt werden, dass das Shooting abgeschlossen ist, bevor die Bilddatei auf den Rechner geladen wird.

Nachfolgender Code sollte generell funktionieren. Es wird überprüft, ob überhaupt ein Aufnahmemodus aktiv ist. Wenn ja, wird das Shooting durchgeführt, bei dem gewartet wird, bis der gesamte Vorgang abgeschlossen wurde. Dafür wurden die Bestandteile von shoot() auseinandergenommen. Danach erfolgt der Download in der Hoffnung, dass auch das aktuelle Bild heruntergeladen wird.

Zur besseren Übersicht habe noch ein paar Konsolenausgaben eingebaut.

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
iup.button{
    title="Shoot + Download",
    size="95x15",
    action=function(self)
        state1, rec=con:execwait([[local rec,vid = get_mode()
                        if rec and not vid then
                            press("shoot_half")
                            local n = 0
                            repeat
                                sleep(10)
                                n = n + 1
                            until get_shooting() == true or n > 100
                            press("shoot_full")
                            release("shoot_full")
                            release("shoot_half")
                            repeat sleep(10) until get_shooting() ~= true
                        end
                        return rec]])
        if not rec then gui.infomsg("no record mode\n") end
        if rec then
            state2, path=con:execwait([[return get_image_dir()]])
            state3, name=con:execwait([[return string.format("IMG_%04d.JPG",get_exp_count())]])
            if state2 and state3 then
            con:download(path.."/"..name, "D:/tmp/"..name)
            gui.infomsg("%s downloaded\n", name)
            end
        end
    end,
},
Erstellt in 0.005 Sekunden, mit GeSHi 1.0.8.9


Gruß msl

P.S. Ich habe mal den Thread-Titel ergänzt.
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4507
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: CHDKptp liveView: Shoot&Download-Button

Beitragvon matzgp » 26.05.2013, 14:19

wow, wo kann man denn hier was in die Kaffee-Kasse einzahlen...
Die Bedingungen des shootings sind still-Aufnahmen... d.h. Objekt unter live-view einrichten und dann aufnehmen.. hinterher direkte Kontrolle der Aufnahme mit irfanView, daher nach jedem Schuss der download, da es im live-view nicht aussagekräftig ist. Der eigentliche Grund war, dass wir von einer G9 auf eine G12 gewechselt sind und im nach hinein fesgestellt (leider) haben, dass die Fernbedienungsfunktion von Canon "abgeschaltet" war.
Da die SSD (wegen automatischem Start chdk) gelocked ist, dauert es, bis das Foto gespeichert ist, daher hab ich die sleep schleife <until get_shooting()> etwas verlängert)
Insofern bin ich froh, dass es Euch gibt!!

Danke Matthias

p.s. so ganz hab ich die lua syntax halt noch nicht drauf...
matzgp
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 20.05.2013, 17:50
Kamera(s): Canon G12

Re: CHDKptp liveView: Shoot&Download-Button

Beitragvon msl » 26.05.2013, 23:55

Gut, dann sollten die Routinen zur Überprüfung des Shootings ausreichen.

Was mir nicht gefällt, ist die Festlegung, wo die Fotos abgelegt werden. Hier sollte eigentlich noch eine Auswahl möglich sein. Da sind wir dann schon beim Thema Lua.

Lua ist eine einfache aber mächtige Skriptsprache. Sie kommt mit 21 Schlüsselwörtern aus. Dazu gehören dann noch ähnlich viele Grundfunktionen. Der Rest wird über Bibliotheken, Module und Addons geregelt. CHDK-Lua hat dann noch die Besonderheit, dass nur mit Integer gerechnet werden kann.

Die hier verwendete GUI wird mit IUP.Lua bewerkstelligt. Das ganze wirkt dann etwas verwirrend, weil viele Dinge miteinander verknüpft werden, LUa + IUP, chdkptp-Funktionen, kameraspezifische Funktion.

Vielleicht ergibt sich noch eine Möglichkeit, eine entsprechende Auswahlmöglichkeit für den Speicherort zu integrieren.

Gruß msl

P.S. Die Kaffee-Kasse kommt bei uns in Form eines Spenden-Button daher (Download- und Impressum-Seite). Eingehende Spenden werden ausschließlich für Server-Unkosten eingesetzt.
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4507
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: CHDKptp liveView: Shoot&Download-Button

Beitragvon msl » 28.05.2013, 20:50

Hallo,

da die bisherige Lösung nur schnell zusammengeschrieben war, hier nun eine geordnete Lösung mit zusätzlicher Zielordnerauswahl per GUI-Button.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--def default download destination
local dest="C:\\"

--destination dir and shoot & download
    iup.hbox{
        iup.button{
            title="dest",
            size="23x15",
            action=function(self)
                local dlg=iup.filedlg{
                    dialogtype = "DIR",
                    title = "Destination",
                    directory="C:"
                }
                dlg:popup(iup_centerparent, iup_centerparent)
                if dlg.status == "0" then dest = dlg.value end
                gui.infomsg("download destination %s\n", dest)
            end,
        },
        iup.fill{},
        iup.button{
            title="shoot+download",
            size="67x15",
            fgcolor="255 0 0",
            action=function(self)
                local status, rec=con:execwait([[local rec,vid = get_mode()
                                            if rec and not vid then
                                                press("shoot_half")
                                                local n = 0
                                                repeat
                                                    sleep(10)
                                                    n = n + 1
                                                until get_shooting() == true or n > 100
                                                press("shoot_full")
                                                release("shoot_full")
                                                release("shoot_half")
                                                repeat sleep(10) until get_shooting() ~= true
                                            end
                                            return rec]])
                if not rec then gui.infomsg("no record mode\n") end
                if rec then
                    local status, path, name=con:execwait(&#39;return get_image_dir(), string.format("IMG_%04d.JPG",get_exp_count())&#39;)
                    if status then
                    dest = string.gsub(dest, "\\", "/")
                    if string.sub(dest, #dest) ~= "/" then dest=dest.."/" end
                    con:download(path.."/"..name, dest..name)
                    gui.infomsg("%s downloaded\n", name)
                    end
                end
            end,
        },
        expand="HORIZONTAL",
    },
    iup.fill{},
Erstellt in 0.008 Sekunden, mit GeSHi 1.0.8.9


(Achtung: Hochkomma wird falsch angezeigt. Statt & # 3 9 ; ist ein Hochkomma einzusetzen.)

Im Anhang befindet sich die komplette Datei gui.lua, mit der man die Orignaldatei aus dem chdkptp-Paket ersetzen kann.

Der Button [dest] öffnet ein Fenster, in dem man den Zielordner für die herunterzuladende Zieldatei auswählen kann. Vorgabe ist C:\. Mit dem Button [shoot+download] wird ein Foto erstellt und sofort in den festgelegten Zielordner. heruntergeladen.

Gruß msl
Dateianhänge
gui.lua
gui.lua mit eingefügter Shoot&Download-Funktion für chdkptp
(17.25 KiB) 77-mal heruntergeladen
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4507
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: CHDKptp liveView: Shoot&Download-Button

Beitragvon matzgp » 28.05.2013, 22:04

Perfekt!!
DANKE (nur ganz schnell)
ich denke, das bringt das CHDKptp ein ganzes Stück voran!
Matthias
matzgp
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 20.05.2013, 17:50
Kamera(s): Canon G12


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste