GithubHelp home page GithubHelp logo

homespan / homespan Goto Github PK

View Code? Open in Web Editor NEW
1.5K 32.0 146.0 6.34 MB

HomeKit Library for the Arduino-ESP32

License: MIT License

C++ 89.53% C 9.72% Shell 0.05% Awk 0.70%
arduino-library esp32 homekit home-automation homekit-server arduino-ide homespan

homespan's Introduction

Welcome!

Welcome to HomeSpan - a robust and extremely easy-to-use Arduino library for creating your own ESP32-based HomeKit devices entirely within the Arduino IDE.

HomeSpan provides a microcontroller-focused implementation of Apple's HomeKit Accessory Protocol Specification Release R2 (HAP-R2) designed specifically for the Espressif ESP32 microcontroller running within the Arduino IDE. HomeSpan pairs directly to HomeKit via your home WiFi network without the need for any external bridges or components. With HomeSpan you can use the full power of the ESP32's I/O functionality to create custom control software and/or hardware to automatically operate external devices from the Home App on your iPhone, iPad, or Mac, or with Siri.

HomeSpan requires version 2 of the Arduino-ESP32 Board Manager. HomeSpan can be run on the original ESP32 as well as Espressif's ESP32-S2, ESP32-C3, and ESP32-S3 chips.

HomeSpan is currently NOT compatible with version 3.X of the Arduino-ESP32 Board Manager, since version 3 contains many breaking changes and is not backwards-compatible with version 2.X of the Arduino-ESP32 Board Manager. At present, HomeSpan can only be compiled under version 2.X of the Board Manager.

Note

Apple's new HomeKit architecture requires the use of a Home Hub (either a HomePod or Apple TV) for full and proper operation of any HomeKit device, including those based on HomeSpan. Without a Home Hub, HomeSpan cannot send notifications to the Home App - things like pushbuttons and temperature sensors will not be able to transmit updates to the Home App. Use of HomeSpan without a Home Hub is NOT recommended.

HomeSpan Highlights

  • Provides a natural, intuitive, and very easy-to-use framework
  • Utilizes a unique Service-Centric approach to creating HomeKit devices
  • Takes full advantage of the widely-popular Arduino IDE
  • 100% HAP-R2 compliance
  • Dozens of integrated HomeKit Services
  • Operates in either Accessory or Bridge mode
  • Supports pairing with Setup Codes or QR Codes

For the HomeSpan Developer

  • Extensive use of the Arduino Serial Monitor
    • Real-time, easy-to-understand diagnostics
    • Complete transparency to every underlying HomeKit action, data request, and data response
    • Command-line interface with a variety of info, debugging, and configuration commands
  • Built-in database validation to ensure your configuration meets all HAP requirements
  • Dedicated classes that utilize the ESP32's 16-channel PWM peripheral for easy control of:
    • LED Brightness (including auto-fading)
    • Servo Motors
  • Integrated Push Button and Toggle Switch functionality supporting single, double, and long presses of:
    • Physical pushbuttons that connect an ESP32 pin to either ground or VCC
    • Touch pads/sensors connected to an ESP32 pin (for ESP32 devices that support touch pads)
  • Integrated access to the ESP32's on-chip Remote Control peripheral for easy generation of IR and RF signals
  • Dedicated classes to control one- and two-wire addressable RGB and RGBW LEDs and LED strips
  • Dedicated classes to control stepper motors that can run smoothly in the background without interfering with HomeSpan
  • Dedicated class that faciliates seamless point-to-point communication between ESP32 devices using ESP-NOW
  • Integrated Web Log for user-defined log messages
  • Extensively-commented Tutorial Sketches taking you from the very basics of HomeSpan through advanced HomeKit topics
  • Additional examples and projects showcasing real-world implementations of HomeSpan
  • A complete set of documentation explaining every aspect of the HomeSpan API

For the HomeSpan End-User

  • Embedded WiFi Access Point and Web Interface to allow end-users (non-developers) to:
    • Set up Homespan with their own home WiFi Credentials
    • Create their own HomeKit Pairing Setup Code
  • Status LED and Control Button to allow end-users to:
    • Force-unpair the device from HomeKit
    • Perform a Factory Reset
    • Launch the WiFi Access Point
  • A standalone, detailed End-User Guide

