Skip to content

Commit

Permalink
Update index.html
Browse files Browse the repository at this point in the history
Implementado novas funcionalidades!
  • Loading branch information
manuseiro authored Aug 17, 2024
1 parent 797e3d5 commit 69c299f
Showing 1 changed file with 129 additions and 37 deletions.
166 changes: 129 additions & 37 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,47 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
<link rel="stylesheet" href="style.css">
<title>Calcular o Retorno do Sistema Solar</title>
<title>CRSS - Calcular o Retorno do Sistema Solar</title>
</head>
<body>
<div class="container py-5">
<h1 class="fw-bold mb-4">Configurações do Sistema:</h1>
<form id="solarCalcForm">
<div class="mb-3">
<label for="state" class="form-label">Estado</label>
<select class="form-select" id="state" required>
<option value="">Selecione um estado</option>
</select>
</div>
<div class="mb-3">
<label for="city" class="form-label">Cidade</label>
<input type="text" class="form-control" id="city" required>
<select class="form-select" id="city" required>
<option value="">Selecione uma cidade</option>
</select>
</div>
<div class="mb-3">
<label for="state" class="form-label">Estado</label>
<input type="text" class="form-control" id="state" required>
<label for="monthlyConsumption" class="form-label">Consumo Médio Mensal (kWh)</label>
<input type="number" class="form-control" id="monthlyConsumption" min="0.01" step="0.01" required>
</div>
<div class="mb-3">
<label for="modules" class="form-label">Quantidade de Módulos</label>
<input type="number" class="form-control" id="modules" required>
<input type="number" class="form-control" id="modules" min="1" step="1" required>
</div>
<div class="mb-3">
<label for="modulePower" class="form-label">Potência do Módulo (Watts)</label>
<input type="number" class="form-control" id="modulePower" required>
<input type="number" class="form-control" id="modulePower" min="1" step="1" required>
</div>
<div class="mb-3">
<label for="tariffRate" class="form-label">Tarifa de Energia Elétrica (R$/kWh)</label>
<input type="number" class="form-control" id="tariffRate" step="0.01" required>
<input type="number" class="form-control" id="tariffRate" min="0.01" step="0.01" required>
</div>
<div class="mb-3">
<label for="emissionFactor" class="form-label">Fator de Emissão de CO2 (kg CO2/kWh)</label>
<input type="number" class="form-control" id="emissionFactor" value="0.092" step="0.001" required>
</div>
<button class="btn btn-primary" type="submit">Calcular</button>
</form>
<div id="moduleWarning" class="alert alert-warning mt-4" style="display: none;"></div>
<hr class="my-4">
<h2 class="fs-5 fw-bold mb-3">Retorno do Sistema:</h2>
<table class="table table-striped">
Expand All @@ -58,55 +71,134 @@ <h2 class="fs-5 fw-bold mb-3">Retorno do Sistema:</h2>
<td>Economia Anual (R$)</td>
<td id="annualSavings"></td>
</tr>
<tr>
<td>CO2 Não Emitido p/Mês (kg)</td>
<td id="co2AvoidedMonthly"></td>
</tr>
<tr>
<td>CO2 Não Emitido p/Ano (kg)</td>
<td id="co2AvoidedAnnually"></td>
</tr>
</tbody>
</table>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
loadStates();

$('#state').change(function() {
const stateId = $(this).val();
if (stateId) {
loadCities(stateId);
} else {
$('#city').empty().append(new Option('Selecione uma cidade', ''));
}
});

