Application Programming Interfaces
Wie auch viele andere Kameras (nicht nur von OM-System, früher Olympus) ist auch die OM1 Mark II (OM1.2) per WLAN (an)steuerbar. Typischerweise nutzt man das (oft unbewusst), wenn man mit der App OI.Share Bilder runterlädt, oder zum Update der Firmware etc.
Es gibt aber auch Apps anderer Hersteller, die diese (oder andere) Schnittstellen nutzen. Eine besonders spannende App ist z.B. die der schwedischen Firma Cascable. Dort kann man u.a. „Rezepte“ anlegen, das sind Routinen wo man z.B. Belichtungszeit, Blendenwert und ISO nach vorgewählten Regeln festlegen kann.
Die Kamera stellt für das Ansteuern APIs (Application Programming Interfaces) zur Verfügung. Allerdings gibt es meinem Wissen nach, aktuell keine offizielle Dokumentation dieser Schnittstellen. Auch die Anweisung, wie man die Liste der Befehle dieser APIs aufruft, habe ich z.B. nicht in der Bedienungsanleitung der Kamera gefunden.
1. WLAN an der Kamera einschalten
Der erste Schritt um diese APIs zu nutzen ist der Einstieg in das WLAN der Kamera. Der wichtigste Hinweis, wie das geht, steht für die OM1.2 in deren Bedienungsanleitung auf Seite 450. Dort findet man beschrieben wie man die WLAN SSID (Service Set Identifier, der Name des WLANs) und das WLAN Passwort herausfindet. Beim Starten des WLANs der Kamera wählen wir die Option Geräteverbindung.
2. Computer mit dem WLAN der Kamera verbinden
Im nächsten Schritt verbindet man den Computer (oder das Mobiltelefon) mit diesem WLAN (in den WLAN Einstellungen die entsprechende SSID eingeben und beim ersten Einstieg das Passwort eingeben)
Auch wenn ich OI.Share nutze gehe ich immer so vor. Zuerst WLAN in der Kamera starten, dann das Endgerät mit dem WLAN verbinden und dann erst z.B. OI.Share starten. Bluetooth verwende ich eigentlich nie in der Kamera.
3. Weiter im Browser
Ich führe die nächsten Schritte auf einem Mac aus und zwar mit dem Safari-Browser. Prinzipiell sollte das auch auf Windows- oder Linux-Rechnern funktionieren und auch auf iOS- und Android-Geräten und auf verschiedenen Browsern.
In der Adressleiste des Browsers gibt man jetzt ein:
http://192.168.0.10/get_commandlist.cgi
Die Antwort erscheint als XML (eXtansible Markup Language). Diese XML wird je nach verwendetem Browser unterschiedlich geparst (dargestellt). Speichert man sich diese Antwort als XML ab (in Safari unter „Ablage“ – „Sichern unter…“ – „Quelltext der Seite“) und öffnet diese wieder, dann sieht man in der Regel ein recht unstrukturiertes Dokument, das z.B. so aussieht:
<?xml version="1.0"?><oishare><version>5.20</version><oitrackversion>3.10</oitrackversion><support func="web"/><support func="remote"/><support func="gps"/><support func="moviestream"/><support func="firmup"/><support func="mysetbackup"/><support func="cameralog"/><cgi name="get_connectmode"><http_method type="get"/></cgi><cgi name="switch_cammode"><http_method type="get"><cmd1 name="mode"><param1 name="rec"><cmd2 name="lvqty"><param2 name="0320x0240"/><param2 name="0640x0480"/><param2 name="0800x0600"/><param2 name="1024x0768"/><param2 name="1280x0960"/></cmd2></param1><param1 name="play"/><param1 name="shutter"></param1><param1 name="maintenance"/><param1 name="cameralog"/></cmd1></http_method></cgi><cgi name="get_caminfo"><http_method type="get"/></cgi><cgi name="exec_pwoff"><http_method type="get"><cmd1 name="mode"><param1 name="withble"/></cmd1></http_method></cgi><cgi name="set_timeout"><http_method type="get"><cmd1 name="timeoutsec"></cmd1></http_method></cgi><cgi name="get_resizeimg"><http_method type="get"><cmd1 name="DIR"><param1><cmd2 name="size"><param2 name="1024"/><param2 name="1600"/><param2 name="1920"/><param2 name="2048"/></cmd2></param1></cmd1></http_method></cgi><cgi name="get_movplaytime"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="clear_resvflg"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="get_rsvimglist"><http_method type="get"/></cgi><cgi name="get_imglist"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="get_thumbnail"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="get_screennail"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="get_movfileinfo"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="exec_movietrimresize"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="get_trimresizeprocstatus"><http_method type="get"/></cgi><cgi name="exec_erase"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="cancel_trimresize"></cgi><cgi name="get_exif"><http_method type="get"><cmd1 name="DIR"/></http_method></cgi><cgi name="set_playtargetslot"><http_method type="get"><cmd1 name="targetslot"><param1 name="1"/><param1 name="2"/></cmd1></http_method></cgi><cgi name="get_playtargetslot"><http_method type="get"></http_method></cgi><cgi name="OLYSetConnectPCInfo"><http_method type="post"></http_method></cgi><cgi name="OLYGetConnectPCInfo"><http_method type="get"></http_method></cgi><cgi name="OLYClearConnectPCInfo"><http_method type="get"></http_method></cgi><cgi name="get_resizeimg_witherr"><http_method type="get"><cmd1 name="DIR"><param1><cmd2 name="size"><param2 name="1024"/><param2 name="1600"/><param2 name="1920"/><param2 name="2048"/></cmd2></param1></cmd1></http_method></cgi><cgi name="exec_takemotion"><http_method type="get"><cmd1 name="com"><param1 name="assignafframe"><cmd2 name="point"/></param1><param1 name="releaseafframe"/><param1 name="takeready"><cmd2 name="point"/></param1><param1 name="starttake"><cmd2 name="point"><cmd3 name="exposuremin"/><cmd3 name="upperlimit"/></cmd2></param1><param1 name="stoptake"/><param1 name="startmovietake"><cmd2 name="limitter"/><cmd3 name="liveview"><param3 name="on"/></cmd3></param1><param1 name="stopmovietake"/></cmd1></http_method></cgi><cgi name="exec_takemisc"><http_method type="get"><cmd1 name="com"><param1 name="startliveview"><cmd2 name="port"/></param1><param1 name="stopliveview"/><param1 name="getrecview"/><param1 name="getlastjpg"/><param1 name="ctrlzoom"><cmd2 name="move"><param2 name="widemove"/><param2 name="telemove"/><param2 name="off"/><param2 name="wideterm"/><param2 name="teleterm"/></cmd2></param1><param1 name="supermacromfinaflock"><cmd2 name="move"><param2 name="nearstep"/><param2 name="farstep"/><param2 name="near"/><param2 name="far"/><param2 name="stop"/></cmd2><cmd3 name="movement"></cmd3></param1><param1 name="MovieThroughStart"/><param1 name="MovieThroughStop"/><param1 name="GetMovieSetting"/></cmd1></http_method></cgi><cgi name="get_camprop"><http_method type="get"><cmd1 name="com"><param1 name="desc"><cmd2 name="propname"><param2 name="touchactiveframe"/><param2 name="takemode"/><param2 name="drivemode"/><param2 name="focalvalue"/><param2 name="expcomp"/><param2 name="shutspeedvalue"/><param2 name="isospeedvalue"/><param2 name="wbvalue"/><param2 name="noisereduction"/><param2 name="lowvibtime"/><param2 name="bulbtimelimit"/><param2 name="digitaltelecon"/><param2 name="supermacrozoom"/><param2 name="exposemovie"/><param2 name="cameradrivemode"/><param2 name="QualityMovie2"/><param2 name="NoiseReductionExposureTime"/><param2 name="SilentNoiseReduction"/><param2 name="SilentTime"/><param2 name="ValidMediaSlot"/><param2 name="desclist"/></cmd2></param1><param1 name="get"><cmd2 name="propname"><param2 name="touchactiveframe"/><param2 name="takemode"/><param2 name="drivemode"/><param2 name="focalvalue"/><param2 name="expcomp"/><param2 name="shutspeedvalue"/><param2 name="isospeedvalue"/><param2 name="wbvalue"/><param2 name="noisereduction"/><param2 name="lowvibtime"/><param2 name="bulbtimelimit"/><param2 name="digitaltelecon"/><param2 name="exposemovie"/><param2 name="cameradrivemode"/><param2 name="SilentNoiseReduction"/><param2 name="SilentTime"/><param2 name="ValidMediaSlot"/></cmd2></param1><param1 name="check"><cmd2 name="propname"><param2 name="ValidMediaSlot"/></cmd2></param1></cmd1></http_method></cgi><cgi name="set_camprop"><http_method type="post"><cmd1 name="com"><param1 name="set"><cmd2 name="propname"><param2 name="takemode"/><param2 name="drivemode"/><param2 name="focalvalue"/><param2 name="expcomp"/><param2 name="shutspeedvalue"/><param2 name="isospeedvalue"/><param2 name="wbvalue"/><param2 name="exposemovie"/></cmd2></param1></cmd1></http_method></cgi><cgi name="get_activate"><http_method type="get"/></cgi><cgi name="set_utctimediff"><http_method type="get"><cmd1 name="utctime"><cmd2 name="diff"/></cmd1></http_method></cgi><cgi name="get_gpsdivunit"><http_method type="get"/></cgi><cgi name="get_unusedcapacity"><http_method type="get"/></cgi><cgi name="get_dcffilenum"><http_method type="get"/></cgi><cgi name="req_attachexifgps"><http_method type="post"/></cgi><cgi name="req_storegpsinfo"><http_method type="post"><cmd1 name="mode"><param1 name="new"/><param1 name="append"/><cmd2 name="date"/></cmd1></http_method></cgi><cgi name="get_moviestreaminfo"><http_method type="get"/></cgi><cgi name="ready_moviestream"><http_method type="get"/></cgi><cgi name="start_moviestream"><http_method type="get"/></cgi><cgi name="stop_moviestream"><http_method type="get"/></cgi><cgi name="exit_moviestream"><http_method type="get"/></cgi><cgi name="start_moviestreamts"><http_method type="get"/></cgi><cgi name="fwup_updatemode"><http_method type="get"/></cgi><cgi name="fwup_getversions"><http_method type="get"/></cgi><cgi name="fwup_sendinfo"><http_method type="get"/><cmd1 name="ObjectCompressSize"></cmd1></cgi><cgi name="fwup_sendsplit"><http_method type="post"/><cmd1 name="OffsetPos"></cmd1><cmd2 name="Byte"></cmd2></cgi><cgi name="fwup_check"><http_method type="get"/></cgi><cgi name="fwup_getfirmstatus"><http_method type="get"/></cgi><cgi name="fwup_update"><http_method type="get"/></cgi><cgi name="request_getmysetdata"><http_method type="get"/><cmd1 name="mode"><param1 name="current"/><param1 name="myset1"/><param1 name="myset2"/><param1 name="myset3"/><param1 name="myset4"/></cmd1><cmd2 name="kind"><param2 name="current"/><param2 name="factory"/></cmd2></cgi><cgi name="get_mysetbackupstate"><http_method type="get"/></cgi><cgi name="get_partialmysetdata"><http_method type="get"/><cmd1 name="kind"><param1 name="current"/><param1 name="errorinfo"/></cmd1><cmd2 name="offset"></cmd2><cmd3 name="size"></cmd3></cgi><cgi name="request_restoremysetdata"><http_method type="get"/><cmd1 name="action"><param1 name="restore"/><param1 name="errorcheck"/></cmd1></cgi><cgi name="get_mysetrestorestate"><http_method type="get"/></cgi><cgi name="get_mysetdatamodekind"><http_method type="get"/></cgi><cgi name="get_mysetdatasize"><http_method type="get"/><cmd1 name="kind"><param1 name="current"/><param1 name="errorinfo"/></cmd1></cgi><cgi name="set_mysetdatasize"><http_method type="get"/><cmd1 name="size"></cmd1></cgi><cgi name="send_partialmysetdata"><http_method type="post"/><cmd1 name="offset"></cmd1><cmd2 name="size"></cmd2></cgi><cgi name="get_extmysetmode"><http_method type="get"/></cgi><cgi name="exec_reboot"><http_method type="get"/></cgi><cgi name="get_cameraloginfo"></cgi><cgi name="get_partialcameralogdata"><cmd1 name="offset"></cmd1><cmd2 name="size"></cmd2></cgi><cgi name="clear_cameralogdata"></cgi></oishare>
4. Ein paar erste Schritte mit dem API
Um das XML besser lesbar zu machen, habe ich ein kleines Python Script geschrieben, das aus dem XML eine HTML Datei macht. Dabei werden für die bessere Lesbarkeit Farben und Einrückungen verwendet und Zeilennummern dazugegeben um besser beschreiben zu können wovon ich spreche. Mit dem oben befindlichen Schieberegler kannst Du einstellen, wie weit die Datei ausgeklappt wird.
Hier ist das Python-Script xml-to-html.py . Nach dem Runterladen entkomprimieren und z.B. im Terminal starten (aus dem Verzeichnis wo es liegt) mit python xml-to-html.py. Getestet am Mac.
Die commandlist
Hier siehst Du die Antwort die Du (hoffentlich) erhalten hast, nachdem Du im Adressfeld des Browsers http://192.168.0.10/get_commandlist.cgi eingegeben hast. Es ist der gleiche Inhalt wie das unlesbare Dokument oben, nur dass die erste Zeile mit <?xml version="1.0"?> fehlt, die brauchen wird hier nicht. Probier den Schieberegler aus um die Anzeige-Tiefe zu verändern.
(ich habe zwei Kameras, die beide auf der gleichen FW sind und habe trotzdem Unterschiede z.B. in <version> gefunden)
2
Anzeige-Tiefe 1
Stelle zunächst den Schieberegler auf die Anzeige-Tiefe 1. Du siehst dann beginnend mit der Zeile 11 eine Liste der Befehle, die uns angezeigt wird. Dass diese Liste nicht vollständig ist, erkennt man schon daran, dass hier get_commandlist nicht dargestellt wird. Insgesamt sind es etwas über 60 verschiedene Anweisungen.
Jede dieser Anweisungen beginnt mit <cgi name="[Name der Anweisung]">.
Das CGI steht dabei für Common Gateway Interface, das ist eine Standardschnittstelle zwischen Webservern (hier die Kamera) und Anwendungen. CGI funktioniert im Prinzip so, dass ein Request (eine Anfrage) immer ein Response (eine Antwort) auslöst.
Anzeige-Tiefe 2
Stellen wir jetzt den Schieberegler auf Anzeige-Tiefe 2. Vergleichen wir dabei was in der Zeile 12 steht <http_method type="get" />, mit dem was in Zeile 126 steht <http_method type="post" />.
GET und POST sind zwei Methoden der Datenübertragung im CGI-Kontext. POST ist dabei die stabilere Methode.
Einfachste GET-Abrufe ohne weitere Parameter
Wir sind weiterhin im WLAN (Gerätemodus) der Kamera und beginnen mit einfachen Abrufen.
Ich nehme z.B. den Request der Zeile 33 und gebe in die Adressleiste des Browsers ein
http://192.168.0.10/get_caminfo.cgi
Das gleiche Ergebnis werde ich erhalten, wenn ich im Terminal eingebe:
curl "http://192.168.0.10/get_caminfo.cgi"
curl steht dafür für „Client for URL“, einem recht mächtigen Kommandozeilen-Tool das man aus dem Terminal (unter Windows geht das mit PowerShell genauso) starten kann.
In beiden Fällen erhalte ich folgendes Ergebnis (ein XML, das je nach Programm wieder unterschiedlich geparst wird):
<?xml version="1.0"?>
<caminfo>
<model>OM-1MarkII</model>
<extmediaslot>2/2</extmediaslot>
<MISOAExpComp>available</MISOAExpComp>
<HighResolutionSoundPlay>notavailable</HighResolutionSoundPlay>
<BleFunction>available</BleFunction>
<RecommendedIsoLowerLimit>200</RecommendedIsoLowerLimit>
<MovieThroughInfoDisplay>available</MovieThroughInfoDisplay>
<SerialNumberList>
<Serial1>BJRA0xxxx</Serial1>
<Serial2>A0EA0yyyy</Serial2>
</SerialNumberList>
<DoubleslotSupport>available</DoubleslotSupport>
<GetImageScreennailSupport>available</GetImageScreennailSupport>
<GetRawImageSupport>available</GetRawImageSupport>
<WifiWakeupAtUdpStop>need</WifiWakeupAtUdpStop>
<BleFunctionDetailList>
<Func1>BleShutter</Func1>
<Func2>BleLocation</Func2>
</BleFunctionDetailList>
<LiveCompLimitMinute>180</LiveCompLimitMinute>
<MaxPostBodySize>1048576</MaxPostBodySize>
<gpsLogTag>OM Digital Solutions</gpsLogTag>
<movietrimming>notavailable</movietrimming>
</caminfo>
Hier wird unter <model> der Modellnamen der Kamera angegeben, unter <extmediaslots> ob beide 2/2 oder z.B. nur ein (wäre 1/2) Kartenslot mit einer SD-Card gefüllt wurde. <Serial1> ist die Seriennummer der Kamera, <Serial2> jene des Objektivs. Und so weiter…
GET-Abrufe mit einem weiteren Parameter
In Zeile 14 finden wir das CGI für switch_cammode. Dieses enthält Parameter. Wenn wir die Kamera in den Rec-Mode schalten wollen geben wir im Browser ein:
http://192.168.0.10/switch_cammode.cgi?mode=rec
oder wir geben im Terminal den gleichen Request nach dem Aufruf von curl ein:
curl "http://192.168.0.10/switch_cammode.cgi?mode=rec"
Jedenfalls wird der Parameter so angehängt:
...?[Name des Parameters]=[Wert des Parameters]
Bei der Eingabe im Browser wird ein leeres Dokument runtergeladen mit Namen switch_cammode.cgi, im Terminal erscheint nach der Eingabe wieder das Prompt.
GET-Abruf mit mehreren Parametern
In Zeile 209 steht das CGI für get_camprop. Dieses funktioniert im cammode recht, den wir gerade im vorigen Beispiel aufgerufen haben.
get_camprop hat einen Parameter 1 und einen Parameter 2. Lass uns die aktuell eingestellte Belichtungszeit aufrufen:
Im Browser geht das so:
http://192.168.0.10/get_camprop.cgi?com=get&propname=shutspeedvalue
Im Terminal so:
curl "http://192.168.0.10/get_camprop.cgi?com=get&propname=shutspeedvalue"
Die Übergabe von mehreren Parametern erfolgt also so:
...?[Name des Parameters 1]=[Wert des Parameters 1]&[Name des Parameters 2]=[Wert des Parameters 2]
Die Antwort ist ein XML das im Terminal so dargestellt wird:
<?xml version="1.0"?><get><value>320</value></get>%
POST-Requests
Einen Request vom http-typ post kann ich nicht einfach über den Browser schicken, weil ich dort keine Daten übergeben kann.
Schauen wir uns das CGI in Zeile 266 an. Hier geht es um das Gegenstück von get_camprop, um set_camprop
Im Terminal geben wir ein um die Belichtungszeit zu ändern:
curl "http://192.168.0.10/set_camprop.cgi?com=set&propname=shutspeedvalue" -d "<set><value>100</value></set>"
Die Antwort lautet:
<?xml version="1.0"?><response><drivemode>silent-normal</drivemode><cameradrivemode>normal</cameradrivemode></response>%
Wenn wir überprüfen wollen, ob die Belichtungszeit auf den gesendeten Wert geändert wurde, geben wir den Request ein, den wir oben schon kennengelernt haben:
curl "http://192.168.0.10/get_camprop.cgi?com=get&propname=shutspeedvalue"
Die Antwort lautet jetzt:
<?xml version="1.0"?><get><value>100</value></get>%
Bilder runterladen nur mit APIs – mehrere Requests hintereinander
Solange kein POST-Request erhalten ist, kann man eine Reihe von Anweisungen auch nacheinander in einem Browser wiedergeben.
Im folgenden Beispiel laden wir uns so Bilder von der Kamera.
Zunächst schalten wir mit dem Request aus Zeile 114 auf den richtigen Kartenslot, z.B. auf Slot 1. Wir geben ein:
http://192.168.0.10/set_playtargetslot.cgi?targetslot=1
Jetzt schauen wir nach, welche Bilder wir auf der SD-Card im gesetzten Slot haben. Eingabe dafür entsprechend Zeile 75:
http://192.168.0.10/get_imglist.cgi?DIR=/DCIM
Du siehst dann die Ordner, die Du in diesem Verzeichnis hast. Nehmen wir an, Du möchtest die Bilder anzeigen, die Du z.B. im Verzeichnis 103OMSYS hast, dann gibst Du ein (und danach wieder Enter):
http://192.168.0.10/get_imglist.cgi?DIR=/DCIM/103OMSYS
Jetzt werden Dir die dort vorhandenen Bilder angezeigt, z.B. so:
VER_100
/DCIM/103OMSYS,P1167047.JPG,3155242,0,23600,28857
/DCIM/103OMSYS,P1167047.ORF,20596287,0,23600,28857
Wenn Du jetzt ein Bild runterladen möchtest, dann gibst Du z.B. ein:
http://192.168.0.10/DCIM/103OMSYS/P1167047.JPG
Dann wird das entsprechende JPEG gleich im Browser angezeigt, oder Du rufst die RAW-Datei auf:
http://192.168.0.10/DCIM/103OMSYS/P1167047.ORF
Hier wirst Du dann gleich direkt gefragt, ob Du das Bild runterladen möchtest. Beim JPEG lädst Du dann runter in dem Du dir rechte Maustaste drückst und dann das Bild sicherst.
Python Skript zum Bilder importieren
Nicht immer ist die Eingabe von Befehlen im Brower oder auch im Terminal praktisch. Hier ein kleines Python-Skript, das Du gerne nutzen und erweitern kannst.
- Runterladen von hier:
- Am Mac
Terminalstarten und in das Verzeichnis gehen, in dem die runtergeladene (und entkomprimierte) Datei liegt (sie heißt dannom1-2-import.py). - Dort den Befehl eingeben
python om1-2-import.py - Es geht dann ein eigenes Programmfenster auf, die Nutzung ist dann wahrscheinlich recht selbsterklärend: Slot auswählen und verbinden, dann Ordner auswählen, dann Bilder. Dann entweder alle Bilder runterladen oder nur die markierten.

