1

(0 відповідей, залишених у C#, .NET)

Чомусь не біндяться Опції атрибуту з форми до моделі (Саме на стороні сервера, на клієнській стороні форма формує опції)

Маю форму для додавання продукту :

@model Jewelery.ViewModels.DTO.Product.ProductCMSDTO
@{
    Layout = "~/Views/Shared/_LayoutCSM.cshtml";
}
<script src="~/js/CMS/ProductImageFunc.js"></script>
<script src="~/js/CMS/ProductAtributeFunc.js"></script>
<script src="~/js/CMS/CategoryDropList.js"></script>

<div>
    @using (Html.BeginForm("AddProduct", "Product", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <div >
            @* 
                public List<Product_imagesDTO> Images { get; set; }
            *@
            <div class="Image_Container">
                @for(int i = 0; i < Model.Images.Count; i++)
                {
                    <div class="Image_group" id="Image_group_@i">
                        <div>
                            <img src="#" alt="Image Preview @i" id="ImagePreview_@i">
                        </div>
                        <div>
                            <input type="file" accept="image/*" name="Images[@i].ImageFile" onchange="PreviewImage(event,@i)">
                        </div>
                        
                        <div>
                            <label for="Images[@i].Alt_text">Alt_text</label>
                            @Html.EditorFor(model => model.Images[i].Alt_text);
                        </div>
                        <div>
                            <button type="button" onclick="RemoveImage(@i)">RemoveImage</button>
                        </div>

                    </div>               
                }
            </div>

            <div>
                <button type="button" id="newImageInput" onclick="AddImageField(event)"> Add Image </button>
            </div>            
        </div>
        <div>

            <div>
                <label for="Name_UKR">Name_UKR</label>
                @Html.EditorFor(model => model.Name_UKR)
            </div>
            <div>
                <label for="Name_ENG">Name_ENG</label>
                @Html.EditorFor(model => model.Name_ENG)
            </div>
            <div>
                <label for="Description_UKR">Description_UKR</label>
                @Html.TextAreaFor(model => model.Description_UKR)
            </div>
            <div>
                <label for="Description_ENG">Description_ENG</label>
                @Html.TextAreaFor(model => model.Description_ENG)
            </div>
            <div>
                <label for="Price">Price</label>
                @Html.EditorFor(model => model.Price)
            </div>
            <div>
                <label for="Category_id">Category_id</label>
                @*@Html.EditorFor(model => model.Category_id) @*Recode*@
                <select name="Category_id" id="Category_id" onchange="GetSubCategory(event)">
                    <option>Choose Category</option>
                </select>
            </div>
            <div>
                <label for="SubCategory_id">SubCategory_id</label>
                @*@Html.EditorFor(model => model.SubCategory_id) @*Recode*@
                <select name="SubCategory_id" id="SubCategory_id">
                    <option selected>Choose SubCategory_id</option>
                </select>
            </div>
            <div>
                <label for="Articul">Articul</label>
                @Html.EditorFor(model => model.Articul)
            </div>           

            <div>
                <label for="isExist">isExist</label>
                @Html.EditorFor(model => model.isExist)
            </div>
            <div>
                <label for="isDisplay">isDisplay</label>
                @Html.EditorFor(model => model.isDisplay)
            </div>

            <div>
                <div id="Atribute_Container">
                    @for(int i = 0; i < Model.Attributes.Count; i++)
                    {
                        <div class="Atribute_group" id="Atribute_group_@i">
                            <div>
                                <label for="">Atribute_name_UKR</label>
                                @Html.EditorFor(model => model.Attributes[i].Atribute_name_UKR)
                            </div>
                            <div>
                                <label for="">Atribute_name_ENG</label>
                                @Html.EditorFor(model => model.Attributes[i].Atribute_name_ENG)
                            </div>
                            <div>
                                <label for="">Unit</label>
                                @Html.EditorFor(model => model.Attributes[i].Unit)
                            </div>
                            <div>
                                <label for="">DetermineTheSize_Id</label>
                                @Html.EditorFor(model => model.Attributes[i].DetermineTheSize_Id)
                            </div>
                            <div class="Option_container" id="Option_container_for_atribute_@i">
                                @for (int x = 0; x < Model.Attributes[i].Options.Count; x++)
                                {
                                    <div class="Option_group" id="Option_group_@x">
                                        <div>
                                            <label for="Attributes[@i].Options[@x].Size">Size</label>
                                            @Html.EditorFor(model => model.Attributes[i].Options[x].Size) Attributes[1].Options[2].Size
                                        </div>
                                        <div>
                                            <label for="Attributes[@i].Options[@x].PriceAdjustment">PriceAdjustment</label>
                                            @Html.EditorFor(model => model.Attributes[i].Options[x].PriceAdjustment)
                                        </div>                                  
                                        <div>
                                            <button type="button" onclick="RemoveOption(@x)">Delete Option</button>
                                        </div>
                                    </div>
                                }
                                <div>
                                    <button type="button" onclick="AddOption(@i)">Add Option</button>
                                </div>                            
                            </div>
                            <div>
                                <button type="button" onclick="RemoveAtribute(@i)">Delete Atribute</button>
                            </div>                                                                                   
                        </div>                   
                    }                
                    <div>
                        <button type="button" onclick="AddAtribute()">Add Atribute</button>
                    </div>
                </div>
            </div>

            @*
                public List<AtributeCMSDTO> Attributes { get; set; }
            *@
        </div>

        <div>
            <button type="submit">Add Product</button>
        </div>
    }
</div>

Маю Модель Продукту :

    public class ProductCMSDTO
    {
        public int Product_id { get; set; }
        public string Name_UKR { get; set; }
        public string Name_ENG { get; set; }

        public string Description_UKR { get; set; }
        public string Description_ENG { get; set; }

        public decimal Price { get; set; }
        public int Category_id { get; set; }
        public int Articul { get; set; }
        public int? SubCategory_id { get; set; }
        public List<Product_imagesDTO> Images { get; set; }
        public List<AtributeCMSDTO> Attributes { get; set; }
        public bool isExist { get; set; }
        public bool isDisplay { get; set; }
        public DateTime Created_at { get; set; }
        public DateTime Updated_at { get; set; }
    }

public class AtributeCMSDTO
    {
        public int Atribute_id { get; set; }
        public string Atribute_name_UKR { get; set; }
        public string Atribute_name_ENG { get; set; }

        public int Product_id { get; set; }
        public List<Option> Options { get; set; }
        public string? Unit { get; set; }

        public int? DetermineTheSize_Id { get; set; }
    }

public class Option
    {
        public int Option_id { get; set; }
        public int Atribute_id { get; set; }
        public Atribute Atribute { get; set; }
        public decimal Size { get; set; }
        public decimal PriceAdjustment { get; set; }
    }

При додаванні Атрибуту і опцій до атрибуту через js (HTML такий самий як і в for циклі), на сервер відправляється ProductCMSDTO з лістом AtributeCMSDTO, але в AtributeCMSDTO пустий список Option

Що я роблю не так? можливо краще зробити по іншому?

frz написав:

Сподіваюся, ви визначилися зі стеком, бо починали з Java, тепер .Net - через рік буде Python?

Нажаль пайтон разом з основами data since і ML я теж вчив (це ж унік). Для мене була проблема не в стеку, а в тому що я думав що для того щоб стати прогером треба знати добре стек і все , але виявилося щоб мій код мав хочь якийсь сенс потрібно вложити в його купу теоретичних знань типу архітектури, дизайну , qa, підходів до розробки, ux і тд. І коли я тоді вчив джаву це закінчилося govno-pet проектом який після чергового оновлення просто перестав працювати, і щоб його виправити легше було написати його з початку

Дуже старе повідомлення)) Вже закінчив магіструтуру)) Роботи так і не знайшов. Хочу сказати що пройшов курси в багатьох напрямках (Coursela, Udemy, Youtube) , отримав базу. Тепер знаю як щось зробити, але без конкретики. Знаю як , але для практичного виконанання треба  багато гуглити різних деталей. Зараз детально треню .Net full stack web with React і анг. Надіюся до кінця року знайду хочь щось хоча б за 300$

