Teapack1 commited on
Commit
ea8c1bf
1 Parent(s): 5d57a51
Files changed (4) hide show
  1. database.db +0 -0
  2. main.py +3 -1
  3. static/cg.js +54 -66
  4. templates/edit_cables.html +2 -2
database.db CHANGED
Binary files a/database.db and b/database.db differ
 
main.py CHANGED
@@ -34,7 +34,9 @@ def get_db():
34
  db.close()
35
 
36
  def calculate_voltage_drop(voltage, load, length, resistance):
37
- voltage_drop = load * length * resistance
 
 
38
  final_voltage = voltage - voltage_drop
39
  if final_voltage < 0:
40
  final_voltage = 0
 
34
  db.close()
35
 
36
  def calculate_voltage_drop(voltage, load, length, resistance):
37
+
38
+ resistance_in_ohms = resistance / 1000 # Convert mΩ/m to Ω/m
39
+ voltage_drop = load * 2*length * resistance_in_ohms
40
  final_voltage = voltage - voltage_drop
41
  if final_voltage < 0:
42
  final_voltage = 0
static/cg.js CHANGED
@@ -1,10 +1,8 @@
1
  document.addEventListener('DOMContentLoaded', function() {
2
- // Handle form submission for Crystal Grid calculator
3
  const cgForm = document.getElementById('cg-calculator-form');
4
- const cgCalculateButton = document.querySelector('.btn-cg-calculate'); // Select the calculate button
5
-
6
  if (cgForm && cgCalculateButton) {
7
- // Check form validity and toggle the calculate button state
8
  function checkFormValidity() {
9
  const isValid = cgForm.checkValidity();
10
  if (isValid) {
@@ -16,19 +14,14 @@ document.addEventListener('DOMContentLoaded', function() {
16
  }
17
  }
18
 
19
- // Initial check on page load
20
  checkFormValidity();
21
-
22
- // Add event listener to check form validity on input change
23
  cgForm.addEventListener('input', checkFormValidity);
24
 
25
- // Handle form submission
26
  cgForm.addEventListener('submit', async function(event) {
27
- event.preventDefault(); // Prevent the default form submission
28
 
29
  const formData = new FormData(cgForm);
30
-
31
- // Get the selected LED type, which includes both voltage and power
32
  const [voltage, ledPower] = formData.get('led_type').split(',').map(Number);
33
  const cableLength = parseFloat(formData.get('cable_length')) || 3;
34
  const awg = formData.get('awg') || null;
@@ -38,69 +31,69 @@ document.addEventListener('DOMContentLoaded', function() {
38
 
39
  if (awg && voltage && cableLength) {
40
  try {
41
- const response = await fetch(`/get_resistance/${awg}`);
42
- if (response.ok) {
43
- const { resistance } = await response.json();
44
-
45
- let resultsHtml = '';
46
- const totalLEDs = levels && ledsPerLevel ? levels * ledsPerLevel : null;
47
- const levelHeight = fixtureHeight && levels ? fixtureHeight / levels : null;
48
-
49
- if (totalLEDs !== null && levelHeight !== null) {
50
- const totalPower = totalLEDs * ledPower;
51
- const current = totalPower / voltage;
52
- let remainingVoltage = voltage;
53
- const initialVoltage = voltage; // Store the initial voltage for percentage calculation
54
- let finalVoltage = voltage; // Track final voltage for drop percentage
55
-
56
- // Total LEDs
57
- resultsHtml += `<p>Total LEDs: ${totalLEDs} pcs</p>`;
58
- resultsHtml += `<p>&nbsp;</p>`; // non-breaking space,
59
-
60
- // Calculate and display voltage for each level
61
- for (let i = 1; i <= levels; i++) {
62
- const length = i * levelHeight + cableLength;
63
- const voltageDrop = calculateVoltageDrop(current, length, resistance);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  remainingVoltage -= voltageDrop;
65
 
66
- // Ensure voltage doesn't go below 0
67
  if (remainingVoltage < 0) remainingVoltage = 0;
68
 
69
- // Determine the color based on the voltage drop percentage
70
  let colorClass = '';
71
- const currentDropPercentage = ((initialVoltage - remainingVoltage) / initialVoltage) * 100;
72
- if (currentDropPercentage > 10) {
73
  colorClass = 'red-text';
74
- } else if (currentDropPercentage > 5) {
75
  colorClass = 'orange-text';
76
  }
77
 
78
- resultsHtml += `<p class="${colorClass}">Level ${i} Voltage: ${remainingVoltage.toFixed(2)} V</p>`;
79
- finalVoltage = remainingVoltage; // Update final voltage after each level
80
- }
81
-
82
- // Calculate the percentage drop from initial voltage to final voltage
83
 
84
- const voltageDropPercentage = ((initialVoltage - finalVoltage) / initialVoltage) * 100;
85
-
86
- // print the voltage drop percentage:
87
- //console.log(`Voltage Drop Percentage: ${voltageDropPercentage.toFixed(2)}%`);
88
-
89
- let colorClass = '';
90
-
91
- if (voltageDropPercentage > 10) {
92
- colorClass = 'red-text';
93
- } else if (voltageDropPercentage > 5) {
94
- colorClass = 'orange-text';
95
  }
96
- resultsHtml += `<p>&nbsp;</p>`;
97
- resultsHtml += `<p class="${colorClass}">Voltage Drop: ${voltageDropPercentage.toFixed(2)}%</p>`;
98
- } else {
99
- resultsHtml = `<p>Partial data provided. Calculation incomplete.</p>`;
100
  }
 
101
  document.getElementById('result').innerHTML = resultsHtml;
102
  } else {
103
- console.error("Error fetching resistance:", response.statusText);
104
  document.getElementById('result').innerHTML = `<p>Error: Unable to fetch cable resistance.</p>`;
105
  }
106
  } catch (error) {
@@ -108,13 +101,8 @@ document.addEventListener('DOMContentLoaded', function() {
108
  document.getElementById('result').innerHTML = `<p>Error: An unexpected error occurred.</p>`;
109
  }
110
  } else {
111
- document.getElementById('result').innerHTML = `<p>Please provide at least the Number of Levels.</p>`;
112
  }
113
  });
114
  }
115
-
116
- // Function to calculate voltage drop
117
- function calculateVoltageDrop(current, length, resistance) {
118
- return current * length * resistance;
119
- }
120
  });
 
1
  document.addEventListener('DOMContentLoaded', function() {
 
2
  const cgForm = document.getElementById('cg-calculator-form');
3
+ const cgCalculateButton = document.querySelector('.btn-cg-calculate');
4
+
5
  if (cgForm && cgCalculateButton) {
 
6
  function checkFormValidity() {
7
  const isValid = cgForm.checkValidity();
8
  if (isValid) {
 
14
  }
15
  }
16
 
 
17
  checkFormValidity();
 
 
18
  cgForm.addEventListener('input', checkFormValidity);
19
 
 
20
  cgForm.addEventListener('submit', async function(event) {
21
+ event.preventDefault();
22
 
23
  const formData = new FormData(cgForm);
24
+
 
25
  const [voltage, ledPower] = formData.get('led_type').split(',').map(Number);
26
  const cableLength = parseFloat(formData.get('cable_length')) || 3;
27
  const awg = formData.get('awg') || null;
 
31
 
32
  if (awg && voltage && cableLength) {
33
  try {
34
+ const resistanceResponse = await fetch(`/get_resistance/${awg}`);
35
+ if (resistanceResponse.ok) {
36
+ const { resistance } = await resistanceResponse.json();
37
+
38
+ const totalLEDs = levels * ledsPerLevel;
39
+ const initialCurrent = (totalLEDs * ledPower) / voltage;
40
+ let remainingVoltage = voltage;
41
+ const levelHeight = fixtureHeight / levels;
42
+
43
+ let resultsHtml = `<p>Total LEDs: ${totalLEDs} pcs</p><br>`;
44
+
45
+ let accumulatedLength = cableLength;
46
+ let currentLoad = totalLEDs * ledPower;
47
+
48
+ for (let i = 1; i <= levels; i++) {
49
+ const ledsAtThisLevel = ledsPerLevel * (levels - i + 1);
50
+ currentLoad = ledsAtThisLevel * ledPower;
51
+ const current = currentLoad / remainingVoltage;
52
+
53
+ const calculationResponse = await fetch('/calculate', {
54
+ method: 'POST',
55
+ headers: {
56
+ 'Content-Type': 'application/json'
57
+ },
58
+ body: JSON.stringify({
59
+ cables: [{
60
+ voltage: remainingVoltage,
61
+ load: current,
62
+ length: accumulatedLength,
63
+ cable_type: awg
64
+ }]
65
+ })
66
+ });
67
+
68
+ if (calculationResponse.ok) {
69
+ const resultData = await calculationResponse.json();
70
+ const voltageDrop = resultData[0].voltage_drop;
71
  remainingVoltage -= voltageDrop;
72
 
 
73
  if (remainingVoltage < 0) remainingVoltage = 0;
74
 
 
75
  let colorClass = '';
76
+ const voltageDropPercentage = ((voltage - remainingVoltage) / voltage) * 100;
77
+ if (voltageDropPercentage > 10) {
78
  colorClass = 'red-text';
79
+ } else if (voltageDropPercentage > 5) {
80
  colorClass = 'orange-text';
81
  }
82
 
83
+ resultsHtml += `<p class="${colorClass}">Level ${i}: Final Voltage: ${remainingVoltage.toFixed(2)} V</p>`;
 
 
 
 
84
 
85
+ // Add length for the next level
86
+ accumulatedLength += levelHeight;
87
+ } else {
88
+ console.error("Error calculating voltage drop:", calculationResponse.statusText);
89
+ document.getElementById('result').innerHTML = `<p>Error: Unable to calculate voltage drop.</p>`;
90
+ return;
 
 
 
 
 
91
  }
 
 
 
 
92
  }
93
+
94
  document.getElementById('result').innerHTML = resultsHtml;
95
  } else {
96
+ console.error("Error fetching resistance:", resistanceResponse.statusText);
97
  document.getElementById('result').innerHTML = `<p>Error: Unable to fetch cable resistance.</p>`;
98
  }
99
  } catch (error) {
 
101
  document.getElementById('result').innerHTML = `<p>Error: An unexpected error occurred.</p>`;
102
  }
103
  } else {
104
+ document.getElementById('result').innerHTML = `<p>Please provide all required fields.</p>`;
105
  }
106
  });
107
  }
 
 
 
 
 
108
  });
templates/edit_cables.html CHANGED
@@ -19,7 +19,7 @@
19
  <input type="text" id="type" name="type" required>
20
  </div>
21
  <div class="form-row">
22
- <label for="resistance">Resistance:</label>
23
  <input type="number" step="0.01" id="resistance" name="resistance" required>
24
  </div>
25
  <div class="form-group">
@@ -40,7 +40,7 @@
40
  <input type="text" id="type" name="type" value="{{ cable.type }}" required>
41
  </div>
42
  <div class="form-row">
43
- <label for="resistance">Resistance (Ω/m):</label>
44
  <input type="number" step="0.00001" id="resistance" name="resistance" value="{{ cable.resistance }}" required>
45
  </div>
46
  <div class="btn-group">
 
19
  <input type="text" id="type" name="type" required>
20
  </div>
21
  <div class="form-row">
22
+ <label for="resistance">Resistance (mΩ/m):</label>
23
  <input type="number" step="0.01" id="resistance" name="resistance" required>
24
  </div>
25
  <div class="form-group">
 
40
  <input type="text" id="type" name="type" value="{{ cable.type }}" required>
41
  </div>
42
  <div class="form-row">
43
+ <label for="resistance">Resistance (mΩ/m):</label>
44
  <input type="number" step="0.00001" id="resistance" name="resistance" value="{{ cable.resistance }}" required>
45
  </div>
46
  <div class="btn-group">