unknown 1 mesiac pred
rodič
commit
165f0e5f98

+ 204 - 218
.obsidian/workspace.json

@@ -1,219 +1,205 @@
-{
-  "main": {
-    "id": "702c86104f0a0629",
-    "type": "split",
-    "children": [
-      {
-        "id": "e9fcd6acf0cd154f",
-        "type": "tabs",
-        "children": [
-          {
-            "id": "c6ccb350798bdbce",
-            "type": "leaf",
-            "state": {
-              "type": "markdown",
-              "state": {
-                "file": "linux/GS server.md",
-                "mode": "source",
-                "source": false
-              },
-              "icon": "lucide-file",
-              "title": "GS server"
-            }
-          },
-          {
-            "id": "49d9269274360392",
-            "type": "leaf",
-            "state": {
-              "type": "markdown",
-              "state": {
-                "file": "Greenstar/ethernet stm32.md",
-                "mode": "source",
-                "source": false
-              },
-              "icon": "lucide-file",
-              "title": "ethernet stm32"
-            }
-          }
-        ],
-        "currentTab": 1
-      }
-    ],
-    "direction": "vertical"
-  },
-  "left": {
-    "id": "6664e9908eeea5a2",
-    "type": "split",
-    "children": [
-      {
-        "id": "97095e32830cbc6f",
-        "type": "tabs",
-        "children": [
-          {
-            "id": "c7584343712d3d31",
-            "type": "leaf",
-            "state": {
-              "type": "file-explorer",
-              "state": {
-                "sortOrder": "alphabetical",
-                "autoReveal": false
-              },
-              "icon": "lucide-folder-closed",
-              "title": "Файловый менеджер"
-            }
-          },
-          {
-            "id": "e389aabe146b0498",
-            "type": "leaf",
-            "state": {
-              "type": "search",
-              "state": {
-                "query": "",
-                "matchingCase": false,
-                "explainSearch": false,
-                "collapseAll": false,
-                "extraContext": false,
-                "sortOrder": "alphabetical"
-              },
-              "icon": "lucide-search",
-              "title": "Search"
-            }
-          },
-          {
-            "id": "5f649a68cfee8d78",
-            "type": "leaf",
-            "state": {
-              "type": "markdown",
-              "state": {
-                "file": "Python/SQLite.md",
-                "mode": "source",
-                "source": false
-              },
-              "icon": "lucide-file",
-              "title": "SQLite"
-            }
-          },
-          {
-            "id": "9cc940b45c7a4595",
-            "type": "leaf",
-            "state": {
-              "type": "bookmarks",
-              "state": {},
-              "icon": "lucide-bookmark",
-              "title": "Bookmarks"
-            }
-          }
-        ]
-      }
-    ],
-    "direction": "horizontal",
-    "width": 200
-  },
-  "right": {
-    "id": "cf92ccf43e96a53d",
-    "type": "split",
-    "children": [
-      {
-        "id": "4e6c94e5301f3341",
-        "type": "tabs",
-        "children": [
-          {
-            "id": "86c23330f2a84cf8",
-            "type": "leaf",
-            "state": {
-              "type": "backlink",
-              "state": {
-                "file": "English/Homework/Homework 5.md",
-                "collapseAll": false,
-                "extraContext": false,
-                "sortOrder": "alphabetical",
-                "showSearch": false,
-                "searchQuery": "",
-                "backlinkCollapsed": false,
-                "unlinkedCollapsed": true
-              },
-              "icon": "links-coming-in",
-              "title": "Backlinks for Homework 5"
-            }
-          },
-          {
-            "id": "06e27be0fe382bd8",
-            "type": "leaf",
-            "state": {
-              "type": "all-properties",
-              "state": {
-                "sortOrder": "frequency",
-                "showSearch": false,
-                "searchQuery": ""
-              },
-              "icon": "lucide-archive",
-              "title": "All properties"
-            }
-          }
-        ]
-      }
-    ],
-    "direction": "horizontal",
-    "width": 300,
-    "collapsed": true
-  },
-  "left-ribbon": {
-    "hiddenItems": {
-      "switcher:Меню быстрого перехода": false,
-      "graph:Граф": false,
-      "canvas:Создать новый холст": false,
-      "command-palette:Открыть палитру команд": false,
-      "markdown-importer:Импорт Markdown-файлов": false
-    }
-  },
-  "active": "49d9269274360392",
-  "lastOpenFiles": [
-    "linux/GS server.md",
-    "todo/Задачи по направлениям.md",
-    "linux/linux common.md",
-    "Greenstar/ethernet stm32.md",
-    "English/Homework/Homework 11.md",
-    "English/words.md",
-    "ROTEK/allwinner 069 070.md",
-    "ROTEK/bt67xx/6721 fix.md",
-    "Кодинг.md",
-    "todo/Счета.md",
-    "net/links.md",
-    "hardcore web development/Задания.md",
-    "Golang/environment.md",
-    "Python/link.md",
-    "img/Pasted image 20250812151104.png",
-    "Golang/links.md",
-    "Golang/common.md",
-    "ROTEK/bt67xx/common.md",
-    "ROTEK/bt67xx/Команды.md",
-    "ROTEK/metrolog/readme.md",
-    "English/Texts/Text 11.md",
-    "FlyElectronics/Drone.md",
-    "FlyElectronics/Tuber.md",
-    "English/Homework/Homework 10.md",
-    "English/Homework/Homework 9.md",
-    "English/Homework/Homework 2.md",
-    "English/img/43-5.jpg",
-    "English/img/43-4.jpg",
-    "English/img/43-3.jpg",
-    "English/img/43-2.jpg",
-    "English/img/43-1.jpg",
-    "English/Homework/Homework 1.md",
-    "English/img/42-4.jpg",
-    "English/img/42-3.jpg",
-    "English/img/42-2.jpg",
-    "English/img/42-1.jpg",
-    "net",
-    "English/words",
-    "English/img/38-1.jpg.~tmp",
-    "Database.kdbx.QABUnG",
-    "sql",
-    "img/quiz/69C5B100",
-    "img/quiz/~$вопросы_авито_стажировка.xlsx",
-    "img/quiz/вопросы_авито_стажировка.xlsx",
-    "img/quiz/CC626100",
-    "img/quiz",
-    "Untitled.canvas"
-  ]
+{
+  "main": {
+    "id": "702c86104f0a0629",
+    "type": "split",
+    "children": [
+      {
+        "id": "f3caa5cc5cd9aa0f",
+        "type": "tabs",
+        "children": [
+          {
+            "id": "37af4d3c44b3ccea",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "English/Homework/Homework 11.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "Homework 11"
+            }
+          }
+        ]
+      }
+    ],
+    "direction": "vertical"
+  },
+  "left": {
+    "id": "6664e9908eeea5a2",
+    "type": "split",
+    "children": [
+      {
+        "id": "97095e32830cbc6f",
+        "type": "tabs",
+        "children": [
+          {
+            "id": "c7584343712d3d31",
+            "type": "leaf",
+            "state": {
+              "type": "file-explorer",
+              "state": {
+                "sortOrder": "alphabetical",
+                "autoReveal": false
+              },
+              "icon": "lucide-folder-closed",
+              "title": "Files"
+            }
+          },
+          {
+            "id": "e389aabe146b0498",
+            "type": "leaf",
+            "state": {
+              "type": "search",
+              "state": {
+                "query": "",
+                "matchingCase": false,
+                "explainSearch": false,
+                "collapseAll": false,
+                "extraContext": false,
+                "sortOrder": "alphabetical"
+              },
+              "icon": "lucide-search",
+              "title": "Search"
+            }
+          },
+          {
+            "id": "5f649a68cfee8d78",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "Python/SQLite.md",
+                "mode": "source",
+                "source": false
+              },
+              "icon": "lucide-file",
+              "title": "SQLite"
+            }
+          },
+          {
+            "id": "9cc940b45c7a4595",
+            "type": "leaf",
+            "state": {
+              "type": "bookmarks",
+              "state": {},
+              "icon": "lucide-bookmark",
+              "title": "Bookmarks"
+            }
+          }
+        ]
+      }
+    ],
+    "direction": "horizontal",
+    "width": 200
+  },
+  "right": {
+    "id": "cf92ccf43e96a53d",
+    "type": "split",
+    "children": [
+      {
+        "id": "4e6c94e5301f3341",
+        "type": "tabs",
+        "children": [
+          {
+            "id": "86c23330f2a84cf8",
+            "type": "leaf",
+            "state": {
+              "type": "backlink",
+              "state": {
+                "file": "English/Homework/Homework 5.md",
+                "collapseAll": false,
+                "extraContext": false,
+                "sortOrder": "alphabetical",
+                "showSearch": false,
+                "searchQuery": "",
+                "backlinkCollapsed": false,
+                "unlinkedCollapsed": true
+              },
+              "icon": "links-coming-in",
+              "title": "Backlinks for Homework 5"
+            }
+          },
+          {
+            "id": "06e27be0fe382bd8",
+            "type": "leaf",
+            "state": {
+              "type": "all-properties",
+              "state": {
+                "sortOrder": "frequency",
+                "showSearch": false,
+                "searchQuery": ""
+              },
+              "icon": "lucide-archive",
+              "title": "All properties"
+            }
+          }
+        ]
+      }
+    ],
+    "direction": "horizontal",
+    "width": 300,
+    "collapsed": true
+  },
+  "left-ribbon": {
+    "hiddenItems": {
+      "switcher:Open quick switcher": false,
+      "graph:Open graph view": false,
+      "canvas:Create new canvas": false,
+      "command-palette:Open command palette": false,
+      "markdown-importer:Open format converter": false,
+      "bases:Create new base": false
+    }
+  },
+  "active": "37af4d3c44b3ccea",
+  "lastOpenFiles": [
+    "ROTEK/bt67xx/6721 fix.md",
+    "todo/Счета.md",
+    "English/Homework/Homework 11.md",
+    "English/words.md",
+    "linux/GS server.md",
+    "todo/Разное.md",
+    "todo/Задачи по направлениям.md",
+    "Greenstar/ethernet stm32.md",
+    "linux/linux common.md",
+    "ROTEK/allwinner 069 070.md",
+    "Кодинг.md",
+    "net/links.md",
+    "hardcore web development/Задания.md",
+    "Golang/environment.md",
+    "Python/link.md",
+    "img/Pasted image 20250812151104.png",
+    "Golang/links.md",
+    "Golang/common.md",
+    "ROTEK/bt67xx/common.md",
+    "ROTEK/bt67xx/Команды.md",
+    "ROTEK/metrolog/readme.md",
+    "English/Texts/Text 11.md",
+    "FlyElectronics/Drone.md",
+    "FlyElectronics/Tuber.md",
+    "English/Homework/Homework 10.md",
+    "English/Homework/Homework 9.md",
+    "English/Homework/Homework 2.md",
+    "English/img/43-5.jpg",
+    "English/img/43-4.jpg",
+    "English/img/43-3.jpg",
+    "English/img/43-2.jpg",
+    "English/img/43-1.jpg",
+    "English/img/42-4.jpg",
+    "English/img/42-3.jpg",
+    "English/img/42-2.jpg",
+    "English/img/42-1.jpg",
+    "net",
+    "English/words",
+    "English/img/38-1.jpg.~tmp",
+    "Database.kdbx.QABUnG",
+    "sql",
+    "img/quiz/69C5B100",
+    "img/quiz/~$вопросы_авито_стажировка.xlsx",
+    "img/quiz/вопросы_авито_стажировка.xlsx",
+    "img/quiz/CC626100",
+    "img/quiz",
+    "Untitled.canvas"
+  ]
 }

