samedi 23 janvier 2016

Créer un seedbox avec un raspberry pi.

Après que Free n'est rendu inutile sa seedbox avec ses DNS menteurs impossibles à changer (je parle de l'utilitaire de téléchargement : voir ici et ), je me suis enfin laissé acheté un raspberry pi 2. Le but était de remplacer la fonction seedbox qu'ils ont gaché, et de faciliter la connection de n'importe quel pc sur mon réseau domestique à mon service vpn.


Premièré étape : Installation du système de base

Je suis un afficionados d'archlinux, mais j'ai voulu revenir sur Debian, en effet je cherche de la stabilité et je n'ai pas besoin des dernières version des logiciels ni d'une quelconque interface graphique.

Je suis habitué à la netinstall, j'aime bien partir d'un système minimaliste j'ai donc récupéré une image de minibian qui à l'avantage d'être petite (je n'ai qu'une carte SD de 2 Go) et d'avoir un serveur ssh activé par défaut.

Ici je suppose que votre carte µSD est désignée par /dev/mmcblk0

wget http://sourceforge.net/projects/minibian/files/2015-11-12-jessie-minibian.tar.gz/download
tar -xvf 2015-11-12-jessie-minibian.tar.gz
cat 2015-11-12-jessie-minibian.img >> /dev/mmcblk0
sync
sync permée de vider les tampons des systèmes de fichiers (si l'écriture n'était pas complète).

Après l'écriture de l'image retirez et reconnectez la carte sd. Deux partition y sont présentent : la partition boot contenant les fichiers de configuration nécéssaires au démarrage. Et la deuxième partition (mmcblockp1 qui est là plus grande) qui contient le système qu'il nous faut redimensionner pour qu'elle complète totalement la carte. J'ai utilisé Gparted  car je suis un flemmard (voir avec resize2fs). Cette opération peur être réalisée après le premier boot avec l'utilitaire raspi-config.

Il ne reste plus qu'a nommer votre raspberry pi sans quoi vous pouvez rencontrer des problèmes de connection sur votre réseau. En utilisant votre gestionnaire de fichier il vous faut accéder à la deuxième partition de la carte et avec votre éditeur préfére :