4

(9 відповідей, залишених у Залізо)

koala написав:

Наскільки я знаю, для вбудованих графічних процесорів пам'ять розподіляється динамічно, а вказане значення (половина RAM) - це умовне число для запитів від програм. Ви можете його виставити на довільне значення в реєстрі, якщо вам чомусь не подобається це.

Я теж так вважав що Ram розподіляється динамічно , але якщо дивитися в диспетчері задач то постійно зайнято 8 гіг оперативки , а відеокарта має 8 гіг "відео пам'яті" але використовуєттся 100-200 мб. Чи може бути так що проблема саме в програмі яку я використовую? Бо коли я її запускаю їй +- потрібно 12-14 гіг ram , і 400 мб "відео пам'яті" , але коли ram повністю використовуєттся то програма крашиться з помилкою що не вистачає Ram, хоча є ще -+7 гіг ram яка не використовується але виділена на відеоядро. Програма це код який вчить YOLO

vitaltechno написав:

Розкажіть, будь ласка, про результати. Чи працює інтернет, коли немає світла із роутером 4G. Тому що сам постійно про це думаю. Взяти якийсь дешевий китайський чи той же ТП-Лінк за 2-3 тис грн с 4G.

Я відмовився від цього рішення, бо провайдер встановив ДБЖ на маршрутизаторах + я підключив свій роутер до повербанку

