chdkptp: Datentransfer zum/vom remote-script

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

chdkptp: Datentransfer zum/vom remote-script

Beitragvon gominu404 » 10.10.2016, 19:29

Hallo,
Teil einer Steuerungs software ist auch das Steuern einer IXUS160 via chdkptp im CLI-Modus.

Die Function der Kamera wird sowohl mittels der CLI-Kommandos ( c,rec,rs, etc) als auch mittels remote-script

luar < r_script.lua

gesteuert.

Hier taucht nun die Frage auf, wie kann ich Daten an das remote-script uebergeben?

1.) poke und peek funktionieren natuerlich. Doch bei welcher Adresse kann ich sicher sein, dass der Speicher nicht anderweitig benutzt wird ?

2.) was macht putm genau? Kann ich auf die durch putm gesendete Msg im remote-script zugreifen?


Fuer Eure Muehe vorab Danke.
Gruss
Reinhard
gominu404
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 8
Registriert: 25.07.2011, 08:58
Kamera(s): A620
IXUS 160

Re: chdkptp: Datentransfer zum/vom remote-script

Beitragvon msl » 10.10.2016, 22:29

Hallo,

Peek und Poke sind völlig ungeeignet, da Nebeneffekte zu größeren Katastrophen führen können.

Hier die allgemeine Erklärung zu putm: http://chdk.wikia.com/wiki/Lua/PTP_Scri ... ad_usb_msg

Und hier der Forum-Link zur Einführung der PTP-Interaktivität samt Beispielskript zu putm: viewtopic.php?t=2122

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

Re: chdkptp: Datentransfer zum/vom remote-script

Beitragvon gominu404 » 11.10.2016, 01:35

danke fuer die prompte antwort
gruss
reinhard
gominu404
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 8
Registriert: 25.07.2011, 08:58
Kamera(s): A620
IXUS 160

Re: chdkptp: Datentransfer zum/vom remote-script

Beitragvon Joedi » 01.02.2021, 13:28

Jahre später...(:-|))))...

Hallo Leute,
ich habe kürzlich die "USAGE.TXT" von chdkptp mal genau durchgelesen und gefunden, dass sowohl der Befehl u(pload) als auch der Befehl d(ownload) während eines auf der Kamera laufenden Scripts ausgeführt werden können, sofern man den Parameter "-nolua" angibt. Leider gilt dieses spannende feature nicht für die komplizierteren Befehle wie "imdl" usw.
Trotzdem hat es mich interessiert, das mal auszuprobieren, und die Ergebnisse möchte ich hier im Forum teilen und zur Diskussion stellen.

Ziel:
-Auf der Kamera läuft ein lua-script, das ab und zu ein Foto produziert und speichert.
-Auf dem PC (Linux, Knoppix 7.2) läuft ein shell-script, das mittels chdkptp ab und zu nachschaut, ob es was neues gibt und das dann abholt, speichert und in voller Qualität anzeigt.

- Das lua-script für die Kamera ist hier als einfaches Beispiel nur ein Motion-Detect-script
(Mit ein paar Erklärungen in Englisch) namens shotntf4.lua:
Code: Alles auswählen
-- =shotntf4.lua=LUA CODE==== Written by joedi in Jan,2021 ==========
-- Thanks to all chdk and chdkptp programmers for the
-- huge work done in creating this capable system
function notify()
-- This function notifies the filename of the last
-- picture taken, to the special log file 'LOG_9999.TXT'
set_console_autoredraw(0) ; print_screen(9999) -- switch logging on
lastfn=string.format("%s/IMG_%04d.JPG",get_image_dir(),get_exp_count())
print(lastfn)                         -- do the notification
print_screen(false)                -- switch logging off
end

-- MAIN starts here: -----
-- A simple motion detector as an example test program
-- which will be uploaded into the cam and executed there
-- See text of 'show-shots-notified-4.shs' bash shell script

-- modify motion detect parameters HERE as needed:
a=6 b=6 c=1 d=300000 e=200 g=3 h=0 i=0 j=0 k=0 l=0 m=0 n=0 o=2 p=500 f=25

-- will loop forever in cam ---
repeat
zones = md_detect_motion( a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
if( zones > 0 ) then shoot()  end
notify()
sleep(2000)
until (false)


Das auf dem Linux-Rechner laufende bash-script namens show-shots-notified-4.shs, auch mit diversen englischen Erklärungen, ist hier:
Code: Alles auswählen
#! /bin/bash
# THIS SCRIPT downloads from cam the last photo taken, and shows it, while the script in cam is still running!
# ==Linux bash script:   show-shots-notified-4.shs=   = Written by joedi in Jan, 2021==

# function :-------------------------------------------
showpicoffon ()
{
# turn off old image:
  proz=$(ps -e | grep "display" )
# echo $proz
if [ -n "$proz" ] ; then
prozid=$(echo $proz | cut -d " " -f 1 ); kill $prozid ;
fi
# show the new image:
display -resize 900x600 $1 &
}
# -- function ends ----------------------------------


# MAIN START:
usbok=$(lsusb | grep "Canon")
if  [ -z "$usbok" ] ; then echo "connect/switch on Camera!" ; exit ; fi

# test section; no param means: tests  will be done
# by uploading camprog "shotntf4.lua" into the cam and
# firing it up there... Otherwise the camprog as per
# parameter $1 will be used instead
if  [ $# -ne 0 ] ;
then
camprog=$1
else
camprog="shotntf4.lua"
fi
echo "Will run in cam:"
echo $camprog
./chdkptp.sh -c -erec 
./chdkptp.sh -c -e"lua <$camprog"
sleep 5
# .............................................................

# MAIN LOOP
while [  1 -eq  1 ] ;
do
oldname=$wewant
# download the special log file that contains 'wewant',
# i.e. the file name of the most recent picture taken.
./chdkptp.sh -c -e'd -nolua A/CHDK/LOGS/LOG_9999.TXT'
wewant=$(cat LOG_9999.TXT)
echo $wewant
if  [  ! "$oldname" = "$wewant"  ] ;
then
mycmd=" -c -e'd -nolua $wewant ./'"
# The bash 'eval' command turned out to be essential here:
eval ./chdkptp.sh $mycmd
# did it arrive?
ls -l $(basename $wewant)
showpicoffon "$(basename $wewant)"
else
echo "no new image yet"
fi
# : do not ask too often:
sleep 3
done
# main loop ends ..................................
# MAIN ends .......................................
# Note: Only the chdkptp-commands (u)pload and (d)ownload
# allow for the '-nolua' parameter and thus may work in the
# cam while there is a lua script running there, too.
# joedi Jan 25, 2021


Das Zusammenspiel dieser beiden Programme ist so:
pc: usb-Verbindung prüfen
pc: Kamera connecten
pc: das lua-script in die Kamera schieben und dort starten
cam: script läuft, und die Funktion "notify()" meidet in einer Datei LOG_9999.TXT den Namen des letzten Fotos
pc: Holt alle paar Sekunden die o.a. Datei ab und liest den Inhalt; ist dieser neu, dann wird genau die diesem Namen entsprechende Fotodatei abgeholt, im akt. Verzeichnis gespeichert und (durch ImageMagicks "display") angezeigt.

Das funktioniert ziemlich gut. Wer mag das mal ausprobieren? Was für Ideen gibt es noch?
Bin ja mal gespannt auf Reaktionen.

Grüsse von Joedi
Joedi
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 14
Registriert: 17.02.2020, 21:02
Wohnort: MA/HD
Kamera(s): IXUS60, A470, A530, A570IS, A590IS, SX230, M10


Zurück zu Code-Ecke

Wer ist online?

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