diff --git a/README.md b/README.md index 51f760e..4eaadd6 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ - ATtiny404 - WRL-10534 LPD433 Radio transmitter -![Schematics](/SiB64/turbo_weather/raw/branch/master/turbo_sch.png) +![Schematics](turbo_sch.png) -![Layout](/SiB64/turbo_weather/raw/branch/master/gerber/turbo.png) \ No newline at end of file +![Layout](gerber/turbo.png) \ No newline at end of file diff --git a/gerber/turbo-bot.png b/gerber/turbo-bot.png index 63fc648..597bb73 100644 Binary files a/gerber/turbo-bot.png and b/gerber/turbo-bot.png differ diff --git a/src/rc.local b/src/rc.local new file mode 100755 index 0000000..7d9e91b --- /dev/null +++ b/src/rc.local @@ -0,0 +1,8 @@ +#! /bin/bash -v + +date --utc +"Turbo reboot at %FT%TZ" +SRC=~stephan/turbo_weather/src +[ -d "$SRC" ] || exit 0 +mount /data/blaulicht +[ -d /data/blaulicht/temperature ] || exit 0 +sudo -inu stephan screen -S turbo -d -m $SRC/turbo.sh diff --git a/src/set_clock.py b/src/set_clock.py new file mode 100755 index 0000000..786262e --- /dev/null +++ b/src/set_clock.py @@ -0,0 +1,6 @@ +#! /usr/bin/python3 +import time +t = int(time.time()) +t = "".join([f"{(t>>b)&0xff:02x}" for b in range(0,32,8)]) +print(f"\nK {t}") + diff --git a/src/turbo.awk b/src/turbo.awk index 1f64ab8..1b2bcfb 100755 --- a/src/turbo.awk +++ b/src/turbo.awk @@ -50,6 +50,6 @@ function emit() { Vbat = A["BAT/1V"] Vdd = A["VDD/1V"] Vrf = A["RFP/2.5V"] - printf "%.0f %.1f %.1f %.3f %.2f %.2f %.2f %.2f %.2f %.4f %.4f %.4f\n", \ + printf "%.0f %.1f %.1f %.6f %.2f %.2f %.2f %.2f %.2f %.4f %.4f %.4f\n", \ tT, tU, tF, dt, p, Tp, Tc, Tn, Tb, Vbat, Vdd, Vrf } diff --git a/src/turbo.gpt b/src/turbo.gpt index 6f28976..3e01069 100755 --- a/src/turbo.gpt +++ b/src/turbo.gpt @@ -11,7 +11,6 @@ set grid x set format x "" time set ytics nomirror set y2tics -set xrange [*:*] writeback # set margin 12,12,0,0 set multiplot title fn noenh layout 3,1 margin char 12,13,5,2 spacing char 1 @@ -19,20 +18,22 @@ set multiplot title fn noenh layout 3,1 margin char 12,13,5,2 spacing char 1 set ylab "Δt [s]" set y2lab "dt/dt_{UTC}" set y2ra [0.98<*:*<1.02] +set yra [*:*] plot fn u 2:($1-$2) t "clock offset" w l, \ "" u 2:($3-$2) t "clock offset fit" w l, \ "" u 2:4 axis x1y2 t "clock speed" w l +set yra [*:*] set y2ra [*:*] set xrange restore set ylab "p [mbar]" set y2lab "T [°C]" -plot fn u 2:5 t "pressure" w l lw 2, \ - "" u 2:6 axis x1y2 t "T_{SENSOR}" w l lw 2, \ - "" u 2:7 axis x1y2 t "T_{CPU}" w l, \ +plot fn u 2:7 axis x1y2 t "T_{CPU}" w l, \ "" u 2:8 axis x1y2 t "T_{NTC}" w l, \ - "" u 2:9 axis x1y2 t "T_{BRIDGE}" w l lt 7 + "" u 2:9 axis x1y2 t "T_{BRIDGE}" w l lt 7, \ + "" u 2:5 t "pressure" w l lw 2, \ + "" u 2:6 axis x1y2 t "T_{SENSOR}" w l lw 2 set format x "%H:%M\n%d. %b\n%Y" time diff --git a/src/turbo.py b/src/turbo.py index 1dd43cd..f3ffdbc 100755 --- a/src/turbo.py +++ b/src/turbo.py @@ -59,17 +59,16 @@ for o,v in options: if not out: out = sys.stdout -if tty and files: - raise ValueError("cannot do tty and files") - if len(files)==1: if "/dev/tty" in files[0]: tty = files[0] + files = [] +inp = [] if tty: - inp = serial.Serial(port=tty, baudrate=baud) -else: - inp = fileinput.input(files, mode="rb") + inp = [serial.Serial(port=tty, baudrate=baud)] +if files or not inp: + inp[0:0] = [fileinput.input(files, mode="rb")] checksum = 0 @@ -158,12 +157,12 @@ def clock(line): return noise(line, "t") s = None t = None + if do_clock: + t = time.time() try: t = float(ll[3]) except: pass - if do_clock: - t = time.time() if t is not None: freq.add(t, c) s = freq.solve() @@ -171,7 +170,7 @@ def clock(line): if t is None: t = time.time() return echo(line, f"{c} {t:.1f}") - return echo(line, f"{c} {t:.1f}", *("%.4g" % ss for ss in s[0])) + return echo(ll[0]+b' '+ll[1], f"{c} {t:.1f}", *("%.6g" % ss for ss in s[0])) Data = {} @@ -181,7 +180,7 @@ def data(line): c = ll[0] d = [int(l, 16) for l in ll[1:]] if ll[1:]: - data[c] = d + Data[c] = d emit_data(c) return echo(line) except Exception as e: @@ -234,6 +233,7 @@ ADC_mV = {} def emit_adc(c, cc): if len(cc) > 8: return + ADC_mV.clear() for n, a in enumerate(cc): C = ADC_CONFIG[n] if C is None: @@ -456,6 +456,11 @@ processes = { b'X': echo, } +splits = { + b'Q': 1, + b'T': 2, +} + class batecmd(cmdsocket.cmd_receiver): def msg(self, m): echo(b'r '+m) @@ -467,19 +472,22 @@ if socket: raise ValueError("cannot have socket without tty") cmd.open(socket, force=True) -while True: +while inp: try: - line = inp.readline() + line = inp[0].readline() except KeyboardInterrupt: break if not line: - break + inp[:1] = [] + continue line_key = line[0:1] is_noise = line_key not in processes if not is_noise and min(line.strip()) < 32: is_noise = True - + + if line_key in b"apcufse": + continue if is_noise: if do_noise: noise(line) @@ -487,6 +495,8 @@ while True: continue if processes[line_key](line): + if line_key in splits: + line = b" ".join(line.split()[:splits[line_key]])+b"\n" add_checksum(line) if tty: diff --git a/src/turbo.sh b/src/turbo.sh new file mode 100755 index 0000000..f11b03e --- /dev/null +++ b/src/turbo.sh @@ -0,0 +1,23 @@ +#! /bin/bash + +TTY=/dev/ttyUSB0,1200 +DATA=/data/blaulicht/temperature +NEWDATA=$(date --utc +$DATA/turbo-%FT%TZ.txt) +OLDDATA=$(ls -1 $DATA/turbo-????-??-??*.txt | tail -1) +LINKDATA=$DATA/turbo.txt + +SRC=~/turbo_weather/src + +[ -e $NEWDATA ] && exit + +if [ "$(stat -c %h $LINKDATA)" -eq "2" ] +then + rm -vf $LINKDATA + touch $NEWDATA || exit 0 + ln -v $NEWDATA $LINKDATA +fi + +echo $NEWDATA +echo $OLDDATA + +$SRC/turbo.py --tty="$TTY" $OLDDATA | tee --append "$NEWDATA"