IX Pylestras - SmartGrid com Python

I
Implementando Smart Grid com Python:
Uma Visão Geral dos desafios e soluções
Quem sou eu?
● Paolo Oliveira
● Engenharia de Telecomunicações – IFCE
● LIT – Laboratório de Inovação Tecnológica
● Usuário python a uma década
Smart Grid
● Aplicação de conceitos de rede eletrica distruibuida
inteligente, que pode monitorar seu próprio fluxo
eletrico e se ajustar as condições adversas,
reconfigurando os dispositivos que a compõe através
da automação e integração de todos os elementos da
rede. E para tal, é necessário haver comunicação
entre elementos que acompoem.
Problemas do Mundo Real
● Infinidade de Protocolos de Comunicação, muitos
deles fechados (embora existam os abertos e bem
conhecidos como DNP3, Modbus e IEC61850);
● Rede Elétrica "analógica" (poucos ou nenhum
equipamento inteligente disponível);
● Conectividade complexa em locais distantes
(geralmente restrito ao GPRS);
● Etc.
Objetivos
● Integração;
● Interoperabilidade;
● Monitoramento;
● Gerenciamento.
SCADA
Supervisory Control And Data Acquisition
● Melhor forma de gerenciar.
Entretanto...
● Licenças “estupidamente” caras e individuais para
cada conexão;
● Só “fala” protocolos conhecidos e/ou abertos.
Solução
● Gateway integrador, decodificando os protocolos,
abertos e fechados, e traduzindo-os entre si,
permitindo interoperabilidade, ao passo em que que
fornece acesso a monitoramento e gerenciamento
industrial através do SCADA, e de forma genérica
através de webservice.
Necessidades na implementação da
Solução
● Garantia na execução de código em intervalos de
tempo finitos bem definidos;
● Facilidade em codificar e decodificar protocolos
proprietarios(parsing e validação de estruturas);
● Gerenciamento eficaz e simples de comunicação
serial e TCP/IP.
Garantia na execução de código em
intervalos de tempo finitos bem
definidos
● Criação de um “watchdog” com a biblioteca thread
● No construtor:
self.watchdog = threading.Timer(0.2, self.WDT)
self.watchdog.start()
● No método WDT:
def WDT(self):
● self.watchdog.cancel()
(…) # chamadas a serem executadas
self.watchdog = threading.Timer(0.2, self.WDT)
self.watchdog.start()
Garantia na execução de código em
intervalos de tempo finitos bem
definidos
● Iniciar todos os modulos via thread:
if __name__=='__main__':
threading.Thread(target=thread_modbus).start()
threading.Thread(target=thread_ws).start()
…
● Com isto, eu garantia meu código lendo o pool
Modbus a cada 0.2 segundos, tempo limite para
desarmar a rede elétrica de baixa tensão.
Executar o servidor modbus “fora”
● Implementação simples(<20 linhas de código);
● Quantidade imoral de acessos...
Deixa o S.O.
cuidar dele ;D
Facilidade em codificar e
decodificar protocolos proprietarios
Design de uma forma genérica de escrever protocolos:
● Definir todos os campos do frame como variáveis globais.
● Criar um método encode() que le as variaveis globais e “monta” o
pacote, computando tamanhos e CRC;
● Criar um método decode() que pega um frame e o decodifica,
liberando os valores nas variaveis globais;
● Uso massivo do pack e unpack da bibliteca struct;
● Fácil de trabalhar, fácil de fazer um novo, e sem necessidade de
mexer com o módulo parental, que so se importa em chamar
encode() e decode() dos módulos de cada protocolo.
IX Pylestras - SmartGrid com Python
Gerenciamento eficaz e simples de
comunicação serial e TCP/IP
● Bom, é python... Com os já muito bons modelos de
gerenciamento de conexão, unindo os métodos de
conexão e leitura dentro de um
try/except/else/finally, o sistema fica completamente
estável.
● Lembrar de sempre usar o
allow_reuse_address = True
para evitar dor de cabeça
Nem tudo são flores
● São valores enormes e dados que o python, por
padrão, não sabe lidar. Então mesmo depois de
entender os protocolos, é preciso converter os dados
para usá-los de alguma forma. E, digamos que não é
a coisa mais fácil do mundo...
IX Pylestras - SmartGrid com Python
E ainda assim, tem vezes que o python
sozinho não dá conta, ou demoraria muito
para “pythonizar” a solução.
Para ester momentos, nos temos...
CTYPES + muita coragem
● ctypes é a cola perfeita, mas ainda assim dá muito
trabalho;
● Muita coisa velha é feita em PIC, não existe
documentação do protocolo/funções;
● Converter código de PIC para python doi.
EXEMPLO
IX Pylestras - SmartGrid com Python
GAMBIARRAS!!!1!!
IX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com Python
Chega de me envergonhar...
REUSO DA TÉCNICA
Reutilizar a metodologia
● Smart QUALQUERCOISA
Smart PLANTINHAS?
Definição Estruturação do modelo
do protocolo
SCADA
webservice
Mais informações:
http://paoloo.me/papers.html
PERGUNTAS?
OBRIGADO
1 of 31