+ 78 - 2
English/Homework/Homework 11.md

@@ -113,6 +113,82 @@
 13. The letter got from my mother is in my bag.
 14. I will not forget the days spent in the summer camp.
 15. There were a lot of people sending telegrams at the post office.
-
+---
 ~={green}221. Образуй нужную форму причастия.=~
-1. The world-record broken by this cyclist is a huge improvement.
+1. The world-record broken by this cyclist is a huge improvement.
+2. The house built by my neighbour is very beauriful.
+3. Bursting into the room, the police caught the burglar red-hended. - Ворвавшись в комнату полиция задержала грабителя с поличным.
+4. Holding a lifebuoy the child was washed ashore. - Держащийся за спасательный круг ребенок был вытащен на берег.
+5. The masked man caugth by the police was a famous criminal.
+6. The cake, cut into slices, was waiting to be eaten.
+7. Doing what many do is a boring thing.
+8. A pain felt by your friend hurts you too. (by - подсказка к причастию 2 формы)
+9. Fought the enemy many soldiers were killed. - В битве с врагом погибло много солдат.
+10. Fleeing from the misery (спасаясь от страданий войны) of war, she tried to start a new life abroad.
+
+~={green}222. Образуй соответствующие причастия.=~
+1. The news heard on TV today was shocking.
+2. The bomb was carefully hidden from sight. (от посторонних глаз)
+3. Gone with the Wind is a famous novel and film. (Почему going)
+4. He saw that kneeling near the victim was a first-aider. - Он увидел, что человек, вставший на колени возле пострадавшего оказывал первую помощь.
+5. The money paid by the man turned out to be stolen. - Деньги, заплаченные мужчиной, оказались крадеными.
+6. The mowen (косить) lawn looked like a picture. - Скошенная трава выглядела как на картинке.
+7. The written version of the speech was published in today's paper. - Письменная версия речи была опубликована в сегодняшней газете.
+8. Meeting foreign people can be an exciting experience. - Встреча с иностранцами может стать захватывающим опытом.
+9. Reading a book is better than watching a film.
+10. The finishing line of the race was crossed by the first happy runner.
+
+~={green}223. Образуй соответствующие  причастия.=~
+1. It was an interesting book to read.
+2. The new film shown on TV was very exciting.
+3. I heard the children screaming in the playground.
+4. We were bored by the very long story.
+5. Heroic deeds done by children are always fascinating. - Подвиги детей всегда завораживают.
+6. This is one of the problems discussed at the meeting. - Это одна из проблем из обсуждавшихся на встрече.
+7. Is this the only spare place left? - Это единственное оставшееся свободное место?
+8. All pupils wishing to take part in the game raise your hands!
+9. I heard you singing in the choir.
+10. People taking part in this quiz should be very clever.
+11. The enemy felt beaten and surrendered. - Враг почувствовал себя побежденным и сдался.
+12. The task once begun should be completed.
+
+~={green}224. Придумай предложения со следующими причастиями.=~
+1. Smiling people were takken in the photos.
+2. Laughing children are running on the playground.
+3. Made work received me a nice experience.
+4. Spoken womens were standing at the bus stop.
+5. Bought gifts will be given on birthday.
+6. This answered question was the first on this lesson. The question answered this pupil was verfy difficalt.
+7. Sold fruit were fresh and juicy.
+8. Today I will be introduce my finished project.
+9. The policeman came to the stopped car.
+10. The treasures found there were left here 100 years ago.
+11. The reading man has sat here for three hours.
+12. The brought bread was warm and soft.
+
+~={green}225. Переведи.=~
+1. Мне нравится статья, написанная Петром. - I like the article written by Peter.
+2. Кто этот мальчик, играющий в шахматы? - Who is this boy playing chess?
+3. Фильм, просмотренный нашим классом вчера, был очень интересный. The film watched by our class yesterday was very interesting.
+4. Переведите предложения, написанные на доске. - Translate the sentences written on the board.
+5. Угощайтесь фруктами, выращенными в нашем саду. - Help yourself the fruits grown in our garden.
+6. Учащиеся ухаживают за деревьями, растущими в школьном саду. The students look after the trees growing in school garden.
+7. Мы подошли к мужчине, стоявшему на углу, и спросили дорогу. - We came up the man standing on the corner and asked for direсtions.
+8. Покажи мне подарок, купленный для мамы. - Show me the present bought for mother.
+9. Мы видели много опавших листьев на земле. We saw a lot of fallen leaves on the ground.
+10. Падающий снег покрывает землю и крыши. The falling snow covers the ground and the roofs.
+
+~={green}226. Исправь ошибку.=~
+1. Falling snow covers our tents.
+2. Do you know the girl playing the piano?
+3. Learn the words written on the bkackboard.
+4. Listen to the story written by O'Henry.
+5. I am fond of novels written by Dickens.
+6. Who is that boy skating over there (вон там)?
+7. I'd like to buy a dress made by her.
+8. He presented me with a souvenir bought at our Department Store (универмаг).
+9. I heard an exciting story yesterday.
+10. He is a well-known writer. (Не понял почему)
+11. It is a house built many years ago.
+12. The woman standing at the time-table (расписание) is our teacher.
+13. The broken cup is on the floor.

