[Lua] universales Intervall-Skript mit genauem Abstand

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

universales Intervall-Skript mit genauem Abstand

Beitragvon msl » 24.10.2008, 20:28

Update 19.04.2010: LCD-Abschaltung für Kameras ohne opt. Sucher angepasst. Fixe Einstellungen angepasst.

Hallo Leute,

Das Skript ist auf genauen Zeitabstand zwischen den Bildern optimiert. Kann dieser Zeitabstand nicht eingehalten werden, wird geordnet abgebrochen.

Vorwählbarer Zeitabstand, LCD-Abschaltung, vorwählbare Bildgröße, fixe Werte und Log

Skript-Parameter-Einstellungen

Intervall in s
Anzahl Bilder
Display nach x Bildern aus 0=immer an: Display wird vor dem letzten Bild wieder eingeschaltet.
opt.Sucher 0=ja 1=nein: Bei Kameras ohne optischen Sucher wird nur Hintergrundbeleuchtung abgeschaltet.
Fokus 0=auto 1=fix: Wenn fix, wird der AF gesperrt.
Tv 0=auto 1=fix: Wenn fix, wird alle Bilder die anfängliche Belichtungszeit benutzt.
Bildgröße 0 - 8: 0 entspricht größtem Format. Die Einstellungen sind teilweise Kamera-abhängig
Log-Datei -1=aus ab 0 Dateiname

Die Log-Datei befindet sich im CHDK-Unterverzeichnis LOG und hat den Namen LOG_0200.txt bei Voreinstellung 0. Ändert man den Voreinstellwert 0 auf z.B. 5, heißt die Datei LOG_0205.txt. Sie enthält alle Informationen, die in Skriptkonsole angezeigt wurden. Somit ist eine spätere Zuordnung der Bilder einfacher möglich.

Allgemeine Hinweise:

Damit der Bildschirm weitestgehend dunkel bleibt, sollte die Rückschau deaktiviert werden. Für bessere Ergebnisse ist , wenn vorhanden die Bildstabilisierung (IS) abzuschalten.

Bei Kameras mit optischem Sucher und entsprechend gewählter Bildschirmabschaltung kann es passieren, dass bei vorzeitigem Skriptabbruch der Bildschirm dunkel bleibt. In diesem Fall die Print-Taste einmal drücken und danach die Anzeige mit der Display-Taste wieder aktivieren.

Kameras mit optischem Sucher können auch die Einstellung ohne optischem Sucher wählen. Dann wird nur die Hintergrundbeleuchtung abgeschaltet.


Viel Spaß beim Testen.

Gruß msl
Dateianhänge
iv_uni.lua
Intervall universal
(3.36 KiB) 2330-mal heruntergeladen
Zuletzt geändert von msl am 23.04.2010, 21:13, insgesamt 4-mal geändert.
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon msl » 26.01.2009, 10:57

Nach dem so einige neue Skript-Funktionen eingeführt wurden, hier eine überarbeitete Version des universellen Intervall-Skriptes.

Funktionen:

freiwählbarer Intervallabstand in Sekunden; Abbruch bei Überschreitung des Intervallabstandes durch "zu langes" Shooting; Fix-Fokus (AFLock); Abschaltung Hintergrundbeleuchtung; Vorwahl Bildformat; Schreiben einer Log-Datei (Datei befindet im Unterverzeichnis LOGS), kontrollierter Abbruch durch halb gedrückten Auslöser in den Intervallpausen.

In die Log-Datei werden viele Angaben zur Auswertung geschrieben: Uhrzeit, Auslösedauer, Akkustand, Fokus, Verschlusszeit, Speicherplatzverbrauch.

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[

@title Intervall universal

@param a Intervall [s]

@default a 10

@param b Anzahl   [Bilder]

@default b 5

@param c Disp.aus ab [Nr.][0=nicht]

@default c 0

@param e Fokus [0=auto][1=fix]

@default e 1

@param h Bildgröße [0,1,2,3,4,6,8]

@default h 0

@param i Log [0=aus][x=Datei-Nr.]

@default i 1

]]




function get_resolution()

    if get_propset() == 2 then

        size=get_prop(218)

    else

        size=get_prop(24)

    end

end



function set_resolution(set_size)

    if get_propset() == 2 then

        set_prop(218,set_size)

    else

        set_prop(24,set_size)

    end

end



function get_size_name()

    size_name = {"L","M1","M2","M3","S","","Postcard","","Wide"}

    name_size = size_name[h+1]

end



