Рубрики
Без рубрики

Объяснение IIOT и потоковых проектов событий с помощью моделей

Как построить аппаратный считыватель для чтения продукта IIOT и повторения с использованием симулятора, если … с меткой Ruby, Python, IoT, Raspberrypi.

Как построить аппаратный считыватель продукта IIOT Factory и данные воспроизведения с помощью симулятора

Если вы работаете в нем или в команде разработчиков, вам может быть трудно объяснить преимущества потоковой передачи событий или промышленного Интернета (IIOT) для внешних заинтересованных сторон. Это когда модель или симулятор пригодится.

Создание модели решения IIOT, которое вы предлагаете, может помочь вам продемонстрировать, как оно работает и почему это ценно. Позволяет заинтересованным сторонам увидеть ваше решение в действии, помогает всем лучше понять техническое решение – это ключ к получению их поддержки. Модель должна быть функциональной в любой момент – вы никогда не знаете, когда люди зайдут! Это также нужно легко скорректировать и выглядеть профессионально.

В этом посте мы начнем создавать такую заводскую модель IIOT, создав датчик читателя продукта, который записывает данные из различных сценариев, таких как обычный постоянный поток продукта, режимы начала и стоп и различные типы инцидентов.

Мы хотим отправить самое теплое спасибо команде Eteventure Tech Guild за их отличную поддержку по созданию аппаратного и датчика модели! Это было бы невозможно без вашей помощи.

Мы также делимся концепциями и советами по разработке программного обеспечения для симулятора, которое в любой момент воспроизводит потоки данных, чтобы программисты могли использовать его для создания собственных прототипов. Мы уже используем такое симуляторное программное обеспечение для транспортных средств – вы можете узнать больше в нашем посте в блоге Ride Hard.

Концепция датчика чтения продукта в модели IIOT Factory Model

Фабрики имеют различные типы потоков продуктов, идущие или выходят из своих машин. Для того, чтобы сохранить заводскую модель абстрактной и достаточно гибкой, чтобы охватить как можно больше случаев использования, мы используем бумажную полосу с QR -кодами. Каждый QR -код имеет данные JSON с указанным форматом, закодированным, но содержание данных продукта полностью гибко. Таким образом, при чтении QR -кодов мы можем имитировать различные типы продуктов и инцидентов, просто непосредственно кодируя их в QR.

Для датчика данных продукта мы используем Raspberry Pi 4 с модулем камеры и сценарием Python, сканирующим QR -коды. Кроме того, Raspberry Pi запускает программное обеспечение, очень похожее на наш сервер IIOT с открытым исходным кодом. Изменения, которые мы сделали, позволяют ему записывать локально, а также транслировать все события датчиков и журналы команд API через VPN в кластер Kafka, который мы работаем.

Мы организуем нашу камеру и Raspberry Pi, чтобы мы могли перетаскиваться вдоль бумаги с помощью QR -кодов под установкой. Заводское программное обеспечение записывает события и в то же время передает их в наш кластер Kafka в облаке. Записанные события, которые мы храним в «Файле трассировки», которые будут воспроизведены позже нашим заводским программным обеспечением.

Сделайте бумажные полосы с QR -кодами из данных JSON

Мы используем следующий сценарий Ruby для создания HTML -страниц с QR -кодами SVG. Храните файл локально на вашем компьютере как “./make_qr_strip.rb”.

require 'json'
require 'rqrcode'              

data_file = ARGV[0]
data = JSON.parse(File.open("./qr_data/#{data_file}.json").read)

qr_strip_html =
  '
' + data.map do |row| row.map do |record| qrcode = RQRCode::QRCode.new(record.to_json) '' + qrcode.as_svg( offset: 0, color: '000', shape_rendering: 'crispEdges', module_size: 6, standalone: false ) + '' end.join end.join('
') + '
' html_page = '' + qr_strip_html + '' File.open("./qr_strips/#{data_file}.html", 'w') { |f| f.puts html_page }

Создайте каталог “./qr_data/”, чтобы хранить различные файлы JSON, содержащие данные продукта для ваших различных сценариев. В нашем случае это называется «factory_intro_1.json». Добавьте столбцы и ряды по желанию. Формат для каждого файла заключается в следующем:

[
  [                            
    {"name":"product_id","value":"123456","data":{"variant":"2b","color":"green"}},
    {"name":"product_id","value":"123451","data":{"variant":"2b","color":"green"}}
  ],
  [
    {"name":"product_id","value":"123452","data":{"variant":"2b","color":"green"}},
    {"name":"product_id","value":"123457","data":{"variant":"2d","color":"red"}}
  ]
]

