jerin commited on
Commit
3b66598
1 Parent(s): a650cd7

r "Revert "lstm pipeline""

Browse files

This reverts commit a650cd7dd1aeba9850a4dd485e0003814ead4d7d.

MA_temp_model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ed0c2c96cde21763e2a60597ab8abf0a50bd75ab954525845702014d219027c4
3
+ size 533080
buildingdata.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:62e6cb23b7dfca34ca511b0ff99c68009f860968cd0c5688ac97ffa50a6aea8b
3
+ size 24061812
energy_model.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ad1ad8b65c5030e0dc971b3c488335f2f1d93b0b8acc2bfb6af10145237cda87
3
+ size 780616
energy_model_01.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:58e7e4823df5c20cd2fb4df23d2399d8b0fcf710147f3e52c9c1f3fcbeaa7cc1
3
+ size 535480
file_info.ipynb CHANGED
The diff for this file is too large to render. See raw diff
 
kmeans_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5bddef9e8a8d413136daf6f99dd236fb6c97700d2fa85567de17aacb4a32bce1
3
+ size 1927225
kmeans_model1.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aaa404e937bf8fe9d52b38aa1e11f87d544530a2d4789b46d20b5a1665e15846
3
+ size 2064297
kmeans_model2.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9cf710504c910255e59d0609617fecf74ee8ad6710f4ba4109d9de5aae0cd879
3
+ size 2064297
kmeans_model3.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1fb375913725bf309d514f55b71799daead266db7caad09f02ab9cfdd56bdc0a
3
+ size 2064297
kmeans_model4.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cfbe4b1a5c1aa4b00e8e932c77dd8ed5ce99fbe5efd4960079d14e380206f9f2
3
+ size 2064297
lstm.ipynb CHANGED
The diff for this file is too large to render. See raw diff
 
mqttclient.ipynb CHANGED
@@ -2,14 +2,14 @@
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
- "execution_count": 2,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stderr",
10
  "output_type": "stream",
11
  "text": [
12
- "C:\\Users\\jerin\\AppData\\Local\\Temp\\ipykernel_6272\\1211754903.py:21: DeprecationWarning: Callback API version 1 is deprecated, update to latest version\n",
13
  " client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)\n"
14
  ]
15
  },
@@ -17,7 +17,13 @@
17
  "name": "stdout",
18
  "output_type": "stream",
19
  "text": [
20
- "{'sa_temp': 68.6, 'ma_temp': 70.0}\n"
 
 
 
 
 
 
21
  ]
22
  },
23
  {
@@ -27,7 +33,7 @@
27
  "traceback": [
28
  "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
29
  "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
30
- "Cell \u001b[1;32mIn[2], line 25\u001b[0m\n\u001b[0;32m 23\u001b[0m client\u001b[38;5;241m.\u001b[39mconnect(broker_address, broker_port)\n\u001b[0;32m 24\u001b[0m client\u001b[38;5;241m.\u001b[39msubscribe(topic)\n\u001b[1;32m---> 25\u001b[0m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloop_forever\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
31
  "File \u001b[1;32mc:\\Users\\jerin\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\paho\\mqtt\\client.py:2291\u001b[0m, in \u001b[0;36mClient.loop_forever\u001b[1;34m(self, timeout, retry_first_connection)\u001b[0m\n\u001b[0;32m 2289\u001b[0m rc \u001b[38;5;241m=\u001b[39m MQTTErrorCode\u001b[38;5;241m.\u001b[39mMQTT_ERR_SUCCESS\n\u001b[0;32m 2290\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m rc \u001b[38;5;241m==\u001b[39m MQTTErrorCode\u001b[38;5;241m.\u001b[39mMQTT_ERR_SUCCESS:\n\u001b[1;32m-> 2291\u001b[0m rc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_loop\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2292\u001b[0m \u001b[38;5;66;03m# We don't need to worry about locking here, because we've\u001b[39;00m\n\u001b[0;32m 2293\u001b[0m \u001b[38;5;66;03m# either called loop_forever() when in single threaded mode, or\u001b[39;00m\n\u001b[0;32m 2294\u001b[0m \u001b[38;5;66;03m# in multi threaded mode when loop_stop() has been called and\u001b[39;00m\n\u001b[0;32m 2295\u001b[0m \u001b[38;5;66;03m# so no other threads can access _out_packet or _messages.\u001b[39;00m\n\u001b[0;32m 2296\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_thread_terminate \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m 2297\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_out_packet) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m 2298\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_out_messages) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m):\n",
32
  "File \u001b[1;32mc:\\Users\\jerin\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\paho\\mqtt\\client.py:1657\u001b[0m, in \u001b[0;36mClient._loop\u001b[1;34m(self, timeout)\u001b[0m\n\u001b[0;32m 1654\u001b[0m rlist \u001b[38;5;241m=\u001b[39m [\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sock, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sockpairR]\n\u001b[0;32m 1656\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 1657\u001b[0m socklist \u001b[38;5;241m=\u001b[39m select\u001b[38;5;241m.\u001b[39mselect(rlist, wlist, [], timeout)\n\u001b[0;32m 1658\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[0;32m 1659\u001b[0m \u001b[38;5;66;03m# Socket isn't correct type, in likelihood connection is lost\u001b[39;00m\n\u001b[0;32m 1660\u001b[0m \u001b[38;5;66;03m# ... or we called disconnect(). In that case the socket will\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1663\u001b[0m \u001b[38;5;66;03m# rc != MQTT_ERR_SUCCESS and we don't want state to change from\u001b[39;00m\n\u001b[0;32m 1664\u001b[0m \u001b[38;5;66;03m# mqtt_cs_disconnecting.\u001b[39;00m\n\u001b[0;32m 1665\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_state \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m (_ConnectionState\u001b[38;5;241m.\u001b[39mMQTT_CS_DISCONNECTING, _ConnectionState\u001b[38;5;241m.\u001b[39mMQTT_CS_DISCONNECTED):\n",
33
  "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
@@ -48,8 +54,9 @@
48
  "def on_message(client, userdata, message):\n",
49
  " global df\n",
50
  " payload = json.loads(message.payload.decode())\n",
51
- " sa_temp = payload[\"sa_temp\"]\n",
52
- " ma_temp = payload[\"ma_temp\"]\n",
 
53
  " print(payload)\n",
54
  " # df.loc[len(df)] = {\"sa_temp\": sa_temp, \"ma_temp\": ma_temp}\n",
55
  " \n",
 
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
+ "execution_count": 6,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stderr",
10
  "output_type": "stream",
11
  "text": [
12
+ "C:\\Users\\jerin\\AppData\\Local\\Temp\\ipykernel_3260\\368714138.py:22: DeprecationWarning: Callback API version 1 is deprecated, update to latest version\n",
13
  " client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)\n"
14
  ]
15
  },
 
17
  "name": "stdout",
18
  "output_type": "stream",
19
  "text": [
20
+ "{'date': '2018-05-02 00:09:00', 'hp_hws_temp': 96.3, 'rtu_003_sa_temp': 64.2, 'rtu_003_oadmpr_pct': 88.4, 'rtu_003_ra_temp': 72.5, 'rtu_003_oa_temp': 61.6, 'rtu_003_ma_temp': 63.5, 'rtu_003_sf_vfd_spd_fbk_tn': 77.8, 'rtu_003_rf_vfd_spd_fbk_tn': 54.3, 'rtu_004_sa_temp': 68.9, 'rtu_004_oadmpr_pct': 54.2, 'rtu_004_ra_temp': 73.3, 'rtu_004_oa_temp': 67.4, 'rtu_004_ma_temp': 67.6, 'rtu_004_sf_vfd_spd_fbk_tn': 75.7, 'rtu_004_rf_vfd_spd_fbk_tn': 78.3, 'air_temp_set_1': 14.9, 'air_temp_set_2': 14.44, 'dew_point_temperature_set_1d': 7.02, 'relative_humidity_set_1': 59.5, 'solar_radiation_set_1': 335.9}\n",
21
+ "{'date': '2018-05-02 00:10:00', 'hp_hws_temp': 97.0, 'rtu_003_sa_temp': 64.1, 'rtu_003_oadmpr_pct': 88.4, 'rtu_003_ra_temp': 72.4, 'rtu_003_oa_temp': 61.9, 'rtu_003_ma_temp': 63.3, 'rtu_003_sf_vfd_spd_fbk_tn': 77.2, 'rtu_003_rf_vfd_spd_fbk_tn': 52.5, 'rtu_004_sa_temp': 68.8, 'rtu_004_oadmpr_pct': 80.6, 'rtu_004_ra_temp': 73.3, 'rtu_004_oa_temp': 68.2, 'rtu_004_ma_temp': 66.1, 'rtu_004_sf_vfd_spd_fbk_tn': 75.6, 'rtu_004_rf_vfd_spd_fbk_tn': 67.3, 'air_temp_set_1': 14.9, 'air_temp_set_2': 14.44, 'dew_point_temperature_set_1d': 7.02, 'relative_humidity_set_1': 59.5, 'solar_radiation_set_1': 335.9}\n",
22
+ "{'date': '2018-05-02 00:11:00', 'hp_hws_temp': 97.6, 'rtu_003_sa_temp': 64.1, 'rtu_003_oadmpr_pct': 88.4, 'rtu_003_ra_temp': 72.4, 'rtu_003_oa_temp': 62.0, 'rtu_003_ma_temp': 63.8, 'rtu_003_sf_vfd_spd_fbk_tn': 78.2, 'rtu_003_rf_vfd_spd_fbk_tn': 56.7, 'rtu_004_sa_temp': 67.3, 'rtu_004_oadmpr_pct': 76.6, 'rtu_004_ra_temp': 73.4, 'rtu_004_oa_temp': 68.6, 'rtu_004_ma_temp': 64.3, 'rtu_004_sf_vfd_spd_fbk_tn': 78.6, 'rtu_004_rf_vfd_spd_fbk_tn': 77.5, 'air_temp_set_1': 14.9, 'air_temp_set_2': 14.44, 'dew_point_temperature_set_1d': 7.02, 'relative_humidity_set_1': 59.5, 'solar_radiation_set_1': 335.9}\n",
23
+ "{'date': '2018-05-02 00:12:00', 'hp_hws_temp': 98.3, 'rtu_003_sa_temp': 64.2, 'rtu_003_oadmpr_pct': 88.4, 'rtu_003_ra_temp': 72.4, 'rtu_003_oa_temp': 62.1, 'rtu_003_ma_temp': 64.1, 'rtu_003_sf_vfd_spd_fbk_tn': 76.4, 'rtu_003_rf_vfd_spd_fbk_tn': 52.9, 'rtu_004_sa_temp': 66.7, 'rtu_004_oadmpr_pct': 51.4, 'rtu_004_ra_temp': 73.4, 'rtu_004_oa_temp': 68.9, 'rtu_004_ma_temp': 65.1, 'rtu_004_sf_vfd_spd_fbk_tn': 79.6, 'rtu_004_rf_vfd_spd_fbk_tn': 82.5, 'air_temp_set_1': 14.9, 'air_temp_set_2': 14.44, 'dew_point_temperature_set_1d': 7.02, 'relative_humidity_set_1': 59.5, 'solar_radiation_set_1': 335.9}\n",
24
+ "{'date': '2018-05-02 00:13:00', 'hp_hws_temp': 98.9, 'rtu_003_sa_temp': 64.3, 'rtu_003_oadmpr_pct': 88.4, 'rtu_003_ra_temp': 72.3, 'rtu_003_oa_temp': 62.2, 'rtu_003_ma_temp': 63.8, 'rtu_003_sf_vfd_spd_fbk_tn': 78.5, 'rtu_003_rf_vfd_spd_fbk_tn': 57.0, 'rtu_004_sa_temp': 67.8, 'rtu_004_oadmpr_pct': 52.4, 'rtu_004_ra_temp': 73.4, 'rtu_004_oa_temp': 68.9, 'rtu_004_ma_temp': 67.8, 'rtu_004_sf_vfd_spd_fbk_tn': 78.3, 'rtu_004_rf_vfd_spd_fbk_tn': 73.9, 'air_temp_set_1': 14.9, 'air_temp_set_2': 14.44, 'dew_point_temperature_set_1d': 7.02, 'relative_humidity_set_1': 59.5, 'solar_radiation_set_1': 335.9}\n",
25
+ "{'date': '2018-05-02 00:14:00', 'hp_hws_temp': 99.3, 'rtu_003_sa_temp': 64.4, 'rtu_003_oadmpr_pct': 88.4, 'rtu_003_ra_temp': 72.4, 'rtu_003_oa_temp': 62.5, 'rtu_003_ma_temp': 63.9, 'rtu_003_sf_vfd_spd_fbk_tn': 75.9, 'rtu_003_rf_vfd_spd_fbk_tn': 49.8, 'rtu_004_sa_temp': 68.8, 'rtu_004_oadmpr_pct': 52.4, 'rtu_004_ra_temp': 73.3, 'rtu_004_oa_temp': 68.1, 'rtu_004_ma_temp': 68.3, 'rtu_004_sf_vfd_spd_fbk_tn': 76.5, 'rtu_004_rf_vfd_spd_fbk_tn': 74.7, 'air_temp_set_1': 14.9, 'air_temp_set_2': 14.44, 'dew_point_temperature_set_1d': 7.02, 'relative_humidity_set_1': 59.5, 'solar_radiation_set_1': 335.9}\n",
26
+ "{'date': '2018-05-02 00:15:00', 'hp_hws_temp': 99.0, 'rtu_003_sa_temp': 63.9, 'rtu_003_oadmpr_pct': 88.4, 'rtu_003_ra_temp': 72.3, 'rtu_003_oa_temp': 62.6, 'rtu_003_ma_temp': 63.6, 'rtu_003_sf_vfd_spd_fbk_tn': 74.3, 'rtu_003_rf_vfd_spd_fbk_tn': 53.5, 'rtu_004_sa_temp': 69.1, 'rtu_004_oadmpr_pct': 79.0, 'rtu_004_ra_temp': 73.3, 'rtu_004_oa_temp': 67.2, 'rtu_004_ma_temp': 66.6, 'rtu_004_sf_vfd_spd_fbk_tn': 75.3, 'rtu_004_rf_vfd_spd_fbk_tn': 69.0, 'air_temp_set_1': 16.0, 'air_temp_set_2': 15.48, 'dew_point_temperature_set_1d': 6.63, 'relative_humidity_set_1': 54.0, 'solar_radiation_set_1': 426.3}\n"
27
  ]
28
  },
