]> hydra-www.ietfng.org Git - acmetensortoys-snakecontrol/commitdiff
Robustification
authorNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sat, 16 Dec 2017 23:18:32 +0000 (18:18 -0500)
committerNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sun, 11 Feb 2018 00:05:53 +0000 (19:05 -0500)
bin/lcdproclib.tcl
bin/pidmonitor.py

index fca0ca598a75e4341a7f76c0d1bbc8ef303d8e9a..cffe11f54ea0339fd94f4b95aaac913ffdf07157 100644 (file)
@@ -11,14 +11,14 @@ proc ::lcdproclib::cmd {sid cmd} {
            expect {
              -i ${sid} -re "^success\[^\n\]*\n" { return }
              -i ${sid} -re "^\r\n" { }
-             -i ${sid} -re "^listen .*\n" {}
-             -i ${sid} -re "^ignore .*\n" {}
+             -i ${sid} -re "^listen\[^\n\]*\n" {}
+             -i ${sid} -re "^ignore\[^\n\]*\n" {}
              timeout { error "LCD protocol failure while waiting for success?" } 
            }
          }
        }
-      -i ${sid} -re "^listen .*\n" {}
-      -i ${sid} -re "^ignore .*\n" {}
+      -i ${sid} -re "^listen\[^\n\]*\n" {}
+      -i ${sid} -re "^ignore\[^\n\]*\n" {}
       timeout { error "LCD protocol failure while waiting for echo?" } 
     }
   }
@@ -28,7 +28,7 @@ proc ::lcdproclib::spawnlcd {host port} {
   spawn socat STDIO "TCP:${host}:${port}"
   send -i ${spawn_id} "hello\n"
   expect {
-    -i ${spawn_id} -re "^hello\r\nconnect .*\r\n" { return ${spawn_id} }
+    -i ${spawn_id} -re "^hello\r\nconnect\[^\n]*\r\n" { return ${spawn_id} }
     timeout { error "LCD protocol failure while sending hello?" } 
   }
 }
index 4556aeadd3d7e057887d02711333ecd54351b011..bf345dec58b3f2be7c61821dde481219beab95aa 100755 (executable)
@@ -33,27 +33,33 @@ loop_tanknear.setKD(1000.0,0.95)
 bmemid = BME280.BME280(port=1, address=0x77)
 
 def log(devfn, temp, logname, rrd, kw="temp"):
-    rrdtool.update(rrd, "N:" + ("%f" % temp))
+    try:
+        rrdtool.update(rrd, "N:" + ("%f" % temp))
+    except Exception, e :
+            print("WARN: Cannot log %s: %s ." % (logname, e))
     print ("DATA: %s %s=%s" % (logname, kw, temp))
 
 def logfail(devfn, name, *arg):
-    print ("FAIL: %s %s %s" % (name, devfn, arg))
+    print ("FAIL: %s ; %s ; %s ." % (name, devfn, arg))
 
-def with_ow_temp_fk_id2(devfn, loop, s, *arg, **kwarg):
+def with_ow_temp_fk_id3(devfn, loop, err, s, *arg, **kwarg):
     print("WARNING: failed to read %s" % devfn)
     return s # an ugly default
 
 def with_ow_temp(cache, devfn, sk, fk, *arg, **kwarg):
     if devfn in cache :
         return sk(devfn, cache[devfn], *arg, **kwarg)
-    with open(devfn) as devf:
-        devstr = devf.read()
-        devlines = devstr.split("\n")
-        if devlines[0].find("YES") > 0:
-            val = float((devlines[1].split(" ")[9])[2:]) / 1000
-            cache[devfn] = val
-            return sk(devfn, val, *arg, **kwarg)
-    return fk(devfn, *arg, **kwarg)
+    try:
+        with open(devfn) as devf:
+            devstr = devf.read()
+            devlines = devstr.split("\n")
+            if devlines[0].find("YES") > 0:
+                val = float((devlines[1].split(" ")[9])[2:]) / 1000
+                cache[devfn] = val
+                return sk(devfn, val, *arg, **kwarg)
+    except Exception as e:
+            fk(devfn, e, *arg, **kwarg)
+    return fk(devfn, None, *arg, **kwarg)
 
 def checkpid(devfn, temp, loop, s, offset, rrd, logname):
     desire = 128.0 + loop.update(temp, time.time())
@@ -125,10 +131,10 @@ def check_temps(sc):
 
     # Drive loop
     s = with_ow_temp(cache, "/sys/bus/w1/devices/28-011620f10dee/w1_slave",
-            checkpid, with_ow_temp_fk_id2, loop_hidenear, s, 5, "/home/pi/sc/data/hide-near-dmx.rrd", "dmx-hidenear")
+            checkpid, with_ow_temp_fk_id3, loop_hidenear, s, 5, "/home/pi/sc/data/hide-near-dmx.rrd", "dmx-hidenear")
 
     s = with_ow_temp(cache, "/sys/bus/w1/devices/28-011620c805ee/w1_slave",
-            checkpid, with_ow_temp_fk_id2, loop_tanknear, s, 6, "/home/pi/sc/data/tank-near-dmx.rrd", "dmx-tanknear")
+            checkpid, with_ow_temp_fk_id3, loop_tanknear, s, 6, "/home/pi/sc/data/tank-near-dmx.rrd", "dmx-tanknear")
 
     print ("check temps fini: out=%r lhn=(%s)" % (s, loop_hidenear))
     assert(dmxdev.write(s) == len(s))