+ 228 - 45
ROTEK/bt67xx/6721 fix.md

@@ -1,6 +1,6 @@
 ~={green}Замечания от заказчика=~
 
-1. В логе фигурируют аварии, которых не может быть. "Срабатывание EPO", "Ош. подкл. вх. напряжения" ~={yellow}Question.=~ Отключить функции.
+1. В логе фигурируют аварии, которых не может быть. "Срабатывание EPO", "Ош. подкл. вх. напряжения" ~={yellow}Question.=~ Отключить функции. ~={green}Fixed.=~
 
 Событие "Срабатывание EPO" формируется в модуле ups_monitor.c В отдельной функции UPS_EPOMonitor. Нужно ли ее отключить?
 
@@ -17,7 +17,7 @@
 
 2. При запуске теста АКБ в логе информация о смене режима работы, но не о тесте. В syslog правильно. ~={yellow}Question.=~ В логе в событиях контроллера не отображается режим работы "тест АКБ" (Вход в тест, выход из теста.)
 
-3. В веб-интерфейсе отображается входная частота, в случае оффлайн ИБП особого смысла не имеет. Логичнее указывать только частоту выходного напряжения. ~={yellow}Question.=~
+3. В веб-интерфейсе отображается входная частота, в случае оффлайн ИБП особого смысла не имеет. Логичнее указывать только частоту выходного напряжения. ~={yellow}Question.=~ ~={green}Fixed.=~
 
 Существует множество режимов работы контроллера ИБП.
 - Power on