29
  {
 
33
  "traceback": [
34
  "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
35
  "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
36
+ "Cell \u001b[1;32mIn[6], line 26\u001b[0m\n\u001b[0;32m 24\u001b[0m client\u001b[38;5;241m.\u001b[39mconnect(broker_address, broker_port)\n\u001b[0;32m 25\u001b[0m client\u001b[38;5;241m.\u001b[39msubscribe(topic)\n\u001b[1;32m---> 26\u001b[0m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloop_forever\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
37
  "File \u001b[1;32mc:\\Users\\jerin\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\paho\\mqtt\\client.py:2291\u001b[0m, in \u001b[0;36mClient.loop_forever\u001b[1;34m(self, timeout, retry_first_connection)\u001b[0m\n\u001b[0;32m 2289\u001b[0m rc \u001b[38;5;241m=\u001b[39m MQTTErrorCode\u001b[38;5;241m.\u001b[39mMQTT_ERR_SUCCESS\n\u001b[0;32m 2290\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m rc \u001b[38;5;241m==\u001b[39m MQTTErrorCode\u001b[38;5;241m.\u001b[39mMQTT_ERR_SUCCESS:\n\u001b[1;32m-> 2291\u001b[0m rc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_loop\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2292\u001b[0m \u001b[38;5;66;03m# We don't need to worry about locking here, because we've\u001b[39;00m\n\u001b[0;32m 2293\u001b[0m \u001b[38;5;66;03m# either called loop_forever() when in single threaded mode, or\u001b[39;00m\n\u001b[0;32m 2294\u001b[0m \u001b[38;5;66;03m# in multi threaded mode when loop_stop() has been called and\u001b[39;00m\n\u001b[0;32m 2295\u001b[0m \u001b[38;5;66;03m# so no other threads can access _out_packet or _messages.\u001b[39;00m\n\u001b[0;32m 2296\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_thread_terminate \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m 2297\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_out_packet) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m 2298\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_out_messages) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m):\n",
38
  "File \u001b[1;32mc:\\Users\\jerin\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\paho\\mqtt\\client.py:1657\u001b[0m, in \u001b[0;36mClient._loop\u001b[1;34m(self, timeout)\u001b[0m\n\u001b[0;32m 1654\u001b[0m rlist \u001b[38;5;241m=\u001b[39m [\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sock, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_sockpairR]\n\u001b[0;32m 1656\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 1657\u001b[0m socklist \u001b[38;5;241m=\u001b[39m select\u001b[38;5;241m.\u001b[39mselect(rlist, wlist, [], timeout)\n\u001b[0;32m 1658\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[0;32m 1659\u001b[0m \u001b[38;5;66;03m# Socket isn't correct type, in likelihood connection is lost\u001b[39;00m\n\u001b[0;32m 1660\u001b[0m \u001b[38;5;66;03m# ... or we called disconnect(). In that case the socket will\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1663\u001b[0m \u001b[38;5;66;03m# rc != MQTT_ERR_SUCCESS and we don't want state to change from\u001b[39;00m\n\u001b[0;32m 1664\u001b[0m \u001b[38;5;66;03m# mqtt_cs_disconnecting.\u001b[39;00m\n\u001b[0;32m 1665\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_state \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m (_ConnectionState\u001b[38;5;241m.\u001b[39mMQTT_CS_DISCONNECTING, _ConnectionState\u001b[38;5;241m.\u001b[39mMQTT_CS_DISCONNECTED):\n",
39
  "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
 
54
  "def on_message(client, userdata, message):\n",
55
  " global df\n",
56
  " payload = json.loads(message.payload.decode())\n",
57
+ " # sa_temp = payload[\"sa_temp\"]\n",
58
+ " # ma_temp = payload[\"ma_temp\"]\n",
59
+ " \n",
60
  " print(payload)\n",
61
  " # df.loc[len(df)] = {\"sa_temp\": sa_temp, \"ma_temp\": ma_temp}\n",
62
  " \n",
mqttpublisher.ipynb CHANGED
@@ -2,17 +2,379 @@
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
- "execution_count": 1,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stderr",
10
  "output_type": "stream",
11
  "text": [
12
- "C:\\Users\\jerin\\AppData\\Local\\Temp\\ipykernel_18680\\2251714346.py:13: DeprecationWarning: Callback API version 1 is deprecated, update to latest version\n",
13
  " client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, clientId)\n"
14
  ]
15
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  {
17
  "ename": "KeyboardInterrupt",
18
  "evalue": "",
@@ -20,7 +382,8 @@
20
  "traceback": [
21
  "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
22
  "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
23
- "Cell \u001b[1;32mIn[1], line 28\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m 27\u001b[0m publish_sensor_data()\n\u001b[1;32m---> 28\u001b[0m time\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;241m5\u001b[39m)\n\u001b[0;32m 29\u001b[0m client\u001b[38;5;241m.\u001b[39mdisconnect()\n",
 
24
  "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
25
  ]
26
  }
@@ -36,24 +399,99 @@
36
  "broker_address = \"localhost\"\n",
37
  "broker_port = 1883\n",
38
  "\n",
39
- "df = pd.read_csv(\"buildingdata.csv\")\n",
40
  "\n",
41
  "client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, clientId)\n",
42
  "client.connect(broker_address, broker_port)\n",
43
  "topic = \"sensor_data\"\n",
44
  "\n",
45
- "def publish_sensor_data():\n",
46
- " # temp = round(random.uniform(20, 30), 2) \n",
47
- " # pressure = round(random.uniform(900, 1100), 2) \n",
48
  " for index, row in df.iterrows():\n",
49
- " sa_temp = row['rtu_004_sa_temp']\n",
50
- " ma_temp = row['rtu_004_ma_temp']\n",
51
- " client.publish(topic, payload=json.dumps({\"sa_temp\": sa_temp, \"ma_temp\": ma_temp}))\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  "\n",
53
  "\n",
54
  "while True:\n",
55
  " publish_sensor_data()\n",
56
- " time.sleep(5)\n",
57
  "client.disconnect()"
58
  ]
59
  },
 
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
+ "execution_count": 10,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stderr",
10
  "output_type": "stream",