Ein Video das zeigt, wie das 9KB große (kleine) Python-Skript funktioniert, siehst Du hier.
Folge von Befehlen um ein Foto zu machen
Du bist mit Deinem Computer mit dem WLAN der Kamera verbunden, so wie oben beschrieben.
Eingabe im Terminal
zur Überprüfung, ob Du mit der Kamera verbunden bist.
curl "http://192.168.0.10/get_caminfo.cgi"
siehe Zeile 14 der commandlist, umstellen auf den Aufnahme-Modus
curl "http://192.168.0.10/switch_cammode.cgi?mode=rec"
Startliveview einschalten, wie in Zeilen 175f beschrieben.
curl "http://192.168.0.10/exec_takemisc.cgi?com=startliveview&port=5555"
Kamera auslösen wie in Zeilen 148f beschrieben:
curl "http://192.168.0.10/exec_takemotion.cgi?com=starttake"
Eingabe in einem Browser
zur Überprüfung, ob Du mit der Kamera verbunden bist.
http://192.168.0.10/get_caminfo.cgi
siehe Zeile 14 der commandlist, umstellen auf den Aufnahme-Modus
http://192.168.0.10/switch_cammode.cgi?mode=rec
Startliveview einschalten, wie in Zeilen 175f beschrieben.
http://192.168.0.10/exec_takemisc.cgi?com=startliveview&port=5555
Kamera auslösen wie in Zeilen 148f beschrieben:
http://192.168.0.10/exec_takemotion.cgi?com=starttake
Wenn alles passt kommt in beiden Fällen eine Meldung ähnlich wie:
<response>
<take>ok</take>
<affocus>ok</affocus>
<afframepoint>0238x0097</afframepoint>
<afframesize>0008x0009</afframesize>
</response>
Im Fehlerfall kommt eine Meldung ähnlich dieser:
<response>
<take>ng</take>
<affocus>ng</affocus>
</response>
Runterladen von Set-Files mit den APIs
Wieder bist Du mit Deinem Computer mit dem WLAN der Kamera verbunden, so wie oben beschrieben. Die Verbindung ist geprüft, wir starten gleich im Terminal.
Schalte zunächst in den Maintenance Mode (siehe Zeile 14)
curl "http://192.168.0.10/switch_cammode.cgi?mode=maintenance"
Im Terminal gibt es dazu keine direkte Reaktion. Danach teilen wir der Kamera mit, welches Set-File wir runterladen wollen (entsprechend Zeile 357). Hier ist es Myset1.
curl "http://192.168.0.10/request_getmysetdata.cgi?mode=myset1&kind=current"
Im Terminal erscheint:<?xml version="1.0"?><response><result>ok</result></response>
Jetzt erfragen wir die Größe des Set-Files (Zeile 396)
curl "http://192.168.0.10/get_mysetdatasize.cgi?kind=current"
Die Antwort müssen wir gut lesen, benötigen wir für den nächsten Schritt. Speziell interessiert uns die Größe, die das Set-File hat (rot markiert).<response><result>ok</result><datasize>87817</datasize></response>
Dann machen wir weiter mit dem Runterladen des Set-Files (Zeile 374)
curl "http://192.168.0.10/get_partialmysetdata.cgi?kind=current&offset=0&size=87817" -o myset1.txt
Mit dem Zusatz -o myset1.txt leiten wir den Output in eine Datei mit Namen myset1.txt im aktuellen Verzeichnis um.
Im Terminal erscheint
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 88034 100 88034 0 0 830k 0 --:--:-- --:--:-- --:--:-- 834k
Ich rate davon ab, die Methode mit den APIs für das Hochladen manipulierter „Set-Files“ in die Kamera zu nutzen – MACH ES NICHT. Die beste Methode ist die mit OI.Share (hier beschrieben). Zum Vergleichen von Set-Files ist dafür die Methode mit den APIs besser.
Auf den APIs basierend, aber komfortabler zu nutzen, ist dieses Python Skript: om-1-download-sets.py. Die runtergeladen Datei entkomprimieren und im Terminal starten mit python om-1-download-sets.py. Z.B. für die OM3 müsste man das Skript erweitern, die OM3 hat einen Speicherplatz für Set-Files mehr als die OM1.2.
„intelligente“ Belichtungsreihen
Das iOS-Programm Cascable ist in der Lage „Belichtungsrezepte“ abzuarbeiten. Man kann ich das aber auch mit den APIs selber bauen.
Ein Beispiel dafür ist das kleine Python-Script om-brack.py, das alle Permutationen der drei Werte Belichtungszeit, Blende und ISO verwendet, um damit Fotos zu machen.
Hier kannst Du die das komprimierte Skript runterladen: om-brack.py. Du musst es nach dem Runterladen entpacken und dann im Terminal aus dem Verzeichnis starten, wo es liegt mit: python om-brack.py.