projects:internetofthings:esphome

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
projects:internetofthings:esphome [2021/02/18 16:29] – [BLE bluetooth tracker] scipioprojects:internetofthings:esphome [2021/07/06 07:26] (current) – [ESP32 cam] scipio
Line 1: Line 1:
 ====== ESPHOME ====== ====== ESPHOME ======
  
 +===== ESP32 cam =====
  
-===== BLE bluetooth tracker =====+  * [[https://github.com/esphome/esphome/pull/1905|rtsp into esp32cam progress]] 
 + 
 + 
 + 
 +<code bash> 
 +#!/bin/sh 
 + 
 +TOKEN=... 
 + 
 +PAYLOAD="{\"directive\": {\"header\": {\"namespace\": \"Alexa.Discovery\", \"name\": \"Discover\", \"payloadVersion\": \"3\", \"messageId\": \"8db404f7-f5a1-495e-9a30-3a8af3bf94e0\"}, \"payload\": {\"scope\": {\"type\": \"BearerToken\", \"token\": \"...\"}}}}" 
 + 
 + 
 +curl -q -X POST \ 
 +  -d "$PAYLOAD"
 +  -H "Authorization: Bearer $TOKEN"
 +  -H "Content-Type: application/json"
 +  http://localhost:8123/api/alexa/smart_home | jq '.event.payload.endpoints[] | select(.displayCategories[0]=="CAMERA")' 
 +</code> 
 + 
 +in esp32 cam this section is missing in "capabilities" 
 +<code javascript> 
 +
 +      "type": "AlexaInterface", 
 +      "interface": "Alexa.CameraStreamController", 
 +      "version": "3", 
 +      "cameraStreamConfigurations":
 +        { 
 +          "protocols":
 +            "HLS" 
 +          ], 
 +          "resolutions":
 +            { 
 +              "width": 1280, 
 +              "height": 720 
 +            } 
 +          ], 
 +          "authorizationTypes":
 +            "NONE" 
 +          ], 
 +          "videoCodecs":
 +            "H264" 
 +          ], 
 +          "audioCodecs":
 +            "AAC" 
 +          ] 
 +        } 
 +      ] 
 +    }, 
 +</code> 
 + 
 +esp32 entry (missing some values) 
 + 
 +<code javascript> 
 +
 +  "displayCategories":
 +    "CAMERA" 
 +  ], 
 +  "cookie": {}, 
 +  "endpointId": "camera#citofono", 
 +  "friendlyName": "citofono", 
 +  "description": "camera.citofono via Home Assistant", 
 +  "manufacturerName": "Home Assistant", 
 +  "additionalAttributes":
 +    "manufacturer": "Home Assistant", 
 +    "model": "camera", 
 +    "softwareVersion": "2021.6.6", 
 +    "customIdentifier": "-camera.citofono" 
 +  }, 
 +  "capabilities":
 +    { 
 +      "type": "AlexaInterface", 
 +      "interface": "Alexa.EndpointHealth", 
 +      "version": "3", 
 +      "properties":
 +        "supported":
 +          { 
 +            "name": "connectivity" 
 +          } 
 +        ], 
 +        "proactivelyReported": true, 
 +        "retrievable": true 
 +      } 
 +    }, 
 +    { 
 +      "type": "AlexaInterface", 
 +      "interface": "Alexa", 
 +      "version": "3" 
 +    } 
 +  ] 
 +
 +</code> 
 + 
 + 
 +valid stream camera working in alexa 
 +<code javascript> 
 +
 +  "displayCategories":
 +    "CAMERA" 
 +  ], 
 +  "cookie": {}, 
 +  "endpointId": "camera#cancello", 
 +  "friendlyName": "camera cancello", 
 +  "description": "camera.cancello via Home Assistant", 
 +  "manufacturerName": "Home Assistant", 
 +  "additionalAttributes":
 +    "manufacturer": "Home Assistant", 
 +    "model": "camera", 
 +    "softwareVersion": "2021.6.6", 
 +    "customIdentifier": "-camera.cancello" 
 +  }, 
 +  "capabilities":
 +    { 
 +      "type": "AlexaInterface", 
 +      "interface": "Alexa.CameraStreamController", 
 +      "version": "3", 
 +      "cameraStreamConfigurations":
 +        { 
 +          "protocols":
 +            "HLS" 
 +          ], 
 +          "resolutions":
 +            { 
 +              "width": 1280, 
 +              "height": 720 
 +            } 
 +          ], 
 +          "authorizationTypes":
 +            "NONE" 
 +          ], 
 +          "videoCodecs":
 +            "H264" 
 +          ], 
 +          "audioCodecs":
 +            "AAC" 
 +          ] 
 +        } 
 +      ] 
 +    }, 
 +    { 
 +      "type": "AlexaInterface", 
 +      "interface": "Alexa.EndpointHealth", 
 +      "version": "3", 
 +      "properties":
 +        "supported":
 +          { 
 +            "name": "connectivity" 
 +          } 
 +        ], 
 +        "proactivelyReported": true, 
 +        "retrievable": true 
 +      } 
 +    }, 
 +    { 
 +      "type": "AlexaInterface", 
 +      "interface": "Alexa", 
 +      "version": "3" 
 +    } 
 +  ] 
 +
 + 
 +</code> 
 +===== BLE tracker smartband ===== 
 + 
 +==== esphome ==== 
 + 
 +enable esp32_ble_tracker and a binary sensor on ble_presence 
 +<code> 
 +esp32_ble_tracker: 
 + 
 +binary_sensor: 
 +  - platform: ble_presence 
 +    mac_address: E8:36:FD:20:E3:54 
 +    id: miband_presence_scipio 
 +    name: "MiBand presence scipio" 
 +</code> 
 + 
 +==== hass ==== 
 + 
 +automation directly on sensor created by esphome 
 +<code> 
 +- alias: cancello 
 +  trigger: 
 +    - entity_id: binary_sensor.miband_presence_scipio 
 +      platform: state 
 +      to: 'on' 
 +      for: 
 +        seconds: 2 
 +    - entity_id: binary_sensor.miband_presence_scipio 
 +      platform: state 
 +      to: 'off' 
 +      for: 
 +        seconds: 2 
 +  action: 
 +    - service: notify.alexa_media 
 +      data_template: 
 +        message: > 
 +          {% if is_state('binary_sensor.miband_presence_scipio', 'on') %} 
 +            'Stefano è arrivato' 
 +          {% else %} 
 +            'Stefano è partito' 
 +          {% endif %} 
 +        data: 
 +          type: announce 
 +          method: all 
 +        target: 
 +          - show 
 +          - Echo 
 +</code> 
 + 
 + 
 +example of added binary sensor defined on ble sensor 
 +<code> 
 +binary_sensor: 
 +  - platform: template 
 +    sensors: 
 +      miband_scipio_sticky: 
 +        value_template: >- 
 +          {{is_state('binary_sensor.miband_presence_scipio', 'on')}} 
 +        delay_off: 60 
 +</code> 
 + 
 + 
 +===== BLE bluetooth tracker (version 1) ===== 
 + 
 +hass input_boolean: 
 +<code yaml> 
 +beacon2_learn: 
 +  name: learn beacon2 
 +  initial: off 
 +  icon: mdi:mdi-tag-plus 
 + 
 +beacon2_active: 
 +  name: beacon2 is recently seen 
 +  icon: mdi:mdi-account-check 
 + 
 +beacon2_trigger: 
 +  name: beacon2 is now detected 
 +  initial: off 
 +  icon: mdi:mdi-account-check 
 +</code> 
 + 
 +hass input_text: 
 +<code> 
 +beacon1: 
 +  name: BLE beacon1 
 + 
 +beacon2: 
 +  name: BLE beacon2 
 +</code> 
 + 
 +hass scripts: 
 +<code> 
 +set_ibeacon: 
 +  sequence: 
 +    - condition: template 
 +      value_template: "{{ ibeacon != '' }}" 
 +    - service: script.set_beacon1 
 +      data_template: 
 +        ibeacon: "{{ ibeacon }}" 
 +    - service: script.set_beacon2 
 +      data_template: 
 +        ibeacon: "{{ ibeacon }}" 
 + 
 +set_beacon2: 
 +  sequence: 
 +    - service: script.beacon2_active 
 +      data_template: 
 +        ibeacon: "{{ ibeacon }}" 
 +    - condition: state 
 +      entity_id: input_boolean.beacon2_learn 
 +      state: "on" 
 +    - service: input_text.set_value 
 +      data_template: 
 +        entity_id: input_text.beacon2 
 +        value: "{{ ibeacon }}" 
 +    - service: input_boolean.turn_off 
 +      entity_id: input_boolean.beacon2_learn 
 + 
 +beacon2_active: 
 +  sequence: 
 +    - condition: template 
 +      value_template: "{{ ibeacon == states('input_text.beacon2') }}" 
 +    - service: input_boolean.turn_on 
 +      entity_id: input_boolean.beacon2_trigger 
 +    - delay: 1 
 +    - service: input_boolean.turn_off 
 +      entity_id: input_boolean.beacon2_trigger 
 + 
 + 
 +</code> 
 + 
 + 
 +           
 +hass automations: 
 +<code> 
 +- alias: "beacon2 is active" 
 +  trigger: 
 +    platform: state 
 +    entity_id: input_sensor.beacon2_trigger 
 +    to: "on" 
 +  condition: 
 +    condition: state 
 +    entity_id: input_boolean.beacon2_active 
 +    state: "off" 
 +  action: 
 +    - service: input_boolean.turn_on 
 +      entity_id: input_boolean.beacon2_active 
 +    - service: notify.alexa_media 
 +      data: 
 +        message: "Stefano è arrivato" 
 +        data: 
 +          type: announce 
 +          method: all 
 +        target: 
 +          - show 
 +          - Echo 
 + 
 +- alias: "beacon2 is not active after last presence" 
 +  trigger: 
 +    platform: state 
 +    entity_id: input_boolean.beacon2_trigger 
 +    to: "off" 
 +    for: 140 
 +  action: 
 +    - service: input_boolean.turn_off 
 +      entity_id: input_boolean.beacon2_active 
 +    - service: notify.alexa_media 
 +      data: 
 +        message: "Stefano è partito" 
 +        data: 
 +          type: announce 
 +          method: all 
 +        target: 
 +          - show 
 +          - Echo 
 +</code> 
 + 
 +panel 
 +<code yaml> 
 +type: entities 
 +entities: 
 +  - entity: input_boolean.beacon2_learn 
 +  - entity: input_text.beacon2 
 +  - entity: input_boolean.beacon2_trigger 
 +  - entity: input_boolean.beacon2_active 
 +title: Tracker cancello 
 +</code> 
 + 
 +esphome 
 +<code yaml> 
 +esp32_ble_tracker: 
 +  on_ble_advertise: 
 +    - then: 
 +      - homeassistant.service: 
 +          service: script.set_ibeacon 
 +          data: 
 +            ibeacon: !lambda |- 
 +              for (auto data : x.get_manufacturer_datas()) { 
 +                auto message = hexencode(data.data); 
 +                ESP_LOGD("ble_adv", "manufacturer_data: %s [%d]", message.c_str(), message.size()); 
 +                if (message.size() >= 73) { 
 +                  /* ibeacon = e2c56db5-dffb-48d2-b060-d0f5a71096e0 */ 
 +                  auto ibeacon = message.substr(6, 2) + message.substr(9, 2) + message.substr(12, 2) + message.substr(15, 2) + 
 +                    '-' + message.substr(18, 2) + message.substr(21, 2) + 
 +                    '-' + message.substr(24, 2) + message.substr(27, 2) + 
 +                    '-' + message.substr(30, 2) + message.substr(33, 2) + 
 +                    '-' + message.substr(36, 2) + message.substr(39, 2) + message.substr(42, 2) + message.substr(45, 2) + message.substr(48, 1); 
 +                  return ibeacon.c_str(); 
 +                } 
 +              } 
 +              return ""; 
 +</code> 
 + 
 +               
 +===== BLE bluetooth tracker (version 2) ===== 
 +<code yaml> 
 +text_sensor: 
 +  - platform: template 
 +    name: "BLE ibeacon" 
 +    id: template_text 
 + 
 + 
 +esp32_ble_tracker: 
 +  on_ble_advertise: 
 +    - then: 
 +      - lambda: |- 
 +          for (auto data : x.get_manufacturer_datas()) { 
 +            auto message = hexencode(data.data); 
 +            ESP_LOGD("ble_adv", "manufacturer_data: %s [%d]", message.c_str(), message.size()); 
 +            if (message.size() >= 73) { 
 +              /* ibeacon = e2c56db5-dffb-48d2-b060-d0f5a71096e0 */ 
 +              auto ibeacon = message.substr(6, 2) + message.substr(9, 2) + message.substr(12, 2) + message.substr(15, 2) + 
 +                '-' + message.substr(18, 2) + message.substr(21, 2) + 
 +                '-' + message.substr(24, 2) + message.substr(27, 2) + 
 +                '-' + message.substr(30, 2) + message.substr(33, 2) + 
 +                '-' + message.substr(36, 2) + message.substr(39, 2) + message.substr(42, 2) + message.substr(45, 2) + message.substr(48, 1); 
 +              id(template_text).publish_state(ibeacon.c_str()); 
 +            } 
 + 
 +          } 
 +</code> 
 + 
 + 
 +===== BLE bluetooth tracker (deprecated) =====
  
 parameters to change: parameters to change:
Line 45: Line 449:
  
 </code> </code>
 +
 +
 +
 +
  • projects/internetofthings/esphome.1613662185.txt.gz
  • Last modified: 2021/02/18 16:29
  • by scipio