11
  "text": [
12
+ "C:\\Users\\jerin\\AppData\\Local\\Temp\\ipykernel_4616\\2478473330.py:13: DeprecationWarning: Callback API version 1 is deprecated, update to latest version\n",
13
  " client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, clientId)\n"
14
  ]
15
  },
16
+ {
17
+ "name": "stdout",
18
+ "output_type": "stream",
19
+ "text": [
20
+ "published!\n",
21
+ "published!\n",
22
+ "published!\n",
23
+ "published!\n",
24
+ "published!\n",
25
+ "published!\n",
26
+ "published!\n",
27
+ "published!\n",
28
+ "published!\n",
29
+ "published!\n",
30
+ "published!\n",
31
+ "published!\n",
32
+ "published!\n",
33
+ "published!\n",
34
+ "published!\n",
35
+ "published!\n",
36
+ "published!\n",
37
+ "published!\n",
38
+ "published!\n",
39
+ "published!\n",
40
+ "published!\n",
41
+ "published!\n",
42
+ "published!\n",
43
+ "published!\n",
44
+ "published!\n",
45
+ "published!\n",
46
+ "published!\n",
47
+ "published!\n",
48
+ "published!\n",
49
+ "published!\n",
50
+ "published!\n",
51
+ "published!\n",
52
+ "published!\n",
53
+ "published!\n",
54
+ "published!\n",
55
+ "published!\n",
56
+ "published!\n",
57
+ "published!\n",
58
+ "published!\n",
59
+ "published!\n",
60
+ "published!\n",
61
+ "published!\n",
62
+ "published!\n",
63
+ "published!\n",
64
+ "published!\n",
65
+ "published!\n",
66
+ "published!\n",
67
+ "published!\n",
68
+ "published!\n",
69
+ "published!\n",
70
+ "published!\n",
71
+ "published!\n",
72
+ "published!\n",
73
+ "published!\n",
74
+ "published!\n",
75
+ "published!\n",
76
+ "published!\n",
77
+ "published!\n",
78
+ "published!\n",
79
+ "published!\n",
80
+ "published!\n",
81
+ "published!\n",
82
+ "published!\n",
83
+ "published!\n",
84
+ "published!\n",
85
+ "published!\n",
86
+ "published!\n",
87
+ "published!\n",
88
+ "published!\n",
89
+ "published!\n",
90
+ "published!\n",
91
+ "published!\n",
92
+ "published!\n",
93
+ "published!\n",
94
+ "published!\n",
95
+ "published!\n",
96
+ "published!\n",
97
+ "published!\n",
98
+ "published!\n",
99
+ "published!\n",
100
+ "published!\n",
101
+ "published!\n",
102
+ "published!\n",
103
+ "published!\n",
104
+ "published!\n",
105
+ "published!\n",
106
+ "published!\n",
107
+ "published!\n",
108
+ "published!\n",
109
+ "published!\n",
110
+ "published!\n",
111
+ "published!\n",
112
+ "published!\n",
113
+ "published!\n",
114
+ "published!\n",
115
+ "published!\n",
116
+ "published!\n",
117
+ "published!\n",
118
+ "published!\n",
119
+ "published!\n",
120
+ "published!\n",
121
+ "published!\n",
122
+ "published!\n",
123
+ "published!\n",
124
+ "published!\n",
125
+ "published!\n",
126
+ "published!\n",
127
+ "published!\n",
128
+ "published!\n",
129
+ "published!\n",
130
+ "published!\n",
131
+ "published!\n",
132
+ "published!\n",
133
+ "published!\n",
134
+ "published!\n",
135
+ "published!\n",
136
+ "published!\n",
137
+ "published!\n",
138
+ "published!\n",
139
+ "published!\n",
140
+ "published!\n",
141
+ "published!\n",
142
+ "published!\n",
143
+ "published!\n",
144
+ "published!\n",
145
+ "published!\n",
146
+ "published!\n",
147
+ "published!\n",
148
+ "published!\n",
149
+ "published!\n",
150
+ "published!\n",
151
+ "published!\n",
152
+ "published!\n",
153
+ "published!\n",
154
+ "published!\n",
155
+ "published!\n",
156
+ "published!\n",
157
+ "published!\n",
158
+ "published!\n",
159
+ "published!\n",
160
+ "published!\n",
161
+ "published!\n",
162
+ "published!\n",
163
+ "published!\n",
164
+ "published!\n",
165
+ "published!\n",
166
+ "published!\n",
167
+ "published!\n",
168
+ "published!\n",
169
+ "published!\n",
170
+ "published!\n",
171
+ "published!\n",
172
+ "published!\n",
173
+ "published!\n",
174
+ "published!\n",
175
+ "published!\n",
176
+ "published!\n",
177
+ "published!\n",
178
+ "published!\n",
179
+ "published!\n",
180
+ "published!\n",
181
+ "published!\n",
182
+ "published!\n",
183
+ "published!\n",
184
+ "published!\n",
185
+ "published!\n",
186
+ "published!\n",
187
+ "published!\n",
188
+ "published!\n",
189
+ "published!\n",
190
+ "published!\n",
191
+ "published!\n",
192
+ "published!\n",
193
+ "published!\n",
194
+ "published!\n",
195
+ "published!\n",
196
+ "published!\n",
197
+ "published!\n",
198
+ "published!\n",
199
+ "published!\n",
200
+ "published!\n",
201
+ "published!\n",
202
+ "published!\n",
203
+ "published!\n",
204
+ "published!\n",
205
+ "published!\n",
206
+ "published!\n",
207
+ "published!\n",
208
+ "published!\n",
209
+ "published!\n",
210
+ "published!\n",
211
+ "published!\n",
212
+ "published!\n",
213
+ "published!\n",
214
+ "published!\n",
215
+ "published!\n",
216
+ "published!\n",
217
+ "published!\n",
218
+ "published!\n",
219
+ "published!\n",
220
+ "published!\n",
221
+ "published!\n",
222
+ "published!\n",
223
+ "published!\n",
224
+ "published!\n",
225
+ "published!\n",
226
+ "published!\n",
227
+ "published!\n",
228
+ "published!\n",
229
+ "published!\n",
230
+ "published!\n",
231
+ "published!\n",
232
+ "published!\n",
233
+ "published!\n",
234
+ "published!\n",
235
+ "published!\n",
236
+ "published!\n",
237
+ "published!\n",
238
+ "published!\n",
239
+ "published!\n",
240
+ "published!\n",
241
+ "published!\n",
242
+ "published!\n",
243
+ "published!\n",
244
+ "published!\n",
245
+ "published!\n",
246
+ "published!\n",
247
+ "published!\n",
248
+ "published!\n",
249
+ "published!\n",
250
+ "published!\n",
251
+ "published!\n",
252
+ "published!\n",
253
+ "published!\n",
254
+ "published!\n",
255
+ "published!\n",
256
+ "published!\n",
257
+ "published!\n",
258
+ "published!\n",
259
+ "published!\n",
260
+ "published!\n",
261
+ "published!\n",
262
+ "published!\n",
263
+ "published!\n",
264
+ "published!\n",
265
+ "published!\n",
266
+ "published!\n",
267
+ "published!\n",
268
+ "published!\n",
269
+ "published!\n",
270
+ "published!\n",
271
+ "published!\n",
272
+ "published!\n",
273
+ "published!\n",
274
+ "published!\n",
275
+ "published!\n",
276
+ "published!\n",
277
+ "published!\n",
278
+ "published!\n",
279
+ "published!\n",
280
+ "published!\n",
281
+ "published!\n",
282
+ "published!\n",
283
+ "published!\n",
284
+ "published!\n",
285
+ "published!\n",
286
+ "published!\n",
287
+ "published!\n",
288
+ "published!\n",
289
+ "published!\n",
290
+ "published!\n",
291
+ "published!\n",
292
+ "published!\n",
293
+ "published!\n",
294
+ "published!\n",
295
+ "published!\n",
296
+ "published!\n",
297
+ "published!\n",
298
+ "published!\n",
299
+ "published!\n",
300
+ "published!\n",
301
+ "published!\n",
302
+ "published!\n",
303
+ "published!\n",
304
+ "published!\n",
305
+ "published!\n",
306
+ "published!\n",
307
+ "published!\n",
308
+ "published!\n",
309
+ "published!\n",
310
+ "published!\n",
311
+ "published!\n",
312
+ "published!\n",
313
+ "published!\n",
314
+ "published!\n",
315
+ "published!\n",
316
+ "published!\n",
317
+ "published!\n",
318
+ "published!\n",
319
+ "published!\n",
320
+ "published!\n",
321
+ "published!\n",
322
+ "published!\n",
323
+ "published!\n",
324
+ "published!\n",
325
+ "published!\n",
326
+ "published!\n",
327
+ "published!\n",
328
+ "published!\n",
329
+ "published!\n",
330
+ "published!\n",
331
+ "published!\n",
332
+ "published!\n",
333
+ "published!\n",
334
+ "published!\n",
335
+ "published!\n",
336
+ "published!\n",
337
+ "published!\n",
338
+ "published!\n",
339
+ "published!\n",
340
+ "published!\n",
341
+ "published!\n",
342
+ "published!\n",
343
+ "published!\n",
344
+ "published!\n",
345
+ "published!\n",
346
+ "published!\n",
347
+ "published!\n",
348
+ "published!\n",
349
+ "published!\n",
350
+ "published!\n",
351
+ "published!\n",
352
+ "published!\n",
353
+ "published!\n",
354
+ "published!\n",
355
+ "published!\n",
356
+ "published!\n",
357
+ "published!\n",
358
+ "published!\n",
359
+ "published!\n",
360
+ "published!\n",
361
+ "published!\n",
362
+ "published!\n",
363
+ "published!\n",
364
+ "published!\n",
365
+ "published!\n",
366
+ "published!\n",
367
+ "published!\n",
368
+ "published!\n",
369
+ "published!\n",
370
+ "published!\n",
371
+ "published!\n",
372
+ "published!\n",
373
+ "published!\n",
374
+ "published!\n",
375
+ "published!\n"
376
+ ]
377
+ },
378
  {
379
  "ename": "KeyboardInterrupt",
380
  "evalue": "",
 
382
  "traceback": [
383
  "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
384
  "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
385
+ "Cell \u001b[1;32mIn[10], line 94\u001b[0m\n\u001b[0;32m 90\u001b[0m time\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;241m2\u001b[39m)\n\u001b[0;32m 93\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m---> 94\u001b[0m \u001b[43mpublish_sensor_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 95\u001b[0m \u001b[38;5;66;03m# time.sleep(0.1)\u001b[39;00m\n\u001b[0;32m 96\u001b[0m client\u001b[38;5;241m.\u001b[39mdisconnect()\n",
386
+ "Cell \u001b[1;32mIn[10], line 90\u001b[0m, in \u001b[0;36mpublish_sensor_data\u001b[1;34m()\u001b[0m\n\u001b[0;32m 55\u001b[0m client\u001b[38;5;241m.\u001b[39mpublish(topic, payload\u001b[38;5;241m=\u001b[39mjson\u001b[38;5;241m.\u001b[39mdumps({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhp_hws_temp\u001b[39m\u001b[38;5;124m'\u001b[39m:hp_hws_temp,\n\u001b[0;32m 56\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrtu_003_sa_temp\u001b[39m\u001b[38;5;124m'\u001b[39m:rtu_003_sa_temp,\n\u001b[0;32m 57\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrtu_003_oadmpr_pct\u001b[39m\u001b[38;5;124m'\u001b[39m: rtu_003_oadmpr_pct,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 87\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelative_humidity_set_1\u001b[39m\u001b[38;5;124m'\u001b[39m:relative_humidity_set_1,\n\u001b[0;32m 88\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msolar_radiation_set_1\u001b[39m\u001b[38;5;124m'\u001b[39m:solar_radiation_set_1}))\n\u001b[0;32m 89\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpublished!\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m---> 90\u001b[0m time\u001b[38;5;241m.\u001b[39msleep(\u001b[38;5;241m2\u001b[39m)\n",
387
  "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
388
  ]
389
  }
 