@@ -33,6 +33,29 @@
 
 Необходимо уточнить в каких режимах показывать входную частоту и какое значение выводить? Во всех режимах кроме Bypass выводить 0 в параметре "входная частота".
 
+За вывод этого параметра в WEB и SNMP  отвечает функция:
+```c
+void GetInputFreqStr(char *str, uint8_t *len)
+{
+    sprintf(str, "%0.1f", UPS.Freq_in);
+    *len = strlen(str);
+}
+
+UPS.Mode != 'B'
+```
+
+Добавил анализ режима работы из параметра UPS.Mode
+```c
+void GetInputFreqStr(char *str, uint8_t *len)
+{
+    if (UPS.Mode == 'Y')
+      sprintf(str, "%0.1f", UPS.Freq_in);
+    else
+      sprintf(str, "%0.1f", 0.0);
+    *len = strlen(str);
+}
+```
+
 4. Проблема IAP. ~={red}Open.=~
 
 5. Полная мощность ИБП 400, а не 500. ~={green}Fixed.=~
@@ -70,9 +93,116 @@ void SETTINGS_SetUPSSettingsDef(void)
 ```
 
 6. Убрать отправку fault в конце разряда АКБ. ~={yellow}Question.=~ 
-Не понял. Отправку куда? Это трап.
+Не понял. Отправку куда? Это трап. Trap ID - 20 - это оно? ~={yellow}Question.=~
+```c
+/**
+  * @brief  Мониторинг бита LowBat  
+  */
+
+void UPS_LowBatMonitor(void)
+{
+#ifdef LOW_BAT_MONITOR
+	static bool isValueRecv = false;
+	static uint8_t lowBatOldState = 0;
+	static bool flag_alarm_time = false;
+	uint8_t lowBatCurrent;
+#if defined RELAY_CHARGE_AKB
+	uint8_t i = 0;
+	static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+	uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+
+	for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++)
+	    CurrROtype_Sourse[i] = sSettings.sRelays[i].ro_type_source;
+#endif
+	if ((UPS.Status >> 7) & 0x01)
+		lowBatCurrent = (UPS.Status >> 6) & 0x01;
+	else
+	    lowBatCurrent = 0;
+	    
+	if (!isValueRecv) {
+	    isValueRecv = true;
+	    lowBatOldState = lowBatCurrent;
+	    if (lowBatCurrent){
+		    log_event_data(LOG_ALARM_LOW_BAT, "Авария");
+		    SNMP_SendUserTrap(LOW_BAT_ALARM);
+			syslog(SYSLOG_ERROR, "Низкий заряд АКБ (%d%%)", UPS.SOC);
+		    flUpdateLog = true;
+#if defined RELAY_CHARGE_AKB
+		    relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 1);
+#endif
+	    }
+	    else{
+		    SNMP_SendUserTrap(LOW_BAT_NORM);
+		    log_event_data(LOG_ALARM_LOW_BAT, "Норма");
+		    syslog(SYSLOG_NOTICE, "Заряд АКБ в норме (%d%%)", UPS.SOC);
+		    flUpdateLog = true;
+#if defined RELAY_CHARGE_AKB
+		    relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 0);
+#endif
+		}
+	    return;
+	}
+	
+	// Значение параметра изменилось
+	if (lowBatCurrent != lowBatOldState)
+	{
+		if(flag_alarm_time){
+		    flag_alarm_time = false;
+			    if (lowBatCurrent){
+				    SNMP_SendUserTrap(LOW_BAT_ALARM);
+				    syslog(SYSLOG_ERROR, "Низкий заряд АКБ (%d%%)", UPS.SOC);
+				    log_event_data(LOG_ALARM_LOW_BAT, "Авария");
+				    flUpdateLog = true;
+#ifdef RELAY_CHARGE_AKB
+			        relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 1);
+#endif
 
-7. Сообщение в лог "авария входного напряжения 220В авария" при возобновлении питания. ~={red}Open.=~
+			    }
+			    else{
+				    SNMP_SendUserTrap(LOW_BAT_NORM);
+				    syslog(SYSLOG_NOTICE, "Заряд АКБ в норме (%d%%)", UPS.SOC);
+				    log_event_data(LOG_ALARM_LOW_BAT, "Норма");
+				    flUpdateLog = true;
+#if defined RELAY_CHARGE_AKB
+				    relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 0);
+#endif
+			    }
+		}
+		else{
+		    flag_alarm_time = true;
+		}
+	}
+#if defined RELAY_CHARGE_AKB
+	else{
+	    flag_alarm_time = false;
+	    if (lowBatCurrent)
+		    relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, CHARGE_AKB);
+	}
+	
+	for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
+	    OldROtype_Sourse[i] = CurrROtype_Sourse[i];
+	}
+#endif
+
+	if(!flag_alarm_time){
+	    if (lowBatCurrent){
+			flNonCriticalAlarm = true;
+		    flLedAlarm = true;
+	    }
+	    lowBatOldState = lowBatCurrent;
+	}
+	else{
+	    if (lowBatOldState){
+		    flNonCriticalAlarm = true;
+		    flLedAlarm = true;
+	    }
+	}
+#endif
+}
+```
+
+
+7. Сообщение в лог "авария входного напряжения 220В авария" при возобновлении питания. ~={red}Open.=~ Поправил логику вызова функций записи в лог. ~={green}Fixed.=~
 ```c
 // Запись в журнал формируется в функции:
 
