Commit Graph

2890 Commits

Author SHA1 Message Date
Maxim Prokhorov
e84fa98941 sns/event: only load the counter value once per reading
amend 8252f2ae18
note that platform does not implement either fetch_add or exchange

clean-up ordering once again
2020-09-26 15:42:47 +03:00
Nicolas Gilles
ca9b2fbb69 add missing lights #include for rpn rules (#2367) 2020-09-26 10:59:12 +03:00
Maxim Prokhorov
139b31287c sns: fix ci default.h overriding values in sensor.h 2020-09-26 10:57:25 +03:00
Maxim Prokhorov
8252f2ae18 sns: explicitly load before storing new counter value
resolve #2368

- Fixes "undefined reference to `__atomic_fetch_add_4'"
  Notably, std::atomic_fetch_add(&counter, 1) would also trigger this.
  std::atomic<T>::operator+= does not allow in-place change, since it
  returns T instead of T&
- Another work reduction in the isr, treat 'value' as `counter > 0`
  instead of relying on the notion that we can sometimes read the value
  with very low counter frequency
- Fix duplicated initializations
2020-09-26 10:56:08 +03:00
Max Prokhorov
da501a6bfa rpn: sleep and rtcmem ops (#2366) 2020-09-25 01:55:25 +03:00
Max Prokhorov
c7a95bf53f buttons: resistor ladder / analog buttons support (#2357)
- Buttons events source as button property instead of a global one
- Rename events source -> provider for all settings, consistent with the other things like relay and light providers
- AnalogPin to read between a certain analogRead() range
Trying to follow defaults here - analog 'press' is digital LOW, default value is HIGH, so no additional cfg entries are needed besides pin, level and changing evt source
- (debug) Refactor gpio command, add adc to show analogRead(pin)
- (debug) Add button command

Implemented based on:
https://gitter.im/tinkerman-cat/espurna?at=5f5d44c8df4af236f902e25d
https://gitter.im/tinkerman-cat/espurna?at=5f60e7f1f969413294e95370
2020-09-24 07:51:36 +03:00
Maxim Prokhorov
7dd8594a26 sns: default to SumFilter when counting values
Simplify fix for:
https://gitter.im/tinkerman-cat/espurna?at=5f6661a1f969413294f7404d

Most of the time, we care about the sum during report interval, not the
value that gets aggregated across all readings
2020-09-24 07:49:31 +03:00
Maxim Prokhorov
c0af41433a sns: clean-up EventSensor
Always do digitalRead() after ISR
Drop trigger, since we can handle this inside of reading routine
(although, pending some changes to make reading interval per-sensor)

Rework read / write through std::atomic
2020-09-24 07:49:31 +03:00
Max Prokhorov
c72ca3f1d0 sns: BME680 fixes (#2361)
- make sure we call run() before checking for errors, we will miss status update otherwise and lock the sensor class in the error state that it cannot recover from
- set error flag only when either bsec or bme680 report an error. ensure we show any issues reported by the library via the debug log
ref. https://gitter.im/tinkerman-cat/espurna?at=5f63a955c1d1a53705abcbe3
TODO: add custom error messages through virtual method?

Also, a minor fix to the sensors test when using 1m and 2m boards
2020-09-24 07:47:48 +03:00
user176176
1d895d98b8 hw: add support for Fcmila E27 7W RGB+W light bulb (#2353)
Device in question: https://www.aliexpress.com/item/32925895199.html
Named after print on the PCB.

Co-authored-by: user176176 <>
2020-09-15 23:40:37 +03:00
Max Prokhorov
21e9477d96 rpn: fix crash when calling rfb.codes 2020-09-10 01:15:32 +03:00
Max Prokhorov
d63228ef50 wifi: update to justwifi development version (#2347)
- support 32 byte hostname / ssid
- support 64 byte passphrase
- slightly reduce amount of memory allocations
- tweak initialization paths to call persistent(false) as early as possible
2020-09-10 01:05:02 +03:00
Max Prokhorov
ee1f56ad4b hw: rename zhilde eu44 -> 44eu (#2349) 2020-09-10 01:04:10 +03:00
Maxim Prokhorov
b8b8ca87b3 util: do not ignore zeroes in hex input
Provide safe fallback *only* when char is out-of-range

As it is, numeric 0 was equal to else { ... }, so 00 was never parsed.
Previously, it was assumed that we never try to parse leading / trailing zeroes,
but in turn we also ignored zeroes in the middle of the number...
2020-09-09 17:55:26 +03:00
Bert Vermeulen
f6ec2422a4 hw: add support for the Zhilde ZLD-64EU-W (#2342)
* Add support for the Zhilde ZLD-64EU-W

This is a power outlet with 6 power sockets and 4 USB ports.

* fixup based on the zld-44eu hw and tasmota template info

Co-authored-by: Maxim Prokhorov <prokhorov.max@outlook.com>
2020-09-04 23:08:28 +03:00
Maxim Prokhorov
e1b643fd00 pio: update ldpath as soon as possible
trying to fix #2343
*** [.pio\build\$PIOENV\firmware.bin] TypeError
`expected str, bytes or os.PathLike object, not Dir' trying to evaluate `${__get_flash_size(__env__)}'

as it turns out, PIO platform internals (sometimes) did not use the correct ldscript path
2020-09-04 23:00:40 +03:00
Maxim Prokhorov
3d1b82ea25 sns: fixup a409dede
vector will not copy when move ctor is marked noexcept
remove the copy ctor 'trick', re-add dtor. explicitly do the thing we want
(...clang-tidy would've shown this issue, something to do in the CI...)
2020-09-04 14:59:59 +03:00
Maxim Prokhorov
487190892e wifi: preliminary fix for leases setup order
see 69c65a6a40 (commitcomment-42008295)
Because of the way DHCP is integrated into the Core logic, we need to
call wifi_softap_add_dhcps_lease(...) inbetween WiFi.softApConfig(...) and WiFi.softAp(...)
2020-09-04 14:02:51 +03:00
Maxim Prokhorov
7c2fe35269 api: actually call PUT method of the handler 2020-09-04 14:01:41 +03:00
Maxim Prokhorov
e1a72e8790 rfb: move generic functions outside of the implementations block 2020-08-31 06:24:28 +03:00
Maxim Prokhorov
901dc2ed71 rfb: a little bit more RELAY_SUPPORT checks 2020-08-31 05:51:30 +03:00
Maxim Prokhorov
a409dedefe sns: fix internal flow
- magnitudes vector grows by calling copy ctor, ensure filter never gets deleted
- ensure we can't use magnitude member instead of ctor arg
- more magnitude references instead of using index access
- additional checks for isnan, fix report never triggering
- drop event callback. at least for EventSensor, we already have
  report with min / max value change triggers
2020-08-30 19:38:12 +03:00
Maxim Prokhorov
efdcdef196 sns: clean-up sensor init
- BaseFilter must have virtual dtor
- magnitude object is not trivial, we need to manage filter lifetime
- Ensure move also moves filter object
- Clean-up using magnitude object by value in functions
2020-08-30 15:43:23 +03:00
Max Prokhorov
a496308d97 web: prometheus metrics support (#2332)
- (experimental) provide generic way to read magnitude values
- expose /api/metrics with values formatted specifically for prometheus, with relay and sensor data
- small tweaks to sensor init

Example config:
```
scrape_configs:
  - job_name: 'espurna'
    metrics_path: '/api/metrics'
    params:
      apikey: ['apikeyapikey']
    static_configs:
      - targets: ['espurna-blabla.lan:80']
```
Where ESPurna side has
```
apiKey => "apikeyapikey"
apiEnabled => "1"
```
2020-08-30 15:26:16 +03:00
Maxim Prokhorov
ee58fa6511 rfb: parse payload in mqtt learn api, same as http
plus, hide both under `#if RELAY_SUPPORT`
2020-08-27 17:30:23 +03:00
Maxim Prokhorov
b363250766 rfb: fix parsing 'repeats' number in the payload
Ensure we step +1 char into the string
Ensure hex decoding of the payload ignores the separator + number of repeats
2020-08-27 17:29:31 +03:00
Max Prokhorov
6a2d57e547 rfb: #2335 follow-up (#2337)
* rfb: fix unused repeats setting
* rfb: rename TIMES -> REPEATS
* rfb: use out as first arg
2020-08-27 12:59:32 +03:00
Max Prokhorov
d399eac8cd hw: fix 512kb build with recent Core
ref. https://travis-ci.com/github/mcspr/espurna-nightly-builder/jobs/378203413#L698

> +env ESPURNA_FLAGS=-DGENERIC_ESP01_512KB ESPURNA_RELEASE_NAME=generic-esp01-512kb ESPURNA_BUILD_SINGLE_SOURCE=1 pio run -e esp8266-512k-base -s -t release
> /home/travis/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .pio/build/esp8266-512k-base/firmware.elf section `.irom0.text' will not fit in region `irom0_0_seg'

Remove ~90Kb from the build.
2020-08-27 10:14:13 +03:00
Max Prokhorov
1f9479b943 rpn: rfbridge operators and mqtt fixes (#2302)
- cache received rfbridge codes in the internal list, allow to operate on it via the rpn operators
- add `<N> <proto> <code> rfb_match`, matching when we receive specified protocol + code string at least N times
- add `<proto> <code> <proto> <code> rfb_sequence`, checking if specified protocol + code pairs happen in sequence
- add `<TIME> <N> <proto> <code> rfb_match_wait` - similar to `rfb_match`, but waiting for at least `TIME` (ms) via oneshot runner
- add `<proto> <code> rfb_info`, pushes code's latest timestamp and it's counter on the stack
- add `<proto> <code> rfb_pop`, which removes the specified protocol + code from the internal cache
- fix MQTT skip setting making RPN variables absent on initial connection
- default to no skip when receiving MQTT
(small issue still stands with us having non-clean MQTT session, broker will persist variable subscriptions even after unsubscribe event)
2020-08-27 01:21:21 +03:00
Maxim Prokhorov
6d7fe1ce38 broker handles string 2020-08-27 00:04:04 +03:00
Maxim Prokhorov
9b3ef89dab Merge remote-tracking branch 'origin/dev' into rfb/refactoring 2020-08-26 23:00:45 +03:00
Maxim Prokhorov
0425fa7756 rfb receiver lock for multiple relays 2020-08-26 22:59:11 +03:00
Maxim Prokhorov
22924cfd0a simplify rc-switch reader 2020-08-26 22:59:11 +03:00
Maxim Prokhorov
5028bbdcf0 fix sender timing typo, fix code unpacking 2020-08-26 22:59:11 +03:00
Maxim Prokhorov
dc8a672e00 ... on second thought, just bump the cfg version 2020-08-26 22:59:11 +03:00
Maxim Prokhorov
17814d8003 settings: fix migrate routine never working with empty settings 2020-08-26 22:56:17 +03:00
Maxim Prokhorov
844d0b4c53 pio: remove the note about PIO incompatibility
ref. 6af2bad123
2.3.0 is still not supported, but at least buildable
2020-08-26 22:54:38 +03:00
Maxim Prokhorov
378cfdc09a settings backwards compat on demand 2020-08-26 10:57:23 +03:00
Maxim Prokhorov
4b93369706 fix not reading_until_length after buckets 2020-08-26 09:17:44 +03:00
Maxim Prokhorov
2fc0ab0a17 tweak logging 2020-08-25 23:21:49 +03:00
Maxim Prokhorov
8b01c29a28 learnok was never matched as length+payload 2020-08-25 23:21:49 +03:00
Maxim Prokhorov
a43dc16825 recover learn codes from old source
ref.
https://github.com/Portisch/RF-Bridge-EFM8BB1/wiki/0xA2 (desc: Learning OK)
https://github.com/Portisch/RF-Bridge-EFM8BB1/wiki/0xA3 (desc: Learning failed)
were used, but the pages did not reflect the actual implementation:

af1bddb3d8/inc/uart.h
...
RF_CODE_LEARN_KO = 0xA2
RF_CODE_LEARN_OK = 0xA3
...
2020-08-25 23:17:55 +03:00
Maxim Prokhorov
11f815fc69 cleanup 3
- no need in template when size set as constexpr
- remove size param completely, deduce size based on buffer
2020-08-25 22:24:21 +03:00
Maxim Prokhorov
40a387522d cleanup 2
- queueing efm8bb1 msg, pass around array as reference since the size is fixed
- make use of learn timestamp
2020-08-25 21:29:55 +03:00
Maxim Prokhorov
2e77818ae1 cleanup 2020-08-25 20:11:39 +03:00
Maxim Prokhorov
7cfde70d85 broker publish with protocol included 2020-08-25 20:10:40 +03:00
Maxim Prokhorov
83e22b09cd codacy 2020-08-25 15:40:44 +03:00
Maxim Prokhorov
9bc8afe81c use correct rfb_provider for stock rfbridge env 2020-08-25 15:25:16 +03:00
Maxim Prokhorov
61daecee05 log advanced sniffing methods of efm8bb1 alternative fw 2020-08-25 15:24:35 +03:00
Maxim Prokhorov
8e6c474160 fix debug log 2020-08-25 14:07:47 +03:00