{"version":3,"file":"fikoyt-shared-hmi-pano-shell.component-C955a3pP.mjs","sources":["../../../projects/shared/src/lib/app/uygulamalar/hmi-pano/hmi-pano-shell.component.html","../../../projects/shared/src/lib/app/uygulamalar/hmi-pano/hmi-pano-shell.component.ts"],"sourcesContent":["\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \"FikoYT\"\r\n
\r\n \"FikoYT\"\r\n
\r\n\r\n \r\n
\r\n ⓘ\r\n UYAR Döküm HMI Bilgi Ekranı\r\n ⓘ\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n 📡\r\n
\r\n
\r\n
\r\n ⚡\r\n
\r\n
\r\n
\r\n {{ tarih }}\r\n {{ saat }}\r\n
\r\n
\r\n
\r\n @if (bataryaDestekleniyor && !bataryaSarj) {\r\n 🔋\r\n {{ bataryaSeviye }}%\r\n } @else {\r\n 🔌\r\n }\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n @if (ekranMesajiGoster) {\r\n
\r\n
\r\n 📢\r\n {{ ekranMesaji }}\r\n
\r\n \r\n
\r\n }\r\n\r\n \r\n @if (cihazAskida) {\r\n
\r\n
\r\n
⏸️
\r\n

Cihaz Askıya Alındı

\r\n

\r\n Bu cihaz yönetici tarafından geçici olarak askıya alınmıştır.\r\n Lütfen yöneticinizle iletişime geçin.\r\n

\r\n
\r\n Cihaz aktif hale getirildiğinde ekran otomatik olarak açılacaktır.\r\n
\r\n
\r\n
\r\n }\r\n\r\n \r\n
\r\n \r\n
\r\n","import { Component, OnDestroy, OnInit, ChangeDetectionStrategy, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { Subject, Subscription, takeUntil } from 'rxjs';\r\nimport { CihazAktivasyonSocketService } from './services/cihaz-aktivasyon-socket.service';\r\nimport { KartWebSocketService, ICihazKomutVerisi } from '@uygulamalar/hmi-pano/kart-okuyucu/services/kart-websocket.service';\r\nimport { clearCihazKayit, getCihazDurum, setCihazDurum } from '../../guards/cihaz.guard';\r\nimport { FikoYTIstekKok } from '@/src/service/modules/fikoyt-istek-kok/fikoyt.istek.makinesi.service';\r\nimport { hmiAyarGetir } from './config/hmi-parametre-setleri';\r\nimport { FikoYTKokBilesenComponent } from '@service/kok-bilesen/kok-bilesen.component';\r\n\r\n@Component({\r\n selector: 'hmi-pano-shell',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './hmi-pano-shell.component.html',\r\n styleUrl: './hmi-pano-shell.component.less',\r\n})\r\nexport class HmiPanoShellComponent extends FikoYTKokBilesenComponent implements OnInit, OnDestroy {\r\n private aktivasyonSocket = inject(CihazAktivasyonSocketService);\r\n private wsService = inject(KartWebSocketService);\r\n tarih = '';\r\n saat = '';\r\n wsConnected = true;\r\n bataryaSeviye = 100;\r\n bataryaSarj = true;\r\n bataryaDestekleniyor = false;\r\n karanlikMod = false;\r\n tamEkran = false;\r\n\r\n /** Uzak komutla gosterilen ekran mesaji */\r\n ekranMesaji = '';\r\n ekranMesajiRenk = '#1890ff';\r\n ekranMesajiGoster = false;\r\n\r\n /** Cihaz askıya alındı mı? */\r\n cihazAskida = false;\r\n\r\n private _timer: any;\r\n private _heartbeatTimer: any;\r\n private _durumPollingTimer: any;\r\n private _batarya: any;\r\n private _socketSub: Subscription | null = null;\r\n private _ekranMesajTimer: any;\r\n private _sonBilinenDurum: string = 'aktif';\r\n private _baslamaZamani = Date.now();\r\n private _destroy$ = new Subject();\r\n private readonly TEMA_KEY = 'hmi-karanlik-mod';\r\n private readonly CIHAZ_KEY = 'fikoyt_cihaz_kimlik';\r\n\r\n // Olay sayaclari (telemetri ile gonderilir)\r\n private _olaylar = { kartOkuma: 0, komutAlma: 0, hata: 0 };\r\n\r\n constructor() { super(); }\r\n\r\n ngOnInit() {\r\n // Parametre sisteminden veya eski localStorage'dan tema yukle\r\n this.karanlikMod = hmiAyarGetir('karanlikMod', false) || localStorage.getItem(this.TEMA_KEY) === '1';\r\n if (this.karanlikMod) {\r\n document.body.classList.add('hmi-karanlik');\r\n document.documentElement.classList.add('tema-karanlik');\r\n document.body.classList.add('tema-karanlik');\r\n }\r\n\r\n // Parametre sisteminden tam ekran tercihi\r\n if (hmiAyarGetir('tamEkran', false)) {\r\n document.documentElement.requestFullscreen?.().catch(() => {});\r\n }\r\n\r\n // Sayfa yüklendiğinde askıda durumunu kontrol et\r\n const mevcutDurum = getCihazDurum();\r\n if (mevcutDurum === 'askida') {\r\n this.cihazAskida = true;\r\n }\r\n\r\n this.updateTime();\r\n this._timer = setInterval(() => {\r\n this.updateTime();\r\n this.CD.detectChanges();\r\n }, 1000);\r\n this.initBattery();\r\n this.cihazDurumDinle();\r\n this.cihazDurumPollingBaslat();\r\n this.telemetriBaslat();\r\n this.komutDinleyiciBaslat();\r\n\r\n // Olay loglama parametre ile kontrol edilir\r\n if (hmiAyarGetir('olayLoglama', true)) {\r\n this.olayDinleyiciBaslat();\r\n }\r\n\r\n // Baslangic olayi logla\r\n this.olayLogla('hmi_basladi', 'HMI Pano baslatildi');\r\n }\r\n\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._destroy$.next();\r\n this._destroy$.complete();\r\n if (this._timer) clearInterval(this._timer);\r\n if (this._heartbeatTimer) clearInterval(this._heartbeatTimer);\r\n if (this._durumPollingTimer) clearInterval(this._durumPollingTimer);\r\n if (this._ekranMesajTimer) clearTimeout(this._ekranMesajTimer);\r\n if (this._batarya) {\r\n this._batarya.removeEventListener('levelchange', this._bataryaGuncelle);\r\n this._batarya.removeEventListener('chargingchange', this._bataryaGuncelle);\r\n }\r\n this._socketSub?.unsubscribe();\r\n\r\n // Kopma bildirimi\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY);\r\n if (cihazKimlik) {\r\n this.olayLogla('hmi_kapandi', 'HMI Pano kapatildi');\r\n this.FikoYT.io?.emit('FikoYT.sistem.io.cihaz.koptu', {\r\n cihaz_kimlik: cihazKimlik,\r\n kopma_zamani: new Date().toISOString(),\r\n uptime: Math.floor((Date.now() - this._baslamaZamani) / 1000),\r\n });\r\n }\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // UZAK KOMUT SISTEMI\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n /** Admin panelden gelen uzak komutlari dinle ve calistir */\r\n private komutDinleyiciBaslat() {\r\n // Parametre sistemi: uzak komut kabul kontrolu\r\n if (!hmiAyarGetir('uzakKomutKabul', true)) return;\r\n\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY);\r\n if (!cihazKimlik) return;\r\n\r\n this.wsService.komutGeldi$\r\n .pipe(takeUntil(this._destroy$))\r\n .subscribe(komut => {\r\n // Sadece bu cihaza gelen komutlari isle\r\n if (komut.cihaz_kimlik && komut.cihaz_kimlik !== cihazKimlik) return;\r\n this._olaylar.komutAlma++;\r\n this.olayLogla('komut_alindi', `Uzak komut: ${komut.komut_kodu}`);\r\n this.komutuCalistir(komut);\r\n });\r\n }\r\n\r\n /** Komut calistirma motoru */\r\n private komutuCalistir(komut: ICihazKomutVerisi) {\r\n const kod = komut.komut_kodu;\r\n const params = komut.parametreler || {};\r\n let basarili = false;\r\n let mesaj = '';\r\n\r\n try {\r\n switch (kod) {\r\n // ─── YENIDEN BASLAT (sayfa yenile) ───\r\n case 'yeniden_basla':\r\n basarili = true;\r\n mesaj = 'Sayfa 2 saniye icinde yenilenecek';\r\n this.komutCevabiGonder(komut, basarili, mesaj);\r\n this.olayLogla('yeniden_baslatiliyor', 'Uzak komutla sayfa yenileniyor');\r\n setTimeout(() => window.location.reload(), 2000);\r\n return; // Cevap zaten gonderildi\r\n\r\n // ─── EKRAN MESAJI ───\r\n case 'ekran_mesaji':\r\n const ekranMesaj = params['mesaj'] || 'Mesaj yok';\r\n const sure = (params['sure'] || 10) * 1000;\r\n const renk = params['renk'] || '#1890ff';\r\n this.ekranMesajiGoster = true;\r\n this.ekranMesaji = ekranMesaj;\r\n this.ekranMesajiRenk = renk;\r\n this.CD.detectChanges();\r\n if (this._ekranMesajTimer) clearTimeout(this._ekranMesajTimer);\r\n this._ekranMesajTimer = setTimeout(() => {\r\n this.ekranMesajiGoster = false;\r\n this.CD.detectChanges();\r\n }, sure);\r\n basarili = true;\r\n mesaj = `Mesaj gosterildi (${sure / 1000}sn): ${ekranMesaj}`;\r\n break;\r\n\r\n // ─── KONFIGURASYON GONDER ───\r\n case 'konfig_gonder':\r\n try {\r\n const konfig = typeof params['konfig'] === 'string'\r\n ? JSON.parse(params['konfig'])\r\n : params['konfig'];\r\n // Konfigurasyon uygula\r\n if (konfig?.cihaz_ismi) {\r\n localStorage.setItem('fikoyt_cihaz_ismi', konfig.cihaz_ismi);\r\n }\r\n if (konfig?.karanlik_mod !== undefined) {\r\n this.karanlikMod = !!konfig.karanlik_mod;\r\n document.body.classList.toggle('hmi-karanlik', this.karanlikMod);\r\n document.documentElement.classList.toggle('tema-karanlik', this.karanlikMod);\r\n document.body.classList.toggle('tema-karanlik', this.karanlikMod);\r\n localStorage.setItem(this.TEMA_KEY, this.karanlikMod ? '1' : '0');\r\n }\r\n if (konfig?.tam_ekran !== undefined && konfig.tam_ekran) {\r\n this.toggleTamEkran();\r\n }\r\n basarili = true;\r\n mesaj = 'Konfigurasyon basariyla uygulandi';\r\n } catch (e: any) {\r\n basarili = false;\r\n mesaj = 'Konfigurasyon parse hatasi: ' + (e?.message || 'bilinmeyen');\r\n }\r\n break;\r\n\r\n // ─── LED YAK (ekranda flash efekti) ───\r\n case 'led_yak':\r\n const ledRenk = params['renk'] || '#00ff00';\r\n const ledSure = params['sure'] || 3000;\r\n document.body.style.transition = 'box-shadow 0.3s';\r\n document.body.style.boxShadow = `inset 0 0 100px ${ledRenk}`;\r\n setTimeout(() => {\r\n document.body.style.boxShadow = 'none';\r\n }, ledSure);\r\n basarili = true;\r\n mesaj = `LED efekti gosterildi (${ledRenk}, ${ledSure}ms)`;\r\n break;\r\n\r\n // ─── LOG TOPLA ───\r\n case 'log_topla':\r\n const logVeri = {\r\n uptime_sn: Math.floor((Date.now() - this._baslamaZamani) / 1000),\r\n sayfa_url: window.location.href,\r\n user_agent: navigator.userAgent,\r\n ekran: { w: window.innerWidth, h: window.innerHeight, tamEkran: this.tamEkran },\r\n batarya: { seviye: this.bataryaSeviye, sarj: this.bataryaSarj },\r\n ag: { cevrimici: navigator.onLine, tur: (navigator as any).connection?.effectiveType },\r\n bellek: (performance as any).memory ? {\r\n kullanilan: Math.round((performance as any).memory.usedJSHeapSize / 1024 / 1024),\r\n toplam: Math.round((performance as any).memory.totalJSHeapSize / 1024 / 1024),\r\n limit: Math.round((performance as any).memory.jsHeapSizeLimit / 1024 / 1024),\r\n } : null,\r\n karanlik_mod: this.karanlikMod,\r\n olaylar: { ...this._olaylar },\r\n cihaz_ismi: localStorage.getItem('fikoyt_cihaz_ismi') || 'HMI Pano',\r\n };\r\n basarili = true;\r\n mesaj = JSON.stringify(logVeri);\r\n break;\r\n\r\n // ─── FIRMWARE GUNCELLE (zorla yenile) ───\r\n case 'firmware_guncelle':\r\n basarili = true;\r\n mesaj = 'Cache temizlenip sayfa yenilenecek';\r\n this.komutCevabiGonder(komut, basarili, mesaj);\r\n this.olayLogla('firmware_guncelleme', 'Cache temizleniyor ve yenileniyor');\r\n // Cache'i atla ve hard reload\r\n setTimeout(() => {\r\n const w = window as any;\r\n if (w.caches) {\r\n w.caches.keys().then((names: string[]) => {\r\n for (const name of names) w.caches.delete(name);\r\n }).finally(() => w.location.reload());\r\n } else {\r\n w.location.reload();\r\n }\r\n }, 2000);\r\n return;\r\n\r\n // ─── DURUM SORGULA ───\r\n case 'durum_sorgula':\r\n basarili = true;\r\n mesaj = JSON.stringify({\r\n durum: 'aktif',\r\n uptime_sn: Math.floor((Date.now() - this._baslamaZamani) / 1000),\r\n karanlik_mod: this.karanlikMod,\r\n tam_ekran: this.tamEkran,\r\n batarya: this.bataryaSeviye,\r\n cevrimici: navigator.onLine,\r\n });\r\n break;\r\n\r\n default:\r\n basarili = false;\r\n mesaj = `Bilinmeyen komut: ${kod}`;\r\n this._olaylar.hata++;\r\n }\r\n } catch (e: any) {\r\n basarili = false;\r\n mesaj = `Komut calistirma hatasi: ${e?.message || 'bilinmeyen'}`;\r\n this._olaylar.hata++;\r\n }\r\n\r\n this.komutCevabiGonder(komut, basarili, mesaj);\r\n this.olayLogla(basarili ? 'komut_tamamlandi' : 'komut_hata', `${kod}: ${mesaj}`);\r\n }\r\n\r\n /** Komut cevabini Socket.IO uzerinden gonder */\r\n private komutCevabiGonder(komut: ICihazKomutVerisi, basarili: boolean, mesaj: string) {\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY) || '';\r\n this.wsService.komutCevabiGonder({\r\n komut_id: komut._id,\r\n komut_kodu: komut.komut_kodu,\r\n cihaz_kimlik: cihazKimlik,\r\n basarili,\r\n mesaj,\r\n durum: basarili ? 'tamamlandi' : 'hata',\r\n });\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // OLAY LOGLAMA SISTEMI\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n /** Olay logla — sunucuya gonderilir, DB'ye kaydedilir, admin panelde gorulur */\r\n private olayLogla(olayKodu: string, aciklama: string, ekVeri?: any) {\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY) || '';\r\n if (!cihazKimlik) return;\r\n\r\n this.wsService.olayGonder({\r\n cihaz_kimlik: cihazKimlik,\r\n cihaz_tipi: 'hmi_pano',\r\n olay_kodu: olayKodu,\r\n aciklama,\r\n kaynak: 'hmi_pano',\r\n veri: ekVeri,\r\n });\r\n }\r\n\r\n /** HMI kart olaylarini dinle ve logla */\r\n private olayDinleyiciBaslat() {\r\n // Kart olaylarini logla\r\n this.wsService.kartOlayi$\r\n .pipe(takeUntil(this._destroy$))\r\n .subscribe(olay => {\r\n this._olaylar.kartOkuma++;\r\n this.olayLogla(\r\n olay.durum === 'koyuldu' ? 'kart_koyuldu' : 'kart_cekildi',\r\n `Kart ${olay.durum}: ${olay.kartKimlik}`,\r\n { kartKimlik: olay.kartKimlik, cihazKimlik: olay.cihazKimlik },\r\n );\r\n\r\n const cihazOlay = {\r\n cihaz_kimlik: olay.cihazKimlik,\r\n olay_kodu: olay.durum === 'koyuldu' ? 'kart_koyuldu' : 'kart_cekildi',\r\n kartKimlik: olay.kartKimlik,\r\n };\r\n this.FikoYT.io?.emit('FikoYT.sistem.io.cihaz.olay', cihazOlay);\r\n\r\n // Kart çekildi → sadece HMI pano içindeyken ana ekrana dön\r\n if (olay.durum === 'cekildi' && this.router.url.includes('/hmi-pano/')) {\r\n this.ngZone.run(() => {\r\n this.router.navigate(['/hmi-pano/pano']);\r\n });\r\n }\r\n });\r\n\r\n // Ag durumu degisikliklerini logla\r\n const onlineH = () => this.olayLogla('ag_baglandi', 'Internet baglantisi kuruldu');\r\n const offlineH = () => {\r\n this._olaylar.hata++;\r\n this.olayLogla('ag_koptu', 'Internet baglantisi kesildi');\r\n };\r\n window.addEventListener('online', onlineH);\r\n window.addEventListener('offline', offlineH);\r\n this._destroy$.subscribe(() => {\r\n window.removeEventListener('online', onlineH);\r\n window.removeEventListener('offline', offlineH);\r\n });\r\n\r\n // Hata yakalayici\r\n const errorH = (e: ErrorEvent) => {\r\n this._olaylar.hata++;\r\n this.olayLogla('js_hata', `${e.message} (${e.filename}:${e.lineno})`);\r\n };\r\n window.addEventListener('error', errorH);\r\n this._destroy$.subscribe(() => window.removeEventListener('error', errorH));\r\n }\r\n\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n // CIHAZ DURUM & TELEMETRI\r\n // ═══════════════════════════════════════════════════════════════════════════\r\n\r\n /**\r\n * Socket.IO uzerinden cihaz durumu degisikliklerini dinle.\r\n * Cift katmanli: 1) CihazAktivasyonSocketService, 2) Dogrudan socket dinleme (yedek)\r\n */\r\n private cihazDurumDinle() {\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY);\r\n if (!cihazKimlik) {\r\n console.warn('[HMI Shell] cihazKimlik bulunamadi, durum dinleme baslatilmadi');\r\n return;\r\n }\r\n\r\n console.log('[HMI Shell] Cihaz durum dinleme baslatiliyor, kimlik:', cihazKimlik);\r\n\r\n // 1. Katman: CihazAktivasyonSocketService uzerinden\r\n this.aktivasyonSocket.dinlemeBasla();\r\n this._socketSub = this.aktivasyonSocket\r\n .cihazOlaylari$(cihazKimlik)\r\n .subscribe(olay => {\r\n console.log('[HMI Shell] Aktivasyon olayi alindi (servis):', olay.tip, olay.durum);\r\n if (olay.tip === 'aktivasyon_durum_degisti') {\r\n this.durumDegisikligiUygula(olay.durum || '');\r\n }\r\n });\r\n\r\n // 2. Katman: Dogrudan socket dinleme (yedek — servis calismasa bile yakala)\r\n const socket = this.FikoYT.io;\r\n if (socket) {\r\n const sub = socket.fromEvent('FikoYT.sistem.io.cihaz.guncellendi')\r\n .pipe(takeUntil(this._destroy$))\r\n .subscribe((data: any) => {\r\n const payload = Array.isArray(data) ? data[0] : data;\r\n if (!payload || typeof payload !== 'object') return;\r\n if (payload.tip !== 'aktivasyon_durum_degisti') return;\r\n if (payload.cihaz_kimlik !== cihazKimlik) return;\r\n\r\n console.log('[HMI Shell] Aktivasyon olayi alindi (dogrudan socket):', payload.durum);\r\n this.durumDegisikligiUygula(payload.durum || '');\r\n });\r\n } else {\r\n console.warn('[HMI Shell] Socket.IO baglantisi bulunamadi, dogrudan dinleme baslatilmadi');\r\n }\r\n }\r\n\r\n /** Durum degisikligi islemleri (iptal/askida/aktif) */\r\n private durumDegisikligiUygula(durum: string) {\r\n this.ngZone.run(() => {\r\n if (durum === 'iptal') {\r\n this.olayLogla('cihaz_deaktif', 'Cihaz iptal edildi');\r\n clearCihazKayit();\r\n this.nzMessage.warning('Cihaz kaydı yönetici tarafından iptal edildi');\r\n this.router.navigate(['/hmi-pano/aktivasyon']);\r\n } else if (durum === 'askida') {\r\n if (this.cihazAskida) return; // Zaten askida\r\n this.olayLogla('cihaz_askida', 'Cihaz askıya alındı');\r\n setCihazDurum('askida');\r\n this.cihazAskida = true;\r\n this.CD.detectChanges();\r\n } else if (durum === 'aktif') {\r\n // Askidayken aktif oldu — sayfa reload ile temiz baslat\r\n if (this.cihazAskida || this._sonBilinenDurum === 'askida') {\r\n this.olayLogla('cihaz_aktif', 'Cihaz tekrar aktif edildi, sayfa yenileniyor');\r\n setCihazDurum('aktif');\r\n window.location.reload();\r\n return;\r\n }\r\n setCihazDurum('aktif');\r\n this.cihazAskida = false;\r\n this.CD.detectChanges();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Socket.IO kesilirse tek seferlik cihaz durum kontrolu.\r\n * Artık periyodik polling yok — Socket.IO ile dinleniyor.\r\n */\r\n private cihazDurumPollingBaslat() {\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY);\r\n if (!cihazKimlik) return;\r\n\r\n this._sonBilinenDurum = getCihazDurum() || 'aktif';\r\n\r\n // Sayfa açılışında tek seferlik kontrol (5sn sonra)\r\n setTimeout(() => this.cihazDurumKontrolEt(cihazKimlik), 5000);\r\n }\r\n\r\n private _pollingBasarisizSayac = 0;\r\n\r\n private async cihazDurumKontrolEt(cihazKimlik: string) {\r\n try {\r\n const istek = new FikoYTIstekKok({\r\n metod: 'POST',\r\n komut: 'FikoYT.sistem.DB.hareketler.aggregate',\r\n });\r\n istek.parametreler = {\r\n aggregate: [\r\n { $match: { vt: 'FikoYT.sistem.cihazlar' } },\r\n { $match: { cihazKimlik } },\r\n { $sort: { _id: -1 } },\r\n { $limit: 1 },\r\n { $project: { aktivasyonDurumu: 1 } },\r\n ],\r\n };\r\n await istek.isteSync();\r\n const sonuc = Array.isArray(istek.cevap?.sonuc) ? istek.cevap.sonuc : [];\r\n\r\n const cihaz = sonuc[0];\r\n\r\n if (!cihaz) {\r\n // Cihaz bulunamadi — sayacı artır ama agresif silme yapma\r\n this._pollingBasarisizSayac++;\r\n console.warn('[HMI Shell] Polling: cihaz bulunamadi, sayac:', this._pollingBasarisizSayac);\r\n // 20 ardışık başarısız sorgu (5dk) sonra iptal — geçici ağ sorunlarını önle\r\n if (this._pollingBasarisizSayac >= 20 && this._sonBilinenDurum !== 'iptal') {\r\n console.error('[HMI Shell] Polling: 20 ardisik basarisiz, cihaz iptal ediliyor');\r\n this._sonBilinenDurum = 'iptal';\r\n this.durumDegisikligiUygula('iptal');\r\n }\r\n return;\r\n }\r\n\r\n // Basarili sorgu — sayaci sifirla\r\n this._pollingBasarisizSayac = 0;\r\n const yeniDurum = cihaz.aktivasyonDurumu || 'aktif';\r\n\r\n // Durum degisti mi?\r\n if (yeniDurum !== this._sonBilinenDurum) {\r\n console.log('[HMI Shell] Polling: durum degisti', this._sonBilinenDurum, '→', yeniDurum);\r\n this._sonBilinenDurum = yeniDurum;\r\n this.durumDegisikligiUygula(yeniDurum);\r\n }\r\n } catch (e) {\r\n // Ag hatasi — sessizce atla, sonraki polling'de tekrar dener\r\n console.warn('[HMI Shell] Polling: ag hatasi, atlanıyor');\r\n }\r\n }\r\n\r\n /**\r\n * Telemetri heartbeat baslat.\r\n * Her 30 saniyede bir cihaz durumunu Socket.IO ile admin paneline bildirir.\r\n */\r\n private telemetriBaslat() {\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY);\r\n if (!cihazKimlik) return;\r\n\r\n // Baglanti bildirimi — desteklenen komutlarla birlikte\r\n let cihazDbId = '';\r\n try { cihazDbId = JSON.parse(localStorage.getItem('fikoyt_cihaz_konfig') || '{}')?._id || ''; } catch {}\r\n this.FikoYT.io?.emit('FikoYT.sistem.io.cihaz.baglandi', {\r\n cihaz_kimlik: cihazKimlik,\r\n cihaz_db_id: cihazDbId,\r\n cihaz_ismi: localStorage.getItem('fikoyt_cihaz_ismi') || 'HMI Pano',\r\n tur: 'hmi_pano',\r\n cihaz_tipi: 'hmi_pano',\r\n baglanti_zamani: new Date().toISOString(),\r\n firmware_surum: '2.0.0',\r\n ip_adres: window.location.hostname,\r\n user_agent: navigator.userAgent,\r\n desteklenen_komutlar: [\r\n 'yeniden_basla', 'ekran_mesaji', 'konfig_gonder',\r\n 'led_yak', 'log_topla', 'firmware_guncelle', 'durum_sorgula',\r\n ],\r\n });\r\n\r\n // Ilk telemetri hemen gonder\r\n setTimeout(() => this.telemetriGonder(), 2000);\r\n\r\n // Parametre sisteminden telemetri araligi (varsayilan 30sn)\r\n const telemetriAraligi = hmiAyarGetir('telemetriAraligi', 30) * 1000;\r\n this._heartbeatTimer = setInterval(() => this.telemetriGonder(), telemetriAraligi);\r\n }\r\n\r\n /** Anlik telemetri verisini Socket.IO uzerinden gonder */\r\n private telemetriGonder() {\r\n const cihazKimlik = localStorage.getItem(this.CIHAZ_KEY);\r\n if (!cihazKimlik) return;\r\n\r\n const connection = (navigator as any).connection;\r\n const perf = (performance as any).memory;\r\n\r\n this.FikoYT.io?.emit('FikoYT.sistem.io.cihaz.telemetri', {\r\n tip: 'telemetri',\r\n cihaz_kimlik: cihazKimlik,\r\n cihaz_ismi: localStorage.getItem('fikoyt_cihaz_ismi') || 'HMI Pano',\r\n zaman: new Date().toISOString(),\r\n batarya: {\r\n seviye: this.bataryaSeviye,\r\n sarj: this.bataryaSarj,\r\n destekleniyor: this.bataryaDestekleniyor,\r\n },\r\n ag: {\r\n cevrimici: navigator.onLine,\r\n tur: connection?.effectiveType || 'wifi',\r\n downlink: connection?.downlink,\r\n rtt: connection?.rtt,\r\n },\r\n ekran: {\r\n genislik: window.innerWidth,\r\n yukseklik: window.innerHeight,\r\n tamEkran: this.tamEkran,\r\n pikselOrani: window.devicePixelRatio,\r\n },\r\n sistem: {\r\n user_agent: navigator.userAgent,\r\n platform: navigator.platform,\r\n dil: navigator.language,\r\n firmware: '2.0.0',\r\n bellek: perf ? {\r\n kullanilan_mb: Math.round(perf.usedJSHeapSize / 1024 / 1024),\r\n toplam_mb: Math.round(perf.totalJSHeapSize / 1024 / 1024),\r\n limit_mb: Math.round(perf.jsHeapSizeLimit / 1024 / 1024),\r\n } : null,\r\n },\r\n istatistik: {\r\n kart_okuma: this._olaylar.kartOkuma,\r\n komut_alma: this._olaylar.komutAlma,\r\n hata: this._olaylar.hata,\r\n },\r\n karanlikMod: this.karanlikMod,\r\n uptime: Math.floor((Date.now() - this._baslamaZamani) / 1000),\r\n });\r\n }\r\n\r\n private _bataryaGuncelle = () => {\r\n if (!this._batarya) return;\r\n this.bataryaSeviye = Math.round(this._batarya.level * 100);\r\n this.bataryaSarj = this._batarya.charging;\r\n this.CD.detectChanges();\r\n };\r\n\r\n private initBattery() {\r\n if (!(navigator as any).getBattery) return;\r\n (navigator as any).getBattery().then((bat: any) => {\r\n this._batarya = bat;\r\n this.bataryaDestekleniyor = true;\r\n this._bataryaGuncelle();\r\n bat.addEventListener('levelchange', this._bataryaGuncelle);\r\n bat.addEventListener('chargingchange', this._bataryaGuncelle);\r\n }).catch(() => {});\r\n }\r\n\r\n toggleKaranlikMod() {\r\n this.karanlikMod = !this.karanlikMod;\r\n document.body.classList.toggle('hmi-karanlik', this.karanlikMod);\r\n document.documentElement.classList.toggle('tema-karanlik', this.karanlikMod);\r\n document.body.classList.toggle('tema-karanlik', this.karanlikMod);\r\n localStorage.setItem(this.TEMA_KEY, this.karanlikMod ? '1' : '0');\r\n this.CD.detectChanges();\r\n }\r\n\r\n async toggleTamEkran() {\r\n try {\r\n if (!document.fullscreenElement) {\r\n await document.documentElement.requestFullscreen();\r\n this.tamEkran = true;\r\n try { await (screen.orientation as any).lock('landscape'); } catch (_) {}\r\n } else {\r\n await document.exitFullscreen();\r\n this.tamEkran = false;\r\n }\r\n this.CD.detectChanges();\r\n } catch (_) {}\r\n }\r\n\r\n private updateTime() {\r\n const now = new Date();\r\n const pad = (n: number) => n.toString().padStart(2, '0');\r\n this.tarih = `${pad(now.getDate())}.${pad(now.getMonth() + 1)}.${now.getFullYear()}`;\r\n this.saat = `${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`;\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}