38 from __future__ 
import with_statement
 
   40 PKG = 
'pr2_computer_monitor' 
   42 roslib.load_manifest(PKG)
 
   49 from diagnostic_msgs.msg 
import DiagnosticArray, DiagnosticStatus, KeyValue
 
   50 from pr2_msgs.msg 
import AccessPoint
 
   52 DIAG_NAME = 
'Wifi Status (ddwrt)' 
   58     stat = DiagnosticStatus()
 
   61     stat.level = DiagnosticStatus.OK
 
   64     stat.values.append(KeyValue(key=
'ESSID',       value=msg.essid))
 
   65     stat.values.append(KeyValue(key=
'Mac Address', value=msg.macaddr))
 
   66     stat.values.append(KeyValue(key=
'Signal',      value=str(msg.signal)))
 
   67     stat.values.append(KeyValue(key=
'Noise',       value=str(msg.noise)))
 
   68     stat.values.append(KeyValue(key=
'Sig/Noise',   value=str(msg.snr)))
 
   69     stat.values.append(KeyValue(key=
'Channel',     value=str(msg.channel)))
 
   70     stat.values.append(KeyValue(key=
'Rate',        value=msg.rate))
 
   71     stat.values.append(KeyValue(key=
'TX Power',    value=msg.tx_power))
 
   72     stat.values.append(KeyValue(key=
'Quality',     value=str(msg.quality)))
 
   78         diag_stat = DiagnosticStatus()
 
   79         diag_stat.message = 
'No Updates' 
   80         diag_stat.name    = DIAG_NAME
 
   82         diag_stat.message = 
'Updates Stale' 
   84     diag_stat.level = DiagnosticStatus.WARN
 
   86         diag_stat.level = DiagnosticStatus.ERROR
 
   98         self.
_diag_pub = rospy.Publisher(
'/diagnostics', DiagnosticArray, queue_size=10)
 
  100         self.
_ddwrt_sub = rospy.Subscriber(
'ddwrt/accesspoint', AccessPoint, self.
_cb)
 
  113                 if update_diff > WARN_TIME:
 
  118                 ddwrt_stat.values.append(KeyValue(key=
'Time Since Update', value=str(update_diff)))
 
  120                 error_state = (rospy.get_time() - self.
_start_time) > ERROR_TIME
 
  122                 ddwrt_stat.values.append(KeyValue(key=
'Time Since Update', value=
"N/A"))
 
  124         msg = DiagnosticArray()
 
  125         msg.header.stamp = rospy.get_rostime()
 
  126         msg.status.append(ddwrt_stat)
 
  131 if __name__ == 
'__main__':
 
  133         rospy.init_node(
'ddwrt_diag')
 
  134     except rospy.exceptions.ROSInitException:
 
  135         print(
'Wifi monitor is unable to initialize node. Master may not be running.')
 
  139     rate = rospy.Rate(1.0)
 
  142         while not rospy.is_shutdown():
 
  144             wifi_monitor.publish_stats()
 
  145     except KeyboardInterrupt:
 
  147     except Exception 
as e:
 
  149         traceback.print_exc()