249 lines
8.7 KiB
Plaintext
249 lines
8.7 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#migration script to rule them all\n",
|
|
"import boto3, json, lattice"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def convertToNewConfig(config):\n",
|
|
" #old form\n",
|
|
" #\"{'mainHP': 'https://hp-drivers.s3-us-west-2.amazonaws.com/mainMeshify/','m1': 'https://hp-drivers.s3-us-west-2.amazonaws.com/M1/','flowmonitor': 'https://s3.amazonaws.com/pocloud-drivers/flow-monitor/'}\"\n",
|
|
"\n",
|
|
" #new form\n",
|
|
" #\"{'mainHP': 'https://hp-thingsboard.s3.amazonaws.com/mainHP/','m1': 'https://hp-thingsboard.s3.amazonaws.com/M1/','flowmonitor': 'https://hp-thingsboard.s3.amazonaws.com/flowmonitor/'}\"\n",
|
|
" mainHPMapping = {\n",
|
|
" \"mainMeshify\": \"https://hp-thingsboard.s3.amazonaws.com/mainHP/\",\n",
|
|
" \"piflow\": \"https://hp-thingsboard.s3.amazonaws.com/mainHPRPI/\",\n",
|
|
" \"plcfresh\": \"https://hp-thingsboard.s3.amazonaws.com/mainHPPLCFRESH/\"\n",
|
|
" }\n",
|
|
"\n",
|
|
" configMapping = {\n",
|
|
" \"abbflow\": \"https://hp-thingsboard.s3.amazonaws.com/abbflow/\",\n",
|
|
" \"advvfdipp\": \"https://hp-thingsboard.s3.amazonaws.com/advvfdipp/\",\n",
|
|
" \"dhsensor\": \"https://hp-thingsboard.s3.amazonaws.com/dhsensor/\",\n",
|
|
" \"dual_flowmeter\": \"https://hp-thingsboard.s3.amazonaws.com/dual_flowmeter/\",\n",
|
|
" \"flowmeterskid\": \"https://hp-thingsboard.s3.amazonaws.com/flowmeterskid/\",\n",
|
|
" \"flowmonitor\": \"https://hp-thingsboard.s3.amazonaws.com/flowmonitor/\",\n",
|
|
" \"PiFlow\": \"https://hp-thingsboard.s3.amazonaws.com/PiFlow/\",\n",
|
|
" \"ipp\": \"https://hp-thingsboard.s3.amazonaws.com/ipp/\",\n",
|
|
" \"plcpond\": \"https://hp-thingsboard.s3.amazonaws.com/plcpond/\",\n",
|
|
" \"multisensor\": \"https://hp-thingsboard.s3.amazonaws.com/multisensor/\",\n",
|
|
" \"dualactuator\": \"https://hp-thingsboard.s3.amazonaws.com/dualactuator/\",\n",
|
|
" \"dualactuatorpri\": \"https://hp-thingsboard.s3.amazonaws.com/dualactuatorpri/\",\n",
|
|
" \"plcfreshwater\": \"https://hp-thingsboard.s3.amazonaws.com/plcfreshwater/\",\n",
|
|
" \"pondlevel\": \"https://hp-thingsboard.s3.amazonaws.com/pondlevel/\",\n",
|
|
" \"promagmbs\": \"https://hp-thingsboard.s3.amazonaws.com/promagmbs/\",\n",
|
|
" \"poc\": \"https://hp-thingsboard.s3.amazonaws.com/poc/\",\n",
|
|
" \"recycle_train\": \"https://hp-thingsboard.s3.amazonaws.com/recycle_train/\",\n",
|
|
" \"rigpump\": \"https://hp-thingsboard.s3.amazonaws.com/rigpump/\",\n",
|
|
" \"submonitor\": \"https://hp-thingsboard.s3.amazonaws.com/submonitor/\",\n",
|
|
" \"swdcontroller\": \"https://hp-thingsboard.s3.amazonaws.com/swdcontroller/\",\n",
|
|
" \"tankalarms\": \"https://hp-thingsboard.s3.amazonaws.com/tankalarms/\",\n",
|
|
" \"tanktransfer\": \"https://hp-thingsboard.s3.amazonaws.com/tanktransfer/\",\n",
|
|
" \"tenflowmeterskid\": \"https://hp-thingsboard.s3.amazonaws.com/tenflowmeterskid/\",\n",
|
|
" \"transferlite\": \"https://hp-thingsboard.s3.amazonaws.com/transferlite/\",\n",
|
|
" \"m1\": \"https://hp-thingsboard.s3.amazonaws.com/m1/\"\n",
|
|
" }\n",
|
|
" config = json.loads(config.replace(\"'\", '\"'))\n",
|
|
" for x in dict.keys(config):\n",
|
|
" if x == \"mainHP\":\n",
|
|
" config[x] = mainHPMapping.get(config[x].split(\"/\")[-2], \"bad_request\")\n",
|
|
" else:\n",
|
|
" config[x] = configMapping.get(x, \"bad_request\")\n",
|
|
" config = json.dumps(config).replace('\"', \"'\")\n",
|
|
" print(config)\n",
|
|
" \n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def updateConfig(mac, client, table):\n",
|
|
" resp = client.get_item(Key={'mac': {'S': mac}}, TableName=table)\n",
|
|
" oldconfig = resp[\"Item\"]['config']\n",
|
|
" print(oldconfig)\n",
|
|
" urls = convertToNewConfig(oldconfig)\n",
|
|
" newconfig = oldconfig.copy()\n",
|
|
" newconfig['S'] = urls\n",
|
|
" print(newconfig)\n",
|
|
" client.update_item(\n",
|
|
" TableName=table,\n",
|
|
" Key={'mac': {'S': mac}},\n",
|
|
" ExpressionAttributeNames={\"#C\": 'config'},\n",
|
|
" ExpressionAttributeValues={':c': newconfig},\n",
|
|
" ReturnValues='ALL_NEW',\n",
|
|
" UpdateExpression='SET #C = :c'\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"client = boto3.client('dynamodb')\n",
|
|
"table = \"HPDeviceList\"\n",
|
|
"macs = ['C4:93:00:0C:68:F9']\n",
|
|
"for mac in macs:\n",
|
|
" updateConfig(mac, client, table)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def convertVanityToClientId(deviceName):\n",
|
|
" #Device Name form: Jones Holton FW #2\n",
|
|
" #MQTT clientID form: jones-holton-fw-2\n",
|
|
" mqttClientId = []\n",
|
|
" for c in deviceName:\n",
|
|
" if c == \" \":\n",
|
|
" mqttClientId.append(\"-\")\n",
|
|
" elif c.isalnum():\n",
|
|
" mqttClientId.append(c.lower())\n",
|
|
" elif c == '\"':\n",
|
|
" mqttClientId.append(\"in\")\n",
|
|
" elif c == '-':\n",
|
|
" mqttClientId.append(c)\n",
|
|
" mqttClientId = \"\".join(mqttClientId)\n",
|
|
" return mqttClientId"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"nodeTypes = {\n",
|
|
" \"tankalarms\": 95\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[\n",
|
|
" {\n",
|
|
" \"id\": 73138,\n",
|
|
" \"parentNodeId\": 73138,\n",
|
|
" \"aliasNodeIds\": [],\n",
|
|
" \"folderId\": 35662,\n",
|
|
" \"nodeTypeId\": 95,\n",
|
|
" \"uniqueId\": \"b8:27:eb:3d:e9:11:01:99\",\n",
|
|
" \"vanity\": \"Fasken AW Battery Tank Alarms\",\n",
|
|
" \"tags\": [],\n",
|
|
" \"location\": null,\n",
|
|
" \"metadata\": {},\n",
|
|
" \"isActive\": true,\n",
|
|
" \"archiveNumber\": 0,\n",
|
|
" \"createdAt\": \"2021-08-19T17:54:44Z\",\n",
|
|
" \"updatedAt\": \"2021-08-19T17:54:44Z\",\n",
|
|
" \"folderName\": \"Fasken AW Battery\"\n",
|
|
" },\n",
|
|
" {\n",
|
|
" \"id\": 79215,\n",
|
|
" \"parentNodeId\": 79215,\n",
|
|
" \"aliasNodeIds\": [],\n",
|
|
" \"folderId\": 36624,\n",
|
|
" \"nodeTypeId\": 95,\n",
|
|
" \"uniqueId\": \"b8:27:eb:26:55:c0:01:99\",\n",
|
|
" \"vanity\": \"Fee BM Tank Alarms\",\n",
|
|
" \"tags\": [],\n",
|
|
" \"location\": null,\n",
|
|
" \"metadata\": {},\n",
|
|
" \"isActive\": true,\n",
|
|
" \"archiveNumber\": 0,\n",
|
|
" \"createdAt\": \"2022-03-17T23:01:35Z\",\n",
|
|
" \"updatedAt\": \"2022-03-17T23:01:35Z\",\n",
|
|
" \"folderName\": \"Fee BM\"\n",
|
|
" }\n",
|
|
"]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"#Get nodes and filter by node type\n",
|
|
"nodes = lattice.getNodes()\n",
|
|
"folders = lattice.getFolders()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Fasken AW Battery fasken-aw-battery\n",
|
|
"Fee BM fee-bm\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"desiredNodes = []\n",
|
|
"desiredType = nodeTypes[\"tankalarms\"]\n",
|
|
"for node in nodes:\n",
|
|
" if node[\"nodeTypeId\"] == desiredType:\n",
|
|
" for folder in folders:\n",
|
|
" if folder[\"id\"] == node[\"folderId\"]:\n",
|
|
" node[\"folderName\"] = folder[\"name\"]\n",
|
|
" break\n",
|
|
" desiredNodes.append(node)\n",
|
|
"\n",
|
|
"#print(json.dumps(desiredNodes, indent=2))\n",
|
|
"for n in desiredNodes:\n",
|
|
" print(n[\"folderName\"],convertVanityToClientId(n[\"folderName\"]))\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "aws",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.0"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|