❗Latest Update - HomeSpan 1.9.1 (07/03/2024)

  • HomeSpan now supports Tag-Length-Value ("TLV8") Characteristics!

    • adds new, fully-integrated TLV8() class library for the creation and management of TLV8 objects
    • includes methods to handle standard byte-stream VALUES as well as strings, numerical values, zero-length tags, and sub-TLVs
    • utilizes standard C++ iterators for easy access to reading and writing TLV8 records
    • adds new Characteristic methods getTLV(), getNewTLV(), and setTLV()
    • adds new CUSTOM_CHAR_TLV8() that allows for easy creation of custom TLV8 Characteristics
    • includes new Tutorial Example 22 - TLV8 Characteristics demonstrating use of the TLV8() class and TLV8 Characteristics
    • see the new TLV8 Characteristics page for complete details and documentation
  • New DisplayOrder TLV8 Characteristic

    • utlizes HomeSpan's new TLV8() library
    • allows you to specify the exact order in which the Input Sources for a Television Service are displayed in the Home App
    • see Tutorial Example 22 - TLV8 Characteristics for details
  • New AccessoryIdentifier Tutorial

  • Added support for customizing Pixel chips

    • new constructor Pixel(uint8_t pin, [pixelType_t pixelType]) allows your to set the order in which colors are transmitted to the pixel chip, where pixelType is one of the following:
      • PixelType::RGB, PixelType::RBG, PixelType::BRG, PixelType::BGR, PixelType::GBR, PixelType::GRB
      • PixelType::RGBW, PixelType::RBGW, PixelType::BRGW, PixelType::BGRW, PixelType::GBRW, PixelType::GRBW*
    • deprecated previous constructor Pixel(uint8_t pin, boolean isRGBW)
      • this constructor will continue to work, but you will receive a warning during compilation that it has been deprecated
      • users should switch to the new constructor to avoid potential compatibility issues with future versions of HomeSpan
    • added new method boolean isRGBW()
      • returns true if Pixel was constructed as RGBW, else false if constructed as RGB only (i.e. no white LED)
    • added new PixelTester sketch (found under Other Examples) to aid in determining the pixelType for any LED Strip
    • see the Adressable RGB LEDs page for details
  • New ability to read and set the IIDs of Services and Characteristics

    • adds new SpanService method getIID() that returns the IID of a Service
    • adds new SpanCharacteristic method getIID() that returns the IID of a Characteristic
    • adds new homeSpan method resetIID(int newIID) that resets the IID count for the current Accessory
    • see the API Reference for details
  • New ability to read Controller pairing data (for advanced use-cases only)

    • adds new homeSpan methods controllerListBegin() and controllerListEnd() that returns iterators to HomeSpan's internal linked-list of Controller data records
    • adds new methods to read each Controller's pairing data:
      • getID() - returns a pointer to the 36-byte Device ID of the controller
      • getLTPK() - a pointer to the 32-byte Long-Term Public Key of the controller
      • isAdmin() - returns true if the controller has admin permission, else returns false
    • adds new homeSpan method setControllerCallback() to set optional callback function that HomeSpan calls whenever a controller is added, removed, or updated
    • see the API Reference for details
  • HomeSpan now supports the write-response ("WR") protocol

    • added automated handling of the HomeKits's write-response ("WR") protocol*
      • not needed for any Characteristics that are currently supported by HomeSpan, but useful for experimentation and work with Custom Characteristics
    • added extra checks when using setVal()
      • a warning message is output on the Serial Monitor if setVal() is called to change the value of a Characteristic from within the update() method at the same time the Home App is sending an update request for that value
      • does not apply if setVal() is called from within update() to change the value of a Characteristic in response to a write-response request from the Home App
  • Converted the getLinks() SpanService method to a template function

    • allows user to automatically cast the elements of the returned vector into any specific Service type
    • also adds an optional parameter to restrict the elements of the returned vector to match a specified HomeSpan Service
    • see the API Reference for details
  • New ability to halt the pulse generation for a ServoPin

    • calling set(NAN) for a ServoPin halts the pulse generation, which (for most analog servos) allows the motor to be freely rotated
    • calling set(position), where position equal the desired number of degrees, restarts the pulse generation and sets the servo position accordingly
  • Refactored client/slot management to save memory and prepare for future integration of Ethernet support

    • fixed-array of Client/Socket connections replaced by dynamic linked-list
    • serial interface now only shows active client connections (rather than a fixed list of client slots)
    • deprecated homeSpan.reserveSocketConnections() since it is no longer needed
  • Fixed bug introduced in 1.9.0 that prevented homeSpan.setPairingCode() from saving (and subsequently using) the request Setup Pairing Code

    • this method now operates silently, unless an invalid pairing code is provided, in which case an error is reported to the Serial Monitor and the sketch is halted
    • the process for setting the Pairing Code using the CLI 'S' command or via the Access Point are unchanged - confirmation messages are still output to the Serial Monitor and errors do not cause the sketch to halt
  • Fixed memory leak introduced in 1.9.0 that would fail to free a small temporary memory block created when verifying a new connection

    • had no practical impact when using a Home Hub since Home Kit only creates a few permanent connections
    • had significant impact when not using a Home Hub in cases where the Home App repeatedly drops and re-establishes connections, resulting in slow erosion of heap memory and then out-of-memory failure of the device after a few days (note use of HomeSpan without a Home Hub is not formally supported)
  • Fixed latent bug in SpanPoint

    • HomeSpan would crash when printing SpanPoint configuration information to the Serial Monitor (the 'i' CLI command) if any of the instances of SpanPoint had receiveSize=0
    • this bug never surfaced before since all the SpanPoint examples were based on receiving data and therefore had a non-zero receiveSize
  • Deleted homeSpan.setMaxConnections(), which had been deprecated many versions ago

  • Deleted stand-alone SpanRange structure, which had been deprecated many versions ago

    • this has no impact on standard use of the Characteristic method setRange()

See Releases for details on all changes and bug fixes included in this update.

HomeSpan Resources

HomeSpan includes the following documentation:

  • Getting Started with HomeSpan - setting up the software and the hardware needed to develop HomeSpan devices
  • HomeSpan API Overview - an overview of the HomeSpan API, including a step-by-step guide to developing your first HomeSpan Sketch
  • HomeSpan Tutorials - a guide to HomeSpan's tutorial-sketches
  • HomeSpan Services and Characteristics - a list of all HAP Services and Characterstics supported by HomeSpan
  • HomeSpan Accessory Categories - a list of all HAP Accessory Categories defined by HomeSpan
  • HomeSpan Command-Line Interface (CLI) - configure a HomeSpan device's WiFi Credentials, modify its HomeKit Setup Code, monitor and update its status, and access detailed, real-time device diagnostics from the Arduino IDE Serial Monitor
  • HomeSpan User Guide - turnkey instructions on how to configure an already-programmed HomeSpan device's WiFi Credentials, modify its HomeKit Setup Code, and pair the device to HomeKit. No computer needed!
  • HomeSpan API Reference - a complete guide to the HomeSpan Library API
  • HomeSpan QR Codes - create and use QR Codes for pairing HomeSpan devices
  • HomeSpan OTA - update your sketches Over-the-Air directly from the Arduino IDE without a serial connection
  • HomeSpan PWM - integrated control of standard LEDs and Servo Motors using the ESP32's on-chip PWM peripheral
  • HomeSpan RFControl - easy generation of RF and IR Remote Control signals using the ESP32's on-chip RMT peripheral
  • HomeSpan Pixels - integrated control of addressable one- and two-wire RGB and RGBW LEDs and LED strips
  • HomeSpan Stepper Motor Control - integrated control of stepper motors, including PWM microstepping
  • HomeSpan SpanPoint - facilitates point-to-point, bi-directional communication between ESP32 Devices using ESP-NOW
  • HomeSpan Television Services - how to use HomeKit's undocumented Television Services and Characteristics
  • HomeSpan Message Logging - how to generate log messages for display on the Arduino Serial Monitor as well as optionally posted to an integrated Web Log page
  • HomeSpan TLV8 Characteristics - classes and methods for creating TLV8 objects to use with TLV8-based Characteristics
  • HomeSpan Device Cloning - seamlessly swap a broken device for a new one without needing to re-pair and lose HomeKit automations
  • HomeSpan Projects - real-world applications of the HomeSpan Library
  • HomeSpan FAQ - answers to frequently-asked questions
  • Solutions to Common Problems - resolutions to some common problems when using/compiling HomeSpan
  • HomeSpan Reference Sketches - a collection of self-contained Reference Sketches showcasing some of the more complex HomeKit Services, such as Thermostats and Irrigation Systems

Note that all documentation is version-controlled and tied to each branch. The master branch generally points to the latest release. The dev branch, when available, will contain code under active development.

External Resources

In addition to HomeSpan resources, developers who are new to HomeKit programming may find useful Chapters 8 and 9 of Apple's HomeKit Accessory Protocol Specification, Non-Commercial Version, Release R2 (HAP-R2). This document is unfortunately no longer available from Apple (perhaps because it was last updated July, 2019, and is now somewhat out-of-date). However, you may be able find copies of this document elsewhere on the web. Note Apple has not replaced the HAP-R2 document with any other versions for non-commercial use, and Apple's open-source HomeKit ADK only reflects the original HAP-R2 specs (rather than all the latest Services and Characteristics available in HomeKit for commercial devices).


Feedback or Questions?