Changez  /etc/hostname (j'ai choisi comme nom EEPRON à la place du minibian par défaut)
Modifiez /etc/hosts : mettez de nouveau le nom choisi à la place de minibian.
Ça donne quelque chose comme ça:

$cat /etc/hostname
EEPRON
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 EEPRON

Premier boot:

La raspberry alimenté et connectée au réseau ethernet (compter 15 secondes de démarrage pour minibian), j'ai récupéré l'addrese ip en utilisant l'interface de la freebox, sinon imposez une adresse ip statique.
Pour imposer une adresse ip statique remplacez la ligne "iface eth0 line" dans /etc/network/interfaces par

iface eth0 inet static
address 192.168.0.222
netmask 255.255.255.0
gateway 192.168.0.254

Connection et création d'un utilisateur

Vous n'avez plus qu'a vous connecter sur la raspberry: dans un terminal tapez :

ssh root@192.168.0.xx

Informez le mot de passe "raspberry" et vous pouvez créer un utilisateur et ajoutez le à au groupe sudo pour pouvoir se passer du compte route.

adduser toto
adduser toto sudo

Petite mise à jour du système:

sudo apt-get update
sudo apt-get upgrade

Mettre le système à l'heure:

Pour mettre à jour le firmware il vous faut mettre à l'heure votre système (en effet le raspberry pi n'as pas d'horloge interne). Vous pouvez le faire manuellement avec date ou utiliser un serveur ntp afin que le système se mette à l'heure à chaque démarrage. Pour celà configurez /etc/default/ntpdate.

# The settings in this file are used by the program ntpdate-debian, but not
# by the upstream program ntpdate.

# Set to "yes" to take the server list from /etc/ntp.conf, from package ntp,
# so you only have to keep it in one place.
NTPDATE_USE_NTP_CONF=yes

# List of NTP servers to use  (Separate multiple servers with spaces.)
# Not used if NTPDATE_USE_NTP_CONF is yes.
NTPSERVERS="online.net"

# Additional options to pass to ntpdate
NTPOPTIONS=""

Ensuite pour forcer la synchronisation

systemctl stop ntp
ntpdate-debian online.net
systemctl enable ntp
systemctl start ntp

Personnellement j'utilise le serveur ntp de ma freebox, ici il est intelligent de remplacer directement mafreebox.free.fr par son adresse ip (192.168.0.254 pour moi). Ce sera utile si vous utiliser une connection VPN et faite un routage original.

Mise à jour du firmware du raspberry pi:

Le firmware fait environ 50 Mo

sudo apt-get install rpi-update 
sudo rpi-update

Pensez à redémarrer pour que le nouveau firmware soit chargé.

Autres paquets utiles

Si vous n'avez pas déjà redimmensionnée votre partition installer l'utilitaire:

sudo apt-get install raspi-config
sudo raspi-config

D'autres paramètres sont modifiable avec cette interface ncurses, mais bon rien ne vous empêche de modifier directement les fichiers sur votre partition /boot/config.txt. Toute modification nécessite un redémarrage.

Et puis quelques outils utiles si vous voulez avoir une connexion wifi (n'oubliez pas les firmware de vos dongle)

sudo apt-get install net-tools iw wireless-tools wpa_supplicant dbus aptitude

Finalement, si vous avez cette erreur au boot : cfg80211: Calling CRDA to update world regulatory domain. Alors installez
 
sudo apt-get install crda wireless-regdb

Client VPN avec PPTP

J'utilise le point to point tunelling pour me connecter à mon fournisseur vpn. Pour celà il faut installer:

sudo apt-get install pptp-linux

Voici ma configuration pour purevpn

~# cat /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client    server    secret            IP addresses
purevpn0s******* serveur_vpn "motdepasse" * 

~# cat /etc/ppp/peers/serveur_pptp
pty "pptp adresse.pointtoserver.com --nolaunchpppd"
name purevpn0s*******
remotename serveur_pptp
ipparam serveur_pptp
file /etc/ppp/options.pptp
require-mppe-128
refuse-eap noauth

Vous pouvez également utiliser les paramètres maxfail 0 et persist, ainsi votre connection se reconnectra/essayera de se connecter en boucle.

~# cat /etc/ppp/ip-up.d/serveur_pptp
#!/bin/bash
# This script is called with the following arguments:
# Arg Name
# $1 Interface name
# $2 The tty
# $3 The link speed
# $4 Local IP number
# $5 Peer IP number
# $6 Optional ``ipparam'' value foo

ip route replace default dev $1

Ici toute les connections par défault sont désomais routées par ppp0 (nom de l'interface). Ceci ne pause pas de problème pour le résaux local car par défaut :

~#ip route
default dev eth0 via 192.168.0.254 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.29 

192.168.0.254 est l'adresse de ma box, 192.168.0.29 celui de mon rapberry pi.
192.168.0.0/24 ou 192.168.0.* signifie toutes les adreses de mon réseau local. Ainsi dès que le système souhaite accéder à un périphérique réseau local, il est bien redirigé vers l'interface ethernet.

~# cat /etc/ppp/ip-down.d/serveur_pptp
#!bin/bash
killall rtorrent
ip route del $5
ip route replace default dev eth0 via 192.168.0.254

Ici je stoppe tous process rtorrent lorsque que la connection s'arrète (au cas où). Ce n'est pas élégant du tout, je suis sûre que l'on pourrait utiliser systemd pour rtorrent (cliquez moi). Je supprime ensuite le routage qui se met en place par défaut lorsque la connection pptp est lancée.

N'oubliez pas de rendre executables vous scripts:

sudo chmod+x /etc/ppp/ip-up.d/serveur_pptp
sudo chmod+x /etc/ppp/ip-down.d/serveur_pptp

Désormais vous pouvez vous connecter au serveur pptp avec les commandes:

pppd call serveur_pptp
#Ou avec :
pon serveur_pptp
#et stopper avec
poff serveur_pptp

Vous pouvez utiliser traceroute et route pour vérifier que votre tunnel est bien en place, exemple :

#vérifier que l'interface ppp0 existe bien et que les toutages sont bien en place
ip route
#vérifier que votre adresse sortante est bien celle du serveur pptp
traceroute www.google.fr

Rendre cette connection automatique

Par défault avec pppd et pon c'est le serveur de la configuration /etc/ppp/peers/provider qui est connecté, vous pouvez créer un lien symbolique de votre configuration vers /etc/ppp/peers/provider.
Pour rendre cette configuration automatique j'ai récupéré un un fichier ppp@.service d'archlinux car minibian ne l'a pas. Placez le dans /etc/systemd/system/ :

~# cat /etc/systemd/system/ppp\@.service
[Unit]
Description=PPP link to %I
Before=network.target

[Service]
ExecStart=/usr/sbin/pppd call %I nodetach nolog

[Install]
WantedBy=multi-user.target

Ensuite charger le module ppp_generic et activez le service ppp@votre_serveur :

modprobe ppp_generic
systemctl enable ppp@serveur_pptp.service
systemctl start ppp@serveur_pptp.service

J'ai vu d'autres possibilitées en utilisant le fichir /etc/network/interfaces que j'ai tenté sans grand succés.

Accéder à un partage Windows Freebox

Ma configuration pour la freebox :

~# cat /etc/fstab
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 errors=remount-ro,noatime,nodiratime,commit=120 0 1
//192.168.0.254/Disque\040dur /mnt/freebox cifs auto,user,username=freebox,rw,uid=1000,gid=1000,file_mode=0777,dir_mode=0777,noperm 0 0

Encore une fois 192.168.0.254 est l'adresse de ma freebox. \040 représente un espace, ça peut être pratique pour un chemin avec des espaces sur un partage samba.

Noubliez pas de créer /mnt/freebox avec les bon droits d'accès.

sudo mkdir /mnt/freebox
mount /mnt/freebox
sudo chmod -R a+rw /mnt/freebox

Mon but est d'utiliser le partage pour sauvegarder les torrents de distribution linux que je télécharge sur mininova.

N.B:

Les options gid, uid, file_mode, dir_mode, et noperm permettent à l'utilisateur d'uid et gid correpondant (voir id username) qui accéde le montage samba à avoir tout les droits d'écritures. Sinon l'écriture ne marche seulement que si l'utilisateur correspond et si l'option noperm est utilisée ! (Le partage samba peut être monté par n'importe qui par contre).

rtorrent

Rtorrent est un client torrent avec une interface console, il est léger et plutôt facile à prendre en main. Il gère également les liens magnet.

Installation

sudo apt-get install rtorrent screen

Screen est un utilitaire sympathique qui vous permettra de lancer rtorrent en tache de fond et d'accéder à son interface ulterieurement.

Voici mon fichier de configuration /home/toto/.rtorrent.rc

# Copy to ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.
min_peers = 1
max_peers = 50

# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 1
max_peers_seed = 20

# Maximum number of uploads single torrent may use
max_uploads = 7

# Maximum number of simultaneous downloads
max_downloads_global = 5
# Maximum number of simultaneous uploads
max_uploads_global = 10

# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 0
upload_rate = 100

# Default directory to save the downloaded torrents.
directory = /mnt/freebox/Téléchargements/

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = ./.rtorrent

# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory,5,5,load_start="/mnt/freebox/Téléchargements/A\ Télécharger/*.torrent"
schedule = tied_directory,6,5,start_tied=
schedule = untied_directory,7,5,stop_untied=

# Close torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=2000M

# Periodically save session data
schedule = session_save,240,300,session_save=

# Enable the default ratio group.
ratio.enable=
# Change the limits, the defaults should be sufficient.
# Upload to a minimum ratio of 4.0
ratio.min.set=400
# Upload to a maximum ratio of 20.0
ratio.max.set=2000
# Upload a minimum of 250 MB
ratio.upload.set=250M

# When seeding ratio is reached close the torrent
system.method.set = group.seeding.ratio.command, d.close=

# Move files to ./unsorted when download completes
system.method.set_key = event.download.finished,move_complete,"execute=mv,-n,$d.get_base_path=,\
/mnt/freebox/Téléchargements/Téléchargés;d.set_directory=/mnt/freebox/Téléchargements/Téléchargés"

# Port range to use for listening.
port_range = 33101-33199

# Start opening ports at a random position within the port range.
port_random = yes

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
encryption = allow_incoming,try_outgoing,enable_retry,prefer_plaintext

# Sort the main view by ratio
view.sort_current = main,greater=d.get_ratio=
view.sort_new = main,less=d.get_ratio=
view.sort = main

# Sort the seeding view by the upload rate and only show torrents with peers
view.sort_current = seeding,greater=d.get_up_rate=
view.filter = seeding,"and=d.get_complete=,d.get_peers_connected="
view.sort_new = seeding,less=d.get_up_rate=
view.sort = seeding

# Sort the leeching view by name
view.sort_current = leeching,greater=d.get_name=
view.sort_new = leeching,greater=d.get_name=
view.sort = leeching

# Filter the active view by connected peers
view.sort_current = active,less=d.get_name=
view.sort_new = leeching,less=d.get_name=
view.filter = active,d.get_peers_connected=
view.sort = active

schedule = sort_main,11,5,view.sort=main
schedule = sort_seeding,12,5,view.sort=seeding
schedule = sort_leeching,13,5,view.sort=leeching
schedule = sort_active,14,5,view.sort=active

# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
# 
#dht = auto

# UDP port to use for DHT. 
# 
#dht_port = 6881

# Enable peer exchange (for torrents not marked private)
#
#peer_exchange = yes

Ici ce qui est important ici :

#Où sont mis les fichiers de téléchargement temporaires
directory = /mnt/freebox/Téléchargements/
#Le répertoire où l'on surveille l'ajour de fichiers .torrent
schedule = watch_directory,5,5,load_start="/mnt/freebox/Téléchargements/A\ Télécharger/*.torrent"
#Le dossier dans lequel les téléchargements terminés sont déplacés
system.method.set_key = event.download.finished,move_complete,"execute=mv,-n,$d.get_base_path=,\
/mnt/freebox/Téléchargements/Téléchargés;d.set_directory=/mnt/freebox/Téléchargements/Téléchargés"

Le lancer au démarrage 

Pour cela j'utilise le script /etc/rc.local (même si je crois que le faire avec cron est plus judicieux). Je lance rtorrent en tant qu'utilisateur toto qui a tous les droits d'écriture dont j'ai parlé plus haut.
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/bin/printf "         My IP address is\033[0;31m \
`/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{ print $2 }' | awk -F: '{ print $2 }'` \033[0m\n" > /dev/console

sleep 5

value=$(/bin/ip route|/bin/grep -c "default dev ppp0")
if [ $value -eq 1 ]
then
    /usr/bin/printf  "PPTP connection seems ok start rtorrent" > /dev/console
    /bin/su - toto -c "screen -d -m -S rtorrent rtorrent"
fi

exit 0

Le sleep est la car le rc.local démarre plus tôt que prévu. Le script rc.local étant exécuter avec l'option -e, ie il s'arrête dès qu'il rencontre une erreur, et pour lui, quand on attribue 0 à une valeur c'est une erreur.

Ainsi, si on n'attends pas que la connectionn pptp ne se lance, ici value=0, et le rc.local échoue !

Pour accéder par la suite a rtorrent (loggé en tant qu'utilisateur toto):
screen -r rtorrent

Utilisation du Raspberry comme un accès au serveur PPTP/VPN.

C'est utile si comme moi vous avez une connection free, vous pouvez alors utiliser la connection si vous souffrez à regarder des vidéos pixelisées sur youtube. Pour celà la raspberry va faire office de proxy qui lui se connecte par le serveur distant pour accéder à internet.

J'utilise squid comme proxy:

sudo apt-get install squid

Dans /etc/squid/squid.conf j'ai modifié ces valeurs.

http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3456

Désormais il me suffit juste d'activer le proxy sur Firefox ou mon network manager.


Petits plus

Si vous voulez surveiller la temperature du raspberry :

cat /sys/class/thermal/thermal_zone0/temp

Si vous voulez voir quelle est la fréquence maximale (sur demande) à laquelle le système tourne :

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

Par défault le système n'est pas à 1GHz, il est entre 600 et 900 MHz (sans aucun paramètre dans /boot/config.txt). Le fontionnement à 1 GHz est considéré comme un surcadençage de l'horloge, alors que le système est vendu à 1GHz... Il doit êtreprudent de rajouter un dissipateur thermique.

Si vous voulez débloquer les fonctions matérielles pour décoder des flux vidéos vous avez à acheter des codes sur http://www.raspberrypi.com/

SI vous souhaitez une horloge temps réel pour garder l'heure vous pouvez la réaliser vous même, ou bien la commander : lien.

jeudi 14 janvier 2016

Disques vinyle

J'avais choisi d'étudier les disques vinyle dans le cadre de mon TIPE. Cette année le thème était mobilité et mouvement (2011).

Les disques vinyle ont été remplacés à l'arrivée du Compact Disc (CD) audio dans les années 1980 ; leur utilisation est désormais réduite à certains audiophiles et collectionneurs. Cependant, ce support connaît un regain d'intérêt dans notre ère numérique. C'est un objet qui attire l'œil et j'ai été intrigué la première fois que j'en ai vus dans un vide grenier. C'est ainsi que j'ai commencé à en utiliser en me procurant des disques d'occasion à faire tourner sur la vieille platine de la famille. Ayant pris conscience de l'existence d'un débat CD audio contre vinyle, j'ai voulu me forger ma propre opinion. J'ai donc profité de la compatibilité avec le thème de cette année pour comprendre leur fonctionnement. J'ai vite découvert que le système de lecture n'était pas aussi simple qu'un cône que l'on fait vibrer à l'aide d'une aiguille. C'est un système fragile et s'il n'est pas bien réglé, en plus de l'augmentation de la distorsion, on accélère la détérioration du support. Comment le son est-il stocké, puis lu ? Le support est-il aussi parfait que certains le prétendent ?

Le dossier et les médias


Pour la recherche d'information au sujet il a fallu faire la part des choses entre le vrai et le faux. J'ai surtout rencontré des amateurs qui, pour leur recherche personnelle, ont récupéré des formules de calcul issus de travaux d'ingénieurs. Pour me préparer à  l'étude d'une platine de lecture, j'ai essayé de mettre en exergue les erreurs de lecture à l'aide d'une modélisation et j'ai pu mettre un nom sur ces problèmes par la suite. Il ne me manquait plus qu'à retrouver expérimentalement les effets que j'avais prédis. J'ai donc pu trouver une platine générique aux caractéristiques limitées pour la réalisation de l'expérience (aucun des problèmes identifiés n'était absent). Ces recherches m'ont permis de conclure sur les limitations du système de lecture et du support physique.

dimanche 4 octobre 2015

Determination of the state of charge of a battery


The report

The presentation


https://drive.google.com/file/d/0B_qg_PrqAZ8mRFpkTlNtcVpfZUU/view?usp=sharing

Trier alphabétiquement fichiers et dossiers

Ceci est utile par exemple si vous utilisez un mediacenter ou une freebox tv, en effet une large audiothèque perd facilement son temps à faire défiler les dossiers d'artistes pour arriver enfin sa musique, au clavier ou à la souris c'est long, alors imaginez sur un écran télé avec une télécommande...

De plus si vous partagez vos fichiers sur le réseau, cela économise votre bande passante et votre temps. Il m'arrive d'attendre quelques secondes le chargement d'un répertoires (essayez donc d'aller dans le répertoire /usr/bin avec un navigateur de fichier, même en local c'est du lourd :p )

Ici tout les répertoires des initiales sont en majuscules, car comme vous devez le savoir les Unix* distinguent la casse des noms. Cela grâce à la commande tr qui permet de remplacer une chaine de caractères par une autre. Par exemple pour renommer des fichiers en minuscule il suffit de taper:

for i in *
 do mv "$i" "$(echo $i | tr A-Z a-z)"
done

Pour créer les répertoires :

for i in *
 do I=`echo $i|cut -c 1|tr a-z A-Z`
 if [ ! -d "$I" ]
  then mkdir "$I"
 fi
done

Nota Bene : on utilise ici if pour vérifier si le répertoire existe déjà.

Pour creer les répertoires et y déplacer les fichiers (ou dossiers) :

for i in *
 do I=`echo $i|cut -c 1|tr a-z A-Z`
 if [ ! -d "$I" ]
  then mkdir "$I"
 fi
 mv "$i" "$I"/"$i"
done

Vous pouvez faire cette commande après un cp -rs et qui copie l'arborescence mais en remplaçant le contenu (tout ce qui est fichier) par des liens symboliques.
Pour créer un répertoire triant alphabétiquement, uniquement les liens des dossiers (ou fichiers) :

for i in Path/To/Chaos/*
 do I=`echo $i|cut -c 1|tr a-z A-Z`
 if [ ! -d /Path/To/Alpha/"$I" ]
  then mkdir /Path/To/Alpha/"$I"
 fi
 ln -s "$PWD"/"$i" /Path/To/Alpha/"$i"
done

Il faut noter que ces liens peuvent être cassés si vous y accéder par un point de montage différent que son chemin depuis sa racine.

lundi 28 septembre 2015

Contrôler son appareil photo avec gphoto


Afin de photographier l'évolution d'une fresque, je me demandais s'il n'était pas possible de commander par usb mon appareil photo comme sur les soft canon sous windows.
Gphoto sous linux permet de faire un multitude d'opérations tel que prendre une photo, une vidéo et les transférer. Vous trouverez sur leur site une liste des appareils supportés (obtenable par un --list-cameras). (Attention si vous avec un montage automatique de l'appareil photo, il vous faudra le démonter pour utiliser gphoto). 

Pour identifier votre appareil vous pouvez utiliser l'option --auto-detect, gphoto gère l'usb et les ports série. Il suffira de précisez quel appareil vous utilisez avec les options --camera= et --port=usb:Bus:Device. Exemple : gphoto2 --camera="Canon PowerShot A520 (PTP mode)" --port="usb:001:004" --shell (gphoto nécessite les droits administrateur sous debian si vous voulez éviter cela allez voir ici). 

Vous pouvez également récupérer les infos Bus et Device à l'aide de lsusb. L'option --shell permet de lancer un shell pour utiliser gphoto et ses commandes directement.

Pour capturer une photo il faut utiliser l'option --capture-image, par défaut la photo est stockée dans l'appareil photo (ram ou carte mémoire). Si vous voulez directement récupérer la photo utilisez la commande --capture-image-and-download

Si vous voulez savoir quelles sont toutes les configuration possible de votre appareil photo vous pouvez utiliser ce petit script (que j'ai nommé RECUP_CONFIG.sh dans l'archive jointe) :

for i in `gphoto2 --list-config`;
 do echo $i >> options_appareil.txt gphoto2 --get-config $i >> options_appareil.txt 
done 

Vous pourrez voir toutes les configurations possibles dans le fichier options_appareil.txt. Pour modifier une configuration de l'appareil on utilise l'option --set-config conf=valeur. "conf" est soit le chemin soit le label. (Attention dans mon cas avec le PowerShot A520, il fallait que l'appareil photo soit déjà initialisé pour avoir accès aux configuration relatives à la photo prise, ie qu'il ait l'objectif ouvert, la seule solution que j'ai trouvé est de faire un "gphoto2 --capture image" auparavant). Voici le petit script utilisé pour photographier la fresque avec un PowerShot A520 : 

#!/bin/bash 

##################################################
#   Script de capture photo pour powershot A520  #
##################################################

#NB : gphoto2 détecte automatiquement l'appareil photo,
# pour éviter les conflits l'appareil est précisé. 

###Configuration###

CAMERA="Canon PowerShot A520 (PTP mode)"
ID="04a9:30c1"  #vendeur et ID du produit
PATHTOSCRIPT="/home/$USER/RMLL_Photo_script"
TIME=30  #à voir : --interval --count
PICTFOLD="Path/To/Capture/"
FILENAME="date +%Y-%m-%d_%H-%M-%S"
#FILENAME="+%Y-%m-%d_%Hh%M" pour la date de l'appareil photo 
#(synchronisable avec l'option --set-config "Set camera time to PC time")

###Détection du port usb###

LSUSB=`lsusb -d $ID`
BUS=`echo $LSUSB | cut -c 5-7`
DEVICE=`echo $LSUSB | cut -c 16-18`

###Prog###

if [ ! -d $PICTFOLD ]; then 
 mkdir $PICTFOLD
fi
cd $PICTFOLD
while true; do
 old_IFS=$IFS     # sauvegarde du séparateur de champ
 IFS=$'\n'    # nouveau séparateur de champ, le caractère fin de ligne
 #toutes les lignes non commentées
 for ligne in $(cat $PATHTOSCRIPT/current_options | grep --invert-match '#'); do
  if [ $ligne ]; then   #si elles ne sont pas vide
   gphoto2 --port "usb:$BUS,$DEVICE" --camera "$CAMERA" --set-config $ligne
  fi
 done
 IFS=$old_IFS     # rétablissement du séparateur de champ par défaut
 gphoto2 --port "usb:$BUS,$DEVICE" --camera "$CAMERA" \
 --capture-image-and-download --filename `$FILENAME`
 #ça prend 30 sec sur mon A520
 sleep $TIME
done


Avec le fichier de configuration current_options qui permet de changer les configurations pendant que le script est lancé : 

Voir le fichier options_appareil.txt pour plus de détails sur les valeurs des configs on peut utiliser les labels ou les chemins. 
  • L'appareil sauvegarde la valeur attribué à la config en ram. 
  • Si une ligne contient un commentaire, elle ne sera pas prise en compte
  • Si l'appareil n'est pas initialisé (pour l'instant je sais seulement le faire avec --capture-image) les options relative à la photo sont inutilisables. Chaque config est à séparer par un retour à la ligne. 
Exemple pour allumer le flash : 
  • Avec un label : Mode flash=2 
  • Avec le chemin : /main/capturesettings/canonflashmode=2  
Pour plus d'infos et d'options su gphoto allez voir le man :) Ci joint les sources :).

jeudi 24 septembre 2015

Réparation d'un lot de game boys color


Le prix des consoles rétros à vraiment explosé ces dernières années, maintenant dès que j'achète de l'occasion sur Ebay j'ai pris l'habitude de choisir des consoles vendues pour pièces/hors services.

J'ai souvent acheté des objets HS/avec des défauts qui semblent électroniques, qui une fois arrivés chez moi n'ont jamais eu besoin d'une quelconque réparation, un coup de chiffon et c'était reparti.
C'est le cas surtout pour des consoles du genre de l'atari 2600 qui n'est pas évidente à utiliser sur les télévisions récentes. La fréquence de la chaîne à afficher sur l'atari 2600 est centrée sur 59 MHz, et les recherches automatiques ne traitent souvent pas ce canal.

Cette fois-ci j'ai craqué pour un lot de 10 game boys "HS" (avec des jeux aux étiquettes déchirées), bien sur il fallait se douter que ces consoles provenaient d'un gars déjà bricoleur qui les avait déjà touchées (et à l'odeur de renfermé qu'elles avaient, elles ont été exposées à l'humidité).

Après un premier test sur les consoles, je me suis rendu compte qu'aucune n'était totalement fonctionnelle, une seule chose à faire : les démonter toutes et tester chaque écran et chaque carte mère en combinaison avec ma game boy chérie.

Cet article présente principales pannes que j'ai rencontré.