MS Iot Device Can Platform

Overview

Kavo MS IoT Platform

Version: 2.0
Author: Luke Garceau

Requirements

  1. Read CAN messages in real-time

  2. Convert the given variables to engineering useful variables

     - useTime
     - runTime
     - idleTime
     - hygieneCycle Data
     - error messages
     - location data
    
  3. Keep the device updated with its cloud counterpart

     - Start MS service on startup
     - Verify MS continues to run
     - Reestablish connection losses from lost wifi
     - Collects data generated during connection losses and transfers the data when connections are reestablished __Todo__
    
  4. Send engineered variables to Iot Central

  5. Dynamically update IP tables with correct MS IP addresses

Overall Concept

  1. Connect to Iot Central and Initialize Can Bus
  2. Split each task into a seperate Thread
  3. Run the Threads using parallelism

Parallelism is the idea of running multiple processes at the same time
Transfer of data between each process is acheived by shared mutex variables (aka constant variables that each thread has access to)

  1. Shared Variables

     - const.CAN_DATA
     - const.CAN_CODES
     - const.MSG_TO_SEND
     - const.MSG_TO_RECORD
    

Pseudo Code

Shared Variables

  • const.CAN_DATA
    - Starts in readCan.py -> readData()
    - List of tuple variables that are to be interpretted into english
    - Ends in hexToEng.py -> interpret()
  • const.MSG_TO_SEND
    - Starts in hexToEng.py -> interpret()
    - List of arrays formatted like:
    [
    ['runTime', '0.008333333333333333']
    ]
    or
    [
    ['runTime', '0.008333333333333333']
    , (comma seperated)
    ['timestamp', '2019-11-06T03:40:29.863497']
    ['hygieneLast', '-1']
    ['hygieneType', 'no_mem']
    ['hygieneStart', 'no_mem']
    ['hygieneStop', 'no_mem']
    ]
    - Can have multiple messages
    - Ends in sendIotc.py -> sendMessages()
  • const.MSG_TO_RECORD
    - Starts in hexToEng.py -> interpret() -> alreadyHave()
    - List of tuple variables to be written to the .csv file
    - Ends in recordData.py -> recordData()

Read CAN Messages

  1. Translate CAN Hex Code to format below:
    Python Tuple of Strings Object
    (Timestamp, CanID, Message)
  2. Append The Tuple to const.MSG_TO_RECORD shared program variable
  3. Append The Tuple to const.MSG_TO_SEND shared program variable

Interpret Messages to Useful Variables

  • runTime
    - Sent every interval in config.ini

  • useTime and idleTime
    - Figured out using hexToEng.py -> alreadyHave()
    - Sent every interval in config.ini

  • hygiene data
    - Update message sent every interval in config.ini
    - Records data to text file start|stop|type -> data/hygieneData.txt
    - Sends hygieneEvent and updates data once a hygiene cycle is triggered on the chair
    - ???What about the hygiene last message???

  • error messages
    - Sends an error message json variable everytime there is a new error message
    - See hexToEng.py -> interpret()

  • location data
    - Pulls user inputted data about the device from the device twin
    - Cloud Properties

              - officeName
              - officeLocation
              - roomName
              - deviceName ???Is this pulled from the cloud or the device?? The device should already have a unique device name on it
    
  • Remove the can message from const.CAN_DATA

