Table of Contents
Neden Özel Bir AçıkAPS Dashboard Oluşturun?
OpenAPS (Open Yapay Pancreas System) kurulumu ile 1 diyabet, sürekli bir veri akışı oluşturur - kan şekeri değerleri, insülin-on-board, rezervuar seviyeleri, batarya durumu ve sistem alarmları. Off-the-shelf diyabet uygulamaları genellikle size ihtiyacınız olan tüm bu bilgiyi sunmak için esneklikten yoksundur, özellikle de tek bir görüşte birden fazla metrikle ilişkilendirmek istediğinizde, özel bir gerçek zamanlı ayarınızı tam olarak kullanabileceğiniz bir uyarıda, güncellemenizi sağlar.
Nightscout gibi birçok mevcut araç, trend okları ve IOB sayılarını hızlı bir şekilde ortaya çıkarmaz veya belirli bir görsel tasarıma zorlar. Özel bir paniğe sahip olursunuz ve çoğunuzun size eklediği şeylere odaklanabilirsiniz. Örneğin, trend okları ve IOB sayıları, daha derin analiz için ayrıntılı tarih grafikleri verirken, daha ayrıntılı bir şekilde analiz için ayrıntılı bir şekilde bilgi sağlarlar.
OpenAPS Data Sources'ı Anlamak
Herhangi bir kod yazmadan önce, OpenAPS verinizin nerede yaşadığını bilmeniz gerekir. Sistem, sürekli bir glikoz monitörü (CGM) ile iletişim kuran kapalı-loop algoritması ile çalışır: Anahtar veri noktaları şunlardır:
- [BG) Kan şekeri (BG) okumalar[Dönetici: 1) CGM'den her 5 dakika (e.g., Dexcom, Medtronic).
- [FONT=0]Insulin teslimat tarihi[[Dönetici: 1 ) - yoğun basal fiyatlar, boluses ve insülin-on-board (IOB) hesaplamaları.
- [FONT:0) Sistem durumu) – döngü devleti (kanı/disabled), pompa bataryası, rezervuar hacmi ve sensör yaşı.
- [FONT:0]Alerts ve hatalar[Dönetici: 1) - dış-standart BG, düşük batarya, iletişim başarısızlıkları.
OpenAPS bu verileri JSON dosyalarında yerel olarak depolar (örneğin, www.g., 03.03) ve ayrıca, yerleşik bir REST API'si aracılığıyla, son nokta detayları ve seçenekleri için kullanılan API'ler için de geçerlidir.Plat, bazı kullanıcılar, dosya sistemine doğrudan dokunmadan güvenli, talep temelli erişim sağlar.Rektöre bu tür durumlarda çok sayıda kullanıcı tarafından yönlendirilir.
Bir ortak hata, verilerin her zaman gerçek zamanlı olarak mevcut olacağını varsayıyor. Uygulamada, CGM verici geçici olarak bağlantı kaybedebilir, pompa bir komut kabul edemez veya Raspberry Pi hafızadan çıkabilir. Your pan must handle all these edge cases lütufly. always validate timestamps and red stale readings. Build in warning when data does not come as expected, and log such events for later review.
Teknoloji Stack Genel Bakış
Panonuz bir sunucuda veya bulut platformunda çalışan bir web uygulaması olacaktır. Tipik çöp şunları içerir:
- [FONT=0)Backend[[DÜDÜT:1) - hafif bir sunucu (Node.js, Python Flask, veya Go) bu proxyler OpenAPS rig ve opsiyonel önbellek verileri talep eder.
- [FONT:0]Frontend[[Döntilmişler: 1 ) – Reaktör, Vue.js veya düz JavaScript ile inşa edilen tek sayfalık bir uygulama.
- [FONT=0)Data visualization – Grafik için Grafik, D3.js veya ApexCharts gibi bir kütüphane.
- [FONT:0) Gerçek zamanlı güncellemeler[[[Dönetici:0) – periyodik kirletici (setInterval) veya kalıcı WebSocket bağlantıları aracılığıyla elde edilmiştir.
- [FONT=0}[[Dönetici: 1 ) – bir VPS, Raspberry Pi (yerel), veya sunucusuz bir platform (örneğin, Vercel, Netlify) WebSocket desteği ile.
Tam bir geri dönüş inşa etmeyi tercih ederseniz, tüm ekranları tamamen düşük güç ortamları için indiren statik bir site jeneratörü kullanarak barındırabilirsiniz, WebSockets'in üzerinden gelen ikili protokolü kullanarak, en iyi şekilde eşleşen yaklaşımınızı seçin.Birçok geliştirici ankete başlayabilir ve daha sonra WebSockets'e düşük güç ortamları için geçiş yapar, WebSockets'in üzerinden buffers over WebSockets'i kullanarak göz önünde bulundurun.
Büyüyen bir trend, InfluxDB veya ZamanscaleDB gibi zaman serisi veritabanı ile bir araya gelmektir. Bu, size zaman (haftalar veya aylar) geri dönme yeteneği verirken, yine de canlı güncellemeler sunmak için. geri dönüş, veritabanına tekrar yazılabilir ve ondan tarihsel sorgulara hizmet eder, Open rig üzerinde yük.This approach is especially valuable if you want to perform retrospektif analiz or share aggregated data with your endokrinologist.
Adım 1: OpenAPS Data via API
OpenAPS rig, port 8080'de varsayılan olarak HTTP istekleri için dinliyor. Gliks verileri getirmek için, callETHFLT:2) Cevap, son BG okumalarının bir dizisini, zaman damga ve trend yollarına özel olarak ödeme yapın. Benzer şekilde, [[IOB, batarya seviyesi ve daha fazlası. Test bu uç noktaları kullanarak, JavaScript Date'i formatta doğrulamanız gerekir.
Eğer rig bir güvenlik duvarının arkasındaysa veya uzaktan erişime ihtiyacınız varsa, güvenli bir tünel (örneğin, ngrok) veya VPN'yi kullanarak göz önünde bulundurun. OpenAPS API'si doğrudan doğruya doğru doğrulama olmadan, üretim panoları için, API anahtarını içeren bir sunucuyu uygulayın ve kötüye kullanmak için throttles trafiği kullanabilirsiniz.
Başka bir husus API'yi ankete ihtiyacınız olan orantır. OpenAPS rig, ikinci bir kaç isteği halledebilir, ancak sürekli çekiçleme her seferinde yeni bir şekerleme işlemi kaydedilebilir, size yakın zamanda 10 saniye daha fazla güncellemeniz gerekiyorsa, WebSockets'i kullanın.
2. Adım: Dashboard Layout
En kritik ölçüm yerlerinin bir tel çerçevesi ile başlayın - şu anda kan şekeri - üst veya merkezde. diyabet izleme için ortak panolar:
- [FONT:0) Top satır[[DÜDÜT:1) - BG değeri (large), trend ok, son okumadan bu yana zaman.
- [FONT:0]İkinci sıra[Dönem: 1) IOB, mevcut bazal oran, rezervuar seviyesi.
- [FONT:0)Main alanı[[Dönem:0)[[[Dönetici:0)[[Dönetici: 3-saat veya 24 saatlik BG grafiği, renkli kodlanmış bölgelerle (sahkaha için kırmızı, tehlike için kırmızı).
- [FONT:0]Side paneli[[[DÜT:1] – son uyarılar ve sistem sağlık göstergeleri (batteriy, sensör yaşı).
Kapsül veya Tailwind CSS gibi hassas CSS çerçevelerini kullanın, ekranların mobil ekranlarda çalışmasını sağlamak için - kullanıcıların telefonlarından bakmanızı isterler.Seks ekranını kullanarak belirli bir kütüphaneyi kullanmayı düşünün.GridStack.js).
Accessibility kritik. Yüksek hacimli renkli şemalar kullanın, hala renkli kör kullanıcılar için ayırt edilebilir (yalnızca kırmızı / yeşile güvenmekten kaçının). Renk göstergelerine bir sonraki metin etiketini kullanın.Bir gece izleme için karanlık bir mod kullanmayı düşünün.İlk önce yakaladığı en önemli bilgiler genellikle sol tarafta sol tarafta sol tarafta sol tarafta sol tarafta.
Adım 3: Backend Proxy (Okul ama Önerilen) inşa edin
Bir arka uç proxy, bir güvenlik ve kalibrasyon katmanı ekliyor. Örneğin, Node.js Express sunucusu şunları yapabilir:
- Fetch OpenAPS her 5 saniyede (veya rig güncelleştirmeleri kadar hızlı).
- En son durumu hafızada rig üzerinde azaltmak ve ön uçlara anlık cevaplar sunmak için depoya koyun.
- Expose uç noktaları, ön uçlara ait olarak, “Ücretsiz” ve “Düzdün” gibi.
- KURUMSALS başlıkları ve oranı sınırlamak.
İşte, 03.D.D.D.D.D.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.
const express = require('express');
const fetch = require('node-fetch');
const app = express();
let cache = {};
setInterval(async () => {
const res = await fetch('http://openaps-rig:8080/api/v1/status.json');
cache.status = await res.json();
}, 5000);
app.get('/api/status', (req, res) => res.json(cache.status));
app.listen(3000);
Bu yaklaşım aynı zamanda birden fazla kanaldan veri toplamanıza izin verir veya bir kişinin döngüsünü izlemenize olanak sağlar. Ek güvenlik için, JWT tabanlı doğrulamayı proxy uç noktaları üzerinde de yapabilirsiniz. Ayrıca son 24 saat veri depolarsanız, ön uçları defalarca vurmaksızın tarihi aralıkları talep edebilirsiniz.
Proxy yazarken, hata işlemeye dikkat edin.Eğer rig ulaşılamazsa, proxy önbellekli bir sürüm geri dönmeli (veya 503) bir dosya veya izleme hizmeti için tüm hataları not edin. Ayrıca bir sağlık check endpoint ortaya çıkarmak isteyebilirsiniz.If the rig is unreachable, the proxy should return a cached version (veya 503) rather than crashing. Log all errors to a file or a monitoring service.
Adım 4: Gerçek Zamanlı Güncellemelerle Öner Uygulama
Modern JavaScript UI kütüphanesini devlet ve yeniden seçilmiş bileşenleri verimli bir şekilde yönetmek için kullanın. Re-render bileşenleri, yaşam döngüsü yöntemleri ve kancaları nedeniyle popüler bir seçimdir.AİLFLT:9) Bu, kütüphaneleri her 5 saniyede ([*) veya WebSockets, gerçek zamanlı deneyimler için, WebSocket bağlantı ile ankete ihtiyaç duyduğunuzda önemli olan verileri doğrudan barındırmakta olan ve Python desteği ile bu kolayca desteklemektedir.
Grafik için, installETHFLT:0)Chart.js) veya [[Döneticileri gösterebilmek için ayarlanan bir noktaya kadar (örneğin, ekran görüntüsüne göre her bir veri noktası (örneğin, yukarı, yukarı) bir satırda bir satırda x-aksi ve şekeri Y-simetri ile.
Son okuma 10 dakikadan daha eskiyse bir “günlük verileri” uyarısını kullanmayı unutmayın. WebSocket damlaları önbellek ve her zaman son bir ağ olmadan bilinen durumu gösterir.If the last reading is older than 10 minutes. Implement reconnection logic if WebSocket drop, and always display the last timestamp of the last connection.Use a load spinner during the first bring, and show a net bir hata mesajı göster if the backend is unreachable. For mobile devices, consider using a service working to cache the latest data offline, so the dashboard still shows the last timestamp even even even without a last connection.
Adım 5: İşsizlik ve Ev Seçenekleri
Birkaç uygulanabilir dağıtım hedefiniz var:
- [FONT=0]Local Raspberry Pi [Dönetici:0)[Dönetici:0)Local Raspberry Pi [Düzücükler: Aynı Pi'de aynı Pi'de aynı sayıda özellik eklerseniz, aynı Pi'de de aynı Pi'yi aynı şekilde çalıştırın. Bu, en basit ve en özeldir. Access it via a local IP likeFLT:15)
- [FONT:0)Cloud VPS (DijitalOcean, AWS, Linode)) – minimum Ubuntu damlalet kullanın, ücretsiz SSL sertifikalarını elde etmek için şifreyi çalıştırın ve uygulamayı SSL ile çalıştırın.
- [FONT:0]Serverless platformlar (Vercel, Netlify, Cloudflare İşçileri) ) – statik ön uçlar için iyi, ancak kalıcı WebSocket bağlantıları ile mücadele edersiniz.You would need to rely on polling and a separate backend for data aggation.You can also use Cloudflare İşçileri için Dayanıklı Destekler için de kullanabilirsiniz, ancak bu karmaşıklık ve maliyetle mücadele eder.
Bir kamu IP olmadan uzaktan erişim için, izinsiz izlemenin izini dikkate alın.0.Guard Wire hafif ve güvenli, yerel panjurlar gibi düşük güç cihazına yapılandırılabilir. Bu, yerel panoğa erişim sağlarken herhangi bir cihazdan şifreli erişim sağlar.
Bulutta ev sahibi olmayı seçerseniz, bir bulut sunucusu üzerinde birkaç haftadan fazla tarihsel okumalar saklamanız gerekebilir. minimumda, transit (TLS) ve geri kalanı ( şifreli veritabanı) verileri saklama politikaları dikkate alın: Bir bulut sunucusu üzerinde birkaç haftadan fazla tarihi okuma yapmanız gerekebilir.
Diyabet Data İzleme için En İyi Uygulamalar
Paneliniz yaşam-kırık kararlar için kullanılacaktır, bu nedenle güvenilirlik ve doğruluk önemlidir. Bu yönergeleri takip edin:
- [FONT:0]Redttle[Dönetici[Dönetici 1 ) – Eğer pano başarısız olursa, kullanıcı hala CGM alıcı veya pompalarından uyarı almalı.Sadece alarmlar için özel bir paniğe güvenmeyin.
- [FONT:0)Data geçerlilik[[[Dönetici:0)[[Dönetici:0)Data validasyon[[Dönetici: 1 ) - imkansız değerlere sahip okumaları reddediyor (örneğin, BG < 20 mg/dL veya > 600 mg/dL).
- [FONT:0) Zaman bölgesi işleme[[Dönetici:0)[[[Dönetici:0) Zamanlı Alanlama[[Dönetici:0) – depolama için UTC kullanın ve kullanıcının ön uçta yerel zamana dönüştürülür. OpenAPS timestamps tipik olarak UTC. Gündelik tasarruf süresine dikkat edin; her zaman UTC'de zaman mağaza ve işlem zamanı yok etmek için zaman damgalanır.
- [FONT=0) Accessibility[[Dönetici:0))[[Dönetici:0))))) - yüksek hacimli renkler, büyük fontlar ve opsiyonel ses uyarıları ( Web Audio API'si) kritik düşükler için haptik geri bildirimler de, Titreşim API'si kullanarak mobil cihazlarda haptik geri bildirimler dikkate alın.
- [FONT:0]Logging[[[DÜT:1) - daha sonra gözden geçirme için tarihsel veriler kayıt (örneğin, CSV ihracat). InfluxDB gibi zaman serisi veritabanı uzun vadeli analiz ve trend analizi için bağlanabilir. veritabanının otomatik günlük yedeklerini ayarlayın.
Panelinizi gerçek dünya koşulları altında test edin: Bir hafta boyunca kontrol noktalarına güvenmeden önce ne olur? Pompa insülinden dışarı çıkarsa? Bu senaryoları, pano müdahale etmeden geri döndürür.Görüntüyü dışsal olarak takip eden noktaları uygulayın.
Gelişmiş Özellikler
Temel bir pano çalıştırdığınızda, bu geliştirmeleri eklemeyi düşünün:
- [FONT:0) Tahmin edici çizgiler[[Döncükler: 0:1) - önümüzdeki 30 dakika proje için basit bir doğrusal regresyon kullanın. daha gelişmiş kullanıcılar makine öğrenme modellerini ayrı bir mikro hizmetle karıştırarak bütünleştirebilir.Gerçek okumalarla karışıklıktan kaçınmak gibi belirli bir etiket tahminleri.
- [FONT:0]Voice duyuruları[[Dönetici:0)[Döneticileri değiştir] – tarayıcının konuşma sentezlerini mevcut BG ve IOB'yi her 10 dakika boyunca okumak için birleştirir, bu da fiziksel aktivite sırasında yardımcı olur.
- [FONT:0]Remote kontrolü[[[Dönetici:0)[[Dönetici:0)Remote kontrolü[[[Dön uyarı ile, geçici basalları veya snooze alarmları OpenAPS API aracılığıyla tetikleyebilmeleri için düğmeleri ekleyebilirsiniz. Bu, kaza değişiklikleri önlemek için titiz bir doğrulama ve bir onaylama gerektirir.
- [FONT:0) Çok kullanıcı desteği[[Dönetici:0)) - bakıcıların farklı izinlerden panoyu görmelerine izin verir (örneğin, ebeveynler için, birincil kullanıcı için tam kontrol için okunur.) Geri giriş rolüne dayalı erişim kontrolü (RBAC)
Bu özelliklerin her biri karmaşık ve potansiyel risk getiriyor. Her zaman güvenli bir ortamda test (örneğin, kullanıcıların ilk olarak alt setini kullanarak ve herkese izin vermeden önce “enacted” ama güvenli mod) çalıştırabilirsiniz.
Sorun Ortak Konuları Sorun Gidermek
Geliştirme sırasında, çeşitli ortak sorunlarla karşılaşabilirsiniz. İşte çözümler:
- [FONT:0)Data'yı güncellemez[[[Dönetici:0)))[[[Döneticileri değiştir] - Panel sunucusu ve rig arasındaki ağ bağlantısını kontrol edin. OpenAPS API'nin doğrudan uç noktası ile yanıt verdiğini doğrulayın.ExAPS API doğrudan uç noktalarına ek olarak, KURUMSALS üst düzeylere göre belirlenir.
- [FONT=0]Stale data uyarıları[[Dönetici:0)[[Döneticiler beklenenden daha yaşlıysa, anket aralığı artırmak veya önbellek TTL'yi azaltmak. Ayrıca CGM cihazının CGM alıcı ile ilgili herhangi bir hata için doğru şekilde iletilmesini onaylayın.
- [FONT:0)WebSocket bağlantıları[[Dönetici:0)[Dönetici:0)[Dönetici:0))[değiştir | kaynağı değiştir] – Varsayılan olarak geri yükleme işlemi otomatik olarak yeniden bağlantıya giriş yapın.Relaksiyon ayarlarını veya güvenlik kurallarını kontrol edin. WebSocket-sitesilik tutma-malzeme-pingleri kullanın.
- [FONT:0)Charts'in [Dönetici] – JSON veri yapısını doğrulamadığı bir formatta olduğunu varsayın.Samps notular, grafikteki değişiklikleri kontrol etmek için konsol logları kullanın.For Chart.js için milisaniyeler.
Hata koşullarını yakalamak için hem arka hem de ön uçlara giriş yapın. Panelin kendisi için UptimeRobot gibi bir izleme hizmeti ayarlamayı düşünün. Tüm bilinen statüleri listeleyen basit bir “sağlık” sayfası oluşturun (muhtemelen son veriler güncelleme, WebSocket durumu) böylece hızlı bir şekilde teşhis problemleri için bir geliştirme ortamınızı kontrol edebilirsiniz.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Özel bir OpenAPS panosu teknik bir egzersizden daha fazlasıdır - AçıkAPS'in açık verileri ve modern web teknolojilerini kullanarak hareket edilebilir verileri parmak uçlarınızda ortaya koyarsınız.Dikkatli bir tasarım ve titiz test ile, paniğe ek olarak, nihai hedefin sadece sayılarını görüntülemek için güvenilir bir arkadaş haline gelebilir.