Arduino, ESP8266 Lua, Raspberry Pi 2 && OpenHab. Умный дом: азы управления.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 12 май 2015.

  1. Kostya71

    Kostya71 Нуб

    Подскажите, как вывести температуру в openhab. В mqtt брокере принимаю: tele/sonoff/SENSOR = {"Time":"2020-03-20T19:09:55","DHT11":{"Temperature":23.5,"Humidity":59.0},"TempUnit":"C"}
    Создал в OH :
    demo.sitemap: Text item=climate_Temperature label="Температура [%.1f °C]" icon="Temperature"
    demo.items: String climate_Temperature "Temperature [JSONPATH($.temperature):%.1f °C]" {mqtt:topic:f1b434f0:Temperature}
    demo.things: Type number : climate_Temperature [stateTopic="tele/sonoff/SENSOR", transformationPattern="JSONPATH:$.DHT11.Temperature"] Ничего не выводится у меня, что я делаю не так?
     
  2. SergeiL

    SergeiL Оракул Модератор

    Думаю, что парсить правильно нужно. Я не парсю, у меня все свое, мне парсить не нужно.
    Может есть кто парсят чужие "прошивки", может ответят.
     
  3. Kostya71

    Kostya71 Нуб

    Я Tasmota прошил и сенсорные выключатели, и сонофф бейсик. Главное, как свич работает все в опенхаб, и телеметрию принимаю, и в iOs настроил, сири включает и выключает. Но не могу температуру вывести в меню.
     
  4. SergeiL

    SergeiL Оракул Модератор

    Тут не помогу, "Tasmota" не знаю. У меня все с 2016-го работает, ничего не правил, уже забывать начал.
     
  5. Kostya71

    Kostya71 Нуб

    А с брокером работаете?
     
  6. SergeiL

    SergeiL Оракул Модератор

    Естественно. Москито с 16-го года работает.
     
  7. Kostya71

    Kostya71 Нуб

    Я вот что думаю, может в Configure chanhel - t в настройках есть такие строки:
    Transform Values- Incoming Value Transformations . И дальше подтекст: Applies transformations to an incoming MQTT topic value. A transformation example for a received JSON would be "JSONPATH:$.device.status.temperature" for a json {device: {status: { temperature: 23.2 }}}. You can chain transformations by separating them with the intersection character ∩. Может там что нужно вписать?
     
  8. SergeiL

    SergeiL Оракул Модератор

    Не, в москито есть топик. Туда должны передаваться данные.
    Посмотрите, что передается подписавшись на топик из командной строки.
    Дальше нужно разобрать данные, если там не один параметр.
    Как - это как можете. Может NodeRed, или еще что-то. Я в rules разбираю.
     
  9. Kostya71

    Kostya71 Нуб

    Вот так в брокер приходит: tele/sonoff/SENSOR = {"Time":"2020-03-20T19:59:55","DHT11":{"Temperature":23.3,"Humidity":58.0},"TempUnit":"C"}
     
  10. Kostya71

    Kostya71 Нуб

    Эту телеметрию он разбирает:
    tele/sonoff/STATE =
    20T20:04:55","Uptime":"0T02:00:14","UptimeSec":7214,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":21,"MqttCount":1,"POWER":"OFF","Wifi":{"AP":1,"SSId":"ASUS","BSSId":"EC:45:16:EB:E4:9H","Channel":7,"RSSI":100,"Signal":-42,"LinkCount":1,"Downtime":"0T00:00:08"}}
     
  11. SergeiL

    SergeiL Оракул Модератор

    После $., строка должна совпадать с тем, что приходит до буквы. У Вас должно быть просто $.Temperature
    Но я парсю строки с координатами в rules, если нужно могу выложить пример.
     
  12. Kostya71

    Kostya71 Нуб

    Спасибо. Давайте, попробую.
     
  13. SergeiL

    SergeiL Оракул Модератор

    Items:
    Код (Text):
    String   mqttPositionSLRaw       "SL Raw Data [%s]"                           { mqtt="<[mosquitto:owntracks/SL/5s:state:default]" }

    String   mqttSLLatitude          "SL Lat [%s]"
    String   mqttSLLongitude         "SL Lon [%s]"
    String   mqttSLAccuracy          "SL Accuracy [%s]"
    String   mqttSLBattery           "SL Battery [%s%%]"       <battery>   (Phone, MQTT, Battery)
     
    В Item "mqttPositionSLRaw" прилетают данные, которые нужно разобрать, пересчитать, и в зависимости от результатов разложить по отдельным Item.

    Прилетает строка типа этого:
    {"_type": "location", "lat": "23.5030314", "lon": "2.3444293","tst": "1322646456", "acc": "21.05", "batt": "40"}

    В Rules есть правило, которое запускается если mqttPositionSLRaw обновляется:
    Код (C++):
    rule "MqttPostionParseSL"
      when
        Item mqttPositionSLRaw changed
      then
        var String json = (mqttPositionSLRaw.state as StringType).toString
         
        // {"_type": "location", "lat": "23.5030314", "lon": "2.3444293","tst": "1322646456", "acc": "21.05", "batt": "40"}
     
        var String type = transform("JSONPATH", "$._type", json)
     
        logInfo("SL_Position", json)
     
        if (type == "location")
        {
          var String lat  = transform("JSONPATH", "$.lat", json)
          var String lon  = transform("JSONPATH", "$.lon", json)
          var String acc  = transform("JSONPATH", "$.acc", json)
          var String batt = transform("JSONPATH", "$.batt", json)
       
          var Integer accuracy = new Integer(acc)

          sendCommand(mqttSLLatitude,  lat)
          sendCommand(mqttSLLongitude, lon)
          sendCommand(mqttSLAccuracy,  acc)
          sendCommand(mqttSLBattery,  batt)
        }
        // ........
        // ........
    end
    Посмотрите правило, там все просто.
    Создается новая строка и в нее вытаскивается значение по шаблону.
    Дальше работаем со строкой, можно перевести число (пример: accuracy)
     
  14. SergeiL

    SergeiL Оракул Модератор

    У Вас похоже нужно за два раза парсить.
    В первую строку вытащить "$.DHT11", а потом, уже из нее, вытаскивать "$.Temperature" и "$.Humidity"

    Как то так:
    Код (C++):
          var String dht11  = transform("JSONPATH", "$.DHT11", json)
          var String temp   = transform("JSONPATH", "$.Temperature", dht11)
          var String hum    = transform("JSONPATH", "$.Humidity", dht11)
     
    Но я не уверен, у меня таких примеров не было.
     
    Последнее редактирование: 22 мар 2020
  15. Kostya71

    Kostya71 Нуб

    Пришла с поднебесной ESP8266. Прошил прошивкой ESP_Easy_mega, подвесил DHT22, создал топик в OPENHAB и температура с влажностью вывелись без проблем. А все потому, что там телеметрия выводится индивидуально. Температура, только цифры температуры. Также и с влажностью. Мне вот нравится больше прошивка Тасмота, но там телеметрия выводится пакетом, и опенхабу нужно объяснить какие цифры выбрать. В чем я не силен.
     
  16. Kostya71

    Kostya71 Нуб

    Ну, сегодня весь день у меня свободный, буду экспериментировать.
     
  17. SergeiL

    SergeiL Оракул Модератор

    Я проверил, все работает в таком виде:
    Код (Text):
    items:

    Number   Temp_01  "Temp [%.2f °C]"   { mqtt="<[mosquitto:tele/sonoff/SENSOR:state:JSONPATH($.DHT11.Temperature)]" }
    Number   Hum_01    "Hum  [%.2f °C]"   { mqtt="<[mosquitto:tele/sonoff/SENSOR:state:JSONPATH($.DHT11.Humidity)]" }

    sitemap:

    Text item=Temp_01 icon="temperature"
    Text item=Hum_01  icon="humidity"
     
    Tasmota у меня нет, поэтому посылал вашу строчку из командной строки:
    Код (Text):
    mosquitto_pub -d -t  tele/sonoff/SENSOR  -m "{\"Time\":\"2020-03-20T19:09:55\",\"DHT11\":{\"Temperature\":23.5,\"Humidity\":59.0},\"TempUnit\":\"C\"}"
    Tasmota.PNG
    Знак цельсия на % поменяете сами ;)
     
    Последнее редактирование: 22 мар 2020
  18. Kostya71

    Kostya71 Нуб

    А куда тогда вставлять этот топик {channel="mqtt:topic:cfeb11d7:Temperature"} ?
    Наверное вместо слова mosquitto
     
  19. Kostya71

    Kostya71 Нуб

    Создал mosquito topic и каналы Temp_01 и Hum_01 Чтобы было один в один., не выводит. По ходу, все таки нужно rules создавать
     
  20. SergeiL

    SergeiL Оракул Модератор

    Все про сhannel и things удаляйте, у меня и оно и так работает. Проверено!
    У меня все работает на 100%, там всего несколько строчек.
    Если не работает - выкладывайте лог...