Bonjour chers gurus!
Je suis consultant SAP et j'ai quelques affinités avec l'IT mais chacun son domaine et là j'ai besoin
de l'aide d'experts car je suis on ne peut plus dépassé et frustré.
J'ai un projet qui a été créé par un informaticien et je veux l'adapter à mon architecture.
En gros, j'ai des dizaines de raspberry pi avec appareils photos installées, le tout en wifi et le tout
avec un dossier mappé (monté) sur un NAS. Tout se connecte bien, donc hardware tout va bien.
Mon premier script crée un broadcast et demande à tous les raspberry d'être à l'écoute du réseau en attente
d'instructions. Il spécifie aussi de lire un fichier de configuration (options.cfg) pour les caméras (appareils photos). Je voudrais
éliminer cette ligne car elle ne me sert à rien et m'embête même. Le script en gros:
- demande de lister tous les IP pour les utiliser plus tard
- demande de prendre une photo
- de nommer chaque photo avec l'IP de chaque appareil
- de créer un nouveau dossier dans le dossier NAS
- et d'y stocker toutes les photos prises
En plus d'autres choses comme re-démarrer, etc.
Le script ici est le "standard" que je dois donc adapter à mon répertoire/config.
A savoir que je dois probablement remplacer "/server/3dscan" par "mnt/3dscan" (mnt/3dscan) est mon répertoire mappé à mon NAS.
Comme j'ai tout configuré et que tout fonctionne mis à part le programme python, je suis donc coincé et très frustré.
Quelqu'un pourrait m'aider?
Merci d'avance! J'enverrai un ballotin de chocolats belges aux personnes qui me donnent la bonne solution (les premiers du moins)
Voici mon code malade:
#!/usr/bin/python
import socket
import struct
import fcntl
import subprocess
import sys
MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5007
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname)
)[20:24])
id = get_ip_address('eth0')
ip1, ip2, ip3, ip4 = id.split('.')
print 'ID: ' ip4 '-' # (cette ligne pourrait aussi être : print 'ID: ' + ip4)
optionfile = open('/server/options.cfg','r')
options = optionfile.readline()
optionfile.close()
print "optons: " options
while True:
data = sock.recv(10240)
data = data.strip()
if data == "reboot":
print "rebooting..."
cmd = 'sudo reboot'
pid = subprocess.call(cmd, shell=True)
elif data == "reload":
optionfile = open('/server/options.cfg','r')
options = optionfile.readline()
optionfile.close()
elif data == "restart":
cmd = '/server/reload.sh&'
pid = subprocess.call(cmd, shell=True)
else:
print "shooting " data
cmd = 'raspistill -o /tmp/photo.jpg ' options
pid = subprocess.call(cmd, shell=True)
print "creating directory"
cmd = 'mkdir /server/3dscan/' data
pid = subprocess.call(cmd, shell=True)
print "copy image"
cmd = 'cp /tmp/photo.jpg /server/3dscan/' data "/" data "_" ip4 '.jpg'
pid = subprocess.call(cmd, shell=True)
print "photo uploaded"