399
  "broker_address = \"localhost\"\n",
400
  "broker_port = 1883\n",
401
  "\n",
402
+ "df = pd.read_csv(\"sample_data_smooth_01.csv\")\n",
403
  "\n",
404
  "client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1, clientId)\n",
405
  "client.connect(broker_address, broker_port)\n",
406
  "topic = \"sensor_data\"\n",
407
  "\n",
408
+ "def publish_sensor_data(): \n",
 
 
409
  " for index, row in df.iterrows():\n",
410
+ " hp_hws_temp = row['hp_hws_temp']\n",
411
+ " rtu_003_sa_temp = row['rtu_003_sa_temp']\n",
412
+ " rtu_003_oadmpr_pct = row['rtu_003_oadmpr_pct']\n",
413
+ " rtu_003_ra_temp = row['rtu_003_ra_temp']\n",
414
+ " rtu_003_oa_temp = row['rtu_003_oa_temp']\n",
415
+ " rtu_003_ma_temp = row['rtu_003_ma_temp']\n",
416
+ " rtu_003_sf_vfd_spd_fbk_tn = row['rtu_003_sf_vfd_spd_fbk_tn']\n",
417
+ " rtu_003_rf_vfd_spd_fbk_tn =row['rtu_003_rf_vfd_spd_fbk_tn']\n",
418
+ " rtu_004_sa_temp = row['rtu_004_sa_temp']\n",
419
+ " rtu_004_oadmpr_pct = row['rtu_004_oadmpr_pct']\n",
420
+ " rtu_004_ra_temp = row['rtu_004_ra_temp']\n",
421
+ " rtu_004_oa_temp = row['rtu_004_oa_temp']\n",
422
+ " rtu_004_ma_temp = row['rtu_004_ma_temp']\n",
423
+ " rtu_004_sf_vfd_spd_fbk_tn = row['rtu_004_sf_vfd_spd_fbk_tn']\n",
424
+ " rtu_004_rf_vfd_spd_fbk_tn = row['rtu_004_rf_vfd_spd_fbk_tn']\n",
425
+ " rtu_001_sa_temp = row['rtu_001_sa_temp']\n",
426
+ " rtu_001_oadmpr_pct = row['rtu_001_oadmpr_pct']\n",
427
+ " rtu_001_ra_temp = row['rtu_001_ra_temp']\n",
428
+ " rtu_001_oa_temp = row['rtu_001_oa_temp']\n",
429
+ " rtu_001_ma_temp = row['rtu_001_ma_temp']\n",
430
+ " rtu_001_sf_vfd_spd_fbk_tn = row['rtu_001_sf_vfd_spd_fbk_tn']\n",
431
+ " rtu_001_rf_vfd_spd_fbk_tn =row['rtu_001_rf_vfd_spd_fbk_tn']\n",
432
+ " rtu_002_sa_temp = row['rtu_002_sa_temp']\n",
433
+ " rtu_002_oadmpr_pct = row['rtu_002_oadmpr_pct']\n",
434
+ " rtu_002_ra_temp = row['rtu_002_ra_temp']\n",
435
+ " rtu_002_oa_temp = row['rtu_002_oa_temp']\n",
436
+ " rtu_002_ma_temp = row['rtu_002_ma_temp']\n",
437
+ " rtu_002_sf_vfd_spd_fbk_tn = row['rtu_002_sf_vfd_spd_fbk_tn']\n",
438
+ " rtu_002_rf_vfd_spd_fbk_tn = row['rtu_002_rf_vfd_spd_fbk_tn']\n",
439
+ " rtu_004_sat_sp_tn = row['rtu_004_sat_sp_tn']\n",
440
+ " rtu_003_sat_sp_tn = row['rtu_003_sat_sp_tn']\n",
441
+ " rtu_001_sat_sp_tn = row['rtu_001_sat_sp_tn']\n",
442
+ " rtu_002_sat_sp_tn = row['rtu_002_sat_sp_tn']\n",
443
+ " air_temp_set_1 = row['air_temp_set_1']\n",
444
+ " air_temp_set_2 = row['air_temp_set_2']\n",
445
+ " dew_point_temperature_set_1d = row['dew_point_temperature_set_1d']\n",
446
+ " relative_humidity_set_1 = row['relative_humidity_set_1']\n",
447
+ " solar_radiation_set_1 = row['solar_radiation_set_1']\n",
448
+ " \n",
449
+ " \n",
450
+ " client.publish(topic, payload=json.dumps({'hp_hws_temp':hp_hws_temp,\n",
451
+ " 'rtu_003_sa_temp':rtu_003_sa_temp,\n",
452
+ " 'rtu_003_oadmpr_pct': rtu_003_oadmpr_pct,\n",
453
+ " 'rtu_003_ra_temp':rtu_003_ra_temp,\n",
454
+ " 'rtu_003_oa_temp': rtu_003_oa_temp,\n",
455
+ " 'rtu_003_ma_temp': rtu_003_ma_temp,\n",
456
+ " 'rtu_003_sf_vfd_spd_fbk_tn': rtu_003_sf_vfd_spd_fbk_tn,\n",
457
+ " 'rtu_003_rf_vfd_spd_fbk_tn':rtu_003_rf_vfd_spd_fbk_tn,\n",
458
+ " 'rtu_004_sa_temp':rtu_004_sa_temp,\n",
459
+ " 'rtu_004_oadmpr_pct':rtu_004_oadmpr_pct,\n",
460
+ " 'rtu_004_ra_temp':rtu_004_ra_temp,\n",
461
+ " 'rtu_004_oa_temp':rtu_004_oa_temp,\n",
462
+ " 'rtu_004_ma_temp':rtu_004_ma_temp,\n",
463
+ " 'rtu_004_sf_vfd_spd_fbk_tn':rtu_004_sf_vfd_spd_fbk_tn,\n",
464
+ " 'rtu_004_rf_vfd_spd_fbk_tn':rtu_004_rf_vfd_spd_fbk_tn,\n",
465
+ " 'rtu_001_sa_temp':rtu_001_sa_temp,\n",
466
+ " 'rtu_001_oadmpr_pct': rtu_001_oadmpr_pct,\n",
467
+ " 'rtu_001_ra_temp':rtu_001_ra_temp,\n",
468
+ " 'rtu_001_oa_temp': rtu_001_oa_temp,\n",
469
+ " 'rtu_001_ma_temp': rtu_001_ma_temp,\n",
470
+ " 'rtu_001_sf_vfd_spd_fbk_tn': rtu_001_sf_vfd_spd_fbk_tn,\n",
471
+ " 'rtu_001_rf_vfd_spd_fbk_tn':rtu_001_rf_vfd_spd_fbk_tn,\n",
472
+ " 'rtu_002_sa_temp':rtu_002_sa_temp,\n",
473
+ " 'rtu_002_oadmpr_pct':rtu_002_oadmpr_pct,\n",
474
+ " 'rtu_002_ra_temp':rtu_002_ra_temp,\n",
475
+ " 'rtu_002_oa_temp':rtu_002_oa_temp,\n",
476
+ " 'rtu_002_ma_temp':rtu_002_ma_temp,\n",
477
+ " 'rtu_002_sf_vfd_spd_fbk_tn':rtu_002_sf_vfd_spd_fbk_tn,\n",
478
+ " 'rtu_002_rf_vfd_spd_fbk_tn':rtu_002_rf_vfd_spd_fbk_tn,\n",
479
+ " 'rtu_004_sat_sp_tn':rtu_004_sat_sp_tn,\n",
480
+ " 'rtu_003_sat_sp_tn' :rtu_003_sat_sp_tn,\n",
481
+ " 'rtu_001_sat_sp_tn':rtu_001_sat_sp_tn,\n",
482
+ " 'rtu_002_sat_sp_tn':rtu_002_sat_sp_tn,\n",
483
+ " 'air_temp_set_1':air_temp_set_1,\n",
484
+ " 'air_temp_set_2':air_temp_set_2,\n",
485
+ " 'dew_point_temperature_set_1d':dew_point_temperature_set_1d,\n",
486
+ " 'relative_humidity_set_1':relative_humidity_set_1,\n",
487
+ " 'solar_radiation_set_1':solar_radiation_set_1}))\n",
488
+ " print(\"published!\")\n",
489
+ " time.sleep(2)\n",
490
  "\n",