Recommended

Single Packet Authorization by
Single Packet AuthorizationSingle Packet Authorization
Single Packet AuthorizationLeandro Almeida
1.1K views29 slides
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre by
Se você é .NET, você é NETDUINO - TDC 2013 - Porto AlegreSe você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
Se você é .NET, você é NETDUINO - TDC 2013 - Porto AlegreMarcio Martins
390 views47 slides
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ... by
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...Tchelinux
677 views16 slides
Internet das Coisas com Python e Arduino by
Internet das Coisas com Python e ArduinoInternet das Coisas com Python e Arduino
Internet das Coisas com Python e ArduinoHumberto Zanetti
1.3K views25 slides
Protocolos de Sistemas Embarcados by
Protocolos de Sistemas EmbarcadosProtocolos de Sistemas Embarcados
Protocolos de Sistemas EmbarcadosRomulo Fagundes
1.2K views25 slides
OpenMP Day1 by
OpenMP Day1OpenMP Day1
OpenMP Day1André Leon S. Gradvohl
496 views19 slides

More Related Content

What's hot

Acesso a área de trabalho remota by
Acesso a área de trabalho remotaAcesso a área de trabalho remota
Acesso a área de trabalho remotaRafael Requião
258 views19 slides
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g... by
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...BHack Conference
306 views35 slides
Linux básico by
Linux básicoLinux básico
Linux básicoRodolfo De Nadai
310 views15 slides
OpenMP Day 3 by
OpenMP Day 3OpenMP Day 3
OpenMP Day 3André Leon S. Gradvohl
430 views8 slides
Introdução à Computação de Alto Desempenho - Parte I by
Introdução à Computação de Alto Desempenho - Parte IIntrodução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IVinícius Hax
2.3K views22 slides
Síncrono vs Assíncrono by
Síncrono vs AssíncronoSíncrono vs Assíncrono
Síncrono vs AssíncronoMarcos Vinicios da Silva Neves
3.1K views31 slides

Similar to IX Pylestras - SmartGrid com Python

IoT: construindo ideias com nodeMCU e MQTT by
IoT: construindo ideias com nodeMCU e MQTTIoT: construindo ideias com nodeMCU e MQTT
IoT: construindo ideias com nodeMCU e MQTTCicero Joasyo Mateus de Moura
448 views30 slides
Ferment io t - Distributed and Scalable IoT Solution by
Ferment io t - Distributed and Scalable IoT SolutionFerment io t - Distributed and Scalable IoT Solution
Ferment io t - Distributed and Scalable IoT SolutionDonato Vianna
673 views114 slides
Curso redes seed by
Curso redes seedCurso redes seed
Curso redes seedFlavio Ferreira
545 views46 slides
Aula 02 redes by
Aula 02   redesAula 02   redes
Aula 02 redesKaren Carvalho
840 views14 slides
1 história e características dos microcontroladores pic by
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
12.6K views21 slides
Automação Residencial Extrema com Opensource by
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceGDGFoz
133 views134 slides

Similar to IX Pylestras - SmartGrid com Python(20)

Ferment io t - Distributed and Scalable IoT Solution by Donato Vianna
Ferment io t - Distributed and Scalable IoT SolutionFerment io t - Distributed and Scalable IoT Solution
Ferment io t - Distributed and Scalable IoT Solution
Donato Vianna673 views
Automação Residencial Extrema com Opensource by GDGFoz
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com Opensource
GDGFoz133 views
Cisco Packet Tracer by maykon-26
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracer
maykon-26320 views
Protocolos e redes industriais by Everton_michel
Protocolos e redes industriaisProtocolos e redes industriais
Protocolos e redes industriais
Everton_michel21.4K views
3b5d17 748a8b99e224a1bf91f42123e5388634 by JADSON SANTOS
3b5d17 748a8b99e224a1bf91f42123e53886343b5d17 748a8b99e224a1bf91f42123e5388634
3b5d17 748a8b99e224a1bf91f42123e5388634
JADSON SANTOS338 views
Protocolo de memória I2C e SPI by Pedro Raphael
Protocolo de memória I2C e SPIProtocolo de memória I2C e SPI
Protocolo de memória I2C e SPI
Pedro Raphael4.9K views
Microcontroladores PIC.pptx by fmtpereira
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
fmtpereira25 views
Projeto final módulo 4 by y3vg3n
Projeto final módulo 4Projeto final módulo 4
Projeto final módulo 4
y3vg3n454 views