function fix_focus()

    press("shoot_half")

    repeat

        sleep(1)

    until get_shooting() == true

    release("shoot_half")

    repeat

        sleep(1)

    until get_shooting() ~= true

    set_aflock(1)

end



function Tv()

    tv = get_tv96()/32

    tv_output = {"64","50","40","32","25","20","15","13","10","8","6",

    "5","4","3.2","2.5","2","1.6","1.3","1","0.8","0.6","0.5","0.4",

    "0.3","1/4","1/5","1/6","1/8","1/10","1/13","1/15","1/20","1/25",

    "1/30","1/40","1/50","1/60","1/80","1/100","1/125","1/160","1/200",

    "1/250","1/320","1/400","1/500","1/640","1/800","1/1000","1/1250",

    "1/1600","1/2000","1/2500","1/3200","1/4000","1/5000","1/6400",

    "1/8000","1/10000"}

    print_tv = tv_output[tv + 19]

return print_tv

end



function log(...)

    io.write(...)

    io.write("\n")

end



--start script



if a<2              then a=2 end

if b<2              then b=2 end

if c<0              then c=0 end

if e<0 or e>1       then e=0 end

if h<0              then h=0 end

if h==5             then h=6 end

if h==7             then h=8 end

if h>8              then h=8 end



wait    = a

num     = b

disp    = c



sd_card_01 = get_free_disk_space()



get_resolution()

if size ~= h then set_resolution(h) end

z=0

t1=os.time() + wait



print("akt. Zeit:",os.date("%X"))

get_size_name()

if e == 1 then fix_focus() end



if i > 0 then

    file_name = "A/CHDK/LOGS/iv_"..i..".log"

    logfile=io.open(file_name,"wb")

    io.output(logfile)

    log("Aufnahmetag: ", os.date("%x"), "\tFormat: ", name_size, "\tAnzahl Bilder: ", num)

    log(" ")

    log("Bild-Nr.\tZeit\t\tDauer in ms\tAkku in mV\tFokus in mm\t\tTv in s")

end



repeat

    if disp > 0 and z >= disp then set_backlight(0) end

    wait_click(10)

    if is_pressed "shoot_half" then

        if i>=0 then log("\nBenutzer-Abbruch!!!") end

        z = num

    end

    if os.difftime(os.time(),t1)==0 then

        t1=os.time() + wait

        cls()

        z=z+1

        print("Bild-Nr:",z,"von",num)

        print("akt. Zeit: ", os.date("%X"))

        t1_shoot = get_tick_count()

        shoot()

        t2_shoot = get_tick_count()

        timeout = t2_shoot - t1_shoot

        print("Auslösedauer:",timeout,"ms")

        if i > 0 then log(z, "\t\t", os.date("%X"), "\t", timeout, "\t\t",

                            get_vbatt(), "\t\t", get_focus(), "\t\t\t", Tv())

        end

        if timeout / 1000 >= wait then

            print("Intervallabstand zu klein")

            if i >= 0 then log("\nAbbruch - Intervallabstand zu klein.") end

            z = num

        end

        if z == num - 1 then set_backlight(1) end

    end

until z == num



sd_card_02 = get_free_disk_space()



set_backlight(1)

if e == 1 then set_aflock(0) end

if size ~= h then set_resolution(size) end

if i> 0 then

    log("\nverbrauchter Speicherplatz: ", (sd_card_01 - sd_card_02)/1024,

        " MB, noch frei: ", sd_card_02/1024, " MB von ",

        get_disk_size()/1024, " MB")

    logfile:close()

end

print("fertig")

sleep(1000)
Erstellt in 0.024 Sekunden, mit GeSHi 1.0.8.9
Dateianhänge
iv_uni01.lua
universelles Intervallskript
(3.37 KiB) 721-mal heruntergeladen
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon PhyrePhoX » 26.01.2009, 11:20

sehr gut!
Vielleicht kann man auch die Rückschau ausschalten? Und die Fokus Lampe? Mir fallen sicherlich noch mehr Sachen ein, muss zuhause mal in die Propcase Tabelle schauen (und testen ob sie R/W sind).

Gefällt mir sehr gut :)
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 21:31

Beitragvon DrMaex » 26.01.2009, 12:45