491
  "\n",
492
  "while True:\n",
493
  " publish_sensor_data()\n",
494
+ " # time.sleep(0.1)\n",
495
  "client.disconnect()"
496
  ]
497
  },
pca_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:225896826ab8bfb9ea32f0f3057c1292ca5bc238d2ea87858c25fa8da5960b46
3
+ size 1179
pipeline.ipynb ADDED
File without changes
sample_data.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aa13789e2460e1b575a63d32ca46615d5df237c62de5da2f4da22c1e8edc945c
3
+ size 144290729
sample_data_01.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8a00542784412e885f2ef707e3dd86b58023e678b35221fefbce5af9ec6cb10d
3
+ size 59769388
sample_data_02.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3fe51d16cfeffdc7df991e0f27da089da5e9f1260e2ab9c316cd6786999d8d29
3
+ size 119517162
sample_data_smooth_01.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:efbfdef5e85cb88d20e7e50ac2351f60d20f07a31b2a40cf4c925596097c5cc4
3
+ size 299846687
scaler.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:63d98018c0b4da0c42820e9017c91944d1486e85471cd44a9a6ab121e7d2c64a
3
+ size 1101
scaler_1.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:778df19577ac7a34c16dfda1b32f26800c62ff687130e22e58715b8d495dcb37
3
+ size 1437
src/main.py ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ from rtu.RTUAnomalizer import RTUAnomalizer
3
+ from rtu.RTUPipeline import RTUPipeline
4
+ import paho.mqtt.client as mqtt
5
+
6
+
7
+
8
+ def main():
9
+ rtu_data_pipeline = RTUPipeline(scaler_path="rtu/models/scaler_1.pkl")
10
+ rtu_anomalizer = RTUAnomalizer(
11
+ prediction_model_path="rtu/models/lstm_4rtu_smooth_02.keras",
12
+ clustering_model_paths=[
13
+ "rtu/models/kmeans_model1.pkl",
14
+ "rtu/models/kmeans_model2.pkl",
15
+ "rtu/models/kmeans_model3.pkl",
16
+ "rtu/models/kmeans_model4.pkl",
17
+ ],
18
+ num_inputs=rtu_data_pipeline.num_inputs,
19
+ num_outputs=rtu_data_pipeline.num_outputs
20
+ )
21
+
22
+ def on_message(client, userdata, message):
23
+ print(json.loads(message.payload.decode()))
24
+ df_new, df_trans = rtu_data_pipeline.fit(message)
25
+ out = rtu_anomalizer.predict(df_new, df_trans, rtu_data_pipeline.scaler)
26
+ print(out)
27
+
28
+ broker_address = "localhost"
29
+ broker_port = 1883
30
+ topic = "sensor_data"
31
+ client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)
32
+ client.on_message = on_message
33
+ client.connect(broker_address, broker_port)
34
+ client.subscribe(topic)
35
+ client.loop_forever()
36
+
37
+
38
+ if __name__=='__main__':
39
+ #
40
+ main()
41
+
42
+
src/rtu/RTUAnomalizer.py CHANGED
@@ -1,14 +1,68 @@
 
1
  from tensorflow.keras.models import load_model
2
-
3
 
4
  class RTUAnomalizer:
5
  model = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
- def __init__(self):
8
- pass
 
 
 
 
 
 
9
 
10
- def load_model(self, model_path):
11
- self.model = load_model(model_path)
 
 
 
 
12
 
13
- def pipeline(self, data):
14
- return
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
  from tensorflow.keras.models import load_model
3
+ import joblib
4
 
5
  class RTUAnomalizer:
6
  model = None
7
+ kmeans_models = []
8
+
9
+ def __init__(self, prediction_model_path = None, clustering_model_paths= None, num_inputs = None, num_outputs = None):
10
+
11
+ self.num_inputs = num_inputs
12
+ self.num_outputs = num_outputs
13
+ if not prediction_model_path is None and not clustering_model_paths is None:
14
+ self.load_models(prediction_model_path, clustering_model_paths)
15
+
16
+ def initialize_lists(size=30):
17
+ initial_values = [0] * size
18
+ return initial_values.copy(), initial_values.copy(), initial_values.copy()
19
+
20
+ def load_models(self, prediction_model_path, clustering_model_paths):
21
+ self.model = load_model(prediction_model_path)
22
+
23
+ for path in clustering_model_paths:
24
+ self.kmeans_models.append(joblib.load(path))
25
+
26
+ def predict(self, df_new):
27
+ return self.model.predict(df_new)
28
+
29
+ def calculate_residuals(self,df_trans, pred):
30
+ actual = df_trans[30,:self.num_outputs+1]
31
+ resid = actual - pred
32
+ return actual, resid
33
+
34
+ def resize_prediction(self,pred, df_trans):
35
+ pred.resize((pred.shape[0], pred.shape[1] + len(df_trans[30,self.num_outputs+1:])))
36
+ pred[:, -len(df_trans[30,self.num_outputs+1:]):] = df_trans[30,self.num_outputs+1:]
37
+ return pred
38
+
39
+ def inverse_transform(scaler, pred, df_trans):
40
+ pred = scaler.inverse_transform(np.array(pred))
41
+ actual = scaler.inverse_transform(np.array([df_trans[30,:]]))
42
+ return actual, pred
43
 
44
+ def update_lists(actual_list, pred_list, resid_list, actual, pred, resid):
45
+ actual_list.pop(0)
46
+ pred_list.pop(0)
47
+ resid_list.pop(0)
48
+ actual_list.append(actual[0,1])
49
+ pred_list.append(pred[0,1])
50
+ resid_list.append(resid[0,1])
51
+ return actual_list, pred_list, resid_list
52
 
