Commit Graph

545 Commits

Author SHA1 Message Date
Gregg e2678f5661 Added position() method to SpanToggle()
Created PushButton::OPEN and PushButton::CLOSED enums.

This completes all SpanToggle() functionality.  Will add a SpanToggle() to UnitTest.
2023-02-03 23:09:08 -06:00
Gregg c3d0c98e04 Created SpanToggle()
Derived from SpanButton()
2023-01-31 22:55:43 -06:00
Gregg 232362c807 Update Utils.h
Added comments for new toggled() functionality
2023-01-30 07:56:46 -06:00
Gregg 1a3887b6cf Added switch toggle logic to PushButton Class
Adds new method toggled() which is the analog of triggered().

Next step: Extend SpanButton to access this new logic.
2023-01-29 18:30:25 -06:00
Gregg 03ba061b9b Added logic to hide AP SSID from broadcasting when WIFI_AP_STA used for SpanPoint
This does NOT effect the HomeSpan Access Point from being broadcast as usual when launched.
2023-01-28 18:05:59 -06:00
Gregg eb53e7f6e7 Moved SpanPoint initialization message to main Info 'i' output
Created SpanPoint table within 'i' output
2023-01-25 22:22:49 -06:00
Gregg 7eca1e776b Add option to SpanPoint to use softAP MAC Address instead of STA
Needed to support ESP-NOW on ESP-8266 chips, which seem to only work if connecting into softAP MAC Address once HomeSpan is connected to WiFi network (prior to connection ESP-8266 will properly connect to normal STA address as well as softAP address).
2023-01-22 18:05:59 -06:00
Gregg 6d18d5a3dc Added "invert" option to LedPin()
If invert=true, PWM output will be phase-inverted.  This is useful when creating a pair of PWM pins that need to be out of phase by 180 degrees (e.g driving a piezo-electric buzzer via two PWM pins).
2023-01-07 20:44:19 -06:00
Gregg a8271c8724 Added homeSpan.refreshStatusDevice()
Provides for additional control over Status LED when a generic device has been used.  If the color of the device is changed, the change will only take effect when the LED is next turned on.  If the LED is blinking, the color changes upon the next blink.  But if the LED is ON, there is no next blink and color will not change.

This method check the status of the LED, and if it is ON, is calls the on() function again, which will result in an update of the color.  The method does nothing if the LED is OFF or BLINKING.
2023-01-07 17:09:22 -06:00
Gregg 9ef9a590da Added homeSpan.setStatusDevice()
Allows any Blinkable class to be used as the Status LED
2023-01-07 14:28:50 -06:00
Gregg 3cb8d27342 Added CUSTOM_CHAR_DATA() macro
Similar to CUSTOM_CHAR_STRING() macro, but does not include a parameter to set the default value (since the user can type an invalid string).  Instead, user setData after creating the Characteristic as needed.
2023-01-01 15:08:34 -06:00
Gregg 72b4ece64d Added DATA format
Includes 3 new methods: getData(), getNewData(), and setData()
2023-01-01 11:33:50 -06:00
Gregg 1f7c86621c Bumped version number to 1.7.1 2022-12-28 17:18:59 -06:00
Gregg eecce34848 Added NVS storage for last channel used in SpanPoint
Applicable only for remote devices (i.e. not a Hub device).  Last channel stored is used as initial channel upon reboot, provided that this channel is allowed by the channel mask (if not, the first allowed channel is selected instead).
2022-12-27 09:55:30 -06:00
Gregg 3fae9c24a9 Updated Television Characteristics
Removed Mute, Active, and Volume since they don't appear to do anything.
2022-12-23 18:39:14 -06:00
Gregg 7939624bf7 Added Service::TelevisionSpeaker
Also updated Television Example.  Volume buttons on remote now function as expected, though there does not seems to be a mute button
2022-12-23 16:51:55 -06:00
Gregg ea07da5ab0 Update HomeSpan.h
Fixed another compiler warning
2022-12-11 14:19:37 -06:00
Gregg 5daaf3d0cf Added #pragma once to extras header files 2022-12-03 11:12:30 -06:00
Gregg 484f1c4f2e Cleaned up compiler warnings
* Changed ~SpanService to virtual function to ensure any user-defined destructor is also called

* Found/corrected bug in error message related to defining a Characteristic without any Service

* Added warning/error ID numbers to warning/error messages