@@ -83,57 +213,111 @@ void SETTINGS_SetUPSSettingsDef(void)
 void UPS_LineFailMonitor(void)
 {
 #ifdef LINE_FAIL_MONITOR
-  static bool isValueRecv = false;
-  static uint8_t lineFailOldState = 0;
-  uint8_t lineFailCurrent;
-  char log_string[50];
-  uint8_t len;
+	static bool isValueRecv = false;
+	static uint8_t lineFailOldState = 0;
+	uint8_t lineFailCurrent;
+	char log_string[50];
+	uint8_t len;
 
 #if defined RELAY_AC_PRESENT
-  uint8_t i = 0;
-  static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
-  uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+	uint8_t i = 0;
+	static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+	uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
 
-  for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++)
-    CurrROtype_Sourse[i] = sSettings.sRelays[i].ro_type_source;
+	for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++)
+	    CurrROtype_Sourse[i] = sSettings.sRelays[i].ro_type_source;
 #endif
 
 #ifdef VAC_IN_MONITOR
-  lineFailCurrent = ((UPS.Status >> 7) & 0x01);
-  lineFailCurrent |= UPS_VACinputRangeAlarm();
+	lineFailCurrent = ((UPS.Status >> 7) & 0x01);
+	lineFailCurrent |= UPS_VACinputRangeAlarm();
 #else