$('#solarCalcForm').submit(function(event) {
event.preventDefault();

const city = $('#city').val();
const state = $('#state').val();
const modules = $('#modules').val();
const modulePower = $('#modulePower').val();
const tariffRate = $('#tariffRate').val();
const monthlyConsumption = parseFloat($('#monthlyConsumption').val());
const modules = parseInt($('#modules').val());
const modulePower = parseFloat($('#modulePower').val());
const tariffRate = parseFloat($('#tariffRate').val());
const emissionFactor = parseFloat($('#emissionFactor').val());

const geocodeUrl = `https://api.opencagedata.com/geocode/v1/json?q=${city},${state}&key=f114d72cbdd94f28a183719026688b68`;
// Validação adicional
if (monthlyConsumption <= 0 || modulePower <= 0 || modules <= 0) {
alert('Consumo mensal, potência do módulo e quantidade de módulos devem ser valores positivos.');
return;
}

$.get(geocodeUrl, function(geocodeData) {
if (geocodeData.results.length > 0) {
const latitude = geocodeData.results[0].geometry.lat;
const longitude = geocodeData.results[0].geometry.lng;
const geocodeUrl = `https://api.opencagedata.com/geocode/v1/json?q=${encodeURIComponent(city)},${encodeURIComponent(state)}&key=f114d72cbdd94f28a183719026688b68`;

const sunriseSunsetUrl = `https://api.sunrise-sunset.org/json?lat=${latitude}&lng=${longitude}&formatted=0`;
$.get(geocodeUrl)
.done(function(geocodeData) {
console.log('Resposta da API de geocodificação:', geocodeData);
if (geocodeData.results.length > 0) {
const latitude = geocodeData.results[0].geometry.lat;
const longitude = geocodeData.results[0].geometry.lng;

$.get(sunriseSunsetUrl, function(data) {
if (data.status === "OK") {
const sunrise = new Date(data.results.sunrise);
const sunset = new Date(data.results.sunset);
const sunHours = ((sunset - sunrise) / (1000 * 60 * 60)).toFixed(2); // Convertendo milissegundos para horas
const sunriseSunsetUrl = `https://api.sunrise-sunset.org/json?lat=${latitude}&lng=${longitude}&formatted=0`;

const solarCapacity = (modules * modulePower / 1000).toFixed(2);
const monthlyEnergy = (solarCapacity * sunHours * 30).toFixed(2);
const monthlySavings = (monthlyEnergy * tariffRate).toFixed(2);
const annualSavings = (monthlySavings * 12).toFixed(2);
$.get(sunriseSunsetUrl)
.done(function(data) {
console.log('Resposta da API de radiação solar:', data);
if (data.status === "OK") {
const sunrise = new Date(data.results.sunrise);
const sunset = new Date(data.results.sunset);
const sunHours = ((sunset - sunrise) / (1000 * 60 * 60)).toFixed(2); // Convertendo milissegundos para horas

$('#solarCapacity').text(solarCapacity);
$('#sunHours').text(sunHours);
$('#monthlyEnergy').text(monthlyEnergy);
$('#monthlySavings').text(monthlySavings);
$('#annualSavings').text(annualSavings);
} else {
alert('Erro ao obter dados de radiação solar.');
}
});
} else {
const solarCapacity = (modules * modulePower / 1000).toFixed(2);
const monthlyEnergy = (solarCapacity * sunHours * 30).toFixed(2);
const monthlySavings = (monthlyEnergy * tariffRate).toFixed(2);
const annualSavings = (monthlySavings * 12).toFixed(2);

const co2AvoidedMonthly = (monthlyEnergy * emissionFactor).toFixed(2);
const co2AvoidedAnnually = (co2AvoidedMonthly * 12).toFixed(2);

$('#solarCapacity').text(solarCapacity);
$('#sunHours').text(sunHours);
$('#monthlyEnergy').text(monthlyEnergy);
$('#monthlySavings').text(monthlySavings);
$('#annualSavings').text(annualSavings);
$('#co2AvoidedMonthly').text(co2AvoidedMonthly);
$('#co2AvoidedAnnually').text(co2AvoidedAnnually);

const suggestedModules = Math.ceil(monthlyConsumption / (sunHours * 30 * (modulePower / 1000)));

if (modules !== suggestedModules) {
$('#moduleWarning').text(`A quantidade sugerida de módulos é ${suggestedModules}. Você informou ${modules}.`).show();
} else {
$('#moduleWarning').hide();
}
} else {
alert('Erro ao obter dados de radiação solar.');
}
})
.fail(function() {
alert('Erro ao obter dados de radiação solar.');
});
} else {
alert('Erro ao obter coordenadas para a localização fornecida.');
}
})
.fail(function() {
alert('Erro ao obter coordenadas para a localização fornecida.');
}
});
});
});

function loadStates() {
const statesUrl = 'https://servicodados.ibge.gov.br/api/v1/localidades/estados';
$.get(statesUrl)
.done(function(states) {
states.sort((a, b) => a.nome.localeCompare(b.nome));
states.forEach(state => {
$('#state').append(new Option(state.nome, state.sigla));
});
})
.fail(function() {
alert('Erro ao obter estados.');
});
}

function loadCities(stateId) {
const citiesUrl = `https://servicodados.ibge.gov.br/api/v1/localidades/estados/${stateId}/municipios`;
$('#city').empty().append(new Option('Selecione uma cidade', ''));
$.get(citiesUrl)
.done(function(cities) {
cities.sort((a, b) => a.nome.localeCompare(b.nome));
cities.forEach(city => {
$('#city').append(new Option(city.nome, city.id));
});
})
.fail(function() {
alert('Erro ao obter cidades.');
});
}
});
</script>
</body>
Expand Down

0 comments on commit 69c299f

Please sign in to comment.