* Other misc changes to clean up compiler warnings
2022-12-02 17:49:54 -06:00
Gregg a761d992e8 Updated version number to 1.7.0 2022-11-08 05:37:25 -06:00
HomeSpan 5b1b9396a0 Update HomeSpan.h 2022-11-05 12:09:36 -04:00
Gregg dd3cc8ab3b Fixed bug in postPairingsURL logic 2022-10-31 21:08:45 -05:00
Gregg f775a63b7a Completed and tested all statusCallback and statusString logic 2022-10-30 08:49:53 -05:00
Gregg 0929a04270 Update HomeSpan.h 2022-10-29 18:38:01 -05:00
Gregg 05cbc03f12 Added homeSpan.statusString(HS_STATUS statusMessage)
Can be used in statusCallback to convert HS_STATUS to char string
2022-10-29 18:36:30 -05:00
HomeSpan 645c169a5e created STATUS_UPDATE macro
Combines statusLED updates with statusCallback updates
2022-10-29 11:34:48 -05:00
Gregg d55dad1529 Added more events to statusCallback() 2022-10-29 07:37:34 -05:00
HomeSpan bb1b599797 Completed homeSpan.setStatusCallback()
To Do: create documentation
2022-10-24 21:48:37 -04:00
HomeSpan 7ff91ccf02 Changed hsEventCallback to statusCallback 2022-10-24 19:03:15 -04:00
HomeSpan 4e23c5e357 Updating hsEventCallback with more events 2022-10-24 06:46:04 -04:00
HomeSpan 5b38c6a04a Started homeSpan.setEventCallback() 2022-10-23 21:26:41 -04:00
Gregg f8be2847bd Fixed bug in touch sensor logic that would cause failure to compile under 2.0.0-2.0.2
Verified that Unit Test compiles under all version 2.0.0 through 2.0.5 and works on 2.0.0 as well as 2.0.5
2022-10-22 15:25:31 -05:00
Gregg 74bbde2492 Changed SpanPoint::send(void *data) to SpanPoint::send(const void *data) 2022-10-16 16:53:11 -05:00
Gregg 2d411bab82 Updated SpanPoint so that WiFi_AP_STA is only used if receiveSize>0
Next up: explore power-reducing modes and sleep modes for remote sensors to extend battery life.
2022-10-03 22:04:51 -05:00
Gregg ab21a0c96c Created Other Examples - RemoteSensors
Created MainDevice and RemoteDevice sketches
2022-10-02 10:14:09 -05:00
Gregg 23afdb3711 Completed all SpanPoint code
Allows for bi-directional transmission between main HomeSpan device and one or more remote devices.

To Do:  Create and test with Temperature Sensor Example
2022-10-01 15:33:11 -05:00
Gregg b7317c3b5f Added SpanPoint::send() functionality
Works as expected.

Next Up:  Modify send() logic so that channels are NOT scanned if device is a main HomeSpan hub.
2022-09-30 22:20:32 -05:00
Gregg c819426dec Moving HomePoint.h back into HomeSpan.h
Added SpanPoint::setAsHub(), which is called after homeSpan.begin() to set device as Hub so SpanPoint knows not to change WiFi channel.

Also added check to make sure there are no SpanPoint objects instantiated before a call to homeSpan.begin() (if it is called at all).
2022-09-30 17:27:57 -05:00
Gregg 72294bde8b Move all SpanPoint code into separate HomePoint.cpp and HomePoint.h files
This enables SpanPoint to operate as a standalone library with no reliance on anything in HomeSpan.

