Нужно ли мобильное приложение для wb

Установил и теперь слушает только на localhost - то что надо!
Спасибо!!!

Попутный вопрос. Для корректного старт/стоп/рестарта написал init-скрипт, но по “service wb2ih stop” останавливается долго - порядка 30 секунд. По какому сигналу лучше останавливать демон? Сейчас использую:
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON

И есть ли у него сигнал для “reload” ?

У меня стандартный

start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAMEBIN

отрабатывает за 1-2 сек

Сигнала для reload нет. Проще остановить и перезапустить.

А какой смысл писать --pidfile $PIDFILE, если wb2ih его не создает ? Или надо в файле конфигурации что-то указать ?

И еще - wb2ih при запуске ругается на:

07/09 11:26:09 [22428] Unknown template ‘fan’
07/09 11:26:09 [22428] Unknown template ‘alarm’

Это недоописано в его конфигфайле ?

А надеяться на появление графиков можно, если считать что я проявил интерес :slight_smile: ?
А то в родном WB WebUI графики неплохие, но держать в голове соответствие между именем сенсора и его назначением/местоположением напрягает.

Про pidfile видимо просто copy-paste.

Мой набор шаблонов:

  "templates": [
    {
      "template": "sensor",
      "type": "DevGenericSensor",
      "default": [ "value" ]
    },
    {
      "template": "Lux",
      "type": "DevLuminosity",
      "default": [ "lux" ]
    },
    {
      "template": "rgb",
      "type": "DevRGBLight",
      "controls": [
        {
          "name": "color",
          "type": "rgb"
        },
        {
          "name": "dimmable",
          "const": "0"
        },
        {
          "name": "whitechannel",
          "const": "0"
        }
      ]
    },
    {
      "template": "rgb_switch",
      "type": "DevRGBLight",
      "controls": [
        {
          "name": "color",
          "type": "rgb"
        },
        {
          "name": "Status",
          "type": "bool"
        },
        {
          "name": "dimmable",
          "const": "0"
        },
        {
          "name": "whitechannel",
          "const": "0"
        }
      ]
    },
    {
      "template": "CO2",
      "type": "DevCO2",
      "default": [ "concentration" ]
    },
    {
      "template": "sound_level",
      "type": "DevNoise",
      "default": [ "sound_level" ]
    },
    {
      "template": "atmospheric_pressure",
      "type": "DevPressure",
      "default": [ "atmospheric_pressure" ]
    },
    {
      "template": "rel_humidity",
      "type": "DevHygrometry",
      "default": [ "rel_humidity" ]
    },
    {
      "template": "temperature",
      "type": "DevTemperature",
      "default": [ "temperature" ]
    },
    {
      "template": "voltage",
      "type": "DevGenericSensor",
      "default": [ "voltage" ],
      "controls": [
        {
          "name": "unit",
          "const": "V"
        },
        {
          "name": "Value",
          "slot": "slot0"
        }
      ]
    },
    {
      "template": "resistance",
      "type": "DevGenericSensor",
      "default": [ "resistance" ]
    },
    {
      "template": "temp_humidity",
      "type": "DevTempHygro",
      "controls": [ "temp", "hygro" ]
    },
    {
      "template": "motion",
      "type": "DevMotion",
      "controls": [
        {
          "name": "Armable",
          "const": "0"
        },
        {
          "name": "Ackable",
          "const": "0"
        },
        {
          "name": "Armed",
          "const": "1"
        },
        {
          "name": "Tripped",
          "slot": "slot0"
        }
      ]
    },
    {
      "template": "light",
      "type": "DevSwitch",
      "controls": [
        { "name": "Status" }
      ],
      "default": [ "switch" ]
    },
    {
      "template": "fan",
      "type": "DevSwitch",
      "controls": [
        { "name": "Status" }
      ],
      "default": [ "fan" ]
    },
    {
      "template": "switch",
      "type": "DevSwitch",
      "controls": [
        { "name": "Status" }
      ]
    },
    {
      "template": "dimmable_light",
      "type": "DevDimmer",
      "controls": [
        {
          "name": "Status",
          "type": "bool"
        },
        {
          "name": "Level",
          "type": "percent",
          "slot": "slot0"
        }
      ]
    },
    {
      "template": "dimmer",
      "type": "DevDimmer",
      "controls": [
        {
          "name": "Status",
          "type": "bool"
        },
        {
          "name": "Level",
          "type": "percent",
          "slot": "slot0"
        }
      ],
      "default": [ "range" ]
    },
    {
      "template": "shutter",
      "type": "DevShutter",
      "controls": [
        {
          "name": "stopable",
          "const": "1"
        },
        {
          "name": "pulseable",
          "const": "1"
        },
        {
          "name": "Level",
          "type": "percent",
          "slot": "slot3"
        }
      ],
      "default": [ "range" ]
    },
    {
      "template": "binary_sensor",
      "type": "DevDoor"
    },
    {
      "template": "alarm",
      "type": "DevDoor"
    },
    {
      "template": "heater",
      "type": "DevThermostat",
      "controls": [
        "curtemp",
        "cursetpoint",
        {
          "name": "curmode",
          "values_map": [
            {
              "wb": "0",
              "ih": "off"
            },
            {
              "wb": "1",
              "ih": "on"
            }

          ]
        },
        {
          "name": "availablemodes",
          "const": "on,off",
          "slot": ""
        }
      ]
    }
  ],