Wenn man die Logdatei in Excel öffnen möchte, könnte es zu Problemen kommen bei den Verlusszeitabgaben. Und zwar wenn du in Excel 1/80 einträgst dann wird es als Datum interpretiert......Jan 80 (01.01.1980), das kann man vermeiden wenn man vor dem bruch eine 0 schreibt, 1/100 zum Beispielt wird dagegen gar nicht als gültige Zahl interpretiert...... Wusste von dieser Eigenart nichts bis ich auch die Zeiten eintragen wollte. Ich habe nicht auf Anhieb gefunden wie man so etwas abstellt. Vielleicht habe ich mich einfach zu doof angestellt. Wenn du das in den Griff bekommen hast sag bescheid, denn ich habe jetzt mit insofern geholfen, dass ich die Brüche als Dezimalzahlen hingeschrieben habe, das sieht aber hässlich aus.


DrMaex

EDIT: da das kein Endlosscript ist wird es seltener dazu kommen, aber trotzdem wenn die Kamera abschaltet weil Akku leer ist, oder durch den Powerschalter zwangsabgeschaltet wird, kann es passieren dass die Logdatei leer bleibt. nach jeden Zugriff ein close() aufzurufen schafft Abhilfe, dann wird nur der letzte Wert fehlen.
Anzahl der Tablulatoren bei den Werten selbst passt irgendwie nicht zu den überschriften.
Canon IXUS 80 IS 1.01A
ixus80_sd1100-101a-0.9.8-760
Galerie
DrMaex
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 04.12.2008, 22:48
Wohnort: BW

Beitragvon msl » 26.01.2009, 13:29

Erstmal Danke für die Rückmeldungen.

@PhyrePhoX

Oh, mir fallen da auch noch so einge Sachen ein. :D Zuerst die noch fehlenden Lua-Anpassungen diverser Befehle, wie z. B. get/set resolution, quality. Was aber nicht so wahnsinig wichtig ist.

@DrMaex

Das mit der Excel-Sache ist mir auch schon untergekommen. Da hilft nur eine vorherige Zwangsformatirung der Zellen. Aber eine richtige Lösung habe ich auch nicht parat. Ich hatte das logging eigentlich auch nur zur Überprüfung der Serie gedacht. Da ist Excel ja nicht unbedingt notwendig.

Das Szenarium "Akku leer" habe ich wirklich nicht bedacht. Ist in meiner Variante vielleicht auch nicht so wichtig.

Die Tabulatoren stimmen auf Grund der teilweise überlangen Einträge. Ich hatte es auch erst ausgezählt. und da passte es nicht so richtig.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon DrMaex » 26.01.2009, 13:35

Hab natürlich vor lauter meckern vergessen zu sagen, dass das Script an sich natürlich klasse ist, da kann ich bestimmt wieder irgendwas abgucken :roll: :-)
Canon IXUS 80 IS 1.01A
ixus80_sd1100-101a-0.9.8-760
Galerie
DrMaex
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 04.12.2008, 22:48
Wohnort: BW

Beitragvon msl » 26.01.2009, 13:52

DrMaex hat geschrieben:Hab natürlich vor lauter meckern vergessen zu sagen, dass das Script an sich natürlich klasse ist, da kann ich bestimmt wieder irgendwas abgucken :roll: :-)


Das beruht auf Gegenseitigkeit. Mein Skript ist doch nur der kleine Bruder von Deinem Tag- und Nacht-Skript.

Da sich hier aber mittlerweile einige Mikrokopter-Freaks tummeln, wollte ich da mal eine Vorgabe machen. Die brauchen keine optimierten Time-Lapse-Funktionen. Die wollen in der Regel nur so viel wie möglich ordentliche Bilder pro Flugzeit produzieren. Sicherlich ist da noch einiges in Sachen optimierter kurzer Verschlusszeiten zu tun.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon PhyrePhoX » 27.01.2009, 18:38

btw schön wäre auch, wenn man IS abschalten könnte (und bei Beenden natürlich wieder in den vorherigen Zustand schaltet), da Intervall ja meist aufm Stativ ist, sprich man braucht kein IS. :)
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 21:31

Beitragvon DrMaex » 27.01.2009, 19:15

PhyrePhoX hat geschrieben:btw schön wäre auch, wenn man IS abschalten könnte (und bei Beenden natürlich wieder in den vorherigen Zustand schaltet), da Intervall ja meist aufm Stativ ist, sprich man braucht kein IS. :)


Laut http://chdk.wikia.com/wiki/PropertyCase ist IS Read Only bzw das steht nichts(nicht getestet??oder wie deutet man das) digic2->229 digic3->145 leider.... oder gibt es da doch Möglichkeiten?
Canon IXUS 80 IS 1.01A
ixus80_sd1100-101a-0.9.8-760
Galerie
DrMaex
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 04.12.2008, 22:48
Wohnort: BW