53
+ def calculate_distances(self,resid):
54
+ dist = []
55
+ for i, model in enumerate(self.kmeans_models):
56
+ dist.append(np.linalg.norm(resid[:,(i*7)+1:(i*7)+8]-model.cluster_centers_[0], ord=2, axis=1))
57
+
58
+ return np.array(dist)
59
 
60
+ def pipeline(self, df_new, df_trans, scaler):
61
+ actual_list, pred_list, resid_list = self.initialize_lists()
62
+ pred = self.predict(df_new)
63
+ actual, resid = self.calculate_residuals(df_trans, pred)
64
+ pred = self.resize_prediction(pred, df_trans)
65
+ actual, pred = self.inverse_transform(scaler, pred, df_trans)
66
+ actual_list, pred_list, resid_list = self.update_lists(actual_list, pred_list, resid_list, actual, pred, resid)
67
+ dist = self.calculate_distances(resid)
68
+ return actual_list, pred_list, resid_list, dist
src/rtu/RTUPipeline.py CHANGED
@@ -1,19 +1,140 @@
 
 
 
1
  from sklearn.preprocessing import StandardScaler
2
  from pickle import load
 
3
 
4
 
5
  class RTUPipeline:
6
  scaler = None
7
 
8
- def __init__(self):
9
- self.column_names = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
  def get_scaler(self, scaler_path):
12
- self.scaler = StandardScaler()
13
- self.scaler = load(open(scaler_path, "rb"))
 
 
 
 
 
 
14
 
15
- def get_data(self, data):
16
- pass
17
 
18
- def pipeline(self, data):
19
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import joblib
3
+ import pandas as pd
4
  from sklearn.preprocessing import StandardScaler
5
  from pickle import load
6
+ import numpy as np
7
 
8
 
9
  class RTUPipeline:
10
  scaler = None
11
 
12
+ def __init__(self, scaler_path=None):
13
+ self.output_col_names = [
14
+ "hp_hws_temp",
15
+ "rtu_003_sa_temp",
16
+ "rtu_003_oadmpr_pct",
17
+ "rtu_003_ra_temp",
18
+ "rtu_003_oa_temp",
19
+ "rtu_003_ma_temp",
20
+ "rtu_003_sf_vfd_spd_fbk_tn",
21
+ "rtu_003_rf_vfd_spd_fbk_tn",
22
+ "rtu_004_sa_temp",
23
+ "rtu_004_oadmpr_pct",
24
+ "rtu_004_ra_temp",
25
+ "rtu_004_oa_temp",
26
+ "rtu_004_ma_temp",
27
+ "rtu_004_sf_vfd_spd_fbk_tn",
28
+ "rtu_004_rf_vfd_spd_fbk_tn",
29
+ "rtu_001_sa_temp",
30
+ "rtu_001_oadmpr_pct",
31
+ "rtu_001_ra_temp",
32
+ "rtu_001_oa_temp",
33
+ "rtu_001_ma_temp",
34
+ "rtu_001_sf_vfd_spd_fbk_tn",
35
+ "rtu_001_rf_vfd_spd_fbk_tn",
36
+ "rtu_002_sa_temp",
37
+ "rtu_002_oadmpr_pct",
38
+ "rtu_002_ra_temp",
39
+ "rtu_002_oa_temp",
40
+ "rtu_002_ma_temp",
41
+ "rtu_002_sf_vfd_spd_fbk_tn",
42
+ "rtu_002_rf_vfd_spd_fbk_tn",
43
+ # "rtu_004_sat_sp_tn",
44
+ # "rtu_003_sat_sp_tn",
45
+ # "rtu_001_sat_sp_tn",
46
+ # "rtu_002_sat_sp_tn",
47
+ # "air_temp_set_1",
48
+ # "air_temp_set_2",
49
+ # "dew_point_temperature_set_1d",
50
+ # "relative_humidity_set_1",
51
+ # "solar_radiation_set_1",
52
+ ]
53
+
54
+ self.input_col_names = ["air_temp_set_1",
55
+ "air_temp_set_2",
56
+ "dew_point_temperature_set_1d",
57
+ "relative_humidity_set_1",
58
+ "solar_radiation_set_1",
59
+ ]
60
+ self.num_inputs = len(self.input_col_names)
61
+ self.num_outputs = len(self.output_col_names)
62
+ self.column_names = self.output_col_names+self.input_col_names
63
+
64
+ if scaler_path:
65
+ self.scaler = self.get_scaler(scaler_path)
66
+ self.df = pd.DataFrame(columns = self.column_names)
67
 
68
  def get_scaler(self, scaler_path):
69
+ return scaler_path
70
+
71
+ def get_window(self, df):
72
+ len_df = np.len(df)
73
+ if len_df > 30:
74
+ return df[len_df - 31 : len_df].astype("float32")
75
+ else:
76
+ return None
77
 
78
+ def transform_window(self, df_window):
79
+ return self.scaler.transform(df_window)
80
 
81
+ def prepare_input(self,df_trans):
82
+ return df_trans[:30, :].reshape((1, 30, len(self.column_names)))
83
+
84
+ def extract_data_from_message(self, message):
85
+ payload = json.loads(message.payload.decode())
86
+
87
+ len_df = len(self.df)
88
+ # self.df.loc[len_df] = {'hp_hws_temp':payload['hp_hws_temp'],
89
+ # 'rtu_003_sa_temp':payload['rtu_003_sa_temp'],
90
+ # 'rtu_003_oadmpr_pct': payload["rtu_003_oadmpr_pct"],
91
+ # 'rtu_003_ra_temp':payload["rtu_003_ra_temp"],
92
+ # 'rtu_003_oa_temp': payload["rtu_003_oa_temp"],
93
+ # 'rtu_003_ma_temp': payload["rtu_003_ma_temp"],
94
+ # 'rtu_003_sf_vfd_spd_fbk_tn': payload["rtu_003_sf_vfd_spd_fbk_tn"],
95
+ # 'rtu_003_rf_vfd_spd_fbk_tn':payload["rtu_003_rf_vfd_spd_fbk_tn"],
96
+ # 'rtu_004_sa_temp':payload["rtu_004_sa_temp"],
97
+ # 'rtu_004_oadmpr_pct':payload["rtu_004_oadmpr_pct"],
98
+ # 'rtu_004_ra_temp':payload["rtu_004_ra_temp"],
99
+ # 'rtu_004_oa_temp':payload["rtu_004_oa_temp"],
100
+ # 'rtu_004_ma_temp':payload["rtu_004_ma_temp"],
101
+ # 'rtu_004_sf_vfd_spd_fbk_tn':payload["rtu_004_sf_vfd_spd_fbk_tn"],
102
+ # 'rtu_004_rf_vfd_spd_fbk_tn':payload["rtu_004_rf_vfd_spd_fbk_tn"],
103
+ # 'rtu_001_sa_temp':payload["rtu_001_sa_temp"],
104
+ # 'rtu_001_oadmpr_pct': payload["rtu_001_oadmpr_pct"],
105
+ # 'rtu_001_ra_temp':payload["rtu_001_ra_temp"],
106
+ # 'rtu_001_oa_temp': payload["rtu_001_oa_temp"],
107
+ # 'rtu_001_ma_temp': payload["rtu_001_ma_temp"],
108
+ # 'rtu_001_sf_vfd_spd_fbk_tn': payload["rtu_001_sf_vfd_spd_fbk_tn"],
109
+ # 'rtu_001_rf_vfd_spd_fbk_tn':payload["rtu_001_rf_vfd_spd_fbk_tn"],
110
+ # 'rtu_002_sa_temp':payload["rtu_002_sa_temp"],
111
+ # 'rtu_002_oadmpr_pct':payload["rtu_002_oadmpr_pct"],
112
+ # 'rtu_002_ra_temp':payload["rtu_002_ra_temp"],
113
+ # 'rtu_002_oa_temp':payload["rtu_002_oa_temp"],
114
+ # 'rtu_002_ma_temp':payload["rtu_002_ma_temp"],
115
+ # 'rtu_002_sf_vfd_spd_fbk_tn':payload["rtu_002_sf_vfd_spd_fbk_tn"],
116
+ # 'rtu_002_rf_vfd_spd_fbk_tn':payload["rtu_002_rf_vfd_spd_fbk_tn"],
117
+ # 'rtu_004_sat_sp_tn':payload["rtu_004_sat_sp_tn"],
118
+ # 'rtu_003_sat_sp_tn' :payload["rtu_003_sat_sp_tn"],
119
+ # 'rtu_001_sat_sp_tn':payload["rtu_001_sat_sp_tn"],
120
+ # 'rtu_002_sat_sp_tn':payload["rtu_002_sat_sp_tn"],
121
+ # 'air_temp_set_1':payload["air_temp_set_1"],
122
+ # 'air_temp_set_2':payload["air_temp_set_2"],
123
+ # 'dew_point_temperature_set_1d':payload["dew_point_temperature_set_1d"],
124
+ # 'relative_humidity_set_1':payload["relative_humidity_set_1"],
125
+ # 'solar_radiation_set_1':payload["solar_radiation_set_1"]}
126
+
127
+ self.df.loc[len_df] = {}
128
+ for col in self.column_names:
129
+ self.df.loc[len_df][col] = payload[col]
130
+ return self.df
131
+
132
+
133
+ def fit(self,message):
134
+ len_df = np.len(df)
135
+ df = self.extract_data_from_message(message)
136
+ df_window = self.get_window(df, len_df)
137
+ if df_window is not None:
138
+ df_trans = self.transform_window(df_window, self.scaler)
139
+ df_new = self.prepare_input(df_trans)
140
+ return df_new,df_trans
src/rtu/models/kmeans_model1.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aaa404e937bf8fe9d52b38aa1e11f87d544530a2d4789b46d20b5a1665e15846
3
+ size 2064297
src/rtu/models/kmeans_model2.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9cf710504c910255e59d0609617fecf74ee8ad6710f4ba4109d9de5aae0cd879
3
+ size 2064297
src/rtu/models/kmeans_model3.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1fb375913725bf309d514f55b71799daead266db7caad09f02ab9cfdd56bdc0a
3
+ size 2064297
src/rtu/models/kmeans_model4.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cfbe4b1a5c1aa4b00e8e932c77dd8ed5ce99fbe5efd4960079d14e380206f9f2
3
+ size 2064297
src/rtu/models/scaler_1.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:778df19577ac7a34c16dfda1b32f26800c62ff687130e22e58715b8d495dcb37
3
+ size 1437
streamlit.py CHANGED
@@ -6,9 +6,21 @@ import plotly.express as px # interactive charts
6
  import paho.mqtt.client as mqtt