Please post bug reports or other problems with HomeSpan to the Issues Board. Please post all other questions about HomeSpan (use, functionality, specs, examples, etc.) or any ideas or recommendations you may have for new functionality, or any general feedback about HomeSpan or HomeKit, to the Discussion Board. For more general questions or feedback not related to a specific HomeSpan issue or function, you can email me directly at [email protected].

About the Author

HomeSpan was developed and continues to be maintained and supported by Gregg Berman. It was originally conceived to solve the pesky problem of not being able to operate an RF-controlled kitchen vent hood with Siri. I hope you find it useful as well as fun to use.

This is my second large-scale open-source project --- my first was the design of an open-source sytem for operating model railroads using nothing more than an Arduino Uno and Arduino Motor Shield to generate digital command and control (DCC) signals. Though I have not been involved with the model railroading hobby for many years, videos showcasing my original system (dubbed DCC++), along with detailed tutorials of how it works, are still available on the DCC++ YouTube Channel.

homespan's People

Contributors

aaaidan avatar flashspys avatar frankonski avatar homespan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

homespan's Issues

pin interrupt while nvs

I have to wrap all nvs operations to prevent panic if any receiving RF libs are included

gpio_intr_disable(gpio_num_t(22));
nvs_set_blob(HAPClient::srpNVS,"VERIFYDATA",&verifyData,sizeof(verifyData));                              // update data
nvs_commit(HAPClient::srpNVS);
gpio_intr_enable(gpio_num_t(22));  

is there any way to avoid it?

Setting wifi credentials with platformio terminal

Issue: can't set wifi password on PlatformIO

I was trying to set the wifi password in PlatformIO's serial monitor a few times, but it never worked (it failed to connect as if I had typed the wrong password). Then I remembered I'd succeeded in Arduino's serial monitor, so I tried it there and it worked first try (same password).

PIO's serial monitor seems to work well with all other aspects of the Homespan serial UI, so I am guessing it is just sending commands slightly differently (perhaps an extra control character or a different line ending).

As at #3, @HomeSpan hadn't decided whether platformio is a "supported" target of the library, so this issue may be out of scope for the project. So ...

Aside: HomeSpan's "support" of PIO

Aside from this issue, it would be helpful to know whether PIO is in or out (even if just for now), because I don't want to clutter the project with unwelcome bugs and requests. PIO offers the Arduino Core as a framework for the ESP32 platform, which explains why HomeSpan seems to build and run perfectly. So perhaps the support burden is low enough to justify targeting it? 🤷‍♂️

Fwiw, for projects with any significant complexity, I think PIO is a much better IDE than Arduino.

Let me know if you want this question (of support) as a separate issue.

Negative temperature values do not register

Setting the characteristic CurrentTemperature for the service TemperatureSensor to a negative value results in the service becoming unresponsive. According to the log, it appears the value is being sent, but anything less than 0ºC or 32ºF causes the sensor to show "This accessory is not responding" in the Home app.

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 52