More from italomaia

Scraping for fun and glory by
Scraping for fun and gloryScraping for fun and glory
Scraping for fun and gloryitalomaia
1K views42 slides
Scraping for fun and glory annotated by
Scraping for fun and glory annotatedScraping for fun and glory annotated
Scraping for fun and glory annotateditalomaia
534 views34 slides
Empty - The Flask Boilerplate by
Empty - The Flask BoilerplateEmpty - The Flask Boilerplate
Empty - The Flask Boilerplateitalomaia
867 views9 slides
Conhecendo o pug-ce by
Conhecendo o pug-ceConhecendo o pug-ce
Conhecendo o pug-ceitalomaia
226 views7 slides
Django Object factory by
Django Object factoryDjango Object factory
Django Object factoryitalomaia
278 views24 slides
Django Tem Ritmo by
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmoitalomaia
407 views15 slides

More from italomaia(6)

Scraping for fun and glory by italomaia
Scraping for fun and gloryScraping for fun and glory
Scraping for fun and glory
italomaia1K views
Scraping for fun and glory annotated by italomaia
Scraping for fun and glory annotatedScraping for fun and glory annotated
Scraping for fun and glory annotated
italomaia534 views
Empty - The Flask Boilerplate by italomaia
Empty - The Flask BoilerplateEmpty - The Flask Boilerplate
Empty - The Flask Boilerplate
italomaia867 views
Conhecendo o pug-ce by italomaia
Conhecendo o pug-ceConhecendo o pug-ce
Conhecendo o pug-ce
italomaia226 views
Django Object factory by italomaia
Django Object factoryDjango Object factory
Django Object factory
italomaia278 views
Django Tem Ritmo by italomaia
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmo
italomaia407 views

Recently uploaded

Shift left DevOps Experience by
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps ExperienceWalter Coan
5 views19 slides
certificado excel.pdf by
certificado excel.pdfcertificado excel.pdf
certificado excel.pdfjuniorcarvalho136
5 views1 slide
Skills e Squads, como trabalhar? by
Skills e Squads, como trabalhar?Skills e Squads, como trabalhar?
Skills e Squads, como trabalhar?Annelise Gripp
32 views13 slides
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023 by
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023
MAPA - SAÚDE - FUNDAMENTOS DE FARMACOLOGIA - 54/2023AcademicaDlaUnicesum
6 views3 slides
DevFest2023-Pragmatismo da Internet das Coisas by
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das CoisasWalter Coan
25 views40 slides
VIRTUS 1.6 MSI.pdf by
VIRTUS 1.6 MSI.pdfVIRTUS 1.6 MSI.pdf
VIRTUS 1.6 MSI.pdfFbioVieira85
5 views13 slides

Recently uploaded(9)

Shift left DevOps Experience by Walter Coan
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps Experience
Walter Coan5 views
Skills e Squads, como trabalhar? by Annelise Gripp
Skills e Squads, como trabalhar?Skills e Squads, como trabalhar?
Skills e Squads, como trabalhar?
Annelise Gripp32 views
DevFest2023-Pragmatismo da Internet das Coisas by Walter Coan
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das Coisas
Walter Coan25 views
Conheça agora o UiPath Autopilot™ para o Studio.pdf by BrunaCavalcanti29
Conheça agora o UiPath Autopilot™ para o Studio.pdfConheça agora o UiPath Autopilot™ para o Studio.pdf
Conheça agora o UiPath Autopilot™ para o Studio.pdf
TechConnection 2023 Floripa Azure Container Apps by Walter Coan
TechConnection 2023 Floripa Azure Container AppsTechConnection 2023 Floripa Azure Container Apps
TechConnection 2023 Floripa Azure Container Apps
Walter Coan6 views

