using System; using System.Collections.Generic; using System.Text; using System.Timers; namespace ZaoBot.Problems { class StatusManager { const int DEFAULT_INTERVAL = 2000; private OpenHab.OpenHabClient openhab; private Timer timer; private Dictionary statusItems = new Dictionary(); public IEnumerable StatusItems => statusItems.Values; public StatusManager(OpenHab.OpenHabClient openhab) { this.openhab = openhab; UpdateStatus(); timer = new Timer(DEFAULT_INTERVAL); timer.Elapsed += OnTimer; timer.Enabled = true; } private void OnTimer(object sender, ElapsedEventArgs e) { UpdateStatus(); } private async void UpdateStatus() { try { var items = await openhab.GetItems(); foreach (var item in items) { if (!item.name.StartsWith("Problem_")) continue; Item statusItem = null; if (statusItems.ContainsKey(item.name)) statusItem = statusItems[item.name]; else { statusItem = new Item() { name = item.name, label = item.label, status = Status.UNKNOWN }; statusItems[item.name] = statusItem; } var state = await openhab.GetItemState(item.name); if (state.state == "OFF") statusItem.status = Status.OK; else if (state.state == "ON") statusItem.status = Status.PROBLEM; else statusItem.status = Status.UNKNOWN; } } catch (Exception ex) { Console.WriteLine("Exception on getting status: " + ex.ToString()); } } } }