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
With Py-Autocrack you can crack WPA2 networks in no time.

With Py-Autocrack you can crack WPA2 networks in no time. All based on Aircrack-ng and Crunch.

Paul - FloatDesign 1 Dec 10, 2021
Module for convenient work with TCP sockets.

m_socket-py Module for convenient work with TCP sockets. Contributing Pool Request is supported! Ask questions in the Issues section. License Copyrigh

Egor Arskiy 5 Mar 09, 2022
订阅转换,添加免流host

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

163 Apr 01, 2022
An automatic web reconnaissance tool written in python3.

WebRecon is an automatic web reconnaissance tool written in python3. Provides a command line interaction similar to msfconsole. The Exasmple.py file is provided, and you can write your own scripts yo

prophet 1 Feb 06, 2022
This script aims to make the dynamic public ip of your local server, public.

EZ DDNS CLOUDFLARE This script aims to make the dynamic ip of your local server, public. It does this by regularly updating cloudflare's dns record. B

3 Feb 13, 2022
CSP-style concurrency for Python

aiochan Aiochan is a library written to bring the wonderful idiom of CSP-style concurrency to python. The implementation is based on the battle-tested

Ziyang Hu 127 Dec 23, 2022
Simple Port Scanner script written in Python, plans is to expand upon this script to turn it into a GUI based pen testing suite

PortScanner Simple Port Scanner script written in Python, plans is to expand upon this script to turn it into a GUI based pen testing suite. #IMPORTAN

1 Oct 23, 2021
Docker container for demoing Wi-Fi calling stack.

VoWiFiLocalDemo - Docker container that runs StrongSwan and Kamailio to demonstrate how Wi-Fi calling works on smartphones.

18 Nov 12, 2022
NetMiaou is an crossplatform hacking tool that can do reverse shells, send files, create an http server or send and receive tcp packet

NetMiaou is an crossplatform hacking tool that can do reverse shells, send files, create an http server or send and receive tcp packet

TRIKKSS 5 Oct 05, 2022
Multi-vendor library to simplify CLI connections to network devices

Netmiko Multi-vendor library to simplify CLI connections to network devices Why Netmiko? Network automation to screen-scraping devices is primarily co

Kirk Byers 3k Jan 01, 2023
Py script to aid in setting up the boot chime in OpenCore.

BootChime Py script to aid in setting up the boot chime in OpenCore. It does so by helping you locate your IOHDACodecDevices, IOHDACodecAddress values

CorpNewt 7 Sep 19, 2022
InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state.

🧞 InfraGenie InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state. T

Digger 53 Nov 23, 2022
Dshell is a network forensic analysis framework.

Dshell An extensible network forensic analysis framework. Enables rapid development of plugins to support the dissection of network packet captures. K

DEVCOM Army Research Laboratory 5.4k Jan 06, 2023
A simple implementation of an RPC toolkit

Simple RPC With Raw Sockets Repository for the Data network course project: Introduction In this project, you will attempt to code a simple implementa

Milad Samimifar 1 Mar 25, 2022
BlueHawk is an HTTP/1.1 compliant web server developed in python

This project is done as a part of Computer Networks course. It aims at the implementation of the HTTP/1.1 Protocol based on RFC 2616 and includes the basic HTTP methods of GET, POST, PUT, DELETE and

2 Nov 11, 2022
A great python/java dynamic DNS service for NameSilo, with log, email reminder...

English NameSilo DDNS is a DDNS service for NameSilo domain names for home broadband , it can automatically detect IP changes in home broadband

云牧青 77 Dec 28, 2022
Utility for converting IP Fabric webhooks into a Teams format.

IP Fabric Webhook Integration for Microsoft Teams and/or Slack Setup IP Fabric Setup Go to Settings Webhooks Add webhook Provide a name URL will b

Community Fabric 1 Jan 26, 2022
Ipscanner - A simple threaded IP-Scanner written in python3 that can monitor local IP's in your network

IPScanner 🔬 A simple threaded IP-Scanner written in python3 that can monitor lo

4 Dec 12, 2022
With the use of this tool, you can change your MAC address

Akshat0404/MAC_CHANGER This tool has to be used on linux kernel. Now o

1 Jan 25, 2022
This is the code repository for the USENIX Security 2021 paper, "Weaponizing Middleboxes for TCP Reflected Amplification".

weaponizing-censors Censors pose a threat to the entire Internet. In this work, we show that censoring middleboxes and firewalls can be weaponized by

UMD Breakerspace 119 Dec 31, 2022