Beitragvon PhyrePhoX » 27.01.2009, 19:21

hm, na gut ;D
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 21:31

Beitragvon silas » 27.01.2009, 20:49

Das könnte man mit dem canon menu machen mit:
click "menu"
click "up"
click "left"
oder so ungefär ;) .
a550,IXUS 80IS (1.01a)
aktuelle version
Flickr
Benutzeravatar
silas
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 150
Registriert: 23.04.2008, 13:11
Wohnort: Schweden

Beitragvon DrMaex » 27.01.2009, 22:24

silas hat geschrieben:Das könnte man mit dem canon menu machen mit:
click "menu"
click "up"
click "left"
oder so ungefär ;) .


das ginge natürlich auch, aber in dem Moment entstehen viele Einschränkungen. Es wäre nur auf der Kamera nutzbar für die diese clicks geschrieben wurden und auch da kann es Teilweise zu Problemen führen abhängig davon im welchen Modus sich die Kamera befindet.....
Canon IXUS 80 IS 1.01A
ixus80_sd1100-101a-0.9.8-760
Galerie
DrMaex
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 04.12.2008, 22:48
Wohnort: BW

einfach Variante für Luftbilder

Beitragvon msl » 29.01.2009, 13:16

Und nun noch eine etwas abgespeckte Variante für Luftbild-Serien.

Edit: Die nachfolgende ausführliche Anleitung war speziell für Leute gedacht, die Probleme mit der Skript-Bedienung haben. Trotzdem gibt es immer noch User, die das Skript nicht zum Laufen zu bringen. Das ist ein eindeutiges Zeichen dafür, dass zu wenig gelesen wird.

Bedienung:

Die Datei im Anhang auf die SD-Karte in den CHDK-Unterordner "SCRIPTS" kopieren.

Kamera starten.

<ALT>-Modus mit der Print-Taste aktivieren.

[SET]-Taste drücken. Es erscheint das Skript-Menü.

Mit den Tasten [abwärts] oder [aufwärts] "Lade Skript-Datei.." anwählen und die [SET]-Taste drücken. Im nun zu sehenden Datei-Browser mit den Tasten [abwärts] oder [aufwärts] gewünschte Skript-Datei auswählen und [SET]-Taste drücken. Jetzt sieht man wieder das Skript-Menü.

Mit den Tasten [abwärts] oder [aufwärts] kann man nun zu den Skript-Parametern navigieren.
Diese beginnen unter dem Namen des aktuellen Skriptes (---Intervall universal---).
Die anderen Einstellmöglichkeiten im Skript-Menü bleiben unberührt.

Die Werte der jeweiligen angewählten Parameter kann man mit den Tasten [links]und [rechts] verändern.

Folgende Parameter können beeinflusst werden:

Intervall [s] - Zeitabstand zwischen 2 Fotos in Sekunden - Vorgabe ist 3 Sekunden

Anzahl [Bilder] - Anzahl der Bilder, die gemacht werden sollen. - Vorgabe ist 300

Disp.aus ab [Nr.][0=nicht] - Ab welchen Bild soll die Hintergrundbeleuchtung des Displays abgeschalten werden. 0 = immer an - Vorgabe ist ab den 5. Bild

Startverzögerung[s] - zusätzliche Wartezeit in Sekunden bis das 1. Foto gemacht werden soll. - Vorgabe ist 10 Sekunden

Log[0=aus][x=Datei-Nr.] - Soll eine Log-Datei mitgeschrieben werden? 0= Funktion aus, Zahl= Datei-Name der Log-Datei - Vorgabe ist 1. Es wird eine Log-Datei iv_1.txt geschrieben.

Sind alle Einstellungen wie gewünscht vorgenommen, kann das Skript-Menü mit der Taste [MENU] verlassen werden.

Sicherstellen, dass sich die Kamera im Aufnahme-Modus und <ALT>-Modus befindet. Dann kann das Skript durch Drücken des Auslösers gestartet werden.

Das Skript kann durch Drücken der Taste [Menü] gezielt vorzeitig beendet werden.

Die Log-Datei befindet sich im CHDK-Unterordner "SCRIPTS". Sie beinhaltet diverse zusätzliche Informationen zu den gemachten Fotos. Auslesbar ist sie mit jedem Textprogramm, z.B. Wordpad.

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[

@title Intervall universal

@param a Intervall [s]

@default a 3

@param b Anzahl   [Bilder]

@default b 300

@param c Disp.aus ab [Nr.][0=nicht]

@default c 5

@param d Startverzögerung [s]

@default d 10

@param i Log [0=aus][x=Datei-Nr.]

@default i 1

]]