Да, попробую. Давно хотел научиться получить данные об истории через mqtt-rpc…

По той же ссылке доступна альфа-версия с историей. В ней почти точно есть проблемы. Выложил для того чтобы можно было посмотреть, попробовать и дать обратную связь.

Классно работает!!!
Но есть какой-то временной сдвиг: для некоторых датчиков не дорисовывает график сегодняшнего дня на несколько часов. И чем больше графиков смотришь, тем больший промежуток не дорисовывает. Такое впечатление, портится верхняя граница диапазона данных из истории: запросил график на планшете - сегодняшний график не дорисован на 15 часов, запросил этот же график на смартфоне - те же 15 часов недостачи. Перезапуск wb2ih картины практически не изменяет.

А в веб интерфейсе все нормально?

В родном WB UI график полный, а в ImperiHome - неполный. И чем больше графиков смотришь - тем больше становится недостача. И если потом вернуться к ранее просмотренному графику с недостачей - недостача станет больше. Но это не для всех датчиков. От типа датчика не зависит - и w1 и wb-ms-this_v2 бывают нормальные и с недостачей. Примерно две трети графиков с недостачей. wb2ih у меня за nginx-ом, поэтому запросы видны хорошо - временные диапазоны в URL-ях одинаковые для нормальных и обрезанных графиков

Очень странно. Я же по сути отправляю тот же самый запрос, который отправляет web-интерфейс.

А можете сравнить запросы на уровне mqqt-rpc?

Для этого нужно на wb подписаться на rpc топики:
mosquitto_sub -v -t /rpc/#

Сделал.
Вот лог запроса для обрезанного графика:

/rpc/v1/db_logger/history/get_values/wb2ih_ImperiHome {“id”:29,“params”:{“channels”:[[“wb-ms-thls-v2_19”,“Temperature”]],“limit”:1000,“min_interval”:0,“timestamp”:{“gt”:1504950637,“lt”:1505123437},“ver”:1}}

Вот для полного графика:

/rpc/v1/db_logger/history/get_values/wb2ih_ImperiHome {“id”:30,“params”:{“channels”:[[“wb-w1”,“28-000007b7c9df”]],“limit”:1000,“min_interval”:0,“timestamp”:{“gt”:1504950781,“lt”:1505123581},“ver”:1}}

Первое предположение что limit:1000 маловато для двухсуточного графика, потому что в ответе на неполный график присутствует “has_more”:

/rpc/v1/db_logger/history/get_values/wb2ih_ImperiHome/reply {“error”:null,“id”:29,“result”:{“has_more”:true,“values”:[{“c”:0,“i”:520987,“max”:23.90,“min”:23.30,“t”:1504950706.623986,“v”:23.56865671641790},{“c”:0,“i”:521027,“max”:24.0,“min”:23.20,“t”:1504950826.520017,“v”:23.56438356164380},…

А в полном графике - его нет:

/rpc/v1/db_logger/history/get_values/wb2ih_ImperiHome/reply {“error”:null,“id”:30,“result”:{“values”:[{“c”:0,“i”:521002,“max”:26.5620,“min”:26.3750,“t”:1504950826.398995,“v”:26.4763750},{“c”:0,“i”:521044,“max”:26.3120,“min”:25.9370,“t”:1504950946.411018,“v”:26.1246250},…

Понял. Я уже начал использовать min_interval. Версию пока выложить не могу, у меня приложение стало периодически падать, выложу, когда найду что сломал :wink:

@avp После восстановления WB5 удалось вернуться к работе над новой версии wb2ih ?

Да. У меня получилась стабильная версия, показывающая историю по большинству устройств.

Там были странности с внезапными падениями приложения. Сейчас uptime несколько недель и все стабильно.

Могу выложить последнюю версию.

@avp Очень хотелось бы попробовать новую версию

https://www.dropbox.com/s/yul4qfd0erxk9ol/wb2ih?dl=1

Все работает без проблем - огромное спасибо !!!

@avp Что-то не получается описать в wb2ih.conf датчик CO2 - я вижу нормальный темплейт для IH, но не получается его подключить, так как в WB датчик не описан. А не описываю его в WB потому что там там его можно описать только как GenericSensor, который в IH отобразится как малопонятный.
При таком вот конфиге wb2ih молча не стартует без каких либо сообщений:

“general”: {
“load_rooms”: true,
“load_widgets”: true
},
“rooms”: [
{
"id: “room3”,
“name”: “Коридор”,
“widgets”: [
“wb-msw2_30/CO2”,
“wb-msw2_30/sound_level”
]
}
],

То есть я хочу только добавить два сенсора CO2 + Sound в комнату, описанную в WB. Еще где-то надо доописать ?

Через стандартные шаблоны wirenboard не получится скорее всего.

У меня работает следующим образом:

  1. В раздел templates конфига wb2ih нужно добавить шаблон:
  "templates": [
....
    {
      "template": "CO2",
      "type": "DevCO2",
      "default": [ "concentration" ]
    },
    {
      "template": "sound_level",
      "type": "DevNoise",
      "default": [ "sound_level" ]
    },
...
}
  1. В список устройств добавить что-то типа (возможно, не потребуется)
    {
      "id": "room3",
      "name": "Коридор",
      "widgets": [
        {
          "device": "wb-msw2_30/CO2",
          "name": "CO2",
          "template": "CO2"
        }
      ]
    }

@avp

Это у меня давно в wb2ih.conf есть

Не понял в какую секцию это добавлять ?

  • widgets_examples
  • rooms_examples
  • rooms

Вставка в любую из этих секций не дает стартануть wb2ih, который при уровне отладки 10 дает такое сообщение об ошибке:
18/12 16:01:26 [20693] Failed with exception 128(Failed to parse JSON file wb2ih.json. Error * Line 1, Сolumn 1
Syntax error: value, object or array expected.
)
Изменения в файле идут не на 1-й строке, а как минимум на 15-й.

Комнаты у меня загружаются из WB, мне надо лишь догрузить дополнительно в одну из комнат один-два дополнительных устройства, но с темплейтами самого wb2ih

В секцию rooms. Сама секция должна быть массивом

  "rooms": [
    {
      "id": "room7",
      "name": "Спальня",
      "widgets": [
        {
          "device": "CO2Sphere/CO2",
          "name": "CO2",
          "template": "CO2"
        }
      ]
    }
  ],