Record Data to .csv file

  • Will record new can messages to the .csv file in data/***.csv
  • Format of fileName: (should match old format alpha010_11112019_133131.csv deviceID_mmddyyyy_hhmmss.csv) deviceName = socket.gethostname()
    timestamp = datetime.datetime.now()
    timestamp = '%i-%i-%i_%i:%i' % (timestamp.year, timestamp.month, timestamp.day, timestamp.hour, timestamp.minute) fileName = '%s_canData_%s.csv' % (deviceName, timestamp)
  • Message needs to be of this format: (should match old format 07/25/2019 18:31:08:031 ID: 0x08 Message: 00 06 c0 00 00 00 00 00 timestamp in 1 column, can message in 2nd column ) String:
    YYYY-MM-DD HH-MM-SS.MMMM ID: Ox### Message: ## ## ## ## ## ## ## ##
    • Syntax to format a Can Message:
      incoming canMessage: data = (tuple of strings)
      canTS = data[0]
      canID = data[1]
      canMG = data[2]
      formatMsg = '%s\tID: %s\tMessage: %s\n' % (canTS, canID, canMG)
  • Remove the can message from const.MSG_TO_RECORD

Send To Iot Central

  1. Pull down the device twin from Iot Central

  2. Send the init messages: ???Why are you sending mac, wireless mac and ip address??

     - Location Data: (officeName, roomName, officeLocation, deviceID)
     - Ip Address
     - Hardware Mac Address
     - Wireless Mac Address
     - deviceInit message
    
  3. Loop through all messages in const.MSG_TO_SEND

  4. Append the deviceID to each message

  5. If msg in property list: ['hygieneStart, hygieneStop', 'hygieneLast', 'batteryLevel', 'serialNum']
    - True: Send message as a property - False: Send message as telemetry

  6. Send lastTimeConnected property

  7. Remove message from const.MSG_TO_SEND

Calculation / Determination of UseTime and IdleTime (Im not sure I understand the logic. It looks like it will only send Idle time)

I use a deviceState variable which is of data type String, which has 3 values

    - Use
    - Idle
    - IdlePending

Scenario 1:

Time (minutes since boot) Whats Happening deviceState
0 Device Boot N/A
1 Device Reads initial new can codes/messages Use
1+1ms Device sees starts to see old can messages Idle Pending
5 (use threshold) Device sends useTime message Idle
12 (useThreshold + idlethreshold) Device sends idleTime message Idle

Scenario 2:

Time (minutes since boot) Whats Happening deviceState
0 Device Boot N/A
1 Device Reads initial new can codes/messages Use
1+1ms Device sees starts to see old can messages IdlePending
3 New Can Message Comes through IdlePending
3 cont. UseTimeDelta updated IdleTimeStart reset IdlePending
3+1ms Device sees old can id/message IdlePending
5 (or useThreshold) Device sends useTime message Idle
12 (useThreshold + idleThreshold) Device sends idleTime message if no new code Idle
Owner
Luke Garceau
UNCC 21 A computer science student who just can't get enough of coding.
Luke Garceau
A protocol or procedure that connects an ever-changing IP address to a fixed physical machine address

p0znMITM ARP Poisoning Tool What is ARP? Address Resolution Protocol (ARP) is a protocol or procedure that connects an ever-changing IP address to a f

Furkan OZKAN 9 Sep 18, 2022
Data Exfiltration without ever making a connection. Using TCP header space.

TCPwned PoC toy code to exfiltrate data without ever making a TCP connection. This will never show up in firewall logs, much less, actually be monitor

2 Nov 21, 2022
The module that allows the collection of data sampling, which is transmitted with WebSocket via WIFI or serial port for CSV file.

The module that allows the collection of data sampling, which is transmitted with WebSocket via WIFI or serial port for CSV file.

Nelson Wenner 2 Apr 01, 2022
订阅转换,添加免流host

普通订阅转免流订阅 原理 将原来的订阅解析后添加免流host 使用方法 服务器域名/&&订阅链接&&免流host&&转换后服务器前缀 我这里已经在服务器上搭建好了

163 Apr 01, 2022
RabbitMQ asynchronous connector library for Python with built in RPC support

About RabbitMQ connector library for Python that is fully integrated with the aio-pika framework. Introduction BunnyStorm is here to simplify working

22 Sep 11, 2022
Apple Store Stock Notifier monitors the availability of selected Apple devices in selected Apple stores, and sends you a notification when devices are available!

Apple Store Stock Notifier This software will immediately send you a notification via Telegram when one of your coveted Apple Devices is available in

Floris-Jan Willemsen 25 Dec 05, 2022
Readable, simple and fast asynchronous non-blocking network apps

Fast and readable async non-blocking network apps Netius is a Python network library that can be used for the rapid creation of asynchronous non-block

Hive Solutions 120 Nov 20, 2022
Visualize the electric field of a point charge network.

ElectriPy ⚡ Visualize the electric field of a point charges network. 🔌 Installation Install ElectriPy package: $ pip install electripy You are all d

Dylan Tintenfich 29 Aug 29, 2022
Python port of proxy-www (https://github.com/justjavac/proxy-www)

proxy-www.py Python port of proxy-www (https://github.com/justjavac/proxy-www). Implemented additional functionalities! How to install pip install pro

Minjun Kim (Lapis0875) 20 Dec 08, 2021
Dos attack a Bluetooth connection!

Bluetooth Denial of service Script made for attacking Bluetooth Devices By Samrat Katwal. Warning This project was created only for fun purposes and p

Samrat 1 Oct 29, 2021
Converts from PC formatted MAC addresses (hardware addresses) to Cisco format or vice-versa

MAC-Converter Converts from PC formatted MAC addresses (hardware addresses) to Cisco format or vice-versa Stores the results to a file in the same dir

Stew Alexander 0 Dec 24, 2022
CORS Bypass Proxy Cloud Function

CORS Bypass Proxy Cloud Function

Elayamani K 1 Oct 23, 2021
StarCraft II Client - protocol definitions used to communicate with StarCraft II.

Overview The StarCraft II API is an interface that provides full external control of StarCraft II. This API exposes functionality for developing softw

Blizzard Entertainment 3.6k Dec 30, 2022
Minimal, self-hosted, 0-config alternative to ngrok. Caddy+OpenSSH+50 lines of Python.

If you have a webserver running on one computer (say your development laptop), and you want to expose it securely (ie HTTPS) via a public URL, SirTunnel allows you to easily do that.

Anders Pitman 423 Jan 02, 2023
Some files casually made by @AneekBiswas

Python-Tools All Pyhthon Files are created and managed by @AneekBiswas Modules needed to be downloaded 1.CLI bagels.py random guess.py random text-tow

1 Feb 23, 2022
A Python script that alerts via SMS when a stock is reaching an inflection point

TradeAlert Not sure what this will ultimately become, but for now, its a Python script that alerts via SMS when a stock is reaching an inflection poin

3 Feb 22, 2022
IP Pinger - This tool allows you to enter an IP and check if its currently connected to a host

IP Pinger - This tool allows you to enter an IP and check if its currently connected to a host

invasion 3 Feb 18, 2022
Python Program to connect to different VPN servers autoatically using Windscribe VPN.

AutomateVPN What is VPN ? VPN stands for Virtual Private Network , it is a technology that creates a safe and encrypted connectionover a less secure n

Vivek 1 Oct 27, 2021
PySocks lets you send traffic through SOCKS proxy servers.

PySocks lets you send traffic through SOCKS proxy servers. It is a modern fork of SocksiPy with bug fixes and extra features. Acts as a drop-i

1.1k Dec 07, 2022
Quickly fetch your WiFi password and if needed, generate a QR code of your WiFi to allow phones to easily connect

wifi-password Quickly fetch your WiFi password and if needed, generate a QR code of your WiFi to allow phones to easily connect. Works on macOS and Li

Siddharth Dushantha 2.6k Jan 05, 2023