ich möchte dieses Jahr die Entwicklung von Wildbienen vom Ei bis zum Verpuppen per Zeitraffa aufnehmen.
Ich verwende dazu eine A530 mit chdk a530-100a-1.0.0-1571
Die Kamera ist an einem Netzteil angeschlossen. Das Netzteil wiederum an einer USV, Stromschwankungen sollten es also nicht sein.
Die Kamera bricht nach mehren Stunden ab beim ersten mal nach 201 das zweite mal nach 314 Bildern.
Die Kamera steht an einen Standort in einer Obstanlage, dort habe ich aber eine Stromversorgung. Nun stehe ich leider nicht die ganze Zeit neben der Kamera um zu sehen mit welchen Fehler abgebrochen wird. Ich kann nur sagen wenn ich einen Tag später vorbeikomme ist die Kamera abgeschaltet und und Objektiv eingefahren. Kamera schaltet also ab. Stromsparmodus ist aus, sowohl bei chdk als auch bei normaler Benutzung.
Ich füge hier das script ein, dass ich mir aus anderen Vorlagen hier zusammengebaut habe.
Vielleicht findet Ihr ja den entscheidenden Punkt und das hüpfende Komma
Prinzipiell hoffte ich eigentlich das ich mit diesem Script die Kamera mindestens eine Woche laufen lassen kann, danach die Bilder speichere um Sie für die nächste Woche wieder scharf zu machen.
Falls Ihr aus Eurer Erfahrung gleich sagen könnt, dass solche Laufzeiten ohnehin nicht per scripts zu machen sind, wäre es nett dies zu erwähnen
- Code: Alles auswählen
--[[
@title Zeitraffa
@param a how many pictures
@default a 3000
@param b intervall in sek
@default b 300
@param c offset in sek
@default c 2
@param d Flash (0=off, 1=on)
@default d 1
@param e Macro (0=off, 1=on)
@default e 1
]]
propcase=require("propcase")
--[[
util.lua
utility functions for scripting with lua for CHDK
v. 1.0 2009-01-30
Changelog:
2009/1/30 mattkime
created
check_range is copied directly from -
fb-lib.lua
fbonomi's library of lua functions for CHDK
Copyright 2008 Francesco Bonomi.
Released under GPL
]]
util = {}
-- checks that a value is in a range
-- returns value (corrected if not in range)
function util.check_range(current, minimum, maximum)
-- print(" minimum:"..minimum.." maximum:"..maximum)
v=current
if v<minimum then
v=minimum
end
if v>maximum then
v=maximum
end
return v
end
-- sleeps for a given number of minutes and prints updates
function util.sleepMinutesVerbose(minutes)
if minutes>0 then
for remaining=minutes,1,-1 do
print("Sleeping ", remaining, " minutes")
sleep(29980)
sleep(29990)
end
end
end
function util.sleepUntilTime(time)
local secondsFuture = (time.hour * 3600) + (time.minute * 60) + time.second
local secondsNow = os.date("%S")
local minutesNow = os.date("%M")
local hoursNow = os.date("%H")
local secondsNow = (hoursNow * 3600) + (minutesNow * 60) + secondsNow
--if future time is smaller than current time, add 12hrs.
if(secondsNow > secondsFuture) then
secondsFuture = secondsFuture + 43200
end
local secondsDelta = secondsFuture - secondsNow
sleep(secondsDelta * 1000)
end
function util.sleepUntilNextPeriodOfAnHour (periodCount)
local periodLength = 3600 / periodCount
local secondsAfterHour = (tonumber(os.date("%M")) * 60) + tonumber(os.date("%S"))
local currentPeriod = secondsAfterHour / periodLength
sleep((((currentPeriod + 1) * periodLength) - secondsAfterHour) * 1000)
end
function util.printAndPause(...)
print(...)
sleep(2000)
end
--[[
Functions that return Date/Time strings for use in CHDK Lua scripts.
Authors: 2009/01/27 mattkime: replace get_time with os.date
2008/10/27 fudgey: datestamp(), datetimestamp()
2008/08/17 Francesco Bonomi: format_nn(), timestamp()
Licence: GPL
--]]
date = {}
-- formats a number to two digit string with leading zeroes e.g. 3 to "03"
-- (only works for numbers in range 0 - 99)
function date.format_nn(n)
local r=tostring(n)
if n<10 then
r= "0" .. n
end
return r
end
-- return a formatted timestamp (hh:mm:ss)
-- if called without parameters, gets current camera time and formats it
-- if a parameter is passed, formats the passed number
function date.timestamp(t)
if t==nil then
return os.date("%X")
else
return os.date("%X",t)
end
end
-- Returns formatted date string from camera clock.
-- Output format example: 2008/09/03
function date.datestamp()
return os.date("%Y/%m/%d")
end
-- Returns formatted date string from camera clock.
-- Output format example: 2008_09_03
function date.datestamp1()
return os.date("%Y_%m_%d")
end
--[[
-- Returns formatted time string from camera clock.
-- Output format example: 23:05:59
function timestamp2()
local H=get_time("h")
local M=get_time("m")
local S=get_time("s")
return format_nn(H) .. ":" .. format_nn(M) .. ":" .. format_nn(S)
end
--]]
-- Returns formatted date + time string from camera clock.
-- Output format example: 2008/09/03 23:05:59
function date.datetimestamp()
return os.date("%Y/%m/%d %X")
end
function check_timeframe()
repeat
if start_std <= get_time("h") then
if stop_std > get_time("h") then
-- display on
return
end
end
-- display off
print( "Out of Timeframe "..start_std.." to "..stop_std.." !" )
sleep(60000)
until false
end
--Declare usefull variable names for the parameter variables
function initCamera()
-- force macro focus (does this work?)
-- 1=on 0=off
-- A620 + A530
--set_prop(11,1)
if (Macro_==1) then
set_prop(11,1)
print("Macro ON")
else
set_prop(11,0)
print("Macro OFF")
end
--set_prop(11,1)
--set_prop(propcase.FOCUS_MODE,3)
-- disable flash (16)
-- 0=auto 1=on 2=off
-- A620 + A530
if (FLASH_==1) then
set_prop(16,1)
else
set_prop(16,2)
end
-- set_prop(propcase.FLASH_MODE,2)
-- Bildqualität auf L
-- 0=L 1=M1 2=M2 3=M3 4=S
-- A620 + A530
set_prop(24,0)
-- Bildqualität auf Superfein
-- 0=S 1=F 2=N
-- A620
set_prop(23,1)
-- Kunstlich
-- set_prop(5,3)
end
function initConfig()
--input vars need to be altered because they're limited to 255 and need to stretch to 1024
-- setze aktivitätsfenster aufgrund des Monats
Monat = os.date("%m")
if Monat == "02" then
start_std = 8
stop_std = 16
end
if Monat == "03" then
start_std = 6
stop_std = 20
end
if Monat == "04" then
start_std = 6
stop_std = 21
end
if Monat == "05" or Monat == "06" or Monat == "07" or Monat == "08" then
start_std = 6
stop_std = 21
end
if Monat == "09" or Monat == "10" then
start_std = 7
stop_std = 20
end
if Monat == "11" then
start_std = 8
stop_std = 17
end
if Monat == "12" or Monat == "01" then
start_std = 1
stop_std = 23
end
FLASH_ = util.check_range(d, 0, 1) -- Blitz on / off
count = util.check_range(a, 1, 200)
intervall = util.check_range(b, 1, 100)
offset = util.check_range(c, 1, 100)
Macro_ = util.check_range(e, 0, 1)
Display_ = util.check_range(f, 0, 1)
end
initConfig()
initCamera()
print( "Zeitraffa STARTEN")
print( "Beginne mit der Aufnahme in "..offset.." Sekunden")
sleep(offset*1000)
--click("display")
for i = 1,count do
check_timeframe()
print( "Bild "..i.." von "..count )
--print( "Press SET for stop" )
local t1=os.time()
press("shoot_half")
shoot()
-- wait for next intervall
repeat
sleep( 1000 )
local t2=os.time()
local t3=os.difftime (t2, t1)
print( "next shot in "..intervall-t3.." sek." )
until t3 >= intervall
if is_pressed "set" then break end
end
print( "Zeitraffa Aufnahme abgeschlossen")
sleep(2000)
shut_down()
Danke im voraus für Eure Tipps und Hilfe
Norbert