Создайте каталог “./qr_strips/” Сценарий хранит ваши полоски. Наконец -то беги Ruby ./make_qr_strip.rb (например, ruby ./make_qr_strip.rb factory_intro_1 ) и найдите свою полосу в виде HTML -файла в папке “./qr_strips/”. Откройте файл полоса в браузере и распечатайте его.

H2: Установите модуль камеры Raspberry Pi и используйте его в качестве датчика считывателя продукта

Выключите свой Raspberry Pi 4 и подключите модуль камеры к слоту камеры. Запустите Raspberry Pi и в меню «Interfaces» на конфигурации Raspberry Pi на Tab «Включение камеры.

Чтобы установить наш сценарий чтения QR -кода, вам нужен Python3 и PIP3 установлен. Затем установите следующие программные библиотеки для обработки видео и обработки изображений и чтения QR -кода через PIP3 Установить OpenCV-Python Imutils Pyzbar Анкет

Храните следующий сценарий локально, например, В файле “./product_reader.py” и запустите считывающего считывания продукта QR -кода в терминале с командой python3 ./product_reader.py .

from __future__ import print_function
import pyzbar.pyzbar as pyzbar 
import numpy as np
import cv2
from picamera import PiCamera
from imutils.video import VideoStream
import argparse
import datetime
import imutils
import time
import requests
from time import sleep

print("Start Video Stream")
vs = VideoStream(usePiCamera=True).start()
time.sleep(2.0)

last_3 = [None, None, None]
json_type_header = {'Content-Type': 'application/json'}

while True:
    frame = vs.read()
    frame = imutils.resize(frame, width=400)
    qr_codes = pyzbar.decode(frame) 
    for qr_code in qr_codes:
        qr_data = qr_code.data.decode('utf-8')
        if last_3.count(qr_data) == 0:
            print(qr_data)
            # DO SOMETHING USEFUL
            # In our case a local HTTP request
            # print(resp.status_code)         
            # if resp.status_code == 400:     
                # print(resp.json())              
            last_3.pop(0)
            last_3.append(qr_data)
    time.sleep(0.5)

Поместите QR -код перед вашей камерой, и ваш запущенный скрипт должен вывести данные, закодированные в вашем QR -коде. В нашей модели мы используем этот скрипт для отправки отсканированных данных продукта в наше программное обеспечение Factory Server IIOT, которое затем записывает событие и отправит данные в наш кластер KAFKA.

Пока мы делаем это, мы записываем фирменный файл, который мы можем воспроизвести в симуляторе позже. Похоже:

{"name":"product_id","value":"123456","data":{"variant":"2b","color":"green"},"timestamp":1598365799.4526498}
{"name":"product_id","value":"123452","data":{"variant":"2b","color":"green"},"timestamp":1598365804.0941744}
{"name":"product_id","value":"123458","data":{"variant":"2c","color":"gray"},"timestamp":1598365809.2619932}
{"name":"product_id","value":"123451","data":{"variant":"2b","color":"green"},"timestamp":1598365816.2038214}
{"name":"product_id","value":"123457","data":{"variant":"2d","color":"red"},"timestamp":1598365820.4342263}
{"name":"product_id","value":"123453","data":{"variant":"2b","color":"green"},"timestamp":1598365824.5778954}

Далее у вас есть 2 варианта. Либо вы можете создать сценарий симулятора, читая файл трассировки и все его события. Например, вы можете сгруппировать все события определенного интервала времени, а затем повторить эти группы событий, транслировать их в свой собственный кластер Kafka и паузу для длины интервала времени между ними.

Или создать бесплатное Xapix Community Edition учетная запись и > Продолжить чтение < Полная версия статьи в нашем блоге Xapix.

Присоединяйтесь к нашему сообществу IIOT

Мы работаем над многочисленными продолжениями этого блога и регулярно публикуем обновления в нашем сообществе Discord, чтобы помочь вам вдохновить вас на создание моделей и симуляторов IIOT. Мы тоже хотели бы услышать ваши идеи и сотрудничать над этим забавным проектом.

Пожалуйста, свяжитесь с нами на нашем Канал сообщества Discord Если вы хотите обсудить этот учебник или если у вас есть вопросы или отзывы о издании Community Xapix. Или действительно что -нибудь еще. Мы с нетерпением ждем вашего ответа.

Оригинал: “https://dev.to/oliverxapixio/explaining-iiot-and-event-streaming-projects-with-models-25l6”