function Tv()

    tv = get_tv96()/32

    tv_output = {"64","50","40","32","25","20","15","13","10","8","6",

    "5","4","3.2","2.5","2","1.6","1.3","1","0.8","0.6","0.5","0.4",

    "0.3","1/4","1/5","1/6","1/8","1/10","1/13","1/15","1/20","1/25",

    "1/30","1/40","1/50","1/60","1/80","1/100","1/125","1/160","1/200",

    "1/250","1/320","1/400","1/500","1/640","1/800","1/1000","1/1250",

    "1/1600","1/2000","1/2500","1/3200","1/4000","1/5000","1/6400",

    "1/8000","1/10000"}

    print_tv = tv_output[tv + 19]

return print_tv

end



function log(...)

    io.write(...)

    io.write("\n")

end



--start script



if a<2        then a=2 end

if b<2        then b=2 end

if c<0        then c=0 end

if d<0        then d=0 end

if i<0 or i>1 then i=0 end





wait    = a

num     = b

disp    = c

delay   = d



sd_card_01 = get_free_disk_space()



z=0



t1=os.time() + wait + delay



print("akt. Zeit:",os.date("%X"))



if i > 0 then

    file_name = "A/CHDK/SCRIPTS/iv_"..i..".txt"

    logfile=io.open(file_name,"wb")

    io.output(logfile)

    log("Aufnahmetag: ", os.date("%x"), "\tAnzahl Bilder: ", num)

    log(" ")

    log("Bild-Nr.\tZeit\t\tDauer in ms\tAkku in mV\tFokus in mm\t\tTv in s")

end



repeat

    if disp > 0 and z >= disp then set_backlight(0) end

    wait_click(10)

    if is_pressed "menu" then

        if i>=0 then log("\nBenutzer-Abbruch!!!") end

        z = num

    end

    if os.difftime(os.time(),t1)==0 then

        t1=os.time() + wait

        cls()

        z=z+1

        print("Bild-Nr:",z,"von",num)

        print("akt. Zeit: ", os.date("%X"))

        t1_shoot = get_tick_count()

        shoot()

        t2_shoot = get_tick_count()

        timeout = t2_shoot - t1_shoot

        print("Auslösedauer:",timeout,"ms")

        if i > 0 then log(z, "\t\t", os.date("%X"), "\t", timeout, "\t\t",

                            get_vbatt(), "\t\t", get_focus(), "\t\t\t", Tv())

        end

        if z == num - 1 then set_backlight(1) end

    end

until z == num



sd_card_02 = get_free_disk_space()



set_backlight(1)



if i> 0 then

    log("\nverbrauchter Speicherplatz: ", (sd_card_01 - sd_card_02)/1024,

        " MB, noch frei: ", sd_card_02/1024, " MB von ",

        get_disk_size()/1024, " MB")

    logfile:close()

end

print("fertig")

sleep(1000)
Erstellt in 0.013 Sekunden, mit GeSHi 1.0.8.9
Dateianhänge
iv_uni02.lua
Intervall-Skript für luftbildaufnahmen
(2.33 KiB) 780-mal heruntergeladen
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: [Lua] universales Intervall-Skript mit genauem Abstand

Beitragvon Unjektiv » 06.11.2010, 00:14

Eins A, herzlichen Dank, so komm auch ich damit klar :-)
A 590 IS 1.0.1.b
CHDK 1.1.0 DE
Benutzeravatar
Unjektiv
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 5
Registriert: 01.11.2010, 15:37
Wohnort: Hunsrück nahe Trier
Kamera(s): Canon A 590 IS + MVX 45i

Re: universales Intervall-Skript mit genauem Abstand

Beitragvon luhu » 22.04.2012, 09:50

Kann man das Script denn auch so umgestalten, dass es möglichst oft Fotos macht? Also wenn die Aufnahme 2300ms gedauert hat, dass es dann direkt danach die nächste Aufnahme macht und nicht bis zur 3000sten ms wartet?
Ist bei dem letzten Script (iv_uni02.lua) der Auto-Fokus fix, oder wird jedes mal fokussiert?
luhu
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 1
Registriert: 22.04.2012, 09:46
Kamera(s): IXUS 70


Zurück zu Code-Ecke

Wer ist online?

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