6

(9 відповідей, залишених у Залізо)

Droid 77 написав:

Перекажіть Дімону що:
корегувати ці параметри можливо в налаштуваннях EFI або BIOS, залежить від конкретної конфігурації ПК.
Іноді ці корегування дозволяє зробити програмне забезпечення апаратних драйверів від виробника в середовищі операційної системи.

Якщо BIOS обмежений, а на інтегровану відеокарту немає пз, то і шансів як я розумію немає.

Привіт маю hp 15-dy1071wm. Додав 8 гіг оперативки, але система автоматично додада +4 гіг виділеної пам'яті на відеоядро що мені не потрібно. Як зменшити це значення назад?

C:\Users\Dima\Pictures\Screenshots\Screenshot 2023-11-23 210504.png

8

(1 відповідей, залишених у Java)

Помилка була в регулярному виразі який приймав тільки додатнє число

9

(1 відповідей, залишених у Java)

Маю помилку
TODO: implement me
cucumber.api.PendingException: TODO: implement me
    at cucumber.runtime.junit.JUnitReporter.addFailure(JUnitReporter.java:150)
    at cucumber.runtime.junit.JUnitReporter.addFailureOrIgnoreStep(JUnitReporter.java:138)
    at cucumber.runtime.junit.JUnitReporter.result(JUnitReporter.java:98)
    at cucumber.runtime.Runtime.runStep(Runtime.java:282)
    at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
    at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
    at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
    at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102)
    at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
    at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)
    at cucumber.api.junit.Cucumber.runChild(Cucumber.java:95)
    at cucumber.api.junit.Cucumber.runChild(Cucumber.java:38)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at cucumber.api.junit.Cucumber.run(Cucumber.java:100)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy1.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:146)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:128)
    at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:750)

Код Junit

@Then("^Add bad Chocolate recipte Name is (\\D+) Need Chocolate is (\\d+) Need Coffee is (\\d+) Need Milk is (\\d+) Need Sugar is (\\d+) Price is (\\d+)$")
    public void Add_bad_recipte(String name,String Chocolate,String Coffee,String Milk,String Sugar,String Price) throws RecipeException {
        try {
            Recipe TestreRecipe = new Recipe() ;
            TestreRecipe.setName(name);
            TestreRecipe.setAmtChocolate(Chocolate);
            TestreRecipe.setAmtCoffee(Coffee);
            TestreRecipe.setAmtMilk(Milk);
            TestreRecipe.setAmtSugar(Sugar);
            TestreRecipe.setPrice(Price);
            Command cmd = new DescribeRecipe(TestreRecipe);
            coffeeMakerMain.mode = CoffeeMakerUI.Mode.ADD_RECIPE;
            coffeeMakerMain.UI_Input(cmd);
        }catch (RecipeException e) {
            Command cmd = new DescribeRecipe(null);
            coffeeMakerMain.mode = CoffeeMakerUI.Mode.ADD_RECIPE;
            coffeeMakerMain.UI_Input(cmd);
            assertEquals("Units of chocolate must be a positive integer",e.getMessage());
        }

    }

Код cucumber

Scenario: Add 1 bad Recipes
    Given an empty recipe book
    Then Add bad Chocolate recipte Name is Coffe Need Chocolate is -1 Need Coffee is 1 Need Milk is 1 Need Sugar is 1 Price is 1
    And Mode is WAITING
    And Status is RECIPE_NOT_ADDED

Код setAmtChocolate(Chocolate)

public void setAmtChocolate(String chocolate) throws RecipeException {
    int amtChocolate = 0;
    try {
        amtChocolate = Integer.parseInt(chocolate);
    } catch (NumberFormatException e) {
        throw new RecipeException("Units of chocolate must be a positive integer");
    }
    if (amtChocolate >= 0) {
        this.amtChocolate = amtChocolate;
    } else {
        throw new RecipeException("Units of chocolate must be a positive integer");
    }
}

