Форум OlegON > Программы и оборудование для автоматизации торговли > Оборудование > Торговые весы

Интеграция торговых весов в Home Assistant : Торговые весы

13.03.2025 20:49


01.12.2024 15:45
Есть еще программа, как раз для проверки работы протока CAS и для получения веса в режиме он-лйан на ПК.
Вложения
Тип файла: zip CASconnector.zip (650.1 Кб, 10 просмотров)
01.12.2024 18:03
А протокол POS2-M проверяется программой с официального сайта компании Штрих.
На Ютьюбе есть видео как это делается.
01.12.2024 18:05
Цитата:
Шнайт А протокол POS2-M проверяется программой с официального сайта компании Штрих.
На Ютьюбе есть видео как это делается.
Видео называется "M-ER 328AC работа по протоколу POS2-M"
01.12.2024 19:06
Видео не смотрел, если честно, не очень сейчас готов в это погружаться, но в свое время делал загрузку CAS, цепляя их какую-то родную DLL, просто посмотрел экспорты из нее, подключил и использовал функции. Очень давно дело было, но, думаю, суть и получения данных может быть точно такая же...
01.12.2024 19:25
OlegON, На видео -я просто хотел подтвердить что протоколы работают в обе стороны.
Но можно даже в одну сторону весы могут непрерывно гнать данные.
Надо их просто принимать платой ESP32, передавать и обрабатывать в HA.
Миниатюры
Нажмите на изображение для увеличения
Название: Разные отображения при одних и тех же компандах.jpg
Просмотров: 16
Размер:	88.4 Кб
ID:	12657  
01.12.2024 19:28
Вот например график с датчика CO2.
Тоже самое можно сделать и с весом, записывая например данные каждые 10 секунд.



(0.12Мб)
01.12.2024 19:35
Да я в курсе, у меня в свое время тоже был RODOS-16, которым я всякие измерения и изменения фиксировал и рисовал графики. Теперь хватает только CO2, за остальным следить совершенно надоело :)



ну вот еще пинги, чтобы понимать, когда сетку ломать начинают



Но, про весы, еще раз, если поставить что-то более-менее весомое на длительное время, то платформа будет проседать, калибровать замучаешься.
01.12.2024 20:20
Цитата:
OlegON Но, про весы, еще раз, если поставить что-то более-менее весомое на длительное время, то платформа будет проседать, калибровать замучаешься
Спасибо что обратили на этот аспект внимание. Не знал.
Длительное время это сколько?
Часов, дней, недель?
Весы до 15 кг, увлажниетель весит 14 кг.
Но я все равно буду готов пожертвовать и 3-5 дней держать увлажнитель на весах.
01.12.2024 20:33
Не знаю... Думаю, тут сильно разный опыт будет. Если вопрос разового эксперимента, то можно просто тест сначала провести, с каким-то эталоном. Речь, думаю, о днях.
12.03.2025 20:37
Сделал интеграцию в HA.

SQL код:
esphome:
  name: scales
  friendly_name: Scales

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:

api:
  encryption:
    key: "P4LyRccQlamwbhSyExhGYwxI4rpadMs3G96DNEH211U="

ota:
  password: "e683b53ecf4cfa24deef44dcaef4186e"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "Scales Fallback Hotspot"
    password: "vsGnPD6LQ9CZ"

captive_portal:

uart:
  id: uart_scales
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 9600

sensor:
  - platform: template
    name: "Scales Weight"
    id: scales_weight
    unit_of_measurement: "kg"
    accuracy_decimals: 3
    update_interval: 5s

binary_sensor:
  - platform: template
    name: "Scales Stability"
    id: stability_binary_sensor
  - platform: template
    name: "Scales Overload"
    id: overload_binary_sensor

script:
  - id: read_scales
    mode: queued
    then:
      - lambda: |
          static float last_weight = 0.0;
          static bool is_stable = false;
          static bool is_overload = false;

          id(uart_scales).write_byte(0x05);
          unsigned long start_time = millis();
          bool got_ack = false;
          uint8_t c;  // Исправлено: uint8_t вместо char

          while (millis() - start_time < 3000) {
            if (id(uart_scales).read_byte(&c) && c == 0x06) {
              got_ack = true;
              break;
            }
          }

          if (!got_ack) {
            ESP_LOGD("scales", "No ACK received");
            return;
          }

          id(uart_scales).write_byte(0x11);
          String response = "";
          start_time = millis();

          while (millis() - start_time < 1000) {
            if (id(uart_scales).read_byte(&c)) {
              response += (char)c;  // Исправлено: приведение к char при добавлении в строку
              if (c == 0x04) break;
            }
          }

          if (response.length() < 14) {
            ESP_LOGD("scales", "Invalid data packet - too short");
            return;
          }

          char stability = response[2];
          char sign = response[3];
          String weight_str = response.substring(4, 10);
          
          is_stable = (stability == 'S');
          is_overload = (sign == 'F');

          if (!is_overload) {
            float weight = weight_str.toFloat();
            if (sign == '-') weight = -weight;
            last_weight = weight;
            id(scales_weight).publish_state(weight);
          }

          id(stability_binary_sensor).publish_state(is_stable);
          id(overload_binary_sensor).publish_state(is_overload);

interval:
  - interval: 5s
    then:
      - script.execute: read_scales 
Часовой пояс GMT +3, время: 20:49.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.