7
  import json
8
  import warnings
 
 
 
9
  warnings.filterwarnings('ignore')
10
 
11
- # df = pd.read_csv('buildingdata.csv')
 
 
 
 
 
 
 
 
 
12
  st.set_page_config(
13
  page_title = 'Real-Time Data Buliding 59',
14
  page_icon = '✅',
@@ -22,26 +34,209 @@ broker_address = "localhost"
22
  broker_port = 1883
23
  topic = "sensor_data"
24
 
25
- df = pd.DataFrame({"sa_temp":[60, 56, 66,69,70],"ma_temp":[30,40,50,60,65]})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  def on_message(client, userdata, message):
28
  global df
29
  payload = json.loads(message.payload.decode())
30
- sa_temp = payload["sa_temp"]
31
- ma_temp = payload["ma_temp"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  len_df = len(df)
33
- df.loc[len_df] = {"sa_temp": sa_temp, "ma_temp": ma_temp}
34
- if len_df>5:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  with placeholder.container():
36
- fig_col1, fig_col2 = st.columns(2)
 
 
 
 
 
 
 
 
 
37
  with fig_col1:
38
- st.markdown("### Supply Air temperature")
39
- fig1 = px.line(data_frame=df[len_df-5:len_df], y = 'sa_temp', x = df[len_df-5:len_df].index)
 
 
 
 
 
 
 
40
  st.write(fig1)
41
  with fig_col2:
42
- st.markdown("### Mixed Air temperature")
43
- fig2 = px.line(data_frame=df[len_df-5:len_df], y = 'ma_temp', x = df[len_df-5:len_df].index)
 
 
 
44
  st.write(fig2)
 
45
  st.markdown("### Detailed Data View")
46
  st.dataframe(df[len_df-5:len_df])
47
  # time.sleep(1)
 
6
  import paho.mqtt.client as mqtt
7
  import json
8
  import warnings
9
+ from tensorflow.keras.models import load_model
10
+ import joblib
11
+ import plotly.graph_objects as go
12
  warnings.filterwarnings('ignore')
13
 
14
+
15
+ model = load_model("lstm_4rtu_smooth_02.keras")
16
+ scaler = joblib.load('scaler_1.pkl')
17
+ # kmeans = joblib.load('kmeans_model.pkl')
18
+ kmeans1 = joblib.load('kmeans_model1.pkl')
19
+ kmeans2 = joblib.load('kmeans_model2.pkl')
20
+ kmeans3 = joblib.load('kmeans_model3.pkl')
21
+ kmeans4 = joblib.load('kmeans_model4.pkl')
22
+ pca = joblib.load('pca_model.pkl')
23
+
24
  st.set_page_config(
25
  page_title = 'Real-Time Data Buliding 59',
26
  page_icon = '✅',
 
34
  broker_port = 1883
35
  topic = "sensor_data"
36
 
37
+ df = pd.DataFrame(columns=['hp_hws_temp',
38
+ 'rtu_003_sa_temp',
39
+ 'rtu_003_oadmpr_pct',
40
+ 'rtu_003_ra_temp',
41
+ 'rtu_003_oa_temp',
42
+ 'rtu_003_ma_temp',
43
+ 'rtu_003_sf_vfd_spd_fbk_tn',
44
+ 'rtu_003_rf_vfd_spd_fbk_tn',
45
+ 'rtu_004_sa_temp',
46
+ 'rtu_004_oadmpr_pct',
47
+ 'rtu_004_ra_temp',
48
+ 'rtu_004_oa_temp',
49
+ 'rtu_004_ma_temp',
50
+ 'rtu_004_sf_vfd_spd_fbk_tn',
51
+ 'rtu_004_rf_vfd_spd_fbk_tn',
52
+ 'rtu_001_sa_temp',
53
+ 'rtu_001_oadmpr_pct',
54
+ 'rtu_001_ra_temp',
55
+ 'rtu_001_oa_temp',
56
+ 'rtu_001_ma_temp',
57
+ 'rtu_001_sf_vfd_spd_fbk_tn',
58
+ 'rtu_001_rf_vfd_spd_fbk_tn',
59
+ 'rtu_002_sa_temp',
60
+ 'rtu_002_oadmpr_pct',
61
+ 'rtu_002_ra_temp',
62
+ 'rtu_002_oa_temp',
63
+ 'rtu_002_ma_temp',
64
+ 'rtu_002_sf_vfd_spd_fbk_tn',
65
+ 'rtu_002_rf_vfd_spd_fbk_tn',
66
+ 'rtu_004_sat_sp_tn',
67
+ 'rtu_003_sat_sp_tn',
68
+ 'rtu_001_sat_sp_tn',
69
+ 'rtu_002_sat_sp_tn',
70
+ 'air_temp_set_1',
71
+ 'air_temp_set_2',
72
+ 'dew_point_temperature_set_1d',
73
+ 'relative_humidity_set_1',
74
+ 'solar_radiation_set_1'])
75
+ actual_list = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
76
+ pred_list = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
77
+ resid_list = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
78
+ distance = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
79
+ pca_x = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
80
+ pca_y = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
81
 
82
  def on_message(client, userdata, message):
83
  global df
84
  payload = json.loads(message.payload.decode())
85
+
86
+ hp_hws_temp = payload['hp_hws_temp']
87
+ rtu_003_sa_temp = payload['rtu_003_sa_temp']
88
+ rtu_003_oadmpr_pct = payload['rtu_003_oadmpr_pct']
89
+ rtu_003_ra_temp = payload['rtu_003_ra_temp']
90
+ rtu_003_oa_temp = payload['rtu_003_oa_temp']
91
+ rtu_003_ma_temp = payload['rtu_003_ma_temp']
92
+ rtu_003_sf_vfd_spd_fbk_tn = payload['rtu_003_sf_vfd_spd_fbk_tn']
93
+ rtu_003_rf_vfd_spd_fbk_tn =payload['rtu_003_rf_vfd_spd_fbk_tn']
94
+ rtu_004_sa_temp = payload['rtu_004_sa_temp']
95
+ rtu_004_oadmpr_pct = payload['rtu_004_oadmpr_pct']
96
+ rtu_004_ra_temp = payload['rtu_004_ra_temp']
97
+ rtu_004_oa_temp = payload['rtu_004_oa_temp']
98
+ rtu_004_ma_temp = payload['rtu_004_ma_temp']
99
+ rtu_004_sf_vfd_spd_fbk_tn = payload['rtu_004_sf_vfd_spd_fbk_tn']
100
+ rtu_004_rf_vfd_spd_fbk_tn = payload['rtu_004_rf_vfd_spd_fbk_tn']
101
+ rtu_001_sa_temp = payload['rtu_001_sa_temp']
102
+ rtu_001_oadmpr_pct = payload['rtu_001_oadmpr_pct']
103
+ rtu_001_ra_temp = payload['rtu_001_ra_temp']
104
+ rtu_001_oa_temp = payload['rtu_001_oa_temp']
105
+ rtu_001_ma_temp = payload['rtu_001_ma_temp']
106
+ rtu_001_sf_vfd_spd_fbk_tn = payload['rtu_001_sf_vfd_spd_fbk_tn']
107
+ rtu_001_rf_vfd_spd_fbk_tn =payload['rtu_001_rf_vfd_spd_fbk_tn']
108
+ rtu_002_sa_temp = payload['rtu_002_sa_temp']
109
+ rtu_002_oadmpr_pct = payload['rtu_002_oadmpr_pct']
110
+ rtu_002_ra_temp = payload['rtu_002_ra_temp']
111
+ rtu_002_oa_temp = payload['rtu_002_oa_temp']
112
+ rtu_002_ma_temp = payload['rtu_002_ma_temp']
113
+ rtu_002_sf_vfd_spd_fbk_tn = payload['rtu_002_sf_vfd_spd_fbk_tn']
114
+ rtu_002_rf_vfd_spd_fbk_tn = payload['rtu_002_rf_vfd_spd_fbk_tn']
115
+ rtu_004_sat_sp_tn = payload['rtu_004_sat_sp_tn']
116
+ rtu_003_sat_sp_tn = payload['rtu_003_sat_sp_tn']
117
+ rtu_001_sat_sp_tn = payload['rtu_001_sat_sp_tn']
118
+ rtu_002_sat_sp_tn = payload['rtu_002_sat_sp_tn']
119
+ air_temp_set_1 = payload['air_temp_set_1']
120
+ air_temp_set_2 = payload['air_temp_set_2']
121
+ dew_point_temperature_set_1d = payload['dew_point_temperature_set_1d']
122
+ relative_humidity_set_1 = payload['relative_humidity_set_1']
123
+ solar_radiation_set_1 = payload['solar_radiation_set_1']
124
+
125
  len_df = len(df)
126
+ df.loc[len_df] = {'hp_hws_temp':hp_hws_temp,
127
+ 'rtu_003_sa_temp':rtu_003_sa_temp,
128
+ 'rtu_003_oadmpr_pct': rtu_003_oadmpr_pct,
129
+ 'rtu_003_ra_temp':rtu_003_ra_temp,
130
+ 'rtu_003_oa_temp': rtu_003_oa_temp,
131
+ 'rtu_003_ma_temp': rtu_003_ma_temp,
132
+ 'rtu_003_sf_vfd_spd_fbk_tn': rtu_003_sf_vfd_spd_fbk_tn,
133
+ 'rtu_003_rf_vfd_spd_fbk_tn':rtu_003_rf_vfd_spd_fbk_tn,
134
+ 'rtu_004_sa_temp':rtu_004_sa_temp,
135
+ 'rtu_004_oadmpr_pct':rtu_004_oadmpr_pct,
136
+ 'rtu_004_ra_temp':rtu_004_ra_temp,
137
+ 'rtu_004_oa_temp':rtu_004_oa_temp,
138
+ 'rtu_004_ma_temp':rtu_004_ma_temp,
139
+ 'rtu_004_sf_vfd_spd_fbk_tn':rtu_004_sf_vfd_spd_fbk_tn,
140
+ 'rtu_004_rf_vfd_spd_fbk_tn':rtu_004_rf_vfd_spd_fbk_tn,
141
+ 'rtu_001_sa_temp':rtu_001_sa_temp,
142
+ 'rtu_001_oadmpr_pct': rtu_001_oadmpr_pct,
143
+ 'rtu_001_ra_temp':rtu_001_ra_temp,
144
+ 'rtu_001_oa_temp': rtu_001_oa_temp,
145
+ 'rtu_001_ma_temp': rtu_001_ma_temp,
146
+ 'rtu_001_sf_vfd_spd_fbk_tn': rtu_001_sf_vfd_spd_fbk_tn,
147
+ 'rtu_001_rf_vfd_spd_fbk_tn':rtu_001_rf_vfd_spd_fbk_tn,
148
+ 'rtu_002_sa_temp':rtu_002_sa_temp,
149
+ 'rtu_002_oadmpr_pct':rtu_002_oadmpr_pct,
150
+ 'rtu_002_ra_temp':rtu_002_ra_temp,
151
+ 'rtu_002_oa_temp':rtu_002_oa_temp,
152
+ 'rtu_002_ma_temp':rtu_002_ma_temp,
153
+ 'rtu_002_sf_vfd_spd_fbk_tn':rtu_002_sf_vfd_spd_fbk_tn,
154
+ 'rtu_002_rf_vfd_spd_fbk_tn':rtu_002_rf_vfd_spd_fbk_tn,
155
+ 'rtu_004_sat_sp_tn':rtu_004_sat_sp_tn,
156
+ 'rtu_003_sat_sp_tn' :rtu_003_sat_sp_tn,
157
+ 'rtu_001_sat_sp_tn':rtu_001_sat_sp_tn,
158
+ 'rtu_002_sat_sp_tn':rtu_002_sat_sp_tn,
159
+ 'air_temp_set_1':air_temp_set_1,
160
+ 'air_temp_set_2':air_temp_set_2,
161
+ 'dew_point_temperature_set_1d':dew_point_temperature_set_1d,
162
+ 'relative_humidity_set_1':relative_humidity_set_1,
163
+ 'solar_radiation_set_1':solar_radiation_set_1}
164
+
165
+ if len_df>30:
166
+ df_window = df[len_df-31:len_df]
167
+ df_window = df_window.astype('float32')
168
+ df_trans = scaler.transform(df_window)
169
+ df_new = df_trans[:30,:].reshape((1,30,34))#
170
+ pred = model.predict(df_new)
171
+ pred_copy = pred.copy()
172
+ actual = df_trans[30,:29]#
173
+ resid = actual - pred
174
+ #---------
175
+ pred.resize((pred.shape[0], pred.shape[1] + len(df_trans[30,29:])))#
176
+ pred[:, -len(df_trans[30,29:]):] = df_trans[30,29:]#
177
+ pred = scaler.inverse_transform(np.array(pred))
178
+ actual = scaler.inverse_transform(np.array([df_trans[30,:]]))
179
+ #---------
180
+ actual_list.pop(0)
181
+ pred_list.pop(0)
182
+ resid_list.pop(0)
183
+ # distance.pop(0)
184
+ # pca_x.pop(0)
185
+ # pca_y.pop(0)
186
+ actual_list.append(actual[0,1])
187
+ pred_list.append(pred[0,1])
188
+ resid_list.append(resid[0,1])
189
+ # distance.append(np.linalg.norm(pred_copy-kmeans.cluster_centers_[0], ord=2, axis = 1))
190
+ # dist_color = [1 if num >= 5 else 0 for num in distance]
191
+ dist = []
192
+ dist.append(np.linalg.norm(resid[:,1:8]-kmeans1.cluster_centers_[0], ord=2, axis = 1))
193
+ dist.append(np.linalg.norm(resid[:,8:15]-kmeans2.cluster_centers_[0], ord=2, axis = 1))
194
+ dist.append(np.linalg.norm(resid[:,15:22]-kmeans3.cluster_centers_[0], ord=2, axis = 1))
195
+ dist.append(np.linalg.norm(resid[:,22:29]-kmeans4.cluster_centers_[0], ord=2, axis = 1))
196
+ dist = np.array(dist)
197
+ # dist_color = [1 if num >= 2 else 0 for num in dist]
198
+
199
+ # pca_cord = pca.transform(resid)
200
+ # pca_x.append(pca_cord[0,0])
201
+ # pca_y.append(pca_cord[0,1])
202
+ # clust_center = pca.transform(kmeans.cluster_centers_)
203
+ # theta = np.linspace(0, 2*np.pi, 100)
204
+ # radius = 2
205
+ # x_circle = clust_center[0, 0] + radius * np.cos(theta)
206
+ # y_circle = clust_center[0, 1] + radius * np.sin(theta)
207
+
208
+ ind = np.linspace(1, 30, 30)
209
+
210
  with placeholder.container():
211
+ col1, fig_col1, fig_col2 = st.columns(3)
212
+ with col1:
213
+ st.header("RTU Status")
214
+ for i in range(4):
215
+ rtu = ['RTU 1', 'RTU 2', 'RTU 3', 'RTU 4']
216
+ tol = [2,2,2,0.1]#[4.5,4,5,5]
217
+ status_icon = "🔧" if dist[i,0] > tol[i] else "🔄"
218
+ status = "Damper or Fan issue" if dist[i,0] > tol[i] else "Normal"
219
+ status_markdown = f"**{rtu[i]} {status_icon}**\n\nSA Temp: {int(actual[0,1])}°C\nRA Temp: {int(actual[0,3])}°C\n\nStatus: {status}"
220
+ st.markdown(status_markdown, unsafe_allow_html=True)
221
  with fig_col1:
222
+ # st.markdown("### Fault")
223
+ st.header("Fault")
224
+ fig1 = go.Figure()
225
+ # fig1.add_trace(go.Scatter(x=ind, y=resid_list, mode='lines', name='Actual',line=dict(color='blue')))
226
+ # fig1 = px.scatter(x=pca_x, y=pca_y,color=dist_color,color_discrete_map={'1': 'red', '0': 'green'})
227
+ # fig1.add_trace(go.Scatter(x=x_circle, y=y_circle, mode='lines',line=dict(color='green')))
228
+ colors = ['red' if value > 0.1 else 'blue' for value in dist[:, 0]]
229
+ fig1 = fig1.add_trace(go.Bar(x=['RTU 1', 'RTU 2', 'RTU 3', 'RTU 4'],y=dist[:, 0],marker_color=colors,width=0.4))
230
+ fig1.update_layout(width=500,height=400 )
231
  st.write(fig1)
232
  with fig_col2:
233
+ st.header("Mixed Air temperature")
234
+ fig2 = go.Figure()
235
+ fig2.add_trace(go.Scatter(x=ind, y=actual_list, mode='lines', name='Actual',line=dict(color='blue')))
236
+ fig2.add_trace(go.Scatter(x=ind, y=pred_list, mode='lines', name='Predicted',line=dict(color='red', dash='dot')))
237
+ fig2.update_layout(yaxis_range=[50, 80],width=500,height=400 )
238
  st.write(fig2)
239
+
240
  st.markdown("### Detailed Data View")
241
  st.dataframe(df[len_df-5:len_df])
242
  # time.sleep(1)