Beta Release

This commit is contained in:
2017-11-09 13:46:58 +01:00
parent b379570033
commit e3e1387117
62 changed files with 32013 additions and 26 deletions
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
systemctl stop gammu-smsd
pon rnet
sleep 3
# Wir wollen sicher sein, dass die Verbindung steht...
ping -c 1 -w 30 8.8.8.8 >/dev/null
+3
View File
@@ -0,0 +1,3 @@
#!/bin/bash
poff rnet
systemctl start gammu-smsd
+45
View File
@@ -0,0 +1,45 @@
#!/usr/bin/python
import socket
class DNSQuery:
def __init__(self, data):
self.data=data
self.dominio=''
tipo = (ord(data[2]) >> 3) & 15 # Opcode bits
if tipo == 0: # Standard query
ini=12
lon=ord(data[ini])
while lon != 0:
self.dominio+=data[ini+1:ini+lon+1]+'.'
ini+=lon+1
lon=ord(data[ini])
def respuesta(self, ip):
packet=''
if self.dominio:
packet+=self.data[:2] + "\x81\x80"
packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00' # Questions and Answers Counts
packet+=self.data[12:] # Original Domain Name Question
packet+='\xc0\x0c' # Pointer to domain name
packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04' # Response type, ttl and resource data length -> 4 bytes
packet+=str.join('',map(lambda x: chr(int(x)), ip.split('.'))) # 4bytes of IP
return packet
if __name__ == '__main__':
ip='192.168.255.1'
print 'pyminifakeDNS:: dom.query. 60 IN A %s' % ip
udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udps.bind(('',53))
try:
while 1:
data, addr = udps.recvfrom(1024)
p=DNSQuery(data)
udps.sendto(p.respuesta(ip), addr)
print 'Respuesta: %s -> %s' % (p.dominio, ip)
except KeyboardInterrupt:
print 'Finalizando'
udps.close()
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/python
#
# Simuliert das Druecken des Powerkeys, um das GSM-Modul an- oder abzuschalten
#
import time
import RPi.GPIO as GPIO
# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)
# Pin 11 (GPIO 17) auf Output setzen
GPIO.setup(11, GPIO.OUT)
# Druecken simulieren
GPIO.output(11, GPIO.HIGH)
# Pause, mindestens eine Sekunde gemaess https://www.itead.cc/wiki/RPI_SIM800_GSM/GPRS_ADD-ON_V2.0
time.sleep(1.5)
# Weg vom Taster...
GPIO.output(11, GPIO.LOW)
# Cleanup
GPIO.cleanup()
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/python
#
# GSM-Modul anschalten, falls ein keine Antwort gibt...
#
import time
import RPi.GPIO as GPIO
import serial
def PowerOn():
# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)
# Pin 11 (GPIO 17) auf Output setzen
GPIO.setup(11, GPIO.OUT)
# Druecken simulieren
GPIO.output(11, GPIO.HIGH)
# Pause, mindestens eine Sekunde gemaess https://www.itead.cc/wiki/RPI_SIM800_GSM/GPRS_ADD-ON_V2.0
time.sleep(1.5)
# Weg vom Taster...
GPIO.output(11, GPIO.LOW)
# Cleanup
GPIO.cleanup()
with serial.Serial('/dev/ttyAMA0', 115200, timeout=2) as ser:
ser.write(b'AT\n')
line = ser.readline()
line = ser.readline()
print "Feedback: %s" % (line)
if line.strip() != "OK":
print "Modem reagiert nicht, evtl. abgeschaltet... wir schalten es ein..."
PowerOn()
ser.close() # close port
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
systemctl stop my_web_server.service
systemctl stop hostapd.service
systemctl stop fakedns.service
systemctl stop dnsmasq.service
ifdown wlan0
iw wlan0 set power_save on
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
iw wlan0 set power_save off
ifup wlan0
systemctl start dnsmasq.service
systemctl start fakedns.service
systemctl start hostapd.service
systemctl start my_web_server.service
+164
View File
@@ -0,0 +1,164 @@
#!/usr/bin/python
from bottle import Bottle, run, template, static_file, error, redirect
import yaml
import glob
import re
import time
import random
import string
import os
import shutil
app = Bottle()
APP_ROOT = "/home/beieli"
# Read Configuration from YAML-File
with open("%s/bin/beielimon-config.yaml" % (APP_ROOT), 'r') as stream:
try:
config_data = yaml.load(stream)
#print(config_data)
except yaml.YAMLError as exc:
print(exc)
def GetLastValues(scale_uuid):
last_weight = ""
last_weight_timestamp = ""
last_swarmalarm = ""
files = glob.glob("%s/data/weight-%s-????????.log" % (APP_ROOT,scale_uuid))
if len(files) > 0:
with open(sorted(files)[-1], "r") as f:
for line in f: pass
result = line
# Beispiel: 2017-11-07 08:23,0
m = re.match("(\d{4})-(\d{2})-(\d{2}) (\d\d:\d\d),(\d+)", result)
if m:
last_weight = "%sg" % (m.group(5))
last_weight_timestamp = "%s.%s.%s %s" % (m.group(3),m.group(2),m.group(1),m.group(4))
else:
last_weight = "Fehler beim Parsen: %s" % (result)
last_weight_timestamp = ""
else:
last_weight = "Keine Messwerte"
last_weight_timestamp = "N/A"
files = glob.glob("%s/data/swarmalarm-%s-????????.log" % (APP_ROOT,scale_uuid))
if len(files) > 0:
with open(sorted(files)[-1], "r") as f:
for line in f: pass
result = line
# Beispiel: 2017-11-07 08:23
m = re.match("(\d{4})-(\d{2})-(\d{2}) (\d\d:\d\d)", result)
if m:
last_swarmalarm = "%s.%s.%s %s" % (m.group(3),m.group(2),m.group(1),m.group(4))
else:
last_swarmalarm = "Fehler beim Parsen: %s" % (result)
else:
last_swarmalarm = "keiner"
return [last_weight, last_weight_timestamp, last_swarmalarm ]
def RefreshData():
scales = config_data['scales']
hash_scales = {}
for s in config_data['scales']:
uuid = s['scale_uuid']
(last_weight, last_weight_timestamp, last_swarmalarm) = GetLastValues(uuid)
hash_scales[uuid] = {}
hash_scales[uuid]['alias'] = s['alias']
hash_scales[uuid]['last_weight'] = last_weight
hash_scales[uuid]['last_weight_timestamp'] = last_weight_timestamp
hash_scales[uuid]['last_swarmalarm'] = last_swarmalarm
return hash_scales
def CreateDatafile(scale_uuid,infotime):
mycsvdir = "%s/web-csv" % (APP_ROOT)
my_pattern = '%s%s' % (infotime,'?' * (8 - len(infotime)))
files = glob.glob("%s/data/weight-%s-%s.log" % (APP_ROOT,scale_uuid,my_pattern))
filename = "%s/%s-%s.csv" % (mycsvdir,scale_uuid,infotime)
with open(filename, 'w') as file:
for ifile in sorted(files):
if infotime in ifile:
with_data = True
with open(ifile, 'r') as ifile:
for line in ifile:
file.write(line)
@app.route('/')
def index():
hash_scales = RefreshData()
data = {
'scales': hash_scales,
'infotime': time.strftime("%Y", time.localtime()),
'beielipi_mobile_number': config_data['beielipi_mobile_number']
}
return template('%s/web-root/index.tpl' % (APP_ROOT), data)
@app.route('/static/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root='%s/web-root/static' % (APP_ROOT))
@app.route('/data/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root='%s/web-csv' % (APP_ROOT))
@app.route('/scale/<scale>/<infotime>')
def scale_data(scale,infotime):
scale_uuid = ''
scale_alias = ''
for s in config_data['scales']:
if s['alias'].replace(' ','_') == scale:
scale_uuid = s['scale_uuid']
scale_alias = s['alias']
CreateDatafile(scale_uuid, infotime)
data = {
'scale_uuid': scale_uuid,
'scale_alias': scale_alias,
'infotime': infotime
}
return template('%s/web-root/scale.tpl' % (APP_ROOT), data)
@app.route('/download/<infotime>')
def download(infotime):
mypid = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(7))
mycsvdir = "%s/tmp/%s/csv" % (APP_ROOT,mypid)
if not os.path.exists(mycsvdir):
os.makedirs(mycsvdir)
myzipdir = "%s/tmp/%s/zip" % (APP_ROOT,mypid)
if not os.path.exists(myzipdir):
os.makedirs(myzipdir)
my_pattern = '%s%s' % (infotime,'?' * (8 - len(infotime)))
files = glob.glob("%s/data/weight-*-%s.log" % (APP_ROOT,my_pattern))
for f in files:
print("%s" % (f))
for s in config_data['scales']:
filename = "%s/%s-%s.csv" % (mycsvdir,s['alias'].replace(' ','_'),infotime)
with open(filename, 'a') as file:
for ifile in sorted(files):
if (s['scale_uuid'] in ifile) and (infotime in ifile):
with open(ifile, 'r') as ifile:
for line in ifile:
m = re.match("(\d{4})-(\d{2})-(\d{2}) (\d\d:\d\d),(\d+)", line)
if m:
file.write("%s.%s.%s %s,%s\n" % (m.group(3),m.group(2),m.group(1),m.group(4),m.group(5)))
else:
file.write("Fehler beim Parsen: %s" % (line))
zipfile = "%s/%s" % (myzipdir,infotime)
shutil.make_archive(zipfile, 'zip', mycsvdir)
zipfilename = "%s.zip" % (infotime)
return static_file(zipfilename, root=myzipdir, mimetype='application/zip',download=zipfilename)
@app.error(404)
def error404(error):
return index()
run(app, host='0.0.0.0', port=80)
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
/usr/bin/rsync -aAXv --delete /home/beieli/bin joerg@192.168.0.10:/home/joerg/data/Projekte/mini-beieli/git-repo
/usr/bin/rsync -aAXv --delete /home/beieli/root-bin joerg@192.168.0.10:/home/joerg/data/Projekte/mini-beieli/git-repo
/usr/bin/rsync -aAXv --delete /home/beieli/web-root joerg@192.168.0.10:/home/joerg/data/Projekte/mini-beieli/git-repo
/usr/bin/rsync -aAXv --delete /home/beieli/install-files joerg@192.168.0.10:/home/joerg/data/Projekte/mini-beieli/git-repo
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
PROGRAM=/home/beieli/bin/process_sms_request.py
echo "Received $SMS_MESSAGES physical messages and $DECODED_PARTS of decoded message parts" >> /home/beieli/log/process_sms_request.log
for i in `seq $SMS_MESSAGES` ; do
eval "$PROGRAM \"\${SMS_${i}_NUMBER}\" \"\${SMS_${i}_TEXT}\" >>/home/beieli/log/process_sms_request.log"
done