From cb9a50c95a9091e5772597fa3c95d5aa65e065f9 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 13 Jul 2024 17:19:36 +0200 Subject: [PATCH] mini1gen3 --- .github/workflows/build.yaml | 3 +- Makefile | 4 +++ mos.yml | 38 ++++++++++++++++++++ src/ShellyMini1Gen3/shelly_init.cpp | 56 +++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/ShellyMini1Gen3/shelly_init.cpp diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ce48be8b..575a1a9f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -25,6 +25,7 @@ jobs: - ShellyPlus2PM - ShellyPlusI4 - ShellyPlusPlugS + - ShellyMini1Gen3 - ShellyRGBW2 - ShellyUNI - ShellyVintage @@ -34,7 +35,7 @@ jobs: with: fetch-depth: 0 - name: Build docker image # remove if newer mos docker image is available - if: ${{ contains( matrix.model , 'Plus') }} + if: ${{ contains( matrix.model , 'Plus') || contains( matrix.model , 'G3') }} run: docker build -t mgos/esp32-build:4.4.1-r7 -f .github/workflows/Dockerfile-esp32-build . - name: Install mos build tool run: | diff --git a/Makefile b/Makefile index aa94af23..adb27e01 100644 --- a/Makefile +++ b/Makefile @@ -84,6 +84,10 @@ ShellyPlusI4: PLATFORM=esp32 ShellyPlusI4: build-ShellyPlusI4 @true +ShellyMini1Gen3: PLATFORM=esp32c3 +ShellyMini1Gen3: build-ShellyMini1Gen3 + @true + ShellyRGBW2: build-ShellyRGBW2 @true diff --git a/mos.yml b/mos.yml index 332f0031..6edd55bc 100644 --- a/mos.yml +++ b/mos.yml @@ -615,6 +615,44 @@ conds: - ["bl0937.power_coeff", "f", 0, {title: "BL0937 counts -> watts conversion coefficient"}] - ["bl0937.power_coeff", 1.64358469] # (16 + 1010 + 1935) / (9.55 + 617 + 1175) + - when: build_vars.MODEL == "ShellyMini1Gen3" + apply: + name: Mini1G3 + libs: + - location: https://github.com/mongoose-os-libs/mongoose + build_vars: + MGOS_ROOT_FS_TYPE: LFS + MGOS_ROOT_FS_SIZE: 458752 + ESP_IDF_EXTRA_PARTITION: "scratch,data,0x80,0x3f0000,48K" + ESP_IDF_EXTRA_PARTITION_2: "shelly,data,0x88,0x3fc000,16K,encrypted" + #MGOS_ROOT_FS_SIZE: 10458752 + #ESP_IDF_EXTRA_PARTITION: "scratch,data,0x80,0x720000,832K" + #ESP_IDF_EXTRA_PARTITION_2: "shelly,data,0x88,0x7F0000,64K,encrypted" + ESP_IDF_SDKCONFIG_OPTS: > + ${build_vars.ESP_IDF_SDKCONFIG_OPTS} + CONFIG_FREERTOS_UNICORE=y + CONFIG_ESPTOOLPY_FLASHMODE_DIO=y + cdefs: + LED_GPIO: 0 + LED_ON: 0 + BTN_GPIO: 1 + BTN_DOWN: 0 + PRODUCT_HW_REV: "0.1.6" + STOCK_FW_MODEL: Mini1G3 + MAX_NUM_HAP_SESSIONS: 16 + config_schema: + - ["device.id", "ShellyMini1G3-??????"] + - ["shelly.name", "ShellyMini1G3-??????"] + - ["wifi.ap.ssid", "ShellyMini1G3-??????"] + - ["sw1", "sw", {title: "SW1 settings"}] + - ["sw1.name", "Shelly SW"] + - ["in1", "in", {title: "Input 1 settings"}] + - ["in1.ssw.name", "Shelly SSW1"] + - ["in1.sensor.name", "Shelly S1"] + - ["gdo1", "gdo", {title: "GDO1 settings"}] + - ["gdo1.name", "Garage Door"] + - ["gdo1.open_sensor_mode", 2] + - when: build_vars.MODEL == "ShellyPlus1" apply: name: Plus1 diff --git a/src/ShellyMini1Gen3/shelly_init.cpp b/src/ShellyMini1Gen3/shelly_init.cpp new file mode 100644 index 00000000..e2f9f5bf --- /dev/null +++ b/src/ShellyMini1Gen3/shelly_init.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) Shelly-HomeKit Contributors + * All rights reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "shelly_hap_garage_door_opener.hpp" +#include "shelly_hap_input.hpp" +#include "shelly_input_pin.hpp" +#include "shelly_main.hpp" +#include "shelly_sys_led_btn.hpp" +#include "shelly_temp_sensor_ntc.hpp" + +namespace shelly { + +void CreatePeripherals(std::vector> *inputs, + std::vector> *outputs, + std::vector> *pms UNUSED_ARG, + std::unique_ptr *sys_temp) { + outputs->emplace_back(new OutputPin(1, 7, 1)); + auto *in = new InputPin(1, 10, 1, MGOS_GPIO_PULL_NONE, true); + in->AddHandler(std::bind(&HandleInputResetSequence, in, LED_GPIO, _1, _2)); + in->Init(); + inputs->emplace_back(in); + sys_temp->reset(new TempSensorSDNT1608X103F3950(3, 3.3f, 10000.0f)); + + InitSysLED(LED_GPIO, LED_ON); + InitSysBtn(BTN_GPIO, BTN_DOWN); +} + +void CreateComponents(std::vector> *comps, + std::vector> *accs, + HAPAccessoryServerRef *svr) { + bool gdo_mode = mgos_sys_config_get_shelly_mode() == (int) Mode::kGarageDoor; + if (gdo_mode) { + hap::CreateHAPGDO(1, FindInput(1), FindInput(2), FindOutput(1), + FindOutput(1), mgos_sys_config_get_gdo1(), comps, accs, + svr, true); + } else { + CreateHAPSwitch(1, mgos_sys_config_get_sw1(), mgos_sys_config_get_in1(), + comps, accs, svr, true); + } +} + +} // namespace shelly