Допоможіть. Хочу написати сценарій де вписую не коректні дані і ловлю помилку . Другий день ламаю голову, що я роблю не правильно ?

10

(3 відповідей, залишених у Залізо)

Привіт , маю ноут hp 15-dy1071wm. У ньому стоїть 256 гб ссд диск . Хочу замінити ссд з більшим об'ємом пам'яті .
Проблема в тому що я не можу зрозуміти який розмір порібен і який слот у мене. Все що я знаю що це М.2 і те що модель називається Intel Optane+238GBSSD.
Можливо хтось знає який слот, розмір, тип ссд потрібен ?

Всім відомо що зараз при відключенні світла немає моб інтернету чи будь-якого друго). Маю намір купити 4дж модем з зовнішньою антетоною МІМО <-(Говорять для 4дж вона краще) . При відключенні світла направляти антену на вежу де є постійно електричне живлення , це +- 5км від мого дому. Таке питатання : Чи буде працювати в мене +- стабільно 4дж інтернет з такою антеною чи краще не витрачати гроші ?

П.с я знахожусь в Києві і моб вежа до якої я зазвичай підключений під час відключення світла працює тільки для дзвінків. Також у всіх провайдерів які постачають послуги інтернету немає акамуляторів на комунікаторах

12

(17 відповідей, залишених у Залізо)

kisilam написав:

Доброго дня.
Якщо фрізить, значить то тротлінг від високої температури.
hwmonitor  завантажте і промоніторте температуру. Можливо, таки не вистачає охолодження.
Промоніторне, обовʼязково.

Доброго дня , дякую за відповідь. Я проблему вирішив . Проблема була в енергозберігаючому режимі , який при бездіяльності зменшував частоту. Я його відключив зараз все ок . Температура в при навантаженні 75С при порозі в 100С , тому мені здається можна було ставити проц і на 45В.

13

(17 відповідей, залишених у Залізо)

Висновок:
процесор i7-3632QM став і працює
озу 16 гб теж стало
хдд змінив на сдд

отже перегріву немає, але процесор працює з фрізом коли піднімає частоту при збільшенні навантаження, що дещо заважає .
Ноут став працювати набагато швидше , тести до і після я не робив , але візуально відчутно швидше.

апгрейд коштув 6000 грн.

Дякую всім за допомогу !!!

14

(17 відповідей, залишених у Залізо)

quwy написав:

Я б процесор не чіпав взагалі. По-перше не факт, що новий нормально стане, по-друге вище правильно сказали про тепловідведення. Ставте 8 ГБ пам'яті, а гроші, що планували витратити на процесор, витратьте на SSD. Це дасть у десять разів більше загальної швидкості роботи системи, ніж самий топовий процесор .

ssd вже поставив , хочу вижати максимум з системи)

15

(17 відповідей, залишених у Залізо)

HetmanNet написав:
Iakol написав:

В мене є старенький ноут Toshiba Satellite C850-1DZ i3-2312M 39,6 см (15.6") Intel® Core™ i3 4 ГБ DDR3-SDRAM 500 ГБ Жорсткий диск AMD Radeon HD 7610M. В його замінний процесор на Сокеті дж2, і в АІДі64 максимальний об‘єм памяті є 16 гб . Хочу замінити процесор на Core i7-3632QM і замінити озу на 2 планки Kingston ValueRAM 8GB DDR3 SO-DIMM PC3-12800 (KVR16LS11/8).

В i3-2312M і Core i7-3632QM , однакові сокети і ТДП в 35В

А Kingston ValueRAM 8GB DDR3 SO-DIMM PC3-12800 ,як пишуть в інтернеті підходить до цього ноута .

В мене таке питання , я не сильно розуміюся в залізі, тільки з інформації з інтернету. Чи підійдуть ці залізяки до цього пк? не зроблю я помилку ?

Toshiba Satellite C850 поставлявся в конфігурації з i7-3632QM?
Бо навіть якщо чипсет підтримувати може, то можуть бути відсутні мікрокоди в BIOS, що часте вище на ноутбуках.

такий же ноутбук є з i7-3630QM , але це ж LGA сокет , тут поідеї в біосі повинна бути підтримка всіх процесорів які стають в цей сокет. ще є ноутбук Toshiba Satellite L845-SP4169KM i7-3632QM , де однаковий БІОС з моєю системою.

16

(17 відповідей, залишених у Залізо)

kisilam написав:

На рахунок проца, беріть з однаковим теплопакетом. Core i-7 і без того буде гарячіший чим і-3, а без модифікації системи охолодження вам немає змісту ставити гарячіший проц.
скиньте сюди точну марку чіпсета

Материнка intel PLCSF8

Чіпсет Sandy Bridge MB IMC

Південний міст intel HM76

17

(17 відповідей, залишених у Залізо)

Також питання про i7-3840qm , він поідеї також підходить , але у його ТДП 45в , якщо купити краще зарядне , то ноут буде працювати добре та без перегріву ?

18

(17 відповідей, залишених у Залізо)

В мене є старенький ноут Toshiba Satellite C850-1DZ i3-2312M 39,6 см (15.6") Intel® Core™ i3 4 ГБ DDR3-SDRAM 500 ГБ Жорсткий диск AMD Radeon HD 7610M. В його замінний процесор на Сокеті дж2, і в АІДі64 максимальний об‘єм памяті є 16 гб . Хочу замінити процесор на Core i7-3632QM і замінити озу на 2 планки Kingston ValueRAM 8GB DDR3 SO-DIMM PC3-12800 (KVR16LS11/8).

В i3-2312M і Core i7-3632QM , однакові сокети і ТДП в 35В

А Kingston ValueRAM 8GB DDR3 SO-DIMM PC3-12800 ,як пишуть в інтернеті підходить до цього ноута .

В мене таке питання , я не сильно розуміюся в залізі, тільки з інформації з інтернету. Чи підійдуть ці залізяки до цього пк? не зроблю я помилку ?

Боже, велике вам дякую. 10 раз переписував програму і постійно робив одну й ту саму помилку.

проблема в тому , що контролер по запиту в телеграм повинен включити світодіод на 4хв але він його включає через 239 секунд і в 240 секунд виключає. Час задавав різний проблема залишалася.

void handleNewMessages(int numNewMessages)
{
  Serial.print("handleNewMessages ");
  Serial.println(numNewMessages);

  for (int i = 0; i < numNewMessages; i++)
  {
    String chat_id = bot.messages[i].chat_id;
    String from_name = bot.messages[i].from_name;
    if (from_name == "")
      from_name = "Guest";
      
    String text = bot.messages[i].text;
  
    
    if (text == "/alarn")
    {
      ledStatus = 3;
     bot.sendMessage(chat_id, "alarn is ON", "");
      }

    if (text == "/ledon")
    {
      ledStatus = 1;
      bot.sendMessage(chat_id, "Led is ON", "");
    }

    if (text == "/ledoff")
    {
      ledStatus = 0;
      bot.sendMessage(chat_id, "Led is OFF", "");
    }
  }
}


void setup()
{
  Serial.begin(115200);
  Serial.println();

  pinMode(2, OUTPUT); // initialize digital ledPin as an output.
  delay(10);
  digitalWrite(2, HIGH); // initialize pin as off (active LOW)

  // attempt to connect to Wifi network:
  configTime(0, 0, "pool.ntp.org");      // get UTC time via NTP
  secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
  Serial.print("Connecting to Wifi SSID ");
  Serial.print(WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(500);
  }
  Serial.print("\nWiFi подключено. IP address: ");
  Serial.println(WiFi.localIP());

  // Check NTP/Time, usually it is instantaneous and you can delete the code below.
  Serial.print("Retrieving time: ");
  time_t now = time(nullptr);
  while (now < 24 * 3600)
  {
    Serial.print(".");
    delay(100);
    now = time(nullptr);
  }
  Serial.println(now);
}

void loop()
{
 
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    
    while (numNewMessages)
    {
      Serial.println("got response");
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }
    if((ledStatus == 0) && (lastledStatus !=0)){
      digitalWrite(2, HIGH);
      lastledStatus = 0;
      }
    if((ledStatus == 1) && (lastledStatus !=1)){
      digitalWrite(2, LOW);
      lastledStatus = 1;
      }
      if((ledStatus == 3) && (lastledStatus !=3)){
      digitalWrite(2, HIGH);
      bot_lasttime = millis();
      lastledStatus = 3;
      }
      if((ledStatus == 3) && (lastledStatus == 3) && ((millis() - bot_lasttime) >= 240000)){
      digitalWrite(2, LOW);
      ledStatus = 0;
      lastledStatus = 1;
      }
}