import React, { useEffect, useState } from 'react'; import Banner from '../../components/banner/Banner'; import { TelemetriaView, Buttons, TableHeader, ChartFilters} from '../../styles/layouts/Telemetria/TelemetriaView'; import GradientButton from '../../components/buttons/gradientButton/GradientButton' import Header from '../../components/header/Header'; import MenuItem from '@mui/material/MenuItem'; import InputLabel from '@mui/material/InputLabel'; import FormControl from '@mui/material/FormControl'; import Select, { SelectChangeEvent } from '@mui/material/Select'; import Head from 'next/head'; import RenderIf from '../../utils/renderIf'; import { GetServerSideProps } from 'next'; import { parseCookies } from 'nookies'; import { api } from '../../services/api'; import Snackbar from '@mui/material/Snackbar' import MuiAlert, { AlertProps } from '@mui/material/Alert' import getAPIClient from '../../services/ssrApi'; import { DemRegXDemConChart } from '../../components/graph/DemRegXDemConChart'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; import TextField from '@mui/material/TextField'; import { DesktopDatePicker } from '@mui/x-date-pickers/DesktopDatePicker'; import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; import BasicButton from '../../components/buttons/basicButton/BasicButton'; import { DiscretizedConsumptionChart } from '../../components/graph/DiscretizedConsumptionChart'; import FatorPotenciaChart from '../../components/graph/fatorPotenciaChart'; import { getDiscretization } from '../../services/charts/telemetry/getDiscretization'; import { getPowerFactorData } from '../../services/charts/telemetry/getPowerFactor'; import { getDemand } from '../../services/charts/telemetry/getDemand'; import PageTitle from '../../components/pageTitle/PageTitle'; import { format } from 'date-fns'; const Alert = React.forwardRef(function Alert( props, ref ) { return }) export default function Telemetria({userName, clients}: any) { const [unity, setUnity] = useState(clients[0].codigo_scde); const [startDate, setStartDate] = useState(new Date()); const [endDate, setEndDate] = useState(new Date()); const [discretization, setDiscretization] = useState('5_min'); const [openSnackSuccess, setOpenSnackSuccess] = useState(false) const [openSnackError, setOpenSnackError] = useState(false) const [openSnackFields, setOpenSnackFields] = useState(false) const currentDate = new Date().toLocaleDateString().split('/').reverse().join('-') const handleCloseSnack = ( event?: React.SyntheticEvent | Event, reason?: string ) => { if (reason === 'clickaway') { return } setOpenSnackError(false) setOpenSnackSuccess(false) setOpenSnackFields(false) } function downloadCSVFile(csv, filename) { const csv_file = new Blob([csv], {type: "text/csv"}); const download_link = document.createElement("a"); download_link.download = filename; download_link.href = window.URL.createObjectURL(csv_file); download_link.style.display = "none"; document.body.appendChild(download_link); download_link.click(); } function htmlToCSV(html, filename) { const data = []; const rows = document.querySelectorAll("table tr"); for (let i = 0; i < rows.length; i++) { const row = [], cols: any = rows[i].querySelectorAll("td, th"); for (let j = 0; j < cols.length; j++) { row.push(cols[j].innerText); } data.push(row.join(";")); } downloadCSVFile(data.join("\n"), filename); } const [tableData, setTableData] = useState(null) const [loader, setLoader] = useState(false) const [menu, setMenu] = useState(0); const [showChart, setShowChart] = useState(false); const [exception, setException] = useState(false); const [send, setSend] = useState(false); const [open, setOpen] = useState(false); const handleChangeStartDate = (newValue: Date | null) => { setStartDate(newValue) }; const handleChangeEndDate = (newValue: Date | null) => { setEndDate(newValue) }; const [demRegXDemCon2, setDemRegXDemCon2] = useState([]); async function getTableData() { const html = document.querySelector("table")?.outerHTML; if (startDate.toLocaleDateString()!=='' && endDate.toLocaleDateString()!=='' && send) setOpen(true) await api.post('/telemetry/powerFactor', { "type": discretization, "filters": [ {"type" : "=", "field": "med_5min.ponto", "value": unity}, {"type" : "between", "field": "dia_num", "value": [currentDate.slice(0, 8) + '01', currentDate]} ] }).then(res => { setTableData(res.data.data) setOpenSnackError(false) setOpenSnackSuccess(true) setOpen(false) setLoader(false) htmlToCSV(html, "telemetria.csv") console.log('then') }).catch(res => { setSend(false) setLoader(false) setException(true) setOpenSnackError(true) setOpenSnackSuccess(false) console.log('catch') }) } const [fatorPotenciaData, setFatorPotenciaData] = useState([]); const [demRegXDemCon, setDemRegXDemCon] = useState([]); const [discretizedConsumptionData, setDiscretizedConsumptionData] = useState([]); useEffect(() => { setSend(false) }, [startDate, endDate]) useEffect(() => { const firstOfTheMonth = format(new Date(startDate).setDate(1), 'yyyy-MM-dd') const lastOfTheMonth = format(new Date(startDate.getFullYear(), startDate.getMonth() + 1, 0), 'yyyy-MM-dd') setLoader(true) getDiscretization(unity, new Date(firstOfTheMonth), new Date(lastOfTheMonth), discretization) .then(result => {setDiscretizedConsumptionData(result); setSend(false); setLoader(false)}) .catch(() => {setSend(false); setOpenSnackFields(true)}) getDemand(unity, startDate, endDate, discretization) .then(result => {setDemRegXDemCon(result); setSend(false); setTableData(result)}) .catch(() => {setSend(false); setOpenSnackFields(true); setLoader(false)}) getPowerFactorData(unity, startDate, endDate, discretization) .then(result => {setFatorPotenciaData(result); setSend(false); setLoader(false)}) .catch(() => {setSend(false); setOpenSnackFields(true); setLoader(false)}) }, []) return(
Smart Energia - Telemetria Dados disponíveis para Visualização/Download! Não foi possivel pegar os dados! Verifique os campos e tente novamente!
{/* */} setMenu(nv)} aria-label=""> {/* discretization chart */}
Unidade
Discretização
} />
handleChangeEndDate(newValue)} renderInput={(params) => } />
{ setLoader(true) getDiscretization(unity, startDate, endDate, discretization) .then(result => {setDiscretizedConsumptionData(result); setSend(false); setLoader(false)}) .catch(exception => {setSend(false); setOpenSnackFields(true); setLoader(false)}) }}/>
value.minut)} dataset={'Consumo'} dataset1='Estimado' month/>
{/* demand chart */}
Unidade
Discretização
} />
handleChangeEndDate(newValue)} renderInput={(params) => } />
{ setLoader(true) getDemand(unity, startDate, endDate, discretization) .then(result => {setDemRegXDemCon(result); setSend(false); setLoader(false)}) .catch(exception => {setSend(false); setOpenSnackFields(true); setLoader(false)}) }}/>
value.hora)} title='Demanda Contratada X Registrada' subtitle='' red/>
{/* power factor chart */}
Unidade
Discretização
} />
handleChangeEndDate(newValue)} renderInput={(params) => } />
{ setLoader(true) getPowerFactorData(unity, startDate, endDate, discretization) .then(result => {setFatorPotenciaData(result); setSend(false); setLoader(false)}) .catch(exception => {setSend(false); setOpenSnackFields(true); setLoader(false)}) }}/>
(value.day_formatted))} />
{ tableData!==null? tableData?.map((value, index) => { return <> }) : null }
Ponto Numero do dia Dia formatado Hora Minuto Consumo Reativa
{value.ponto} {parseFloat(value.dia_num)} {value.day_formatted} {value.hora} {value.minut} {parseFloat(value.consumo).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})} {parseFloat(value.reativa).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})}
value.hora)} title='Demanda Contratada X Registrada' subtitle='' red/> {/* setShowChart(!showChart)} purple /> */} {/* handleVerifyFields()} orange /> */} { if (send) { const html = document.querySelector("table")?.outerHTML; htmlToCSV(html, "telemetria.csv"); } else { setSend(true) getTableData() } }}/>

Fonte: Dados coletados do Sistema de Coleta de Dados de Energia - SCDE da Câmara de Comercialização
Energia Elétrica – CCEE, sendo que as quantidades aqui informadas são de responsabilidade
do agente de medição - Distribuidora.

) } export const getServerSideProps: GetServerSideProps = async (ctx) => { const { ['@smartAuth-token']: token } = parseCookies(ctx) const { ['user-name']: userName } = parseCookies(ctx) const { ['user-client_id']: client_id } = parseCookies(ctx) const apiClient = getAPIClient(ctx) let clients = [] await apiClient.post('/units', { "filters": [ {"type" : "=", "field": "dados_cadastrais.cod_smart_cliente", "value": client_id}, {"type" : "not_in", "field": "dados_cadastrais.codigo_scde", "value":["0P"]} ], "fields": [ "unidade", "cod_smart_unidade", "codigo_scde"], "distinct": true }).then(res => { console.log(res.data) clients = res.data.data }).catch(res => { // console.log(res) }) if (!token) { return { redirect: { destination: '/', permanent: false } } } return { props: { userName, clients } } }