{"characteristics":[{"iid":10,"value":281,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 33.80

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 77

{"characteristics":[{"iid":9,"value":1,"aid":2},{"iid":9,"value":5,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 32.90

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 79

{"characteristics":[{"iid":9,"value":0.5,"aid":2},{"iid":9,"value":0,"aid":3}]}
-------- SENT ENCRYPTED! --------

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 52

{"characteristics":[{"iid":10,"value":385,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 32.00

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 77

{"characteristics":[{"iid":9,"value":0,"aid":2},{"iid":9,"value":1,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 31.10

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 80

{"characteristics":[{"iid":9,"value":-0.5,"aid":2},{"iid":9,"value":2,"aid":3}]}
-------- SENT ENCRYPTED! --------

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 52

{"characteristics":[{"iid":10,"value":321,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 30.20

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 78

{"characteristics":[{"iid":9,"value":-1,"aid":2},{"iid":9,"value":3,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 29.30

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 80

{"characteristics":[{"iid":9,"value":-1.5,"aid":2},{"iid":9,"value":4,"aid":3}]}
-------- SENT ENCRYPTED! --------

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 52

{"characteristics":[{"iid":10,"value":331,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 28.40

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 78

{"characteristics":[{"iid":9,"value":-2,"aid":2},{"iid":9,"value":5,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 27.50

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 80

{"characteristics":[{"iid":9,"value":-2.5,"aid":2},{"iid":9,"value":0,"aid":3}]}
-------- SENT ENCRYPTED! --------

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 52

{"characteristics":[{"iid":10,"value":399,"aid":3}]}
-------- SENT ENCRYPTED! --------
Temperature Update: 26.60

>>>>>>>>>> 10.0.1.197 >>>>>>>>>>
EVENT/1.0 200 OK
Content-Type: application/hap+json
Content-Length: 78

{"characteristics":[{"iid":9,"value":-3,"aid":2},{"iid":9,"value":1,"aid":3}]}
-------- SENT ENCRYPTED! --------

Some sensors are invalid

MotionSensor、OccupancySensor、SmokeSensor、CarbonDioxideSensor、CarbonMonoxideSensor、ContactSensor、
LeakSensor、LightSensor

QR Code Connection not working

Hello,
I'm trying to connect to the HomeSpan via the QR Code, but I am having some issues:

I'm using a ESP-32 from AzDelivery.
Arduino ESP32 Board Library: ESP32 v1.0.6
HomeSpan: v1.2.1

I upload any example sketch using default settings except Core Debug Level set to "Verbose".
Set a Code Via S Command (example: S 01201012)
Copy the Payload and create a QR Code from it.
Scanning the QR Code with the Home App opens the accessory adding page. When confirming and trying to add it times out after a while. There are no log messages from the ESP32 attempting a Pairing process.

However when booting I get these Errors:

[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"
[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"
[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"
[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"
[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"
[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"
[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"
[I][WiFiClient.cpp:517] connected(): Unexpected: RES: -1, ERR: 9
[E][WiFiClient.cpp:463] available(): fail on fd 0, errno: 9, "Bad file number"

I'm not sure if they are responsible for the non working QR Pairing.
Can someone help?

Unresponsive problem

I used the sample code and it worked, but it unresponsive after a few seconds.

I found this issue #22

I'm not sure if I need to modify the code in the example

if(target->timeVal()>5000) // simulate a garage door that takes 5 seconds to operate by monitoring time since target-state was last modified
current->setVal(target->getVal()); // set the current-state to the target-state

Setting Host Name appers not to work in wifi router's website

Hi all,

I'd like to change the name of my ESP32's within my wifi network to distinguish wich are connected and wich are not. Currently they all have the name "esp32-arduino".

InkedScreenshot 2021-07-17 111044_LI

I tried changing DEFAULT_DISPLAY_NAME, DEFAULT_HOST_NAME and DEFAULT_MODEL_NAME but only DEFAULT_DISPLAY_NAME seems to have an affect in homekit device name.

homeSpan.begin(Category::Thermostats, "asd", "asdf", "asdfg");

Who's at fault? My Code, Homespan's code or is it not possible with my router?
Thanks in advance


Full setup code:

Serial.begin(115200);
  //wifi settings
  homeSpan.enableAutoStartAP();                               // enables auto start-up of Access Point when WiFi Credentials not found
  homeSpan.setApSSID("Homekit Enter Wifi Credentials");  // set AP SSID
  homeSpan.setApPassword("");                                 // set AP Password
  //io
  homeSpan.setControlPin(0); // set boot button
  homeSpan.setStatusPin(13); // sets Status Pin
  homeSpan.begin(Category::Thermostats, "asd", "asdf", "asdfg");

Unresponsive after a few sec

Seems to be an issue with keep alive or something. After a device is controlled it and home app is closed returning to the app show the device, as not responding. Checking the status it shows clearly the controller is not connected.

Below you can see that 2.15 controller in the second log is missing, on that phone the device is registered as not responding.
It takes about 30 to 60 sec for it to return to normal.

*** HomeSpan Status ***

IP Address: 192.168.2.125

Accessory ID: 95:8E:CE:4F:73:00 LTPK: 55C361B17165B82A090A9304EBA9A3CE0E4A7BE8FB4C0622472CE295B21637B6
Paired Controller: 4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin) LTPK: C3D78004B03BD1FB647A0060F95BEA3BA2A525F08787FFF182684E179CF719DE
Paired Controller: 6FAC7B87-87AB-4C2A-9D23-8662370E474A (regular) LTPK: 6D4E135C9F5F5BF1AC50D39447E6A9F168AF17F7172A0C9CCBB6E82988162E0C
Paired Controller: 0ECE18E3-E7F4-4826-89A2-424F9E8143CE (regular) LTPK: E737AC061F15244611BC78738F2575D33B36F8A0070A8AAD13C038C1B45BF680
Paired Controller: 52248C77-D74A-482E-944F-5A611B27F27E (regular) LTPK: D6265CA92A929C122ECE223CF2D1A14C3E905F6D104F55C3772E58BA6B2345E0

Connection #0 192.168.2.87 ID=4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin)
Connection #1 192.168.2.76 ID=6FAC7B87-87AB-4C2A-9D23-8662370E474A (regular)
Connection #2 192.168.2.92 ID=4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin)
Connection #3 192.168.2.95 ID=52248C77-D74A-482E-944F-5A611B27F27E (regular)
Connection #4 192.168.2.15 ID=0ECE18E3-E7F4-4826-89A2-424F9E8143CE (regular)
Connection #5 (unconnected)
Connection #6 (unconnected)
Connection #7 (unconnected)

*** End Status ***

*** HomeSpan Status ***

IP Address: 192.168.2.125

Accessory ID: 95:8E:CE:4F:73:00 LTPK: 55C361B17165B82A090A9304EBA9A3CE0E4A7BE8FB4C0622472CE295B21637B6
Paired Controller: 4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin) LTPK: C3D78004B03BD1FB647A0060F95BEA3BA2A525F08787FFF182684E179CF719DE
Paired Controller: 6FAC7B87-87AB-4C2A-9D23-8662370E474A (regular) LTPK: 6D4E135C9F5F5BF1AC50D39447E6A9F168AF17F7172A0C9CCBB6E82988162E0C
Paired Controller: 0ECE18E3-E7F4-4826-89A2-424F9E8143CE (regular) LTPK: E737AC061F15244611BC78738F2575D33B36F8A0070A8AAD13C038C1B45BF680
Paired Controller: 52248C77-D74A-482E-944F-5A611B27F27E (regular) LTPK: D6265CA92A929C122ECE223CF2D1A14C3E905F6D104F55C3772E58BA6B2345E0

Connection #0 192.168.2.87 ID=4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin)
Connection #1 192.168.2.92 ID=4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin)
Connection #2 192.168.2.76 ID=6FAC7B87-87AB-4C2A-9D23-8662370E474A (regular)
Connection #3 192.168.2.95 ID=52248C77-D74A-482E-944F-5A611B27F27E (regular)
Connection #4 (unconnected)
Connection #5 (unconnected)
Connection #6 (unconnected)
Connection #7 (unconnected)

*** End Status ***

LED API not taking advantage of 13-bit ESP32 capability

Currently, LedPin::set() takes an integer percentage, meaning there are only 101 duty cycle steps for each LED: 0-100, not even 7 bits of precision. At the configured 5kHz frequency, the ESP32 supports 13-bit precision for duty cycle, i.e. 8192 steps. I propose that the library support all 13 bits.

The following line could be changed to use LEDC_TIMER_13_BIT.

ledTimer.duty_resolution=LEDC_TIMER_10_BIT;

The LedPin::LedPin(uint8_t pin, uint8_t level) and LedPin::LedPin(uint8_t pin, uint8_t level) functions would also need to be modified to take appropriate duty cycle values for level. Since the library already processes lightbulb commands in floating point, it might make since to use a floating point value 0-100 for these function headers.

Characteristics updates do not allow whitespace in values

When receiving characteristics updates from controllers, the 'value' property could have whitespace in it, the parser currently throws an error since it incorrectly parses the JSON if a property has whitespace in it. This is fixed in #121 , but if that does not get merged in, the fix is in commit 86f99f6

Remove accessories issue

Hello,

I have 3 Lightbulb, named L1, LB2 and LB3. I added LB1, LB2 and LB3 accessories, and it reflects on Home App as expected. Then I removed LB1 from code and flash the code to ESP32. But in Home App LB3 is removed instead of LB1, and now when I operate LB1 it updates LB2 and similarly LB2 updates LB3 lightbulb. So functionality is reflected but name on Home app doesn't changed.
But when I unpaired and paired again ESP32, then Lightbulb name changed to LB2 and LB3.

Please help me to resolve this issue.

Thank You

HID implementation?

Looking to build a BLE based game controller.

I didn't see any examples for HID, just wanted to verify this is implemented.

how to enter Device Configuration Mode?

I have an espressif DEV kit V4 board. there are only EN and Reset Button. which button you call it control button. and the LED is on always. don't change.
i am reading the HomeSpan User guide. i am confused. Pairing sometime doesn't work
Can you show it with a picture. thanks.

Category Television Not Supported

Hi thanks for your great Library.
I was trying to transfer a project to Homespan but unfortunately the Category Television is not Supported.
Could you add this please?
homekit_accessory_category_television

PWM Frequency

Hi,

I've found that using the PWM frequency as it is currently implemented can result in an audible ringing depending on the circuit being used on the output and the active duty cycle.

I adjusted the PWM frequency in homspan/src/extras/PwmPin.cpp out of the audible range (40000) - 40kHz.

Line 19: ledTimer.freq_hz=40000;

Might be worth changing if there isn't a down side?

Thanks for the great library!

Restarting after entering correct password can print confusing "error"

When the device restarts after entering the correct wifi password, there are usually a couple of messages about "Can't connect". This state lasts long enough that it has tricked me into trying again with different (incorrect!) credentials. This seems to be more about the device itself not being ready rather than the password being incorrect.

Is there a way to tell between "can't connect yet" and "wrong password"? Or perhaps rephrasing the message to "waiting to connect" or similar.

...
Accessory configuration number: 1

Connecting to: XXX... Can't connect. Re-trying in 5 seconds. Type 'X <return>' or press Control Button for 3 seconds to terminate search and delete WiFi credentials...
Connecting to: XXX... Can't connect. Re-trying in 5 seconds. Type 'X <return>' or press Control Button for 3 seconds to terminate search and delete WiFi credentials...
Success!  IP:  10.0.0.239

Starting MDNS...
Broadcasting as: HomeSpan-7BFF4D99B831.local (HomeSpan LightBulb / HomeSpan-ESP32)
...

WiFi Failed using setWifiCredentials("","");

Hello!

I used the same SSID, Password to connect to WiFi using CLI ("W" command) and it is getting connected to it.

But when I used the below code to try to connect to WiFi it Failed to connect

void setup_HomeKit()
{

  Serial.begin(115200);
  homeSpan.begin(Category::Lighting, "SGN_LEDS");
  homeSpan.setWifiCredentials("XXXX", "XXXXX");
  homeSpan.setLogLevel(HOMESPAN_LOG_LEVEL);
}

Can somebody please help me to solve this?

TIA.

Air Conditioners control

I can't find the information about the air conditioners switch and mode control in the HAP specification non commercial version document. It's convenient for me to tell you how to obtain these two parameters.

Thank you.

Include setOTAPassword

This is not an issue, just a suggestion, as the title say it would be great to have a setOTAPassword(pwd) as there is a setStatusPin(pin). It is not as easy to implement as the setStatusPin but I think it could be a great addition.

BTW thanks for your great effort, this library works flawlessly !

Device discovery and connection response speed

After I restore the factory settings, the device will take longer to be discovered,pairing time also takes a long time.
I used another library a few days ago and found this problem.

WiFi connect

Hello. I am using WiFiManager library which manages my connection. I am trying to pass wifi parameters from this library to HomeSpan:
homeSpan.setApSSID(wm.getWiFiSSID().c_str());
homeSpan.setApPassword(wm.getWiFiPass().c_str());
But it doesn't work. What am I doing wrong?

Make it possible to preset client SSID and password

As far as I can see it is not possible to set the SSID and password (for the wifi where the device will finally work in) via code. Like the homeSpan.setApSSID(ssid) method I propose homeSpan.setSSID(ssid) as well as for the passwords.

Button debouncing

If i use buttons like in the example 16 are the buttons automatic debounced?

Add ESP32 Touch

I’d like to use the button class but I’d like to be able to do touch sensitive instead of a button. Can I just copy/paste the class replacing the first “int” with “string” or does it get more complicated ?

Sorry, not a total novice but this is all way out of my wheelhouse.

Enable AP by default when no WIFI credentials

I don't see a point for manually enabling AP if you already have an USB connection to configure the WIFI credentials.

Probably, it would be best to directly starts in AP mode when no wifi credentials are available or let the user decide on init.

MQTT Revisited

I have integrated MQTT (PubSubClient) w/HomeSpan by delaying it's setup during initial boot. Things work great for 12 or so hours then HomeSpan becomes unresponsive and does not recover. However the MQTT comms remain functional.

Question: Is there a way to add a hook [or tell me a good place to look in the HS code] in order to have HomeSpan and MQTT coexist peacefully?

I tried different variations of ESP32 thinking it was a connectivity issue w/the HW my latest being the ESP32E and there appears to be no difference - it's a SW conflict. Somehow MQTT is interfering w/HomeSpan [even tho it's on port 1883] and HS is not reporting anything in the logs. MQTT is a major requirement for me as to have the ability to integrate w/Home Assistant along w/other controllers throughout the home [both incoming and outgoing messages]. I'm able to easily control the shades from MQTT and have their status be reflected on HomeKit. Sweet!

I've also tried running MQTT on different cores or on the same core under another process. This made no difference.
I'm running 6 large vertical shades and a customized SomfyRemote library using the CC1101 and have 20 allocated connections w/my setup. The custom variant uses nvs_flash rather than the original EEPROM to avoid storage conflicts.

Cpu panic would like some help

I am trying to add 18 devices to a bridge. (Question can the esp32 handle so many devices)
Below is the log file if you can shed some light I would appreciate it.

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac


Welcome to HomeSpan!
Apple HomeKit for the Espressif ESP-32 WROOM and Arduino IDE


** Please ensure serial monitor is set to transmit

Message Logs: Level 0
Status LED: Pin 2
Device Control: Pin 21
HomeSpan Version: 1.1.2
ESP-IDF Version: v3.2.3-14-gd3e562907
Sketch Compiled: Jan 2 2021 21:15:56

Device Name: Paradox Bridge

*** HomeSpan Info ***

+Accessory-1
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service HAPProtocolInformation-8 (A2)
---->Characteristic Version-9 (37)
+Accessory-2
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service SecuritySystem-8 (7E)
---->Characteristic SecuritySystemCurrentState-9 (66)
---->Characteristic SecuritySystemTargetState-10 (67)
+Accessory-3
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-4
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-5
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-6
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-7
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-8
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-9
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-10
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-11
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-12
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-13
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-14
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-15
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-16
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)
+Accessory-17
-->Service AccessoryInformation-1 (3E)
---->Characteristic Name-2 (23)
---->Characteristic Manufacturer-3 (20)
---->Characteristic SerialNumber-4 (30)
---->Characteristic Model-5 (21)
---->Characteristic FirmwareRevision-6 (52)
---->Characteristic Identify-7 (14)
-->Service ContactSensor-8 (80)
---->Characteristic ContactSensorState-9 (6A)

Configured as Bridge: YES

Service Type AID IID Update Loop Button


AccessoryInformation 3E 1 1 YES NO NO
HAPProtocolInformation A2 1 8 NO NO NO
AccessoryInformation 3E 2 1 YES NO NO
SecuritySystem 7E 2 8 YES NO NO
AccessoryInformation 3E 3 1 YES NO NO
ContactSensor 80 3 8 NO YES NO
AccessoryInformation 3E 4 1 YES NO NO
ContactSensor 80 4 8 NO YES NO
AccessoryInformation 3E 5 1 YES NO NO
ContactSensor 80 5 8 NO YES NO
AccessoryInformation 3E 6 1 YES NO NO
ContactSensor 80 6 8 NO YES NO
AccessoryInformation 3E 7 1 YES NO NO
ContactSensor 80 7 8 NO YES NO
AccessoryInformation 3E 8 1 YES NO NO
ContactSensor 80 8 8 NO YES NO
AccessoryInformation 3E 9 1 YES NO NO
ContactSensor 80 9 8 NO YES NO
AccessoryInformation 3E 10 1 YES NO NO
ContactSensor 80 10 8 NO YES NO
AccessoryInformation 3E 11 1 YES NO NO
ContactSensor 80 11 8 NO YES NO
AccessoryInformation 3E 12 1 YES NO NO
ContactSensor 80 12 8 NO YES NO
AccessoryInformation 3E 13 1 YES NO NO
ContactSensor 80 13 8 NO YES NO
AccessoryInformation 3E 14 1 YES NO NO
ContactSensor 80 14 8 NO YES NO
AccessoryInformation 3E 15 1 YES NO NO
ContactSensor 80 15 8 NO YES NO
AccessoryInformation 3E 16 1 YES NO NO
ContactSensor 80 16 8 NO YES NO
AccessoryInformation 3E 17 1 YES NO NO
ContactSensor 80 17 8 NO YES NO

*** End Info ***

Generating new random Accessory ID and Long-Term Ed25519 Signature Keys...
Initializing storage for Paired Controllers data...

Accessory ID: E2:51:48:7B:64:19 LTPK: 25E67C3C7A87E4FF0140D17573145A2DA1293B23799073820E2D4632FA3708E2
No Paired Controllers
Resetting Accessory Configuration number...

Accessory configuration has changed. Updating configuration number to 1

Attempting connection to: Maragos2Home. Type 'X ' or press Control Button for 3 seconds at any time to terminate search and delete WiFi credentials.
Connecting... Success!
IP: 192.168.2.88

Starting MDNS...
Broadcasting as: HomeSpan-E251487B6419.local (Paradox Bridge / HomeSpan-ESP32)

Starting Web (HTTP) Server supporting up to 8 simultaneous connections...

DEVICE NOT YET PAIRED -- PLEASE PAIR WITH HOMEKIT APP

Paradox Bridge is READY!

*** Log Level set to 2

=======================================
** Client #0 Connected: (15 sec) 192.168.2.87

<<<<<<<<< 192.168.2.87 <<<<<<<<<
POST /pair-setup HTTP/1.1
Host: Paradox\032Bridge._hap._tcp.local
Content-Length: 6
Content-Type: application/pairing+tlv8
------------ END BODY! ------------
STATE(1) 01
METHOD(1) 00
------------ END TLVS! ------------
In Pair Setup...Found . Expected

192.168.2.87 >>>>>>>>>>
HTTP/1.1 200 OK
Content-Type: application/pairing+tlv8
Content-Length: 409

STATE(1) 02
PUBKEY(384) EBB581BB7DD6C224D11040FD7FD750D80BDF908B8D0602A96D8243727B7FD5AED8058A7B1FE498BD7D57CEC00C03B36F185B6793F0A4939B85BAAC810719530B71ACD9A19686334E3A6810237DCDBF525F68932B3F8015D220637AE7B28929528D5484DACA9A429AB49FEAE9BB5F3F07042574088997447B7BCFBEABAE0BE088ADE02C7F2807CF2C438A132C3BE6944BBFBAF5466F3324EB03491A5E1E4936A8C5D208A7D489C9D416DA66CCE557CC91E44BC9E1C2D7426A3C7C199252CD0990298680730D792BF73BCA1BA403EDC082F6362B157BF86A199390E2C3980EFEB616F0351699D9B8D4529B91440933986825E2B6652FFAC430DF9E92E3196DB9459A94CAFC401C4306A41F94E75993183D6E5C126E8FF7D8374EFAC668B2BE458C857B8D4CFA9CA35E791F80E328A6EECF261085EB5919EA241BAAAF9498726C4AF79B92EC62932FC36A9DC14049B86EE228584AC04217FEA606600CF4E638EDF0DFB6333B7AA850D792CA3E83F6105F971121609F3EDD7EE66085220D54DA0F6F
SALT(16) D61AF7900F02F9EB4652D581F4352CE0
------------ SENT! --------------

<<<<<<<<< 192.168.2.87 <<<<<<<<<
POST /pair-setup HTTP/1.1
Host: Paradox\032Bridge._hap._tcp.local
Content-Length: 457
Content-Type: application/pairing+tlv8
------------ END BODY! ------------
STATE(1) 03
PUBKEY(384) 600F9523550E86D46A680C839F7EC29FB8339CD14E1043D10685F8F766020B32DD5F999CBDD4C189328DCA98CADC919F55CE92B17E533CCE80ADE7B9AE2CB2E4BC9B4B94CE094F31C945949E0C56C5F97E025675E5D9821744B3911A0D7B14BBA4F50F931D133C7B8651345C382E39E2E6088A46C0EAB0A46688F3BC31E572B050EFC5719D5F46C19FB70BB928D49849F2AA0DDA9C612E62FD1243D145BD6045C6A3EF6B693E17D4E877B718E0CD5C1DBD2898813EAF4B2A1399BAFA37A381CCD5E0492936547D5966B9B87C50D5187B2C1366D9FD8E89D6830ECD48BB3C64694636436F9BCF994ED25328832850DC3DD4C5431B430511502F8570268BCB282DEC28643740A4976B4BC9ECF0833800FF268A20442214D24C2FC630B9C33EDA3D7FABCF8549B176092B43527610D73C718EE358CAD1E76D762A0A58FB98319B976BF11EDCA1885BB5551FC655AACD0A00FB61732F12384CC3158A8D07276502DF5F6BA9A71FE6EF148E9F0B129EDAD0A208B9E52ADD99EB33CD1F749FB39AF25D
PROOF(64) A1407BD7190D3B058C14CB69EFB7F97E6D0E2055F70B8092AED35807B2BC9EFCDD4333537241F9D075BAFCC4B6DE939C2BF2BD289E76550FF1FF6FE198BC6161
------------ END TLVS! ------------
In Pair Setup...Found . Expected

192.168.2.87 >>>>>>>>>>
HTTP/1.1 200 OK
Content-Type: application/pairing+tlv8
Content-Length: 69

STATE(1) 04
PROOF(64) 43198033572CED1208151947CA9A72971E46EC8DDCE13EEDC987D1A1E5F2F76262119A777906189274FBD05693B9C42B6E18FE34ACA477221AC5B0513CEA503B
------------ SENT! --------------

<<<<<<<<< 192.168.2.87 <<<<<<<<<
POST /pair-setup HTTP/1.1
Host: Paradox\032Bridge._hap._tcp.local
Content-Length: 159
Content-Type: application/pairing+tlv8
------------ END BODY! ------------
STATE(1) 05
ENC.DATA(154) 8A1D0AA2189E2244A10DA53E31833BD3320C9EE3168D02B58B6EBEF3740B2FEF7F8A9C023A02779EA8AD0CCFF85FD21588DFDF125CD0902E2DDDA90B989942DAF6A75A6BA88E495528AF0D1E674D8E70015B7226702B219828B31CDAEACAD157AA4C9E01CA7C96F273BCE35D37BEC2C782969B5DA5EE9A5B338DB037B0CD8FE25881F42139F3C1849B2004F14EA52A2DE0A9753F82C5094E2B13
------------ END TLVS! ------------
In Pair Setup...Found . Expected
PUBKEY(32) C3D78004B03BD1FB647A0060F95BEA3BA2A525F08787FFF182684E179CF719DE
SIGNATURE(64) 9AB57CA46513772A542D1B4434D3C851FE921254CED081BBA06CC7ED6A242C72995136C28AE6C92C35325EBF929A9DED2FA8C1926A10BF1520AF25BEA6ADC107
IDENTIFIER(36) 34373836433541462D383537352D343530342D424135392D313144343746314138413632
------- END DECRYPTED TLVS! -------

*** Added Controller: 4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin)

------- ENCRYPTING SUB-TLVS -------
PUBKEY(32) 25E67C3C7A87E4FF0140D17573145A2DA1293B23799073820E2D4632FA3708E2
SIGNATURE(64) 104C1AED15F0C416E828CB64EBCD9BBAEE8F967DF922159C4F8DBA86A45AECEBEC4F2AA8409E3D830F501F665A804A69C3D719A6CAC65FBB2FC110A122074400
IDENTIFIER(17) 45323A35313A34383A37423A36343A3139
---------- END SUB-TLVS! ----------

192.168.2.87 >>>>>>>>>>
HTTP/1.1 200 OK
Content-Type: application/pairing+tlv8
Content-Length: 140

STATE(1) 06
ENC.DATA(135) 816B20EB194CEABC54CEBF711607F25C048FE4758965C35459B406902201DB010CC3C43785254BC3C43CBA03EA46818C845074C9435FB83EECB389EEDC4AFD2549CA8DCB0BB4AE357F04CB70EBCF0B795794E47FBBE052A9E424FD50908323649D9ED86C8952FCC48C5F68C7AF7CE6052EF82ACF4C9F87EA3C06974279173B3F0230059D817DF7
------------ SENT! --------------

*** ACCESSORY PAIRED! ***

=======================================
** Client #0 Connected: (25 sec) 192.168.2.87

<<<<<<<<< 192.168.2.87 <<<<<<<<<
POST /pair-verify HTTP/1.1
Host: Paradox\032Bridge._hap._tcp.local
Content-Length: 37
Content-Type: application/pairing+tlv8
------------ END BODY! ------------
STATE(1) 01
PUBKEY(32) 61E9588643AFF0E9F3CCE12DBA50AE3FAEE914533D5ADA2CC185294D9224AB3C
------------ END TLVS! ------------
In Pair Verify #0 (192.168.2.87)...Found
------- ENCRYPTING SUB-TLVS -------
SIGNATURE(64) 075A2258BC1D1E36A08D4AD97C2D8FB012E1CEBC70C947CC10EACE7A6152388A1F1DD3D8EE636512A90A7918E0574CB74BD7ACCCA4E34F6B03AB70CA9AE5A806
IDENTIFIER(17) 45323A35313A34383A37423A36343A3139
---------- END SUB-TLVS! ----------

192.168.2.87 >>>>>>>>>>
HTTP/1.1 200 OK
Content-Type: application/pairing+tlv8
Content-Length: 140

STATE(1) 02
PUBKEY(32) 1D84BE0BAA4F5E1B8B5B990DAA29271F5E31E50B73D20A244A07B987AFB01F4D
ENC.DATA(101) 6163290331FD4DE0164AF630DB4E1163AF265EAF3239D577612D0C69A5015D3240AEBE42D4B7FB0CFC685D0BBC283E288660E36552503C5573F41220C75231331E454679563E61CDDE311328F4D373BF1F0A3FDC6512A0F0EFEA0AFC283AB711F433D8A424
------------ SENT! --------------

<<<<<<<<< 192.168.2.87 <<<<<<<<<
POST /pair-verify HTTP/1.1
Host: Paradox\032Bridge._hap._tcp.local
Content-Length: 125
Content-Type: application/pairing+tlv8
------------ END BODY! ------------
STATE(1) 03
ENC.DATA(120) 643A83F879CD27CBDB8624778C628B23809D659E127A7E044FE406DBDD182F9D22C457773924D0FBFC597583760411A1F365EF145F61342326B475CA2BD166A3E25364031DE7736567CE6595C8CE658F878794D4E78AC6008FAD002D0EA62FC3EB3AA10FA5F0D332E2589FD85F593B5522DF2BA699F13E92
------------ END TLVS! ------------
In Pair Verify #0 (192.168.2.87)...Found
SIGNATURE(64) A89C05AC065A6661BAECB9558D432CB588FD74F79B242AEA40370E25CE4852C4FFC92E1780D86DF55488BC85D659917415D63C7658AC63F6105274ABC424C103
IDENTIFIER(36) 34373836433541462D383537352D343530342D424135392D313144343746314138413632
------- END DECRYPTED TLVS! -------
Found Controller: 4786C5AF-8575-4504-BA59-11D47F1A8A62 (admin)

192.168.2.87 >>>>>>>>>>
HTTP/1.1 200 OK
Content-Type: application/pairing+tlv8
Content-Length: 3

STATE(1) 04
------------ SENT! --------------

*** SESSION VERIFICATION COMPLETE ***

<<<< #### 192.168.2.87 #### <<<<
GET /accessories HTTP/1.1
Host: Paradox\032Bridge._hap._tcp.local
------------ END BODY! ------------
In Get Accessories #0 (192.168.2.87)...

192.168.2.87 >>>>>>>>>>
HTTP/1.1 200 OK
Content-Type: application/hap+json
Content-Length: 10175

{"accessories":[{"aid":1,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"ParadoxBridge","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"20210102","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"HS Bridge","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.1","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"A2","characteristics":[{"iid":9,"type":"37","value":"1.1.0","format":"string","perms":["pr"]}]}]},{"aid":2,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"ALARM","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"7E","characteristics":[{"iid":9,"type":"66","value":3,"format":"uint8","perms":["pr","ev"]},{"iid":10,"type":"67","value":3,"format":"uint8","perms":["pr","pw","ev"]}]}]},{"aid":3,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Front Door","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":4,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Living-room Motion","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":5,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Bedroom 2 Motion","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":6,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Hall Motion","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":7,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Living-room Window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":8,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Bathroom 2 window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":9,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Bedroom 3 Window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":10,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Lab Window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":11,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Door 2","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":12,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Dining room motion","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":13,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Bedroom 1 motion","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":14,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Dining room Window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":15,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Bedroom 1 Window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":16,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Kitchen Window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]},{"aid":17,"services":[{"iid":1,"type":"3E","characteristics":[{"iid":2,"type":"23","value":"Bathroom 1 Window","format":"string","perms":["pr"]},{"iid":3,"type":"20","value":"Paradox","format":"string","perms":["pr"]},{"iid":4,"type":"30","value":"123-ABC","format":"string","perms":["pr"]},{"iid":5,"type":"21","value":"z1","format":"string","perms":["pr"]},{"iid":6,"type":"52","value":"0.9","format":"string","perms":["pr"]},{"iid":7,"type":"14","format":"bool","perms":["pw"]}]},{"iid":8,"type":"80","characteristics":[{"iid":9,"type":"6A","value":0,"format":"uint8","perms":["pr","ev"]}]}]}]}
-------- SENT ENCRYPTED! --------
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x40169c83 PS : 0x00060630 A0 : 0x800d8c88 A1 : 0x3ffb1ee0
A2 : 0x006120c0 A3 : 0x3ffc16a5 A4 : 0x3ffc3734 A5 : 0x00000000
A6 : 0x3ffc16eb A7 : 0x00000002 A8 : 0x800d5544 A9 : 0x3ffb1e50
A10 : 0x00000001 A11 : 0x00000002 A12 : 0x3ffdaaac A13 : 0x000027bf
A14 : 0x3ffb1e50 A15 : 0x3ffb1ea0 SAR : 0x00000008 EXCCAUSE: 0x0000001c
EXCVADDR: 0x006120c0 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xfffffff7

Backtrace: 0x40169c83:0x3ffb1ee0 0x400d8c85:0x3ffb1f00 0x400d19a2:0x3ffb1f90 0x400ddced:0x3ffb1fb0 0x40088b9d:0x3ffb1fd0

Rebooting...

Serial preventing boot

Hello again!

I have small issue with a custom ESP32 board I have been using which doesn't have a built in USB to Serial bridge and instead has an FTDI port which I use to flash it and use the CLI. Only the GND, RX and TX lines are connected.

When the FTDI is connected and a serial monitor is open, the device boots and behaves as normal.

Unfortunately it stops booting when I disconnect the FTDI.

My workaround has been to program it and setup the WiFi credentials via the CLI, then re-program it with the Serial.begin(115200); line commented out. This allows the device to behave correctly but obviously removes the ability to use the CLI without reprogramming.

It'd be great if anyone had any ideas or steps I should take to further troubleshoot. Unfortunately when I had the PCB made I didn't add the status LED or the control button... Next version will have them!

Cannot set dynamic Accessory Name?

According to the examples:

new Characteristic::Name("My Table Lamp"); // Name of the Accessory, which shows up on the HomeKit "tiles", and should be unique across Accessories

But if we try to set the name dynamically eg:

char name[64];
sprintf(name, "ESP Accessory %08X", (uint32_t)ESP.getEfuseMac());
new Characteristic::Name(name); 

This causes the accessory to give the error 'Discovery Failed' when adding. It looks like HomeSpan handles the dynamic name fine (listing characteristics in the console etc), up until it needs to send the discovery info back and renders the JSON:

...
{"iid":2,"type":"23","value":"⸮G⸮O","format":"string","perms":["pr"]}
...

Can the JSON render be fixed so that dynamic names are rendered correctly?

PlatformIO support

Great work so far! Absolutely mammoth effort in design and great docs. Very promising library. 👍

I'm having problems building HomeSpan projects on PlatformIO, due to a failed build. I notice only Arduino is mentioned in the docs, so I understand that PIO may not be a supported platform.

Is PlatformIO expected to work? If not, are you interested in having HomeSpan support PlatformIO eventually?

Own implementation of wifi connection

Hello. I am using my own implementation of the wifi connection. It would be great if homespan could choose which connection method to use. For example: I have third party wifi libraries. They manage the connection. After the home span has verified that the wifi connection is established, it will start working. If not, display a message. In the setting time after the connection is established, it is necessary to establish the connection separately for homespan.

Add Fan Control only Without Light on it

Hello!
I would like to add Fan Control only without Light because my fan doesn't have light.

I tried implementing 03-CeilingFanWithLight and it is working well with Light.

Then, I tried commenting LightBulb code from the example below, but then the accessory stops responding.

new Service::HAPProtocolInformation();          // Create the HAP Protcol Information Service  
      new Characteristic::Version("1.1.0");           // Set the Version Characteristicto "1.1.0" as required by HAP

  //  new Service::LightBulb();                       // Create the Light Bulb Service
    //  new Characteristic::On();                       // This Service requires the "On" Characterstic to turn the light on and off

  // Now we create the a Fan Service within this same Accessory

    new Service::Fan();                             // Create the Fan Service
      new Characteristic::Active(); 

Is there a way to Implement only fan to control fan speeds?

Advice and ideas are highly appreciated.

TIA.

Platformio implementation

I was trying to add the library as a dependency to my project and noticed, it pops up these messages, in Arduino I guess those are ignored:

.pio/libdeps/odroid_esp32/HomeSpan/src/Span.h:35:22: error: 'opt' was not declared in this scope
 #define OPT(HAPCHAR) opt.push_back(&hapChars.HAPCHAR)

Setting up WiFi Credentials via Temporary Access Point

I've previously used the serial CLI to configure my WiFi settings on the HomeSpan ESPs.

I thought I would try out the Access Point method.
I was not successful.

My SSID contains spaces and the "connecting to" message shows my SSID with + replacing the spaces.
Say my SSID is "My Wifi Access", the connecting page shows "My+Wifi+Access".

I tried with a temporary SSID without spaces and was successful.

2 questons regarding HomeSpan

  1. For those esp32 module which has been connected, even if I factory reset it, it keeps requesting ‘enter password’ when re-connecting to hotspot HomeSpan. What’s the password?

  2. How to solve below?
    294BF817-F768-4834-B441-3A7355586FC4

Thanks in advance.

[D][WiFiClient.cpp:452] connected(): Disconnected: RES: 0, ERR: 128 -- switch to async TCP?

Hi,

First, thanks for creating such a nice and well documented library! It's been a real pleasure to work with.

I'm using an ESP32 Pico and have noticed some problems when a lot of network traffic gets generated. The logs full up with the following error message:

[D][WiFiClient.cpp:452] connected(): Disconnected: RES: 0, ERR: 128

Whenever this happens, the device goes into a "Not responding" state in HomeKit, and stays that way for a few minutes.

I don't think this is due to a bug in your code, but rather is a known issue with ESP32 (cf. espressif/arduino-esp32#1921). The root cause of the bug is unknown but one suggested resolution is to switch to asynchronous TCP. I was wondering if this is something you would consider implementing? Async seems like a much better model for servicing HomeKit requests in general.

I think it would be fairly easy do to using me-no-dev/ESPAsyncWebServer, basically amounting to a few straightforward changes in Network.cpp. Normally I'd implement this myself and submit a PR, but my time to work on side projects is unfortunately very limited right now. I figured I'd throw it out in case you (or anyone else) has the time.

Thanks again!

Unable to pair with second iphone

I am trying to pair a second iPhone to the HomeSpan, however, once it is paired with one iPhone it stops broadcasting the device, and manually entering setup code on the second iPhone doesn't work. Tried Factory Resetting the device as well. A pairing request doesn't show up in the system logs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.