To Do: migrate all HomePeer code into SpanPoint.  This will yield a universal standalone HomePoint library that can be used for BOTH the receiver and the sender (which automatically means two-way communication is always possible)
2022-09-28 21:16:29 -05:00
Gregg 58683586bc Added SpanPoint::get()
This completes SpanPoint.  Next: rename HomePeer to be HomePoint.
2022-09-26 22:00:32 -05:00
Gregg 4f983051ce Created SpanPoint
Verified ESP-NOW is communicating correctly with HomeSpan.  Verified encryption works.  Next step - create linkages between incoming data and Services; create queue structure to transfer data.
2022-09-25 13:53:54 -05:00
Gregg 22cfa130b4 Created HomePeer
This is a self-contained library that is used for remote devices set up as HomeSpan Peers via ESP-NOW.
2022-09-24 16:49:32 -05:00
Gregg dbe4c268f4 Modified folder structure for "extras"
This allows the "src.ino" test file to once again properly compile without requiring modifications to any existing HomeSpan sketches.  This was needed to ensure src.ino can find object code in "extras", which is now required to use the new statusDevice() method.  Since the Arduino IDE only copies files that are in "src" folders, "extras" needed to be moved to "src/extras".  For backwards compatibility with all other sketches, the "extras" directory now contains stubs for the ".h" include files.
2022-09-24 08:20:22 -05:00
Gregg 66160e7c6c continued development of espnow 2022-09-22 20:26:34 -05:00
Gregg 4a4a5f8a6b Started development of ESP-NOW
Also, added WiFi.begin("none") to make sure all WiFi data is erased when requested.
2022-09-05 18:42:37 -05:00
Gregg 677b9b673c Update FeatherPins.h
Added BUILTIN_PIXEL for S2, C3, and S3 chips
2022-09-04 10:03:59 -05:00
Gregg 8b9487b9d4 Created homeSpan.setStatusPixel(float h=0, float s=100, float v=100)
This is now the official API method to set an RGB NeoPixel as the status LED.  It defaults to bright red unless an HSV color is specified.
2022-09-04 07:31:08 -05:00
Gregg 546c87e3ec Added setOnColor to Pixel
Allows user to set the color to be used for Blinker
2022-09-03 16:47:02 -05:00
Gregg 355a2dfd4d Updated rest of code to reflect latest version of statusLED
Removed all checks to see if statusLED is defined, since it will now ALWAYS be defined, even if the statusDevice is set to NULL.
2022-09-02 18:47:15 -05:00
Gregg f2e1f5bc70 Updated Blinker Class to allow for NULL Blinkable Device
If NULL, all functions are ignored and getPin() returns -1
2022-09-02 18:15:53 -05:00
Gregg 6fecf2c29f updating main code to incorporate new Blinkable class/interface 2022-08-28 18:32:52 -05:00
Gregg 294b8d8d71 Complete re-write of Blinker Class
Rather than use ESP32 timers, simply spawn a new task that turn on/off LED using simple delays.  By avoiding the use of the ESP32 timer, we are no longer limited by the number of Blinkers possible.  Also, Blinker relied on the timer interrupt, which crashed when it tried to call Pixel since Pixel in turn uses interrupts from the RMT.  Switching to spawned tasks is much cleaner and does not consume more CPU time since the timer interrupts were driven by CPU anyway.

Blinker class and generic LED class are now in extras.h.  Blinkable Interface is also in extras.h.

