Merge branch 'master' of https://git.tannercollin.com/tanner/3Dshock
commit
d08a6e77f4
9 changed files with 347 additions and 3 deletions
@ -0,0 +1 @@ |
||||
hello world |
@ -0,0 +1,105 @@ |
||||
# Byte-compiled / optimized / DLL files |
||||
__pycache__/ |
||||
*.py[cod] |
||||
*$py.class |
||||
|
||||
# C extensions |
||||
*.so |
||||
|
||||
# Distribution / packaging |
||||
.Python |
||||
build/ |
||||
develop-eggs/ |
||||
dist/ |
||||
downloads/ |
||||
eggs/ |
||||
.eggs/ |
||||
lib/ |
||||
lib64/ |
||||
parts/ |
||||
sdist/ |
||||
var/ |
||||
wheels/ |
||||
*.egg-info/ |
||||
.installed.cfg |
||||
*.egg |
||||
|
||||
# PyInstaller |
||||
# Usually these files are written by a python script from a template |
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
||||
*.manifest |
||||
*.spec |
||||
|
||||
# Installer logs |
||||
pip-log.txt |
||||
pip-delete-this-directory.txt |
||||
|
||||
# Unit test / coverage reports |
||||
htmlcov/ |
||||
.tox/ |
||||
.coverage |
||||
.coverage.* |
||||
.cache |
||||
nosetests.xml |
||||
coverage.xml |
||||
*.cover |
||||
.hypothesis/ |
||||
|
||||
# Translations |
||||
*.mo |
||||
*.pot |
||||
|
||||
# Django stuff: |
||||
*.log |
||||
local_settings.py |
||||
|
||||
# Flask stuff: |
||||
instance/ |
||||
.webassets-cache |
||||
|
||||
# Scrapy stuff: |
||||
.scrapy |
||||
|
||||
# Sphinx documentation |
||||
docs/_build/ |
||||
|
||||
# PyBuilder |
||||
target/ |
||||
|
||||
# Jupyter Notebook |
||||
.ipynb_checkpoints |
||||
|
||||
# pyenv |
||||
.python-version |
||||
|
||||
# celery beat schedule file |
||||
celerybeat-schedule |
||||
|
||||
# SageMath parsed files |
||||
*.sage.py |
||||
|
||||
# Environments |
||||
.env |
||||
.venv |
||||
env/ |
||||
venv/ |
||||
ENV/ |
||||
|
||||
# Spyder project settings |
||||
.spyderproject |
||||
.spyproject |
||||
|
||||
# Rope project settings |
||||
.ropeproject |
||||
|
||||
# mkdocs documentation |
||||
/site |
||||
|
||||
# mypy |
||||
.mypy_cache/ |
||||
|
||||
# Editor |
||||
*.swp |
||||
*.swo |
||||
|
||||
paramiko.log |
@ -0,0 +1,30 @@ |
||||
import socket |
||||
import sys |
||||
import time |
||||
|
||||
# make sure multicast is being routed to the right interface ie. |
||||
# sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev enx00249b649e67 |
||||
|
||||
def trigger_capture(): |
||||
charid = 1 |
||||
unitid = 1 |
||||
groupid = 1 |
||||
|
||||
gtdate = time.gmtime() |
||||
now = str(gtdate.tm_year) + str(gtdate.tm_mon) + str(gtdate.tm_mday) + str(gtdate.tm_hour) + str(gtdate.tm_min) + str(gtdate.tm_sec) |
||||
|
||||
SDATA = str(now) |
||||
|
||||
print('Sending: ' + SDATA) |
||||
MCAST_GRP = '224.1.1.1' |
||||
MCAST_PORT = 5007 |
||||
SCMD = chr(charid) |
||||
SUNIT = chr(unitid) |
||||
SGROUP = chr(groupid) |
||||
SEND = SCMD+SUNIT+SGROUP+SDATA |
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) |
||||
dev = 'eth0' + '\0' |
||||
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) |
||||
sock.sendto(SEND.encode('utf-8'), (MCAST_GRP, MCAST_PORT)) |
||||
sock.close() |
||||
print('Sent.') |
@ -0,0 +1,42 @@ |
||||
import os |
||||
import settings |
||||
import threading |
||||
import paramiko |
||||
import time |
||||
paramiko.util.log_to_file('paramiko.log') |
||||
|
||||
def download(ip, dest): |
||||
print('Downloading from', ip) |
||||
|
||||
port = 22 |
||||
transport = paramiko.Transport((ip, port)) |
||||
transport.connect(None, settings.RASPBERRY_USER, settings.RASPBERRY_PASS) |
||||
|
||||
sftp = paramiko.SFTPClient.from_transport(transport) |
||||
|
||||
files = sftp.listdir('/3dscan/') |
||||
|
||||
for f in files: |
||||
source_file = '/3dscan/' + f |
||||
dest_file = dest + f |
||||
print('Grabbing file', source_file) |
||||
sftp.get(source_file, dest_file) |
||||
sftp.remove(source_file) |
||||
|
||||
if sftp: sftp.close() |
||||
if transport: transport.close() |
||||
|
||||
print('Finished downloading from', ip) |
||||
|
||||
def download_all_photos(dest): |
||||
if not dest.endswith('/'): |
||||
raise Exception('Destination must end with /') |
||||
|
||||
if not os.path.exists(dest): |
||||
raise Exception('Destination does not exist') |
||||
|
||||
print('Downloading all photos to', dest) |
||||
|
||||
for ip in settings.RASPBERRY_IPS: |
||||
t = threading.Thread(target=download, args=(ip, dest)) |
||||
t.start() |
@ -0,0 +1,12 @@ |
||||
from flask import Flask |
||||
from flask_cors import CORS |
||||
|
||||
build_folder = '../client/build' |
||||
app = Flask(__name__, static_folder=build_folder, static_url_path='') |
||||
CORS(app) |
||||
|
||||
@app.route('/') |
||||
def index(): |
||||
return app.send_static_file('index.html') |
||||
|
||||
app.run() |
@ -0,0 +1,51 @@ |
||||
import requests |
||||
import settings |
||||
import time |
||||
|
||||
def np_02B_api(ip, username, password, is_on): |
||||
if is_on: |
||||
endpoint = '/cmd.cgi?grp=0' |
||||
else: |
||||
endpoint = '/cmd.cgi?grp=30' |
||||
|
||||
url = 'http://' + ip + endpoint |
||||
r = requests.get(url, auth=(username, password), timeout=4) |
||||
r.raise_for_status() |
||||
|
||||
def lights_on(): |
||||
np_02B_api(settings.LIGHT_IP, settings.LIGHT_USER, settings.LIGHT_PASS, True) |
||||
|
||||
def lights_off(): |
||||
np_02B_api(settings.LIGHT_IP, settings.LIGHT_USER, settings.LIGHT_PASS, False) |
||||
|
||||
def grid_on(): |
||||
np_02B_api(settings.GRID_IP, settings.GRID_USER, settings.GRID_PASS, True) |
||||
|
||||
def grid_off(): |
||||
np_02B_api(settings.GRID_IP, settings.GRID_USER, settings.GRID_PASS, False) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
try: |
||||
print('Turning lights on...') |
||||
lights_on() |
||||
|
||||
print('Waiting three seconds...') |
||||
time.sleep(3) |
||||
|
||||
print('Turning lights off...') |
||||
lights_off() |
||||
except BaseException as e: |
||||
print('Problem with lights: {} - {}'.format(e.__class__.__name__, str(e))) |
||||
|
||||
try: |
||||
print('Turning grid on...') |
||||
grid_on() |
||||
|
||||
print('Waiting three seconds...') |
||||
time.sleep(3) |
||||
|
||||
print('Turning grid off...') |
||||
grid_off() |
||||
except BaseException as e: |
||||
print('Problem with grid: {} - {}'.format(e.__class__.__name__, str(e))) |
@ -0,0 +1,5 @@ |
||||
certifi==2020.12.5 |
||||
chardet==4.0.0 |
||||
idna==2.10 |
||||
requests==2.25.1 |
||||
urllib3==1.26.3 |
@ -0,0 +1,101 @@ |
||||
LIGHT_IP = '192.168.99.25' |
||||
LIGHT_USER = 'admin' |
||||
LIGHT_PASS = 'admin' |
||||
|
||||
GRID_IP = '192.168.99.20' |
||||
GRID_USER = 'admin' |
||||
GRID_PASS = 'admin' |
||||
|
||||
RASPBERRY_USER = 'root' |
||||
RASPBERRY_PASS = '3dscan' |
||||
RASPBERRY_IPS = [ |
||||
'192.168.99.101', |
||||
'192.168.99.103', |
||||
'192.168.99.104', |
||||
'192.168.99.105', |
||||
'192.168.99.106', |
||||
'192.168.99.107', |
||||
'192.168.99.108', |
||||
'192.168.99.109', |
||||
'192.168.99.110', |
||||
'192.168.99.111', |
||||
'192.168.99.112', |
||||
'192.168.99.113', |
||||
'192.168.99.114', |
||||
'192.168.99.115', |
||||
'192.168.99.116', |
||||
'192.168.99.117', |
||||
'192.168.99.118', |
||||
'192.168.99.119', |
||||
'192.168.99.120', |
||||
'192.168.99.121', |
||||
'192.168.99.122', |
||||
'192.168.99.123', |
||||
'192.168.99.124', |
||||
'192.168.99.125', |
||||
'192.168.99.126', |
||||
'192.168.99.127', |
||||
'192.168.99.128', |
||||
'192.168.99.129', |
||||
'192.168.99.130', |
||||
'192.168.99.131', |
||||
'192.168.99.132', |
||||
'192.168.99.133', |
||||
'192.168.99.134', |
||||
'192.168.99.135', |
||||
'192.168.99.136', |
||||
'192.168.99.137', |
||||
'192.168.99.138', |
||||
'192.168.99.139', |
||||
'192.168.99.140', |
||||
'192.168.99.141', |
||||
'192.168.99.142', |
||||
'192.168.99.143', |
||||
'192.168.99.144', |
||||
'192.168.99.145', |
||||
'192.168.99.146', |
||||
'192.168.99.147', |
||||
'192.168.99.148', |
||||
'192.168.99.149', |
||||
'192.168.99.150', |
||||
'192.168.99.151', |
||||
'192.168.99.152', |
||||
'192.168.99.153', |
||||
'192.168.99.154', |
||||
'192.168.99.155', |
||||
'192.168.99.156', |
||||
'192.168.99.157', |
||||
'192.168.99.158', |
||||
'192.168.99.159', |
||||
'192.168.99.160', |
||||
'192.168.99.161', |
||||
'192.168.99.162', |
||||
'192.168.99.163', |
||||
'192.168.99.164', |
||||
'192.168.99.165', |
||||
'192.168.99.166', |
||||
'192.168.99.167', |
||||
'192.168.99.168', |
||||
'192.168.99.169', |
||||
'192.168.99.170', |
||||
'192.168.99.171', |
||||
'192.168.99.172', |
||||
'192.168.99.173', |
||||
'192.168.99.174', |
||||
'192.168.99.175', |
||||
'192.168.99.176', |
||||
'192.168.99.177', |
||||
'192.168.99.178', |
||||
'192.168.99.179', |
||||
'192.168.99.180', |
||||
'192.168.99.181', |
||||
'192.168.99.182', |
||||
'192.168.99.183', |
||||
'192.168.99.184', |
||||
'192.168.99.185', |
||||
'192.168.99.191', |
||||
'192.168.99.192', |
||||
'192.168.99.193', |
||||
'192.168.99.194', |
||||
'192.168.99.195', |
||||
] |
@ -1,3 +0,0 @@ |
||||
import socket |
||||
import sys |
||||
import time |
Loading…
Reference in new issue