Giter Site home page Giter Site logo

homespan / homespan Goto Github PK

View Code? Open in Web Editor NEW
1.4K 30.0 138.0 6.4 MB

HomeKit Library for the Arduino-ESP32

License: MIT License

C++ 89.11% C 10.14% 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.0.0 or later of the Arduino-ESP32 Board Manager, and has been tested up through version 2.0.14 (recommended). HomeSpan can be run on the original ESP32 as well as Espressif's ESP32-S2, ESP32-C3, and ESP32-S3 chips.

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.

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
  • 38 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.0 (2/17/2024)

  • HomeSpan has been optimized to use significantly less RAM!

    • supports approximately TWICE the number of Accessories using the same amount of memory
    • minimized memory use also means much more room for users to add non-HomeSpan features to their sketch without running out of memory, especially if the non-HomeSpan code consumes a lot of stack space
    • HomeSpan now automatically detects the presence of PSRAM (SPIRAM) and will utilize that extra memory to the largest extent possible to keep internal RAM free for certain HomeSpan functions and ESP32 functions (e.g. WiFi) that require internal RAM. Also keeps internal RAM free for use by any non-HomeSpan code that does not (or cannot) use PSRAM
    • increased HomeSpan's 41-Accessory limit to a 150-Accessory Limit (as specified by HAP) since it is now possible to create a device with many more than 41 Accessories without running out of memory, especially if PSRAM is used
  • HomeSpan has been optimized to use significantly less Non-Volatile Storage (NVS)

    • allows you to use NVS to save the values of a many more Characteristics
    • see the newly-added CustomNVSPartition example that demonstrates how to create your own Partition Scheme to further expand the size of the NVS partition beyond the ESP32 default to support sketches with a large number of Accessories each configured to use NVS to save the values of many Characteristics
  • New features and documentation for Services and Characteristics

    • created "enumerated constants" (e.g. SWING_ENABLED, HUMIDIFYING, etc.) for every applicable Characteristic that can be used instead of integers when reading and writing values
      • very helpful since Apple is no longer publishing its non-commercial HAP document that provided a list and description of the states for each Characteristic
      • example: if(target.getNewVal()==target.ARM_STAY) {...}
    • added ability to properly name individual Services within a single Accessory using new Characteristic::ConfiguredName()
    • new Services and Characteristics page now provides functional descriptions and detailed specifications for every Service and Characteristic supported by HomeSpan, including a list of the enumerated constants available for every Characteristic
  • New ability to use Inverted Buttons and Touch Sensors as a Control Button

    • adds triggerType as a second, optional argument to Span& setControlPin(uint8_t pin, triggerType_t triggerType)
    • supports TRIGGER_ON_LOW, TRIGGER_ON_HIGH, TRIGGER_ON_TOUCH, or any user-defined function
    • see API Reference for details
  • New ability to "remotely" trigger user-defined actions by repeatedly power-cycling the device

    • adds new homeSpan method Span& setRebootCallback(void (*func)(uint8_t count), uint32_t upTime=5000)
    • the parameter count, which is passed by HomeSpan to func, indicates the number of "short" reboots that have occurred prior to the current reboot, where a "short" reboot is any that occurs before upTime milliseconds have elapsed
    • can be use to remotely restore a device that is not easily accessible to a pre-defined state
    • see API Reference for details
  • Added two new Stepper Motor Drivers

    • Stepper_UNIPOLAR: a generic driver for any 4-wire center-tapped unipolar motor
    • Stepper_ULN2003A: support for the ULN2003A driver board
    • see Stepper Motor Control Stepper for details
  • Additional Web Log functionality

    • adds new homeSpan method Span& setWebLogCallback(void (*func)(String &))
      • allows users to include additional data and custom HTML in the Web Log
    • adds new homeSpan method getWebLog(void (*f)(const char *, void *), void *args)
      • allows users to retrieve the underlying Web Log HTML from within sketch
    • modified enableWebLog() so that it can be used to set the time from an NTP server without actually serving Web Log pages
    • see Message Logging for details
  • Added ability to "chain" homeSpan methods

    • converted various homeSpan methods that previously returned void to now return Span &
    • example: homeSpan.setControlPin(21).setStatusPin(13);
    • see API Reference for details
  • Added ability to disable SpanPoint encryption

    • without encryption increases the maximum number of allowed SpanPoint devices from 7 to 20
    • see SpanPoint for details
  • Other new homeSpan methods included in this release:

    • Span& setVerboseWifiReconnect() - optionally suppresses "Trying to connect to..." messages
    • Span& setWifiCallbackAll() - provides an optional callback every time WiFi is connected or re-connected
    • TaskHandle_t getAutoPollTask() - returns the Task Handle for the HomeSpan Auto Poll Task
  • Removed dependencies on various "extra" #include files

    • the following #include files are now embedded in HomeSpan.h and should not be specified in any sketch:
      • extras/Pixel.h
      • extras/RFControl.h
      • extras/PwmPin.h
      • extras/StepperControl.h

Important

At present it is okay to include the above #include files in your sketch (they have no effect on the compiled code), but they will be deleted at some point in the future so please remove them from your sketches now to ensure forward compatibility with subsequent releases.

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 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

homespan's Issues

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!

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.

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?

[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!

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?

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");

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.

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.

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.

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.

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.

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.

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

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)

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?

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...

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.

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.

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

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

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.

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

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.

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)
...

Some sensors are invalid

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

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.

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?

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 !

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! --------

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.

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?

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 ***

Button debouncing

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

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!

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.

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.

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.