To Do:  Incorporate new Blinker class into HomeSpan code
2022-08-28 17:49:48 -05:00
Gregg fc76db092d started development of Blinkable Interface to allow generic LED to be used with Blinker 2022-08-27 17:33:08 -05:00
Gregg fbc60a67eb Added setTouchCycles() and setTouchThreshold() to SpanButton as static functions 2022-08-17 06:29:26 -05:00
Gregg 3b2c36f179 Changed PushButton::pressType_t to triggerType_t and refreshed triggerType_t constants
Pre-selects are no defined in both PushButton and SpanButton as: TRIGGER_ON_LOW, TRIGGER_ON_HIGH, and TRIGGER_ON_TOUCH
2022-08-15 21:21:21 -05:00
Gregg 75e3df97f5 Bumped version number to 1.6.0 2022-08-15 18:43:04 -05:00
Gregg 754ffc7f34 Added PushButton::setTouchThreshold() and PushButton::setTouchCycles()
Not implemented for ESP32-C3
2022-08-15 07:15:19 -05:00
Gregg 16b71af6f7 Added button type to SpanButton HomeSpan Info 2022-08-14 18:14:41 -05:00
Gregg e8d40150ed Incorporated logic to auto-calibrate touch sensors
Works with ESP32, ESP32-S2, and ESP32-S3 (ESP32-C3 does not support Touch Sensors).
2022-08-14 18:03:59 -05:00
Gregg dbcd9e267b Added check to ignore PushButton::TOUCH is compiling on ESP32-C3
The C3 does not have touch capability.  Compiler will throw an error is PushButton::TOUCH is referenced when compiling for C3.
2022-08-13 10:06:33 -05:00
Gregg ee55f268bd Finalized new SpanButton and PushButton functionality
Streamlined interface for both functions.  To Do:  Update SpanButton documentation
2022-08-13 07:52:32 -05:00
Gregg 9191b8664e Adding generic SpanButton function 2022-08-12 23:15:02 -05:00
Gregg 7841081fda Added option to set SpanButton type
Types include: GROUNDED, POWERED, and TOUCH.
Also added configureTouch() to customize parameters used for touch sensors.
2022-08-12 21:56:45 -05:00
Gregg 54b8374573 begin update of PushButton to make it more generic
Eliminated constructor that had no pin parameter.  Pin parameter is now always required.  Since PushButton was not part of HomeSpan API, these changes should not impact any users.
2022-08-11 06:12:41 -05:00
Gregg 57d791178c starting update of ControlPin logic to make it more generic 2022-08-10 06:20:50 -05:00
Gregg 3e88d69997 Added optional AccessoryFlags Characteristic to AccessoryInformation Service
This optional flag does not seem to have any affect on the Home App and does not produce any messages indicating that the device needs additional setup.  Was hopeful this would have prevented the "Not Supported" message on a Home App Tile that is configured as a bridge, but without any other Accessories.
2022-08-08 05:56:11 -05:00
Gregg 689ea86991 Updating ProgrammableHub2 Example 2022-07-28 17:13:04 -05:00
Gregg be3af3b14e Updated version number to 1.5.2 2022-07-23 21:05:08 -05:00
Gregg d903fd7e97 Updated RFControl for compatibility with Arduino-ESP32 v 2.0.4
Needed to set idle_level to LOW even though idle_output was already disabled.  This is likely because 2.0.4 introduced an entirely new API for RMT, though version 2.0.3 IDF functions and structures seem to be accepted as well.
2022-07-23 15:16:43 -05:00
Gregg c891548ffa Updated webLog logic to print system messages as well as user messaages
User messages only printer is logLevel>0.  Also, user messages are prefixed in CLI with the word "WEBLOG: "
2022-07-23 08:19:25 -05:00
Gregg bb1874da96 Update HAP.cpp 2022-07-16 11:11:41 -05:00
Gregg 989b315fc0 Updated WiFi disconnect/re-connect logic
Only initialize MDNS, WebLog, and OTA when first connecting to WiFi.  Do not re-initialize upon re-connections after a disconnect.

Also, add number of disconnects, and reset_reason() to WebLog
2022-07-11 21:23:20 -05:00
Gregg 6c7bf03c3b Added Other Examples -> ProgrammableHub 2022-06-25 18:44:31 -05:00
Gregg bb4b0e3dea Updates for ESP32-S3 Compatability
Added Feather.h mappings; and
Changed RMT clock logic in RFControl to check for presence of RMT_SYS_CON_REG instead of simply looking for CONFIG_IDF_TARGET_ESP32C3;

** NOTE:  Can ignore warnings about RMT_CH4...CH7+RX_LIM_REG redefine errors.  This has been reported to Espressif IDF Github, been acknowledged as a bug, and will be fixed in a future release of the IDF.  Since HomeSpan does NOT use the RMT peripheral for RECEIVING, these warning messages have no effect.
2022-06-11 07:56:42 -05:00
Gregg c5ba453a95 Converted Span to class; added homeSpan.getLogLevel() and homeSpan.addWebLog(fmt,...)
These functions are needed to provide public access to API now that Span is a class instead of a struct
2022-05-29 10:27:34 -05:00
Gregg 2b25acf2e1 Converted SpanUserCommand to class from struct
Also cleaned up some code by moving a few HAPClient routines into Span polling function.
2022-05-29 06:42:38 -05:00
Gregg 86a0c1cf75 Changed SpanCharacteristic and SpanButton from struct to class
Also moved SpanButton checking into Span instead of awkward reference to HAPClient function
2022-05-28 14:48:49 -05:00
Gregg bb1d0050e2 Changed SpanAccessory and SpanService to class from struct
Split members into private/protected/public
2022-05-28 11:24:11 -05:00
Gregg f75596f3cd Changed deleteAccessory from int to boolean
Returns true on success, otherwise false
2022-05-22 13:13:34 -05:00
Gregg 6018f37b60 Added optional stackSize argument to homeSpan.autoPoll()
If not specified, default is CONFIG_ARDUINO_LOOP_STACK_SIZE which is typically defined in the Arduino-ESP32 library as 8192.
2022-05-22 11:00:40 -05:00
HomeSpan 6d409e9b89 updated version check
requires version 2.X of the Arduino-ESP32 board manager
2022-05-22 08:57:23 -05:00
Gregg 72ddee9061 Add weakly-define Arduino loop() function (defined as NO OP)
Allows you to compile a sketch without defining the Arduino loop() function.  Useful in cases where homeSpan.autoPoll() is used instead.
2022-05-21 17:26:27 -05:00
Gregg 00ea4c6dd8 Changes homeSpan.getAccessory(aid) to homeSpan.deleteAccessory()
The only reason to have used getAccessory(aid) is to delete it, so the delete command is now invoked automatically.  Function returns 0 on success (matching aid found) or -1 on fail (aid not found)
2022-05-21 12:08:03 -05:00
Gregg 52a977d2f1 Revert "sort Accessories by AID to ensure same order all the time during dynamic changes"
This reverts commit 2e98b163b2.
2022-05-19 10:18:00 -05:00
HomeSpan 2e98b163b2 sort Accessories by AID to ensure same order all the time during dynamic changes 2022-05-18 16:31:15 -05:00
Gregg 615d373850 Added Example 20 - Dynamic Bridge. Also created homeSpan.getAccessory(aid) 2022-05-14 10:00:30 -05:00
Gregg d326ae1abf Added logic to delete PushButtons when Service is deleted
This completes all code for the ~SpanService() destructor.