IX Pylestras - SmartGrid com Python

  • 1. Implementando Smart Grid com Python: Uma Visão Geral dos desafios e soluções
  • 2. Quem sou eu? ● Paolo Oliveira ● Engenharia de Telecomunicações – IFCE ● LIT – Laboratório de Inovação Tecnológica ● Usuário python a uma década
  • 3. Smart Grid ● Aplicação de conceitos de rede eletrica distruibuida inteligente, que pode monitorar seu próprio fluxo eletrico e se ajustar as condições adversas, reconfigurando os dispositivos que a compõe através da automação e integração de todos os elementos da rede. E para tal, é necessário haver comunicação entre elementos que acompoem.
  • 4. Problemas do Mundo Real ● Infinidade de Protocolos de Comunicação, muitos deles fechados (embora existam os abertos e bem conhecidos como DNP3, Modbus e IEC61850); ● Rede Elétrica "analógica" (poucos ou nenhum equipamento inteligente disponível); ● Conectividade complexa em locais distantes (geralmente restrito ao GPRS); ● Etc.
  • 6. SCADA Supervisory Control And Data Acquisition ● Melhor forma de gerenciar. Entretanto... ● Licenças “estupidamente” caras e individuais para cada conexão; ● Só “fala” protocolos conhecidos e/ou abertos.
  • 7. Solução ● Gateway integrador, decodificando os protocolos, abertos e fechados, e traduzindo-os entre si, permitindo interoperabilidade, ao passo em que que fornece acesso a monitoramento e gerenciamento industrial através do SCADA, e de forma genérica através de webservice.
  • 8. Necessidades na implementação da Solução ● Garantia na execução de código em intervalos de tempo finitos bem definidos; ● Facilidade em codificar e decodificar protocolos proprietarios(parsing e validação de estruturas); ● Gerenciamento eficaz e simples de comunicação serial e TCP/IP.
  • 9. Garantia na execução de código em intervalos de tempo finitos bem definidos ● Criação de um “watchdog” com a biblioteca thread ● No construtor: self.watchdog = threading.Timer(0.2, self.WDT) self.watchdog.start() ● No método WDT: def WDT(self): ● self.watchdog.cancel() (…) # chamadas a serem executadas self.watchdog = threading.Timer(0.2, self.WDT) self.watchdog.start()
  • 10. Garantia na execução de código em intervalos de tempo finitos bem definidos ● Iniciar todos os modulos via thread: if __name__=='__main__': threading.Thread(target=thread_modbus).start() threading.Thread(target=thread_ws).start() … ● Com isto, eu garantia meu código lendo o pool Modbus a cada 0.2 segundos, tempo limite para desarmar a rede elétrica de baixa tensão.
  • 11. Executar o servidor modbus “fora” ● Implementação simples(<20 linhas de código); ● Quantidade imoral de acessos... Deixa o S.O. cuidar dele ;D
  • 12. Facilidade em codificar e decodificar protocolos proprietarios Design de uma forma genérica de escrever protocolos: ● Definir todos os campos do frame como variáveis globais. ● Criar um método encode() que le as variaveis globais e “monta” o pacote, computando tamanhos e CRC; ● Criar um método decode() que pega um frame e o decodifica, liberando os valores nas variaveis globais; ● Uso massivo do pack e unpack da bibliteca struct; ● Fácil de trabalhar, fácil de fazer um novo, e sem necessidade de mexer com o módulo parental, que so se importa em chamar encode() e decode() dos módulos de cada protocolo.
  • 14. Gerenciamento eficaz e simples de comunicação serial e TCP/IP ● Bom, é python... Com os já muito bons modelos de gerenciamento de conexão, unindo os métodos de conexão e leitura dentro de um try/except/else/finally, o sistema fica completamente estável. ● Lembrar de sempre usar o allow_reuse_address = True para evitar dor de cabeça
  • 15. Nem tudo são flores ● São valores enormes e dados que o python, por padrão, não sabe lidar. Então mesmo depois de entender os protocolos, é preciso converter os dados para usá-los de alguma forma. E, digamos que não é a coisa mais fácil do mundo...
  • 17. E ainda assim, tem vezes que o python sozinho não dá conta, ou demoraria muito para “pythonizar” a solução. Para ester momentos, nos temos...
  • 18. CTYPES + muita coragem ● ctypes é a cola perfeita, mas ainda assim dá muito trabalho; ● Muita coisa velha é feita em PIC, não existe documentação do protocolo/funções; ● Converter código de PIC para python doi. EXEMPLO
  • 23. Chega de me envergonhar...
  • 25. Reutilizar a metodologia ● Smart QUALQUERCOISA
  • 27. SCADA