{"id":40,"date":"2026-02-21T11:57:20","date_gmt":"2026-02-21T10:57:20","guid":{"rendered":"https:\/\/voeck.de\/?p=40"},"modified":"2026-02-21T11:57:20","modified_gmt":"2026-02-21T10:57:20","slug":"shellscript-bash-fuers-astroimaging-mit-raspberry-pi-und-raspberry-camera-modul-v3","status":"publish","type":"post","link":"https:\/\/voeck.de\/?p=40","title":{"rendered":"Shellscript (bash) f\u00fcrs Astroimaging mit Raspberry Pi und Raspberry Camera-Modul V3"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# Langzeitbelichtungsserie und Video mit RaspiCamV1.3\n# webdav-mount: https:\/\/heinz-otto.blogspot.com\/2018\/01\/webdav-auf-dem-raspberry.html\n# sudo apt install bc\n\nCAM=\"0\" # Nummer der Kamera 0: 1.Kamera, 1: 2.Kamera\nA=\"0\"\nTYP=\"\"\nINSTRUM=\"114f900_RPiCamV3\"\nNAME=\"\"\nTIME=\"2\"\nANZ=\"20\"\nERH=\"1\"\nMODUS=\"2304:1296:10:U\"    #Aufnahmemodus w:h:bits:compression\nGAIN=\"16\"  #0..16\nLENV=\"30\"\n\nRED='\\033&#91;0;31m'\nNC='\\033&#91;0m' # No Color\n\nTYPEN=(\"preview\" \"focus\" \"lights\" \"darks\" \"flats\" \"biases\" \"video\" \"copy\" \"delete\" \"quit\")\n\ncd ~\/astro\nDAT=$(date +\"%Y_%m_%d\")\nmkdir $DAT\ncd $DAT\n\nrpicam-hello --list-cameras\nread -e -p \"Kamera: \" -i \"$CAM\" CAM\n\nwhile (true)\ndo\n  read -e -p \"&#91;0]preview video\/&#91;1]focusimages\/&#91;2]lightframes\/&#91;3]darkframes\/&#91;4]flatframes\/&#91;5]biasframes\/&#91;6]video\/&#91;c]copy files to nextcloud\/&#91;d]delete files\/&#91;u]unmount nextcloud\/&#91;q]uit: \" -i \"$A\" A\n  if &#91; \"$A\" = \"q\" ]; then\n    break\n  fi\n\n  if &#91; \"$A\" = \"c\" ]; then\n    mount \/media\/nextcloud\n    echo \"cp -a ~\/astro\/. \/media\/nextcloud\/astro\/\"\n    cp -a ~\/astro\/. \/media\/nextcloud\/astro\/\n    continue\n  fi\n\n  if &#91; \"$A\" = \"d\" ]; then\n    echo \"rm -R *\"\n    rm -R *\n    continue\n  fi\n\n  if &#91; \"$A\" = \"u\" ]; then\n    umount \/media\/nextcloud\n    continue\n  fi\n\n  TYP=${TYPEN&#91;${A}]}\n  read -e -p \"Objektname: \" -i \"$NAME\" NAME\n  mkdir $NAME\n  cd $NAME\n\n\n  if &#91; \"$A\" = \"0\" ]; then #preview\n    rpicam-hello -v 0 --camera 0 -t 0\n    cd ..\n    continue\n  fi\n\n  mkdir $TYP\n  cd $TYP\n\n  read -e -p \"Gain (0..16): \" -i \"$GAIN\" GAIN\n\n  if &#91; \"$A\" = \"6\" ]; then   #video\n      read -e -p \"L\u00e4nge des Videos (Sekunden): \" -i \"$LENV\" LENV\n      tstr=$(date +\"%Y%m%d-%H%M%S\")\n      t=$(echo \"scale=0; $LENV * 1000\" | bc -l)\n      rpicam-vid --gain $GAIN --level 4.2 --framerate 120 --width 1280 --height 720 --save-pts timestamp.pts -o $NAME-$tstr-$INSTRUM.264 -t ${LENV}s --denoise cdn_off -n \n      #rpicam-raw -t $t --width 1536 --height 864 -o $NAME-$tstr-$INSTRUM%05d.raw --framerate 8\n      continue\n  fi\n\n  read -e -p \"Modus (w:h:bpp:compression): \" -i \"$MODUS\" MODUS\n\n  if &#91; \"$A\" = \"5\" ]; then   #biases\n    read -e -p \"Zahl der Aufnahmen: \" -i \"$ANZ\" ANZ\n\n    I=1\n    while &#91; $I -le $ANZ ]; do\n      echo -e \"${RED}****** $TYP-frame $I\/$ANZ ******${NC}\"\n      tstr=$(date +\"%Y%m%d-%H%M%S\")\n      rpicam-still -v 0 -o bias-$tstr-$INSTRUM.jpg --shutter 0 --gain $GAIN --awbgains 1,1 --immediate --raw -n --mode $MODUS\n      rm \"bias-$tstr-$INSTRUM.jpg\"\n      let I=I+1\n    done\n    cd ..\/..\n    continue\n  fi\n\n  read -e -p \"Belichtungszeit (Sekunden): \" -i \"$TIME\" TIME\n\n  if &#91; \"$A\" = \"1\" ]; then\t#focus\n    echo -e \"${RED}****** Mache Aufnahmen mit $TIME Sekunden zum Fokussieren ******\"\n    echo -e \"&#91;q]uit, &#91;+]verdopple, &#91;-]halbiere Belichtungszeit...${NC}\"\n\n    tstr=$(date +\"%Y%m%d-%H%M%S\")\n    t=$(echo \"scale=0; $TIME * 1000000\" | bc -l)\n    rpicam-still -v 0 -o focus-$tstr.jpg --shutter $t --gain $GAIN --awbgains 1,1 --raw -n --mode $MODUS\n\n    while true; do\n      gwenview \"'focus-$tstr.jpg'\" &amp;\n      tstr=$(date +\"%Y%m%d-%H%M%S\")\n      t=$(echo \"scale=0; $TIME * 1000000\" | bc -l)\n      rpicam-still -v 0 -o focus-$tstr.jpg --shutter $t --gain $GAIN --awbgains 1,1 --raw -n --mode $MODUS\n      kill $!          # Beendet das Programm\n      read -t 1 -n 1 key\n      if &#91; \"$key\" = \"q\" ]; then\n        echo \"Quit\"\n        break\n      elif &#91; \"$key\" = \"+\" ]; then\n         TIME=$(echo \"scale=2; $TIME * 2\" | bc -l)\n      elif &#91; \"$key\" = \"-\" ]; then\n         TIME=$(echo \"scale=2; $TIME \/ 2\" | bc -l)\n      fi\n    done\n    cd ..\/..\n    continue\n  fi\n\n  read -e -p \"Instrument: \" -i \"$INSTRUM\" INSTRUM\n  read -e -p \"Zahl der Aufnahmen pro Belichtungszeit: \" -i \"$ANZ\" ANZ\n  read -e -p \"Zahl der Serien (jeweils 1.5x Zeiterh\u00f6hung): \" -i \"$ERH\" ERH\n\n  COUNTER=1\n  while &#91; $COUNTER -le $ERH ]; do\n    TIME2=$(echo \"scale=6; $TIME * $COUNTER\" | bc -l)\n\n    I=1\n    while &#91; $I -le $ANZ ]; do\n        echo -e \"\\n\\n${RED}************************* $TYP-frame $I\/$ANZ von $NAME - $TIME2 Sekunden *******************************\"\n        echo -e \"&#91;q]uit, &#91;+]verdopple, &#91;-]halbiere Belichtungszeit, &#91;v]verdopple, &#91;h]halbiere Anzahl...${NC}\\n\"\n        tstr=$(date +\"%Y%m%d-%H%M%S\")\n        t=$(echo \"scale=0; $TIME2 * 1000000\" | bc -l)\n        rpicam-still -v 0 -o $NAME-$TYP-$tstr-$TIME2-$INSTRUM.jpg --shutter $t --gain $GAIN --awbgains 1,1 --immediate --raw -n --mode $MODUS\n       # gwenview \"'$NAME-$TYP-$tstr-$TIME2-$INSTRUM.jpg'\" &amp;\n       # sleep 5          # Wartet 5 Sekunden\n       # kill $!          # Beendet das Programm\n       # rm \"'$NAME-$TYP-$tstr-$TIME2-$INSTRUM.jpg'\"\n        read -t 1 -n 1 key\n        if &#91; \"$key\" = \"q\" ]; then\n          echo \"Quit\"\n          break 2\n        elif &#91; \"$key\" = \"+\" ]; then\n          TIME=$(echo \"scale=2; $TIME * 2\" | bc -l)\n          TIME2=$(echo \"scale=2; $TIME * $COUNTER\" | bc -l)\n          I=0\n        elif &#91; \"$key\" = \"-\" ]; then\n          TIME=$(echo \"scale=2; $TIME \/ 2\" | bc -l)\n          TIME2=$(echo \"scale=2; $TIME * $COUNTER\" | bc -l)\n\t      I=0\n        elif &#91; \"$key\" = \"v\" ]; then\n          ANZ=$&#91;$ANZ * 2]\n        elif &#91; \"$key\" = \"h\" ]; then\n          ANZ=$&#91;$ANZ \/ 2]\n        fi\n  \n      let I=I+1\n    done\n    let COUNTER=COUNTER+1\n\n  done\n \n  cd ..\/..\n\n  echo -e \"\\n${RED}******************* Fertig! *********************${NC}\\n\\n\"\ndone<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-40","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/voeck.de\/index.php?rest_route=\/wp\/v2\/posts\/40","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/voeck.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/voeck.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/voeck.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/voeck.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=40"}],"version-history":[{"count":1,"href":"https:\/\/voeck.de\/index.php?rest_route=\/wp\/v2\/posts\/40\/revisions"}],"predecessor-version":[{"id":41,"href":"https:\/\/voeck.de\/index.php?rest_route=\/wp\/v2\/posts\/40\/revisions\/41"}],"wp:attachment":[{"href":"https:\/\/voeck.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=40"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/voeck.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=40"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/voeck.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=40"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}