diff --git a/csharp/App/Backend/Controller.cs b/csharp/App/Backend/Controller.cs
index abe4126b4..77a727c3c 100644
--- a/csharp/App/Backend/Controller.cs
+++ b/csharp/App/Backend/Controller.cs
@@ -179,16 +179,22 @@ public class Controller : ControllerBase
return str1.Substring(0, i);
}
- string commonPrefix = FindCommonPrefix(start.ToString(), end.ToString());
-
Int64 startTimestamp = Int64.Parse(start.ToString().Substring(0,5));
Int64 endTimestamp = Int64.Parse(end.ToString().Substring(0,5));
+
+ if (installation.Product == 1)
+ {
+
+ start = Int32.Parse(start.ToString().Substring(0, start.ToString().Length - 2));
+ end = Int32.Parse(end.ToString().Substring(0, end.ToString().Length - 2));
+ }
string configPath = "/home/ubuntu/.s3cfg";
while (startTimestamp <= endTimestamp)
{
- string bucketPath = "s3://"+installation.S3BucketId + "-3e5b3069-214a-43ee-8d85-57d72000c19d/"+startTimestamp;
+ string bucketPath = installation.Product==0? "s3://"+installation.S3BucketId + "-3e5b3069-214a-43ee-8d85-57d72000c19d/"+startTimestamp :
+ "s3://"+installation.S3BucketId + "-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e/"+startTimestamp;
Console.WriteLine("Fetching data for "+startTimestamp);
try
@@ -234,6 +240,7 @@ public class Controller : ControllerBase
foreach (var line in output.Split('\n'))
{
var match = regex.Match(line);
+
if (match.Success && long.Parse(match.Groups[1].Value) >= start && long.Parse(match.Groups[1].Value) <= end)
{
allTimestamps.Add(long.Parse(match.Groups[1].Value));
diff --git a/csharp/App/Backend/Websockets/RabbitMQManager.cs b/csharp/App/Backend/Websockets/RabbitMQManager.cs
index 274cc0b64..4ac5d32a6 100644
--- a/csharp/App/Backend/Websockets/RabbitMQManager.cs
+++ b/csharp/App/Backend/Websockets/RabbitMQManager.cs
@@ -58,15 +58,24 @@ public static class RabbitMqManager
if (receivedStatusMessage != null)
{
Installation installation = Db.Installations.FirstOrDefault(f => f.Product == receivedStatusMessage.Product && f.S3BucketId == receivedStatusMessage.InstallationId);
- int installationId = (int )installation.Id;
- //Console.WriteLine("Received a message from installation: " + installationId + " , product is: "+receivedStatusMessage.Product+ " and status is: " + receivedStatusMessage.Status);
+ int installationId = (int)installation.Id;
+
+ //if (installationId == 138)
+ //{
+ // Console.WriteLine("Received a message from installation: " + installationId + " , product is: " + receivedStatusMessage.Product + " and status is: " + receivedStatusMessage.Status);
+ //}
+
+
//This is a heartbit message, just update the timestamp for this installation.
//There is no need to notify the corresponding front-ends.
//Every 15 iterations(30 seconds), the installation sends a heartbit message to the queue
if (receivedStatusMessage.Type == MessageType.Heartbit)
{
- //Console.WriteLine("This is a heartbit message from installation: " + installationId + " Name of the file is "+ receivedStatusMessage.Timestamp);
+ if (installation.Product == 1 && installation.Device == 2)
+ {
+ Console.WriteLine("This is a heartbit message from installation: " + installationId + " Name of the file is " + receivedStatusMessage.Timestamp);
+ }
}
else
{
diff --git a/csharp/App/Backend/Websockets/WebsockerManager.cs b/csharp/App/Backend/Websockets/WebsockerManager.cs
index da63c6463..40be153e9 100644
--- a/csharp/App/Backend/Websockets/WebsockerManager.cs
+++ b/csharp/App/Backend/Websockets/WebsockerManager.cs
@@ -34,13 +34,18 @@ public static class WebsocketManager
while (true){
lock (InstallationConnections){
foreach (var installationConnection in InstallationConnections){
- if (installationConnection.Value.Product==1 && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(20)){
+ if (installationConnection.Value.Product==1 && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(20))
+ {
+ Console.WriteLine("Installation ID is "+installationConnection.Key);
+ Console.WriteLine("installationConnection.Value.Timestamp is "+installationConnection.Value.Timestamp);
+ Console.WriteLine("diff is "+(DateTime.Now-installationConnection.Value.Timestamp));
+
installationConnection.Value.Status = -1;
if (installationConnection.Value.Connections.Count > 0){InformWebsocketsForInstallation(installationConnection.Key);}
}
}
}
- await Task.Delay(TimeSpan.FromMinutes(30));
+ await Task.Delay(TimeSpan.FromMinutes(1));
}
}
diff --git a/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/config.py b/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/config.py
index 5bccd15c6..a4c57792b 100644
--- a/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/config.py
+++ b/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/config.py
@@ -13,9 +13,9 @@ DEVICE_INSTANCE = 1
SERVICE_NAME_PREFIX = 'com.victronenergy.battery.'
#s3 configuration
-S3BUCKET = "2-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e"
-S3KEY = "EXO5b2e35442791260eaaa7bdc8"
-S3SECRET = "XFFOVzenDiEQoLPmhK6ML9RfQfsAMhrAs25MfJxi-24"
+S3BUCKET = "17-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e"
+S3KEY = "EXO067a6ceb91816b42312226a9"
+S3SECRET = "79tQlqQuS6yhexP0IT-6-bIdIP2FGGTQLn2e2oE4FC8"
# driver configuration
diff --git a/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py b/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py
index 08cec7727..c25398a70 100755
--- a/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py
+++ b/firmware/Cerbo_Release/CerboReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py
@@ -903,7 +903,7 @@ def count_files_in_folder(folder_path):
def create_batch_of_csv_files():
- global prev_status
+ global prev_status,INSTALLATION_ID, PRODUCT_ID
# list all files in the directory
files = os.listdir(CSV_DIR)
@@ -973,7 +973,7 @@ def create_batch_of_csv_files():
# Use the name of the last (most recent) CSV file in sorted csv_files as the name for the compressed file
last_csv_file_name = os.path.basename(recent_csv_files[-1]) if recent_csv_files else first_csv_filename
- numeric_part = int(last_csv_file_name.split('.')[0])
+ numeric_part = int(last_csv_file_name.split('.')[0][:-2])
compressed_filename = "{}.csv".format(numeric_part)
response = s3_config.create_put_request(compressed_filename, compressed_csv)
@@ -987,10 +987,13 @@ def create_batch_of_csv_files():
"Type": 1,
"Warnings": [],
"Alarms": [],
- "Timestamp": numeric_part
}
status_message = json.dumps(status_message)
- channel.basic_publish(exchange="", routing_key="statusQueue", body=status_message)
+ try:
+ channel.basic_publish(exchange="", routing_key="statusQueue", body=status_message)
+ except:
+ channel = SubscribeToQueue()
+ channel.basic_publish(exchange="", routing_key="statusQueue", body=status_message)
print("Successfully sent the heartbit with timestamp")
else:
# we save data that were not successfully uploaded in s3 in a failed directory inside the CSV_DIR for logging
diff --git a/firmware/Cerbo_Release/update_all_cerbo_installations.sh b/firmware/Cerbo_Release/update_all_cerbo_installations.sh
index 5b37c07e2..386b8aa39 100755
--- a/firmware/Cerbo_Release/update_all_cerbo_installations.sh
+++ b/firmware/Cerbo_Release/update_all_cerbo_installations.sh
@@ -10,11 +10,87 @@ cerbo_release_file_path="./CerboReleaseFiles"
echo -e "\n============================ Deploy ============================\n"
# Polycom 10.2.4.96 are Cerbo with fork usb0
-ip_addresses=("10.2.1.193" "10.2.2.61" "10.2.3.225" "10.2.2.248" "10.2.2.194" "10.2.1.241" "10.2.2.87" "10.2.1.252" "10.2.1.215" "10.2.1.234" \
-"10.2.2.117" "10.2.3.117" "10.2.4.129" "10.2.3.10" "10.2.2.238" "10.2.2.44" "10.2.2.196" "10.2.2.24" "10.2.4.181" "10.2.3.67" \
-"10.2.2.127" "10.2.3.18" "10.2.2.118" "10.2.3.46" "10.2.3.61" "10.2.2.133" "10.2.4.42" "10.2.2.217" "10.2.3.143" "10.2.2.181" "10.2.1.204" "10.2.2.171" \
-"10.2.2.176" "10.2.2.218" "10.2.2.36" "10.2.4.92" "10.2.4.25" "10.2.3.135" "10.2.3.165" "10.2.3.51" "10.2.3.244" "10.2.0.179" "10.2.2.10" \
-"10.2.4.155" "10.2.4.127" "10.2.5.5" "10.2.4.206")
+
+#ip_addresses=("10.2.0.179" \
+# "10.2.1.241" \
+# "10.2.2.118" \
+# "10.2.4.155" \
+# "10.2.3.244" \
+# "10.2.4.127" \
+# "10.2.2.36" \
+# "10.2.4.96" \
+# "10.2.1.193" \
+# "10.2.2.61" \
+# "10.2.3.225" \
+# "10.2.2.248" \
+# "10.2.2.194" \
+# "10.2.3.117" \
+# "10.2.2.24" \
+# "10.2.2.87" \
+# "10.2.1.252" \
+# "10.2.1.215" \
+# "10.2.1.234" \
+# "10.2.2.117" \
+# "10.2.4.129" \
+# "10.2.3.10" \
+# "10.2.2.238" \
+# "10.2.2.44" \
+# "10.2.2.196" \
+# "10.2.4.181" \
+# "10.2.3.67" \
+# "10.2.2.127" \
+# "10.2.3.18" \
+# "10.2.3.46" \
+# "10.2.3.61" \
+# "10.2.2.133" \
+# "10.2.4.42" \
+# "10.2.2.217" \
+# "10.2.3.143" \
+# "10.2.2.181" \
+# "10.2.1.204" \
+# "10.2.2.171" \
+# "10.2.2.176" \
+# "10.2.2.218" \
+# "10.2.4.92" \
+# "10.2.4.25" \
+# "10.2.3.135" \
+# "10.2.3.165" \
+# "10.2.2.10" \
+# "10.2.3.51" \
+# "10.2.5.5" \
+# "10.2.4.206")
+
+ip_addresses=(
+
+
+ "10.2.4.129" \
+ "10.2.3.10" \
+ "10.2.2.238" \
+ "10.2.2.44" \
+ "10.2.2.196" \
+ "10.2.4.181" \
+ "10.2.3.67" \
+ "10.2.2.127" \
+ "10.2.3.18" \
+ "10.2.3.46" \
+ "10.2.3.61" \
+ "10.2.2.133" \
+ "10.2.4.42" \
+ "10.2.2.217" \
+ "10.2.3.143" \
+ "10.2.2.181" \
+ "10.2.1.204" \
+ "10.2.2.171" \
+ "10.2.2.176" \
+ "10.2.2.218" \
+ "10.2.4.92" \
+ "10.2.4.25" \
+ "10.2.3.135" \
+ "10.2.3.165" \
+ "10.2.2.10" \
+ "10.2.3.51" \
+ "10.2.5.5" \
+ "10.2.4.206")
## scp template
# scp "${battery_file_path}/start.sh" "root@"$ip_address":/data/dbus-fzsonick-48tl/"
@@ -23,12 +99,14 @@ ip_addresses=("10.2.1.193" "10.2.2.61" "10.2.3.225" "10.2.2.248" "10.2.2.194" "1
for ip_address in "${ip_addresses[@]}"; do
## stop battery service if change any file related to battery service otherwise no need to do this
- # ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -d /service/dbus-fzsonick-48tl.*"
+ ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -d /service/dbus-fzsonick-48tl.*"
scp "${cerbo_release_file_path}/flows.json" "root@"$ip_address":/data/home/nodered/.node-red/"
+ scp "${cerbo_release_file_path}/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py" "root@"$ip_address":/opt/victronenergy/dbus-fzsonick-48tl"
+ scp "${cerbo_release_file_path}/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py" "root@"$ip_address":/data/dbus-fzsonick-48tl"
ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "dbus -y com.victronenergy.platform /Services/NodeRed/Mode SetValue %0"
ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "dbus -y com.victronenergy.platform /Services/NodeRed/Mode SetValue %1"
## start battery service
- # ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -u /service/dbus-fzsonick-48tl.*"
+ ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -u /service/dbus-fzsonick-48tl.*"
echo "Deployed and ran commands on $ip_address"
done
diff --git a/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/config.py b/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/config.py
index 8f593e498..94b0ae62f 100755
--- a/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/config.py
+++ b/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/config.py
@@ -54,6 +54,6 @@ INNOVENERGY_PROTOCOL_VERSION = '48TL200V3'
# S3 Credentials
-S3BUCKET = "91-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e"
-S3KEY = "EXOe6dce12288f11a676c2025a1"
-S3SECRET = "xpqM4Eh0Gg1HaYVkzlR9X6PwYa-QNb-mVk0XUkwW3cc"
+S3BUCKET = "139-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e"
+S3KEY = "EXO62cdcf9a4da8ab9a260fe676"
+S3SECRET = "JoH3mWeQq5FRQZUFnCkcBijT3KuJ4u1P53PO0bI6OOw"
diff --git a/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py b/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py
index 223e5c046..cd95213ea 100755
--- a/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py
+++ b/firmware/Venus_Release/VenusReleaseFiles/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py
@@ -16,6 +16,7 @@ from pymodbus.other_message import ReportSlaveIdRequest
from pymodbus.pdu import ExceptionResponse
from pymodbus.register_read_message import ReadInputRegistersResponse
from data import BatteryStatus, BatterySignal, Battery, ServiceSignal
+from data import BatteryStatus, BatterySignal, Battery, ServiceSignal
from python_libs.ie_dbus.dbus_service import DBusService
import time
@@ -579,7 +580,7 @@ def insert_id(path, id_number):
return "/".join(parts)
def create_batch_of_csv_files():
- global prev_status
+ global prev_status,channel,INSTALLATION_ID, PRODUCT_ID
# list all files in the directory
files = os.listdir(CSV_DIR)
@@ -649,7 +650,7 @@ def create_batch_of_csv_files():
last_csv_file_name = os.path.basename(recent_csv_files[-1]) if recent_csv_files else first_csv_filename
# we send the csv files every 30 seconds and the timestamp is adjusted to be a multiple of 30
- numeric_part = int(last_csv_file_name.split('.')[0][:-2])
+ numeric_part = int(last_csv_file_name.split('.')[0][:-2])
# compressed_filename = "{}.csv".format(new_numeric_part)
compressed_filename = "{}.csv".format(numeric_part)
@@ -658,6 +659,8 @@ def create_batch_of_csv_files():
response = s3_config.create_put_request(compressed_filename, compressed_csv)
# response = s3_config.create_put_request(first_csv_filename, csv_data)
+
+ print(response)
if response.status_code == 200:
os.remove(first_csv_file)
print("Successfully uploaded the compresseed batch of files in s3")
@@ -668,10 +671,20 @@ def create_batch_of_csv_files():
"Type": 1,
"Warnings": [],
"Alarms": [],
- "Timestamp": numeric_part
}
+
+ print(status_message)
+
status_message = json.dumps(status_message)
- channel.basic_publish(exchange="", routing_key="statusQueue", body=status_message)
+ print("AFTERRRRRRRRRRRRRRRRRRRRRR DUMPSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS\n")
+
+ try:
+ channel.basic_publish(exchange="", routing_key="statusQueue", body=status_message)
+ except:
+ channel = SubscribeToQueue()
+ channel.basic_publish(exchange="", routing_key="statusQueue", body=status_message)
+
+
print("Successfully sent the heartbit with timestamp")
else:
# we save data that were not successfully uploaded in s3 in a failed directory inside the CSV_DIR for logging
@@ -739,12 +752,12 @@ def load_battery_counts():
return [int(row[0]) for row in reader]
return []
+
def save_battery_counts(battery_counts):
- with open(BATTERY_COUNTS_FILE, 'w', newline='') as f:
+ with open(BATTERY_COUNTS_FILE, 'wb') as f: # Use 'wb' mode for Python 2
writer = csv.writer(f)
for count in battery_counts:
writer.writerow([count])
-
def main(argv):
# type: (List[str]) -> ()
print("INSIDE DBUS SONICK")
diff --git a/firmware/Venus_Release/update_all_venus_installations.sh b/firmware/Venus_Release/update_all_venus_installations.sh
index 3df59a72b..3f99f97db 100755
--- a/firmware/Venus_Release/update_all_venus_installations.sh
+++ b/firmware/Venus_Release/update_all_venus_installations.sh
@@ -14,12 +14,82 @@ echo -e "\n============================ Deploy ============================\n"
# Buecheler 10.2.0.224 failed with ssh
# Steiger, Rheinau 10.2.0.188 failed with ssh
-ip_addresses=("10.2.0.104" "10.2.1.134" "10.2.0.130" "10.2.1.169" "10.2.1.159" "10.2.0.227" "10.2.0.211" "10.2.0.105" "10.2.0.225" "10.2.1.53" "10.2.0.107" \
-"10.2.0.108" "10.2.1.160" "10.2.0.98" "10.2.0.94" "10.2.1.110" "10.2.0.220" "10.2.0.153" "10.2.1.106" "10.2.0.184" "10.2.1.60" "10.2.0.217" "10.2.1.81" "10.2.1.125" \
-"10.2.0.154" "10.2.0.196" "10.2.1.84" "10.2.0.99" "10.2.0.109" "10.2.1.35" "10.2.0.110" "10.2.1.2" "10.2.1.163" "10.2.1.120" "10.2.1.173" "10.2.0.113" "10.2.0.233" \
-"10.2.1.124" "10.2.0.193" "10.2.1.142" "10.2.1.141" "10.2.1.74" "10.2.0.141" "10.2.0.144" "10.2.0.138" "10.2.1.118" "10.2.0.133" "10.2.0.249" "10.2.1.33" "10.2.1.38" \
-"10.2.0.185" "10.2.1.130" "10.2.0.194" "10.2.1.39" "10.2.1.83" "10.2.0.214" "10.2.1.219" "10.2.0.191" "10.2.0.216" "10.2.1.113" "10.2.0.103" "10.2.1.32" "10.2.1.100" \
-"10.2.1.138" "10.2.1.165" "10.2.1.162" "10.2.0.150" "10.2.1.158" "10.2.0.195" "10.2.1.171" "10.2.1.117" "10.2.0.145" "10.2.1.177" "10.2.1.247" "10.2.0.101")
+
+#ip_addresses=("10.2.0.249")
+
+ip_addresses=(
+"10.2.1.84"
+"10.2.1.83"
+"10.2.1.74"
+"10.2.1.60"
+"10.2.1.53"
+"10.2.1.39"
+"10.2.1.38"
+"10.2.1.35"
+"10.2.1.33"
+"10.2.1.32"
+"10.2.1.247"
+"10.2.1.219"
+"10.2.1.2"
+"10.2.1.177"
+"10.2.1.173"
+"10.2.1.171"
+"10.2.1.169"
+"10.2.1.165"
+"10.2.1.163"
+"10.2.1.162"
+"10.2.1.160"
+"10.2.1.159"
+"10.2.1.158"
+"10.2.1.142"
+"10.2.1.141"
+"10.2.1.138"
+"10.2.1.134"
+"10.2.1.130"
+"10.2.1.125"
+"10.2.1.81"
+ "10.2.1.124"
+ "10.2.1.120"
+ "10.2.1.118"
+ "10.2.1.117"
+ "10.2.1.113"
+ "10.2.1.110"
+ "10.2.1.106"
+ "10.2.1.100"
+ "10.2.0.98"
+ "10.2.0.249"
+ "10.2.0.233"
+ "10.2.0.227"
+ "10.2.0.225"
+ "10.2.0.220"
+ "10.2.0.217"
+ "10.2.0.216"
+ "10.2.0.214"
+ "10.2.0.211"
+ "10.2.0.196"
+ "10.2.0.195"
+ "10.2.0.194"
+ "10.2.0.193"
+ "10.2.0.191"
+ "10.2.0.184"
+ "10.2.0.154"
+ "10.2.0.153"
+ "10.2.0.150"
+ "10.2.0.145"
+ "10.2.0.144"
+ "10.2.0.138"
+ "10.2.0.133"
+ "10.2.0.130"
+ "10.2.0.113"
+ "10.2.0.110"
+ "10.2.0.109"
+ "10.2.0.108"
+ "10.2.0.107"
+ "10.2.0.105"
+ "10.2.0.103"
+ "10.2.0.101"
+ )
+
## scp template
# scp "${battery_file_path}/start.sh" "root@"$ip_address":/data/dbus-fzsonick-48tl/"
@@ -28,13 +98,17 @@ ip_addresses=("10.2.0.104" "10.2.1.134" "10.2.0.130" "10.2.1.169" "10.2.1.159" "
for ip_address in "${ip_addresses[@]}"; do
## stop battery service if change any file related to battery service otherwise no need to do this
- # ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -d /service/dbus-fzsonick-48tl.*"
+ ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -d /service/dbus-fzsonick-48tl.*"
ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -d /service/controller"
scp "${venus_release_file_path}/controller.py" "root@"$ip_address":/data"
+ scp "${venus_release_file_path}/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py" "root@"$ip_address":/opt/innovenergy/dbus-fzsonick-48tl"
+ scp "${venus_release_file_path}/dbus-fzsonick-48tl/dbus-fzsonick-48tl.py" "root@"$ip_address":/data/dbus-fzsonick-48tl"
scp "${venus_release_file_path}/controller.py" "root@"$ip_address":/opt/innovenergy/controller"
+
+
ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -u /service/controller"
## start battery service
- # ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -u /service/dbus-fzsonick-48tl.*"
+ ssh -o StrictHostKeyChecking=no "$username"@"$ip_address" "svc -u /service/dbus-fzsonick-48tl.*"
echo "Deployed and ran commands on $ip_address"
done
diff --git a/typescript/frontend-marios2/src/content/dashboards/BatteryView/MainStats.tsx b/typescript/frontend-marios2/src/content/dashboards/BatteryView/MainStats.tsx
index 61501002e..4dcf35e1e 100644
--- a/typescript/frontend-marios2/src/content/dashboards/BatteryView/MainStats.tsx
+++ b/typescript/frontend-marios2/src/content/dashboards/BatteryView/MainStats.tsx
@@ -8,7 +8,7 @@ import {
Typography
} from '@mui/material';
import { FormattedMessage } from 'react-intl';
-import React, { useEffect, useState } from 'react';
+import React, { useContext, useEffect, useState } from 'react';
import { I_S3Credentials } from '../../../interfaces/S3Types';
import ReactApexChart from 'react-apexcharts';
import { getChartOptions } from '../Overview/chartOptions';
@@ -25,6 +25,7 @@ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import CircularProgress from '@mui/material/CircularProgress';
import { useLocation, useNavigate } from 'react-router-dom';
import ArrowBackIcon from '@mui/icons-material/ArrowBack';
+import { ProductIdContext } from '../../../contexts/ProductIdContextProvider';
interface MainStatsProps {
s3Credentials: I_S3Credentials;
@@ -49,6 +50,7 @@ function MainStats(props: MainStatsProps) {
const [dateSelectionError, setDateSelectionError] = useState('');
const [loading, setLoading] = useState(true);
const location = useLocation();
+ const { product, setProduct } = useContext(ProductIdContext);
const blueColors = [
'#99CCFF',
@@ -93,7 +95,15 @@ function MainStats(props: MainStatsProps) {
const resultPromise: Promise<{
chartData: BatteryDataInterface;
chartOverview: BatteryOverviewInterface;
- }> = transformInputToBatteryViewData(props.s3Credentials, props.id);
+ }> = transformInputToBatteryViewData(
+ props.s3Credentials,
+ props.id,
+ product,
+ UnixTime.fromTicks(new Date().getTime() / 1000).earlier(
+ TimeSpan.fromDays(1)
+ ),
+ UnixTime.fromTicks(new Date().getTime() / 1000)
+ );
resultPromise
.then((result) => {
@@ -184,6 +194,7 @@ function MainStats(props: MainStatsProps) {
}> = transformInputToBatteryViewData(
props.s3Credentials,
props.id,
+ product,
UnixTime.fromTicks(startDate.unix()),
UnixTime.fromTicks(endDate.unix())
);
@@ -245,6 +256,7 @@ function MainStats(props: MainStatsProps) {
}> = transformInputToBatteryViewData(
props.s3Credentials,
props.id,
+ product,
UnixTime.fromTicks(startX).earlier(TimeSpan.fromHours(2)),
UnixTime.fromTicks(endX).earlier(TimeSpan.fromHours(2))
);
@@ -418,20 +430,20 @@ function MainStats(props: MainStatsProps) {
- {/**/}
+
= timeperiodToSearch) {
setConnected(false);
setLoading(false);
return false;
diff --git a/typescript/frontend-marios2/src/dataCache/time.ts b/typescript/frontend-marios2/src/dataCache/time.ts
index f1d766df7..56369a4dd 100644
--- a/typescript/frontend-marios2/src/dataCache/time.ts
+++ b/typescript/frontend-marios2/src/dataCache/time.ts
@@ -13,7 +13,14 @@ export class UnixTime {
return UnixTime.fromTicks(date.getTime() / 1000);
}
- public static fromTicks(ticks: number): UnixTime {
+ public static fromTicks(
+ ticks: number,
+ dont_change: boolean = false
+ ): UnixTime {
+ if (dont_change) {
+ return new UnixTime(Math.floor(ticks));
+ }
+
if (Math.floor(ticks) % 2 != 0) {
return new UnixTime(Math.floor(ticks) + 1);
}
diff --git a/typescript/frontend-marios2/src/interfaces/Chart.tsx b/typescript/frontend-marios2/src/interfaces/Chart.tsx
index 2e9539de4..151f9ff08 100644
--- a/typescript/frontend-marios2/src/interfaces/Chart.tsx
+++ b/typescript/frontend-marios2/src/interfaces/Chart.tsx
@@ -4,7 +4,7 @@ import {
fetchData
} from '../content/dashboards/Installations/fetchData';
import { FetchResult } from '../dataCache/dataCache';
-import { CsvTimestamp, I_S3Credentials } from './S3Types';
+import { I_S3Credentials } from './S3Types';
import { TimeSpan, UnixTime } from '../dataCache/time';
import { DataRecord } from '../dataCache/data';
import axiosConfig from '../Resources/axiosConfig';
@@ -82,6 +82,7 @@ export interface BatteryOverviewInterface {
export const transformInputToBatteryViewData = async (
s3Credentials: I_S3Credentials,
id: number,
+ product: number,
start_time?: UnixTime,
end_time?: UnixTime
): Promise<{
@@ -90,7 +91,6 @@ export const transformInputToBatteryViewData = async (
}> => {
const prefixes = ['', 'k', 'M', 'G', 'T'];
const MAX_NUMBER = 9999999;
-
const categories = ['Soc', 'Temperature', 'Power', 'Voltage', 'Current'];
const pathCategories = [
'Soc',
@@ -133,47 +133,36 @@ export const transformInputToBatteryViewData = async (
let initialiation = true;
- let timestampArray: CsvTimestamp[] = [];
+ let timestampArray: number[] = [];
let adjustedTimestampArray = [];
const timestampPromises = [];
- if (start_time && end_time) {
- await axiosConfig
- .get(
- `/GetCsvTimestampsForInstallation?id=${id}&start=${start_time.ticks}&end=${end_time.ticks}`
- )
- .then((res: AxiosResponse) => {
- timestampArray = res.data;
- })
- .catch((err: AxiosError) => {
- if (err.response && err.response.status == 401) {
- //removeToken();
- //navigate(routes.login);
- }
- });
- } else {
- await axiosConfig
- .get(`/GetCsvTimestampsForInstallation?id=${id}&start=${0}&end=${0}`)
- .then((res: AxiosResponse) => {
- timestampArray = res.data;
- })
- .catch((err: AxiosError) => {
- if (err.response && err.response.status == 401) {
- //removeToken();
- //navigate(routes.login);
- }
- });
- }
+ await axiosConfig
+ .get(
+ `/GetCsvTimestampsForInstallation?id=${id}&start=${start_time.ticks}&end=${end_time.ticks}`
+ )
+ .then((res: AxiosResponse) => {
+ timestampArray = res.data;
+ })
+ .catch((err: AxiosError) => {
+ if (err.response && err.response.status == 401) {
+ //removeToken();
+ //navigate(routes.login);
+ }
+ });
for (var i = 0; i < timestampArray.length; i++) {
timestampPromises.push(
fetchDataForOneTime(
- UnixTime.fromTicks(timestampArray[i].timestamp),
+ UnixTime.fromTicks(timestampArray[i], true),
s3Credentials
)
);
- const adjustedTimestamp = new Date(timestampArray[i].timestamp * 1000);
+ const adjustedTimestamp =
+ product == 0
+ ? new Date(timestampArray[i] * 1000)
+ : new Date(timestampArray[i] * 100000);
//Timezone offset is negative, so we convert the timestamp to the current zone by subtracting the corresponding offset
adjustedTimestamp.setHours(
adjustedTimestamp.getHours() - adjustedTimestamp.getTimezoneOffset() / 60
@@ -309,6 +298,7 @@ const fetchDataForOneTime = async (
for (var i = 0; i < timeperiodToSearch; i++) {
timestampToFetch = startUnixTime.later(TimeSpan.fromSeconds(i));
+
try {
res = await fetchData(timestampToFetch, s3Credentials);