To do: create tutorial example demonstrating a Dynamic Bridge
2022-05-09 21:27:18 -05:00
Gregg dc11c59a00 Deleted 'C' CLI command - replaced with homeSpan.updateDatabase()
Method homeSpan.updateDatabase(boolean updateMDNS) recomputes database hash and compares with previous hash.  If changed, config number is updated and saved in NVS along with new hash.  If updateMDNS is true, a new "c#" MDNS record is also broadcast with the new config number.  This triggers HomeKit to call for a database refresh.  Method returns true if config number has changed, or false if it has not.
2022-05-09 21:03:23 -05:00
Gregg 058d6b0c96 Completed destructors for SpanAccessory, SpanService, and SpanCharacteristics
Tested to ensure any combination can be deleted.

To do: must add logic to destruct any PushButtons that were added to a Service
2022-05-08 15:27:50 -05:00
Gregg 05f1204b4f Continuing destructor code... 2022-05-08 11:56:26 -05:00
Gregg 554cefd3ce Initial work on adding destructors to Accessories, Services, and Characteristics
Will allow for dynamic changes to database without rebooting.
2022-05-08 07:02:19 -05:00
Gregg bddfb4658a Added 'm' CLI command to print free 8-bit heap memory 2022-05-06 22:19:37 -05:00
Gregg 7546350775 Added "C" CLI command and updated/fixed config number logic
The "C" command computes a hash of the current database config and updates the config number if needed.  If config number has changed, the MDNS "c#" record is updated and the new config number is rebroadcast.  This triggers HomeKit to immediately request an update of the HAP database so that the changes can be shortly reflected in the Home App without the need to close any Client connections or reboot the device.

The config number logic has also been updated/fixed.  Previously it would create a hash from the full HAP database, which includes the value of each characteristic.  Thus, initial value changes of Characteristics, as a result of stored values in NVS, would cause an update to the config number upon reboot.
 This is not problematic, but also not intended, as a change in value is not really a change in the database config.  The new logic computes a hash of the database that EXCLUDES all Characteristic values.
2022-05-06 17:04:15 -05:00
Gregg 628c29c6b6 Updating logic that determined HAP Configuration Number (MDNS=c#) 2022-05-06 16:13:25 -05:00
Gregg f48cea8afb Completed refactoring of 'i' CLI command
All error checking and database validation is now done dynamically every time the 'i' command is run.
2022-05-01 17:03:07 -05:00
Gregg 18414d8856 Continuing refactor of 'i' CLI command 2022-05-01 12:47:08 -05:00
Gregg 7b30f971e2 Continued refactoring of 'i' CLI command 2022-05-01 09:24:45 -05:00
Gregg 9f71c67f14 Updated logic for required/optional Characteristics
Logic now embedded in 'i' CLI command.
2022-04-30 22:20:42 -05:00
Gregg 0e6f7d27f9 Continuing with 'i' refactoring
Next up: Re-do optional/required Characteristics logic
2022-04-30 18:18:15 -05:00
Gregg 5f463b013e Continuing to refactor 'i' CLI command 2022-04-30 16:29:31 -05:00