-  lineFailCurrent = (UPS.Status >> 7) & 0x01;
-#endif
-
-  if (!isValueRecv) {
-    isValueRecv = true;
-    lineFailOldState = lineFailCurrent;
-
-    if (lineFailCurrent != 0){
-      memset(log_string, 0, sizeof(log_string));
-      strcat(log_string, "Авария");
-      len = strlen(log_string);
-      sprintf(&log_string[len], " (%0.1f В)", UPS.VAC_in);  
-      log_event_data(LOG_ALARM_LINE, log_string);
-      SNMP_SendUserTrap(LINE_ALARM);
-      syslog(SYSLOG_ERROR, "Авария сети (%0.1f В)", UPS.VAC_in);
-      flUpdateLog = true;
+	lineFailCurrent = (UPS.Status >> 7) & 0x01;
+#endif
+
+	if (!isValueRecv) {
+		isValueRecv = true;
+		lineFailOldState = lineFailCurrent;
+
+	    if (lineFailCurrent != 0) {
+		    memset(log_string, 0, sizeof(log_string));
+		    strcat(log_string, "Авария");
+		    len = strlen(log_string);
+		    sprintf(&log_string[len], " (%0.1f В)", UPS.VAC_in);  
+		    log_event_data(LOG_ALARM_LINE, log_string);
+		    SNMP_SendUserTrap(LINE_ALARM);
+		    syslog(SYSLOG_ERROR, "Авария сети (%0.1f В)", UPS.VAC_in);
+		    flUpdateLog = true;
 #if defined RELAY_AC_PRESENT
-      relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 1);
+			relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 1);
 #endif
-    }
-    else{
+		}
+	    else {
 #if defined RELAY_AC_PRESENT
-      relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 0);
-#endif
-      log_event_data(LOG_ALARM_LINE, "Норма");
-      SNMP_SendUserTrap(LINE_NORM);
-      syslog(SYSLOG_NOTICE, "Сеть в норме (%0.1f В)", UPS.VAC_in);
-      flUpdateLog = true;
-    }
-    return;
-  }
+		    relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 0);
+#endif
+		    log_event_data(LOG_ALARM_LINE, "Норма");
+		    SNMP_SendUserTrap(LINE_NORM);
+		    syslog(SYSLOG_NOTICE, "Сеть в норме (%0.1f В)", UPS.VAC_in);
+		    flUpdateLog = true;
+	    }
+	    return;
+	}
+	
+	if (lineFailCurrent != 0) {
+	    flCriticalAlarm = true;
+	    flLedAlarm = true;
+	}
+
+	// Значение параметра изменилось
+	if (lineFailCurrent != lineFailOldState)
+	{
+	    if (lineFailCurrent != 0){
+#if defined RELAY_AC_PRESENT
+		    relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 1);
+#endif
+		    memset(log_string, 0, sizeof(log_string));
+		    strcat(log_string, "Авария");
+		    len = strlen(log_string);
+	        sprintf(&log_string[len], " (%0.1f В)", UPS.VAC_in);  
+	        log_event_data(LOG_ALARM_LINE, log_string);
+	        SNMP_SendUserTrap(LINE_ALARM);
+	        syslog(SYSLOG_ERROR, "Авария сети (%0.1f В)", UPS.VAC_in);
+#ifdef AKB_CHANGE_MONITOR
+	        if(UPS.Alarm & 0x40) {
+		        log_event_data(LOG_ALARM_CHANGE_AKB, "Авария");
+		        SNMP_SendUserTrap(BATTERY_CHANGE_ALARM);
+		    }  
+#endif
+		    flUpdateLog = true;
+	    }
+	    else{
+		    if (UPS.VAC_in == 0) {
+		        return;
+		    }
+#if defined RELAY_AC_PRESENT
+	        relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 0);
+#endif
+		    log_event_data(LOG_ALARM_LINE, "Норма");
+		    SNMP_SendUserTrap(LINE_NORM);
+		    syslog(SYSLOG_NOTICE, "Сеть в норме (%0.1f В)", UPS.VAC_in);
+		    flUpdateLog = true;
+	    }
+	}
+#if defined RELAY_AC_PRESENT
+	else{
+	    if (lineFailCurrent != 0)
+		    relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, AC_PRESENT);
+	}
+
+	for (i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
+	    OldROtype_Sourse[i] = CurrROtype_Sourse[i];
+	}
+#endif
+	lineFailOldState = lineFailCurrent;
+#endif
 ```
+
 7. В syslog именует выходное напряжение входным. ~={green}Fixed.=~
 ```c
 // ups_monitor.c
@@ -142,4 +326,3 @@ SNMP_SendUserTrap(VAC_HIGH_OUTPUT_ALARM);
 syslog(SYSLOG_ERROR, "Высокое выходное напряжение (%0.1f В)", VACoutputCurrent);
 ```
 
-Для решения этой проблемы нужен ИБП и контроллер в режиме отладки.

+ 4 - 4
todo/Счета.md

@@ -9,10 +9,10 @@
 ##### <font color = "#1D8571">Передача показаний с 15-ого числа</font>
 - [ ] Широкая вода. хол , гор 
 - [ ] Широкая электричество: 
-- [ ] Подрезково: хол , гор , эл  (передал только электричества!)
-- [ ] Химки: 471 - , 473 - , 450 - , 402 - , эл - 16743
-- [ ] Планерная Нина электричество: 
-- [ ] Планерная Батя электричество: 
+- [x] Подрезково: хол , гор , эл  (передал только электричества!)
+- [x] Химки: 471 - , 473 - , 450 - , 402 - , эл - 16743
+- [x] Планерная Нина электричество: 
+- [x] Планерная Батя электричество: 
 ##### <font color = "#1D8571">Дополнительно</font>
 - [x] Отдать Нине ()
 - [x] Домашний интернет ()