UNPKG

node-red-trexmes-service

Version:
1 lines 260 kB
{"config":{"lang":["tr","en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"node-red-trexmes-service","text":"trexMes Edge i\u00e7in Node-RED Servis Paketi <p> Versiyon 1.6.2 \u00b7 GPL-3.0-or-later \u00b7 Asaf Yurdakul </p> <p><code>node-red-trexmes-service</code>, trexMes Edge panel yaz\u0131l\u0131m\u0131nda \u00e7al\u0131\u015fan Node-RED konnekt\u00f6r eklentisi ile haberle\u015fen, ger\u00e7ek zamanl\u0131 olay (event) yakalama, form tasar\u0131m\u0131 ve kontrol y\u00f6netimi sa\u011flayan bir Node-RED paketidir.</p> <p>Bu paket ne i\u015fe yarar?</p> <p>\u00dcretim sahas\u0131ndaki 150-200 trexMes panelinden gelen olay tetikleyicilerini tek bir Node-RED sunucusunda toplar, ger\u00e7ek zamanl\u0131 WinForm tasar\u0131mlar\u0131 yapabilmenizi sa\u011flar ve panel \u00fczerindeki kontrolleri Node-RED ak\u0131\u015flar\u0131n\u0131zdan y\u00f6netmenize olanak tan\u0131r.</p>"},{"location":"#hzl-baks","title":"H\u0131zl\u0131 Bak\u0131\u015f","text":"\ud83d\udce6 Kurulum <p>Paketi Node-RED'e nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ve \u00f6n gereklilikleri \u00f6\u011frenin.</p> \ud83d\ude80 H\u0131zl\u0131 Ba\u015flang\u0131\u00e7 <p>\u0130lk ak\u0131\u015f\u0131n\u0131z\u0131 5 dakikada aya\u011fa kald\u0131r\u0131n.</p> \ud83c\udfd7\ufe0f Mimari <p>Paket nas\u0131l \u00e7al\u0131\u015f\u0131r, hangi node hangi rol\u00fc \u00fcstlenir?</p> \ud83d\udcda Node Referans\u0131 <p>22 node i\u00e7in detayl\u0131 \u00f6zellik ve kullan\u0131m dok\u00fcmanlar\u0131.</p> \ud83d\udca1 \u00d6rnekler <p>Haz\u0131r ak\u0131\u015f \u00f6rnekleri ve kullan\u0131m senaryolar\u0131.</p> \u2753 SSS <p>S\u0131k\u00e7a sorulan sorular ve sorun giderme.</p>"},{"location":"#nodlara-genel-baks","title":"Nodlara Genel Bak\u0131\u015f","text":"<p>Paket toplam 22 Node-RED node tipi kaydeder ve bunlar\u0131 5 mant\u0131ksal gruba ay\u0131r\u0131r:</p>"},{"location":"#cekirdek-nodlar-2","title":"\ud83d\udfe2 \u00c7ekirdek Nodlar (2)","text":"<p>Her trexMes projesinde mutlaka bulunmas\u0131 gereken altyap\u0131 node'lar\u0131.</p> <p>trex Subscriber Responser</p>"},{"location":"#olay-event-nodlar-8","title":"\ud83d\udd14 Olay (Event) Nodlar\u0131 (8)","text":"<p>trexMes panelinden g\u00f6nderilen olay tipine g\u00f6re trigger sa\u011flayan node'lar. <code>Handle Setter</code>, <code>IsHandled</code> \u00f6zelli\u011fi olan Event node'lar\u0131n\u0131 i\u00e7eren ak\u0131\u015flarda zincirin son trexMes node'u olarak kullan\u0131l\u0131r.</p> <p>Business Events System Events Communication Events Display Events Form Events Display Methods Method Returns Handle Setter</p>"},{"location":"#form-nodlar-5","title":"\ud83e\udde9 Form Nodlar\u0131 (5)","text":"<p>Custom form tasar\u0131m\u0131, kontrol ba\u011flama ve \u00f6zellik y\u00f6netimi.</p> <p>Custom Form Form Bind Controls Control Properties Button Configurator Main Form Action</p>"},{"location":"#islem-nodlar-3","title":"\u2699\ufe0f \u0130\u015flem Nodlar\u0131 (3)","text":"<p>Method \u00e7a\u011f\u0131rma, process tetikleme ve script \u00e7al\u0131\u015ft\u0131rma.</p> <p>Method Invoker Execute Process Execute Script</p>"},{"location":"#yapay-zeka-1","title":"\ud83e\udd16 Yapay Zek\u00e2 (1)","text":"<p>LLM tabanl\u0131 otomatik ak\u0131\u015f \u00fcretici.</p> <p>LLM Flow Builder</p>"},{"location":"#tipik-bir-aksn-gorunumu","title":"Tipik Bir Ak\u0131\u015f\u0131n G\u00f6r\u00fcn\u00fcm\u00fc","text":"<p><code>trex Subscriber</code> ak\u0131\u015ftan ba\u011f\u0131ms\u0131z durur; di\u011fer node'lar\u0131 tetiklemez. Olay ak\u0131\u015flar\u0131 do\u011frudan Event node'lar\u0131ndan ba\u015flar.</p> <pre><code>flowchart LR\n subgraph Kay\u0131t[\"Kay\u0131t (ba\u011f\u0131ms\u0131z)\"]\n A[trex Subscriber]\n DBG[debug\\nopsiyonel]\n A --&gt; DBG\n end\n\n subgraph Akis[\"Olay Ak\u0131\u015f\u0131\"]\n B[Business Events] --&gt; C[Custom Form]\n C --&gt; D[Form Bind Controls]\n D --&gt; E[Responser]\n end\n\n style A fill:#58d68d,color:#000\n style DBG fill:#87ceeb,color:#000\n style B fill:#ccffcc,color:#000\n style C fill:#ccffcc,color:#000\n style D fill:#ccffcc,color:#000\n style E fill:#ccffcc,color:#000</code></pre> <p>Ak\u0131\u015f kural\u0131</p> <p>Her trexMes projesinde bir adet <code>trex Subscriber</code> bulunmak zorundad\u0131r. Bu node ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015f\u0131r; \u00e7\u0131k\u0131\u015f\u0131na <code>debug</code> ba\u011flan\u0131rsa ba\u011fl\u0131 trexEdge PC'lerin IP'lerini ve panele bildirilen event listesini g\u00f6r\u00fcnt\u00fcleyebilirsiniz. Olay ak\u0131\u015flar\u0131 Event node'lar\u0131ndan ba\u015flar; <code>Responser</code> ile biter.</p>"},{"location":"#gereksinimler","title":"Gereksinimler","text":"Bile\u015fen Minimum S\u00fcr\u00fcm Node.js 18.16+ Node-RED 3.0+ trexMes Edge Node-RED konnekt\u00f6r eklentisi etkin"},{"location":"#lisans-yazar","title":"Lisans &amp; Yazar","text":"<p>Bu paket GPL-3.0-or-later lisans\u0131 alt\u0131nda da\u011f\u0131t\u0131lmaktad\u0131r.</p> <p>Geli\u015ftirici: Asaf Yurdakul \u00b7 trex Digital Manufacturing</p>"},{"location":"degisiklik-gunlugu/","title":"S\u00fcr\u00fcm Notlar\u0131","text":"<p><code>node-red-trexmes-service</code> paketinin s\u00fcr\u00fcm bilgileri.</p>"},{"location":"degisiklik-gunlugu/#gecerli-surum","title":"Ge\u00e7erli S\u00fcr\u00fcm","text":""},{"location":"degisiklik-gunlugu/#v162","title":"v1.6.2","text":"<p>Paketin bu dok\u00fcmantasyonda kapsaml\u0131 olarak ele al\u0131nan g\u00fcncel s\u00fcr\u00fcm\u00fcd\u00fcr.</p>"},{"location":"degisiklik-gunlugu/#temel-ozellikler","title":"Temel \u00d6zellikler","text":"<ul> <li>22 Node-RED node tipi (7 event, 5 form, 3 i\u015flem, 3 \u00e7ekirdek, 1 AI, ve config node'lar\u0131)</li> <li>Custom Form Designer entegrasyonu (<code>customFormDesigner.exe</code>)</li> <li>Method Invoker asenkron Promise.all i\u015fleme</li> <li>LLM Flow Builder ile 6 LLM sa\u011flay\u0131c\u0131 preset'i (OpenAI, Anthropic, Gemini, DeepSeek, Mistral, Groq)</li> <li>Multi-panel destek (150-200 panel ayn\u0131 anda)</li> <li>T\u00fcrk\u00e7e/\u0130ngilizce yerelle\u015ftirme (en-US locale)</li> <li>Statik assets servisi (<code>assets/button-configurator.png</code>)</li> </ul>"},{"location":"degisiklik-gunlugu/#teknik-stack","title":"Teknik Stack","text":"Bile\u015fen S\u00fcr\u00fcm Node.js 18.16+ Node-RED 3.0+ Lisans GPL-3.0-or-later Yazar Asaf Yurdakul Repo GitHub"},{"location":"degisiklik-gunlugu/#bilinen-durumlar","title":"Bilinen Durumlar","text":"<ul> <li>Custom Form Designer yaln\u0131zca Windows'ta \u00e7al\u0131\u015f\u0131r (.exe).</li> <li>LLM API kullan\u0131m\u0131 \u00fccretlidir, harici sa\u011flay\u0131c\u0131lar\u0131n maliyetine tabidir.</li> </ul>"},{"location":"degisiklik-gunlugu/#surum-gecmisi","title":"S\u00fcr\u00fcm Ge\u00e7mi\u015fi","text":"<p>Ge\u00e7mi\u015f s\u00fcr\u00fcm detaylar\u0131</p> <p>1.6.2 \u00f6ncesi s\u00fcr\u00fcmlere ait detayl\u0131 changelog i\u00e7in GitHub Releases sayfas\u0131n\u0131 ziyaret edin.</p>"},{"location":"degisiklik-gunlugu/#genel-versiyon-semas","title":"Genel Versiyon \u015eemas\u0131","text":"<p><code>MAJOR.MINOR.PATCH</code> semantik versiyonlama kullan\u0131l\u0131r:</p> <ul> <li>MAJOR: API'de geriye d\u00f6n\u00fck uyumsuz de\u011fi\u015fiklik</li> <li>MINOR: Yeni node tipi veya \u00f6zellik eklemesi (geriye uyumlu)</li> <li>PATCH: Bug fix, performans iyile\u015ftirme</li> </ul>"},{"location":"degisiklik-gunlugu/#guncelleme-notlar","title":"G\u00fcncelleme Notlar\u0131","text":""},{"location":"degisiklik-gunlugu/#genel-guncelleme","title":"Genel G\u00fcncelleme","text":"<pre><code>cd ~/.node-red\nnpm update node-red-trexmes-service\n</code></pre>"},{"location":"degisiklik-gunlugu/#major-surum-guncellemesi","title":"Major S\u00fcr\u00fcm G\u00fcncellemesi","text":"<p>Major s\u00fcr\u00fcm ge\u00e7i\u015flerinde mutlaka:</p> <ol> <li>Geli\u015ftirme ortam\u0131nda \u00f6nce test edin</li> <li>Mevcut ak\u0131\u015flar\u0131n\u0131z\u0131 yedekleyin (<code>~/.node-red/flows*.json</code> dosyalar\u0131)</li> <li>S\u00fcr\u00fcm notlar\u0131ndaki breaking changes b\u00f6l\u00fcm\u00fcn\u00fc dikkatle okuyun</li> <li>trexMes Edge taraf\u0131n\u0131n uyumlu s\u00fcr\u00fcm oldu\u011funu do\u011frulay\u0131n</li> </ol>"},{"location":"degisiklik-gunlugu/#geri-donus-downgrade","title":"Geri D\u00f6n\u00fc\u015f (Downgrade)","text":"<p>Sorun ya\u015farsan\u0131z belirli bir s\u00fcr\u00fcme d\u00f6nmek i\u00e7in:</p> <pre><code>npm install node-red-trexmes-service@1.6.1\n</code></pre>"},{"location":"degisiklik-gunlugu/#yol-haritas-roadmap","title":"Yol Haritas\u0131 (Roadmap)","text":"<p>A\u015fa\u011f\u0131daki \u00f6zellikler topluluk geri bildirimine ba\u011fl\u0131 olarak de\u011ferlendirilmektedir:</p> <ul> <li> Linux'ta \u00e7al\u0131\u015fan Form Designer alternatifi</li> <li> Yerle\u015fik ak\u0131\u015f \u015fablonu (template) galerisi</li> <li> OpenTelemetry tabanl\u0131 performans metrikleri</li> <li> Daha fazla LLM sa\u011flay\u0131c\u0131 preset'i</li> </ul> <p>\u00d6zellik \u00f6nerisi</p> <p>Eklenmesini istedi\u011finiz bir \u00f6zellik var m\u0131? GitHub Issues \u00fczerinden bizimle payla\u015f\u0131n.</p>"},{"location":"degisiklik-gunlugu/#bagmllklar","title":"Ba\u011f\u0131ml\u0131l\u0131klar","text":"<p><code>v1.6.2</code> itibar\u0131yla paketin ba\u011fl\u0131 oldu\u011fu npm paketleri:</p> Paket Ama\u00e7 <code>express</code> HTTP routing <code>multer</code> Multipart form data <code>raw-body@3</code> Request body parsing <code>cookie@0.7</code> Cookie i\u015fleme di\u011fer Detay i\u00e7in <code>package.json</code>'a bak\u0131n"},{"location":"degisiklik-gunlugu/#gelistirici","title":"Geli\u015ftirici","text":"<p>Asaf Yurdakul \u2014 trex Digital Manufacturing</p> <ul> <li>GitHub: @asafyurdakul</li> <li>LinkedIn: trex \u00fczerinden ula\u015f\u0131labilir</li> <li>Paket: npm</li> <li>Flow Library: Node-RED Flows</li> </ul>"},{"location":"degisiklik-gunlugu/#lisans","title":"Lisans","text":"<p>GPL-3.0-or-later</p>"},{"location":"sss/","title":"S\u0131k\u00e7a Sorulan Sorular (SSS)","text":""},{"location":"sss/#kurulum-baglant","title":"Kurulum &amp; Ba\u011flant\u0131","text":""},{"location":"sss/#s-paketi-kurdum-ama-palettete-gorunmuyor","title":"S: Paketi kurdum ama palette'te g\u00f6r\u00fcnm\u00fcyor?","text":"<p>Node-RED'i yeniden ba\u015flat\u0131n. E\u011fer h\u00e2l\u00e2 g\u00f6r\u00fcnm\u00fcyorsa:</p> <pre><code>cd ~/.node-red\nnpm list node-red-trexmes-service\n</code></pre> <p>ile paketin ger\u00e7ekten y\u00fckl\u00fc oldu\u011fundan emin olun. Yoksa:</p> <pre><code>npm install node-red-trexmes-service\n</code></pre>"},{"location":"sss/#s-cookie072-not-found-hatas-alyorum","title":"S: <code>cookie@0.7.2 not found</code> hatas\u0131 al\u0131yorum","text":"<p>Node.js s\u00fcr\u00fcm\u00fcn\u00fcz \u00e7ok eski. Node.js 18.16 veya \u00fczeri kullan\u0131n:</p> <pre><code>node --version # v18.16.0+ olmal\u0131\n</code></pre>"},{"location":"sss/#s-trex-subscriber-triggered-ckmyor","title":"S: <code>trex Subscriber</code> \"Triggered\" \u00e7\u0131km\u0131yor","text":"<ul> <li>trexMes Edge'de Node-RED Connector eklentisi etkin mi?</li> <li>Panel'in Node-RED IP/port ayar\u0131 do\u011fru mu?</li> <li>Node-RED <code>httpNodeRoot</code> ayar\u0131 varsay\u0131lan (<code>/</code>) mu?</li> <li>Taray\u0131c\u0131dan <code>http://&lt;node-red-host&gt;:1880/GetSubscribed</code> denenince cevap geliyor mu?</li> </ul>"},{"location":"sss/#s-birden-fazla-trex-subscriber-koyabilir-miyim","title":"S: Birden fazla <code>trex Subscriber</code> koyabilir miyim?","text":"<p>Hay\u0131r. Ayn\u0131 Node-RED kurulumunda yaln\u0131zca bir tane olmal\u0131d\u0131r. Birden fazla varsa HTTP path \u00e7ak\u0131\u015fmas\u0131 olur ve panel kay\u0131t listesi kar\u0131\u015f\u0131r.</p>"},{"location":"sss/#olay-event-sorunlar","title":"Olay (Event) Sorunlar\u0131","text":""},{"location":"sss/#s-olay-nodeum-trigger-almyor","title":"S: Olay node'um trigger alm\u0131yor","text":"<p>Kontrol edin:</p> <ol> <li><code>trex Subscriber</code> deploy edildi mi? Triggered \u00e7\u0131kt\u0131 m\u0131?</li> <li>Event ismi panel taraf\u0131yla birebir mi e\u015fle\u015fiyor (b\u00fcy\u00fck/k\u00fc\u00e7\u00fck harf!)?</li> <li>Panel taraf\u0131nda olay ger\u00e7ekten tetikleniyor mu? (Panel log'una bak\u0131n)</li> <li>Ak\u0131\u015f\u0131 deploy ettiniz mi?</li> </ol>"},{"location":"sss/#s-ayn-olay-birden-fazla-aksta-yakalayabilir-miyim","title":"S: Ayn\u0131 olay\u0131 birden fazla ak\u0131\u015fta yakalayabilir miyim?","text":"<p>Yaln\u0131zca <code>Business Events</code> node'u ile m\u00fcmk\u00fcnd\u00fcr. Di\u011fer Event node t\u00fcrleri (<code>System Events</code>, <code>Form Events</code> vb.) ayn\u0131 olay ad\u0131yla birden fazla kullan\u0131lamaz.</p> <p><code>Business Events</code>'te bu, <code>suffix</code> alan\u0131 arac\u0131l\u0131\u011f\u0131yla sa\u011flan\u0131r. Ayn\u0131 olay\u0131 yakalayacak her ek node'a benzersiz bir suffix de\u011feri (<code>_2</code>, <code>_3</code> gibi) verilmesi yeterlidir:</p> Node <code>event</code> <code>suffix</code> 1. node <code>OnPlanLoaded</code> (bo\u015f) 2. node <code>OnPlanLoaded</code> <code>_2</code> <p>Panel <code>OnPlanLoaded</code>'\u0131 tetikledi\u011finde her iki node da devreye girer ve kendi ak\u0131\u015f\u0131n\u0131 ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015ft\u0131r\u0131r. Her ak\u0131\u015f\u0131n sonunda bir <code>Responser</code> bulunmal\u0131d\u0131r; birden fazla dal tek bir <code>Responser</code>'a ba\u011flanabilir.</p>"},{"location":"sss/#s-ishandled-ne-zaman-true-ne-zaman-false","title":"S: <code>ishandled</code> ne zaman <code>true</code>, ne zaman <code>false</code>?","text":"<ul> <li><code>true</code> \u2192 \"Bu olay\u0131 biz i\u015fledik, panel kendi default handler'\u0131n\u0131 \u00c7ALI\u015eTIRMASIN.\"</li> <li><code>false</code> \u2192 \"Panel kendi default handler'\u0131n\u0131 da \u00e7al\u0131\u015ft\u0131rs\u0131n.\"</li> </ul> <p>Ak\u0131\u015f ortas\u0131nda dinamik karar verecekseniz Handle Setter kullan\u0131n.</p>"},{"location":"sss/#custom-form-designer","title":"Custom Form &amp; Designer","text":""},{"location":"sss/#s-custom-form-designer-calsmyor","title":"S: Custom Form Designer \u00e7al\u0131\u015fm\u0131yor","text":"<ol> <li><code>settings.js</code> i\u00e7inde <code>customFormDesignerPath</code> tan\u0131ml\u0131 m\u0131?</li> <li>Bu yoldaki .exe ger\u00e7ekten var m\u0131?</li> <li>Node-RED'in bu dosyay\u0131 \u00e7al\u0131\u015ft\u0131rma izni var m\u0131?</li> <li>Designer \u00e7\u0131kt\u0131s\u0131n\u0131n yaz\u0131laca\u011f\u0131 <code>C:\\temp\\</code> klas\u00f6r\u00fc eri\u015filebilir mi?</li> </ol> <pre><code>// settings.js i\u00e7inde olmal\u0131\nfunctionGlobalContext: {\n customFormDesignerPath: \"C:\\\\trex\\\\tools\\\\customFormDesigner.exe\"\n}\n</code></pre>"},{"location":"sss/#s-form-panelde-aclyor-ama-alanlar-bos","title":"S: Form panelde a\u00e7\u0131l\u0131yor ama alanlar bo\u015f","text":"<p>Yayg\u0131n nedenler:</p> <ol> <li><code>Form Bind Controls</code>'taki <code>props</code> listesindeki kontrol isimleri XML'deki ile e\u015fle\u015fmiyor (b\u00fcy\u00fck/k\u00fc\u00e7\u00fck harf!)</li> <li><code>data</code> ve <code>dataType</code> do\u011fru veri kayna\u011f\u0131n\u0131 g\u00f6stermiyor</li> <li><code>Form Bind Controls</code> ak\u0131\u015fta <code>Custom Form</code>'dan sonra geliyor mu? (\u00d6nce form, sonra ba\u011flama!)</li> </ol>"},{"location":"sss/#s-custom-form-xmlimi-nasl-versiyonlamalym","title":"S: Custom Form XML'imi nas\u0131l versiyonlamal\u0131y\u0131m?","text":"<p><code>customformxml</code> alan\u0131n\u0131 bo\u015f b\u0131rak\u0131p <code>Form Design</code> config node kullan\u0131n. Tasar\u0131mlar\u0131n\u0131z flow JSON'una dahil olur ve Git'te de\u011fi\u015fiklikleri takip edebilirsiniz.</p>"},{"location":"sss/#s-formainform-true-ne-zaman-kullanlr","title":"S: <code>formainform: true</code> ne zaman kullan\u0131l\u0131r?","text":"<p>Modal dialog (ayr\u0131 pencere) yerine panelin ana ekran\u0131 \u00fczerinde form basmak istiyorsan\u0131z. <code>formname</code> otomatik olarak <code>\"AppForm\"</code> olur.</p>"},{"location":"sss/#property-buton","title":"Property &amp; Buton","text":""},{"location":"sss/#s-control-propertiesle-butonu-disable-ettim-ama-hala-baslabiliyor","title":"S: <code>Control Properties</code>'le butonu disable ettim ama hala bas\u0131labiliyor","text":"<ul> <li>Property ad\u0131n\u0131 PascalCase ile yazd\u0131\u011f\u0131n\u0131zdan emin olun: <code>Enabled</code> \u2260 <code>enabled</code></li> <li><code>dataType: bool</code> se\u00e7tiniz mi?</li> <li><code>d</code> alan\u0131na ger\u00e7ekten <code>\"true\"</code>/<code>\"false\"</code> (string) yazd\u0131n\u0131z m\u0131?</li> </ul>"},{"location":"sss/#s-buton-tklamasn-yakalayamyorum","title":"S: Buton t\u0131klamas\u0131n\u0131 yakalayam\u0131yorum","text":"<p><code>Button Configurator</code>'da o buton i\u00e7in <code>e</code> (IsToOverrideDefaultHandler) <code>true</code> olmal\u0131. Aksi takdirde panel default handler \u00e7al\u0131\u015f\u0131r, sizin ak\u0131\u015f\u0131n\u0131z tetiklenmez.</p>"},{"location":"sss/#s-buton-indeks-numaralar-nereden-bakacagm","title":"S: Buton indeks numaralar\u0131 nereden bakaca\u011f\u0131m?","text":"<p>Button Configurator sayfas\u0131ndaki g\u00f6rselde t\u00fcm buton indeksleri g\u00f6r\u00fcnmektedir. G\u00f6rsel paket i\u00e7inde <code>assets/button-configurator.png</code> olarak da bulunur.</p>"},{"location":"sss/#method-invoker-returns","title":"Method Invoker &amp; Returns","text":""},{"location":"sss/#s-methodu-cagrdm-ama-cevap-gelmiyor","title":"S: Method'u \u00e7a\u011f\u0131rd\u0131m ama cevap gelmiyor","text":"<ol> <li><code>Method Returns</code> node'u eklediniz mi?</li> <li><code>methodname</code> (Returns'te) ile <code>method</code> (Invoker'da) ayn\u0131 m\u0131?</li> <li>Panel taraf\u0131 ger\u00e7ekten cevap d\u00f6n\u00fcyor mu? (panel log'lar\u0131na bak\u0131n)</li> </ol>"},{"location":"sss/#s-jsonata-ifademde-hata-var","title":"S: JSONata ifademde hata var","text":"<p>\u00d6nce ba\u015fka bir ak\u0131\u015fta <code>change</code> node ile JSONata ifadenizi test edin. Do\u011fru sonucu verdi\u011finden emin olduktan sonra <code>Method Invoker</code> veya <code>Control Properties</code> i\u00e7ine yap\u0131\u015ft\u0131r\u0131n.</p>"},{"location":"sss/#s-parametre-olarak-null-gondermem-gerek","title":"S: Parametre olarak null g\u00f6ndermem gerek","text":"<p><code>dataType: json</code> se\u00e7ip <code>d</code> alan\u0131na <code>null</code> yazabilirsiniz. Veya ak\u0131\u015fta <code>flow</code> context'e <code>null</code> koyup <code>dataType: flow</code> ile okutabilirsiniz.</p>"},{"location":"sss/#responser","title":"Responser","text":""},{"location":"sss/#s-aksm-timeout-veriyor","title":"S: Ak\u0131\u015f\u0131m timeout veriyor","text":"<p>\u00c7o\u011funlukla <code>Responser</code> eksik demektir. T\u00fcm olay ak\u0131\u015flar\u0131n\u0131n sonunda bir <code>Responser</code> olmal\u0131. <code>trex Subscriber</code> istisnad\u0131r (kendi cevab\u0131n\u0131 y\u00f6netir).</p>"},{"location":"sss/#s-birden-fazla-responser-m-koymalym","title":"S: Birden fazla <code>Responser</code> m\u0131 koymal\u0131y\u0131m?","text":"<p>Gerekli de\u011fildir. Birden fazla dal tek bir <code>Responser</code>'a ba\u011flanabilir. Kesinlikle ka\u00e7\u0131n\u0131lmas\u0131 gereken durum, ayn\u0131 dalda pe\u015f pe\u015fe birden fazla <code>Responser</code> kullanmakt\u0131r; HTTP cevab\u0131 yaln\u0131zca bir kez g\u00f6nderilebilir.</p>"},{"location":"sss/#llm-flow-builder","title":"LLM Flow Builder","text":""},{"location":"sss/#s-api-anahtarm-nereye-girdim","title":"S: API anahtar\u0131m\u0131 nereye girdim?","text":"<p>Config node (<code>llm-flow-builder-config</code>) i\u00e7inde API Key alan\u0131na. Bu alan <code>password</code> tipinde oldu\u011fu i\u00e7in flow JSON export'unda g\u00f6r\u00fcnmez.</p>"},{"location":"sss/#s-uretilen-aks-json-parse-hatas-veriyor","title":"S: \u00dcretilen ak\u0131\u015f JSON parse hatas\u0131 veriyor","text":"<p>LLM bazen markdown code-fence (<code>```</code>) ile cevap d\u00f6nd\u00fcr\u00fcr. Node'un kendi temizleyicisi var ama bazen yetmez. \u00c7\u00f6z\u00fcm: <code>systemPrompt</code> alan\u0131na ekleyin: \"Cevab\u0131n\u0131 sadece valid JSON olarak ver, markdown formatlamadan.\"</p>"},{"location":"sss/#s-maliyet-kontrolu-nasl-yaparm","title":"S: Maliyet kontrol\u00fc nas\u0131l yapar\u0131m?","text":"<ul> <li>Geli\u015ftirme yaparken <code>autoDeploy: false</code> tutun</li> <li>Sistem prompt'unuzu k\u0131salt\u0131n (her \u00e7a\u011fr\u0131da g\u00f6nderilir)</li> <li>Daha ucuz modeller deneyin (\u00f6rn. <code>gpt-4o-mini</code>, <code>claude-3-5-haiku</code>)</li> <li>Test ak\u0131\u015flar\u0131n\u0131 s\u00fcrekli \u00e7al\u0131\u015ft\u0131rmaktan ka\u00e7\u0131n\u0131n</li> </ul>"},{"location":"sss/#performans","title":"Performans","text":""},{"location":"sss/#s-200-panel-ayn-anda-calsyor-node-red-yavaslad","title":"S: 200 panel ayn\u0131 anda \u00e7al\u0131\u015f\u0131yor, Node-RED yava\u015flad\u0131","text":"<ul> <li>Ak\u0131\u015f ba\u015f\u0131na 1-2 <code>debug</code> node'u b\u0131rak\u0131n, fazlas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131n</li> <li><code>Communication Events</code> gibi y\u00fcksek frekansl\u0131 node'larda <code>function</code> ile filtreleme yap\u0131n</li> <li>Node-RED projeyi m\u00fcmk\u00fcnse flow ba\u015f\u0131na ay\u0131r\u0131n, her panel grubu i\u00e7in ayr\u0131 flow tab</li> <li>Async i\u015flemleri <code>Method Invoker</code> ile yap\u0131n, fire-and-forget ile bloklamay\u0131n</li> </ul>"},{"location":"sss/#s-tek-bir-aks-5-saniye-suruyor","title":"S: Tek bir ak\u0131\u015f 5 saniye s\u00fcr\u00fcyor","text":"<p>Ak\u0131\u015f sonu <code>Responser</code> panele cevap d\u00f6nmedik\u00e7e panel beklemede kal\u0131r. Bu s\u00fcre b\u00fcy\u00fck olas\u0131l\u0131kla:</p> <ul> <li>Bir <code>function</code> node'unda async I/O</li> <li>Veritaban\u0131 sorgusu</li> <li>HTTP request</li> </ul> <p>\u00c7\u00f6z\u00fcm:</p> <ul> <li>E\u011fer cevab\u0131 ger\u00e7ekten beklemek gerekiyorsa: optimizasyon yap\u0131n (cache, paralel)</li> <li>Beklemek gerekmiyorsa: i\u015flemi <code>Method Invoker</code> ile fire-and-forget yap\u0131n, hemen <code>Responser</code> d\u00f6nd\u00fcr\u00fcn</li> </ul>"},{"location":"sss/#gelistirme-test","title":"Geli\u015ftirme &amp; Test","text":""},{"location":"sss/#s-aks-panelsiz-test-edebilir-miyim","title":"S: Ak\u0131\u015f\u0131 panelsiz test edebilir miyim?","text":"<p>Evet, ancak taray\u0131c\u0131 adres sat\u0131r\u0131ndan de\u011fil. T\u00fcm event node'lar\u0131 <code>POST</code> metodunu kullan\u0131r ve veriyi request body'den bekler; adres sat\u0131r\u0131na parametre ge\u00e7ilemez.</p> <p>Postman veya benzeri bir HTTP istemcisi ile test edebilirsiniz:</p> <ul> <li>Method: <code>POST</code></li> <li>URL: <code>http://&lt;node-red-host&gt;:1880/&lt;EventAd\u0131&gt;</code></li> <li>Body: <code>raw / JSON</code></li> </ul> <pre><code>{\n \"param1\": \"value1\",\n \"param2\": \"value2\"\n}\n</code></pre>"},{"location":"sss/#s-msgpayload-arrayinin-icerigini-nasl-debug-ederim","title":"S: <code>msg.payload</code> array'inin i\u00e7eri\u011fini nas\u0131l debug ederim?","text":"<p>Her form/aksiyon node'undan sonra bir <code>debug</code> node ekleyip <code>complete msg</code> se\u00e7in. Sa\u011f paneldeki \u00e7\u0131kt\u0131da <code>payload</code> array'inin her eleman\u0131n\u0131 g\u00f6r\u00fcrs\u00fcn\u00fcz.</p>"},{"location":"sss/#s-aksm-githuba-koyabilir-miyim","title":"S: Ak\u0131\u015f\u0131m\u0131 GitHub'a koyabilir miyim?","text":"<p>Evet. Sadece <code>credentials</code> alanlar\u0131 (LLM API key gibi) flow JSON'una dahil edilmez, bunlar\u0131 ayr\u0131ca y\u00f6netmeniz gerekir.</p>"},{"location":"sss/#genel","title":"Genel","text":""},{"location":"sss/#s-bu-paket-trexmes-edge-olmadan-calsr-m","title":"S: Bu paket trexMes Edge olmadan \u00e7al\u0131\u015f\u0131r m\u0131?","text":"<p>Hay\u0131r. trexMes Edge'in Node-RED Connector eklentisi ba\u011flant\u0131 kurmazsa hi\u00e7bir event tetiklenmez, form bas\u0131lmaz. Paket trexMes ekosistemine \u00f6zg\u00fcd\u00fcr.</p>"},{"location":"sss/#s-lisans-nedir-ticari-kullanabilir-miyim","title":"S: Lisans nedir, ticari kullanabilir miyim?","text":"<p>GPL-3.0-or-later. Ticari kullan\u0131m serbesttir ancak de\u011fi\u015fiklik yap\u0131p da\u011f\u0131t\u0131yorsan\u0131z ayn\u0131 lisansla da\u011f\u0131tmal\u0131s\u0131n\u0131z.</p>"},{"location":"sss/#s-katkda-bulunabilir-miyim","title":"S: Katk\u0131da bulunabilir miyim?","text":"<p>Evet, GitHub repository'sinde issue a\u00e7abilir veya pull request g\u00f6nderebilirsiniz.</p> <p>Sorununuz burada yoksa GitHub Issues \u00fczerinden ileti\u015fime ge\u00e7in.</p>"},{"location":"baslangic/","title":"Ba\u015flang\u0131\u00e7","text":"<p>Bu b\u00f6l\u00fcm, <code>node-red-trexmes-service</code> paketini ilk kez kullanacak geli\u015ftiriciler i\u00e7in ad\u0131m ad\u0131m rehber niteli\u011findedir.</p>"},{"location":"baslangic/#bu-bolumde-neler-var","title":"Bu B\u00f6l\u00fcmde Neler Var?","text":"\ud83d\udce6 Kurulum <p>Node-RED, trexMes Edge konnekt\u00f6r\u00fc ve paketin nas\u0131l kurulaca\u011f\u0131.</p> \ud83d\ude80 H\u0131zl\u0131 Ba\u015flang\u0131\u00e7 <p>5 dakikada ilk ak\u0131\u015f\u0131 aya\u011fa kald\u0131rma.</p> \ud83c\udfd7\ufe0f Mimari Genel Bak\u0131\u015f <p>Paket nas\u0131l \u00e7al\u0131\u015f\u0131r? trexMes Edge ile haberle\u015fme nas\u0131l olur?</p> \ud83d\udce8 Mesaj (msg) Yap\u0131s\u0131 <p>Node'lar aras\u0131nda dola\u015fan `msg.payload` format\u0131 ve `operationtype` kavram\u0131.</p>"},{"location":"baslangic/#onerilen-okuma-sras","title":"\u00d6nerilen Okuma S\u0131ras\u0131","text":"<ol> <li>Kurulum \u2014 \u00d6nce \u00e7al\u0131\u015fan bir kurulum elde edin.</li> <li>Mimari \u2014 Sistemin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlay\u0131n (5 dk okuma).</li> <li>H\u0131zl\u0131 Ba\u015flang\u0131\u00e7 \u2014 \u0130lk ak\u0131\u015f\u0131n\u0131z\u0131 olu\u015fturun.</li> <li>Mesaj Yap\u0131s\u0131 \u2014 Node'lar aras\u0131 veri ak\u0131\u015f\u0131n\u0131 \u00f6\u011frenin.</li> </ol>"},{"location":"baslangic/#onemli-on-bilgi","title":"\u00d6nemli \u00d6n Bilgi","text":"<p>trexMes Edge gereklidir</p> <p>Bu paket ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015fmaz. trexMes Edge panel yaz\u0131l\u0131m\u0131n\u0131n \u00fczerinde Node-RED konnekt\u00f6r eklentisi etkin olmak zorundad\u0131r. Aksi takdirde node'lar trigger almaz, custom form'lar panele bas\u0131lmaz ve method invoker hata d\u00f6ner.</p> <p>Tek <code>trex Subscriber</code> kural\u0131</p> <p>Her trexMes projesi/flow'unda yaln\u0131zca bir adet <code>trex Subscriber</code> node'u bulunmal\u0131d\u0131r. Bu node, projedeki t\u00fcm olay (event) node'lar\u0131n\u0131 trexMes paneline kay\u0131t eder.</p>"},{"location":"baslangic/hizli-baslangic/","title":"H\u0131zl\u0131 Ba\u015flang\u0131\u00e7","text":"<p>Bu rehber, ilk trexMes ak\u0131\u015f\u0131n\u0131z\u0131 5 dakika i\u00e7inde aya\u011fa kald\u0131rman\u0131z i\u00e7in yaz\u0131lm\u0131\u015ft\u0131r.</p>"},{"location":"baslangic/hizli-baslangic/#hedef","title":"Hedef","text":"<p>Bir trexMes panelinden gelen Business Event'i yakalay\u0131p Node-RED debug penceresinde g\u00f6steren bir ak\u0131\u015f olu\u015fturaca\u011f\u0131z.</p>"},{"location":"baslangic/hizli-baslangic/#aks-semas","title":"Ak\u0131\u015f \u015eemas\u0131","text":"<p><code>trex Subscriber</code> ba\u011f\u0131ms\u0131z durur; olay ak\u0131\u015f\u0131 do\u011frudan <code>Business Events</code>'ten ba\u015flar.</p> <pre><code>flowchart LR\n subgraph Kayit[\"Kay\u0131t (ba\u011f\u0131ms\u0131z)\"]\n A[trex Subscriber]\n end\n\n subgraph Akis[\"Olay Ak\u0131\u015f\u0131\"]\n B[Business Events&lt;br/&gt;OrderStart] --&gt; D[debug]\n end\n\n style A fill:#58d68d,color:#000\n style B fill:#ccffcc,color:#000\n style D fill:#87ceeb,color:#000</code></pre>"},{"location":"baslangic/hizli-baslangic/#adm-1-yeni-bir-flow-olusturun","title":"Ad\u0131m 1 \u2014 Yeni Bir Flow Olu\u015fturun","text":"<ol> <li>Node-RED aray\u00fcz\u00fcnde + ile yeni bir tab a\u00e7\u0131n (\u00f6rn. \"MyFirstTrexFlow\").</li> </ol>"},{"location":"baslangic/hizli-baslangic/#adm-2-trex-subscriber-ekleyin","title":"Ad\u0131m 2 \u2014 <code>trex Subscriber</code> Ekleyin","text":"<p>Paletten trexMes service kategorisi alt\u0131ndaki <code>trex Subscriber</code> node'unu canvas'a s\u00fcr\u00fckleyin.</p> \u00d6zellik De\u011fer Name (bo\u015f b\u0131rakabilirsiniz) Method <code>get</code> (otomatik) Event <code>/GetSubscribed</code> (varsay\u0131lan) <p>Bu node ne yapar?</p> <p><code>trex Subscriber</code>, projenizdeki t\u00fcm event node'lar\u0131n\u0131n isimlerini trexMes paneline kay\u0131t eder. Panel bu listeye bakarak hangi olaylar\u0131 Node-RED'e g\u00f6nderece\u011fini bilir.</p>"},{"location":"baslangic/hizli-baslangic/#adm-3-business-events-ekleyin","title":"Ad\u0131m 3 \u2014 <code>Business Events</code> Ekleyin","text":"<p>Paletten <code>Business Events</code> node'unu canvas'a s\u00fcr\u00fckleyin ve \u00e7ift t\u0131klayarak yap\u0131land\u0131r\u0131n:</p> \u00d6zellik De\u011fer A\u00e7\u0131klama Name <code>OrderStart</code> (opsiyonel) Ak\u0131\u015f \u00fczerinde g\u00f6stermek i\u00e7in Method <code>get</code> (varsay\u0131lan) HTTP method Event <code>/OrderStartEvent</code> Panel taraf\u0131nda tan\u0131mlanan olay ad\u0131 Is Handled <code>false</code> Bu olay\u0131 bizim ak\u0131\u015f\u0131m\u0131z m\u0131 i\u015fleyecek? <p>Event ismi nereden geliyor?</p> <p><code>Event</code> alan\u0131na yazd\u0131\u011f\u0131n\u0131z de\u011fer, trexMes Edge taraf\u0131nda tan\u0131ml\u0131 olay isimleriyle birebir e\u015fle\u015fmelidir (b\u00fcy\u00fck/k\u00fc\u00e7\u00fck harf duyarl\u0131). Panel yap\u0131land\u0131rmas\u0131ndan do\u011fru ismi \u00f6\u011frenin.</p>"},{"location":"baslangic/hizli-baslangic/#adm-4-debug-nodeu-ekleyin","title":"Ad\u0131m 4 \u2014 <code>debug</code> Node'u Ekleyin","text":"<p>Standart Node-RED <code>debug</code> node'unu s\u00fcr\u00fckleyip <code>Business Events</code> \u00e7\u0131k\u0131\u015f\u0131na ba\u011flay\u0131n. <code>debug</code> \u00f6zelliklerinde:</p> <ul> <li>Output: <code>complete msg object</code></li> </ul>"},{"location":"baslangic/hizli-baslangic/#adm-5-deploy","title":"Ad\u0131m 5 \u2014 Deploy","text":"<p>Sa\u011f \u00fcstteki k\u0131rm\u0131z\u0131 Deploy butonuna t\u0131klay\u0131n. Ba\u011flant\u0131 ba\u015far\u0131l\u0131 kurulduysa:</p> <ul> <li><code>trex Subscriber</code> node'unun alt\u0131nda k\u0131sa bir s\u00fcre ye\u015fil \"Triggered\" durumu g\u00f6r\u00fcn\u00fcr.</li> <li>Sa\u011f panelde debug \u00e7\u0131kt\u0131s\u0131, panelden olay tetiklendi\u011finde belirir.</li> </ul>"},{"location":"baslangic/hizli-baslangic/#beklenen-ckt","title":"Beklenen \u00c7\u0131kt\u0131","text":"<p>Panel taraf\u0131nda <code>OrderStartEvent</code> tetiklendi\u011finde Node-RED debug panelinde \u015funa benzer bir mesaj g\u00f6rmelisiniz:</p> <pre><code>{\n \"_msgid\": \"abc123\",\n \"payload\": {\n \"orderNo\": \"ORD-2026-0001\",\n \"operatorId\": \"OP-007\",\n \"machineId\": \"M-12\"\n },\n \"req\": { /* HTTP request bilgisi */ },\n \"res\": { /* HTTP response wrapper */ }\n}\n</code></pre>"},{"location":"baslangic/hizli-baslangic/#sonraki-adm-veriyi-forma-yanstmak","title":"Sonraki Ad\u0131m: Veriyi Form'a Yans\u0131tmak","text":"<p>\u0130lerleyen \u00f6rneklerde bu yap\u0131y\u0131 geni\u015fleterek:</p> <ol> <li>Gelen olay verisiyle bir Custom Form a\u00e7aca\u011f\u0131z.</li> <li>Form alanlar\u0131n\u0131 Form Bind Controls ile dolduraca\u011f\u0131z.</li> <li>Form \u00fczerindeki butonlar\u0131 Button Configurator ile yap\u0131land\u0131raca\u011f\u0131z.</li> <li>Ak\u0131\u015f sonunda Responser ile cevap d\u00f6nd\u00fcrece\u011fiz.</li> </ol> <p>Custom Form Ak\u0131\u015f\u0131 \u00f6rne\u011fine ge\u00e7 \u2192</p>"},{"location":"baslangic/hizli-baslangic/#yaygn-hatalar","title":"Yayg\u0131n Hatalar","text":"<p>Olay tetiklenmiyor</p> <ul> <li><code>trex Subscriber</code> node'unun durumu kontrol edin (Triggered \u00e7\u0131k\u0131yor mu?)</li> <li>trexMes Edge'de Node-RED Connector eklentisi etkin mi?</li> <li><code>Event</code> alan\u0131ndaki isim trexMes'teki ile tam olarak e\u015fle\u015fiyor mu?</li> <li>Bu projede birden fazla <code>trex Subscriber</code> mi var? (Olmamal\u0131!)</li> </ul> <p>Ayn\u0131 olay\u0131 birden fazla ak\u0131\u015f i\u015fliyor</p> <p>Ayn\u0131 <code>Event</code> ismine sahip birden fazla <code>Business Events</code> node'u kullan\u0131rsan\u0131z hepsi tetiklenir. Bu davran\u0131\u015f bilin\u00e7li olmal\u0131d\u0131r.</p> <p>Custom Form \u00e7\u0131kt\u0131s\u0131 yok</p> <p>Custom Form kullan\u0131yorsan\u0131z Designer \u00e7\u0131kt\u0131s\u0131 <code>C:\\temp\\&lt;formname&gt;_form_design.xml</code> konumunda olmal\u0131d\u0131r. Kurulum sayfas\u0131ndaki Custom Form Designer b\u00f6l\u00fcm\u00fcne bak\u0131n.</p>"},{"location":"baslangic/kurulum/","title":"Kurulum","text":"<p><code>node-red-trexmes-service</code> paketinin Node-RED ortam\u0131na kurulmas\u0131 ve trexMes Edge ile entegrasyonu ad\u0131m ad\u0131m anlat\u0131lm\u0131\u015ft\u0131r.</p>"},{"location":"baslangic/kurulum/#gereksinimler","title":"Gereksinimler","text":"Bile\u015fen Minimum S\u00fcr\u00fcm A\u00e7\u0131klama Node.js 18.16 veya \u00fczeri LTS s\u00fcr\u00fcm\u00fc \u00f6nerilir Node-RED 3.0 veya \u00fczeri npm \u00fczerinden veya OS paketinden trexMes Edge G\u00fcncel s\u00fcr\u00fcm Node-RED konnekt\u00f6r eklentisi etkin olmal\u0131d\u0131r \u0130\u015fletim Sistemi Windows / Linux Custom Form Designer i\u00e7in Windows \u00f6nerilir"},{"location":"baslangic/kurulum/#adm-1-nodejs-dogrulamas","title":"Ad\u0131m 1 \u2014 Node.js Do\u011frulamas\u0131","text":"<p>Komut sat\u0131r\u0131nda Node.js s\u00fcr\u00fcm\u00fcn\u00fcz\u00fc kontrol edin:</p> <pre><code>node --version\n# v18.16.0 veya \u00fczeri olmal\u0131\n</code></pre> <p>Eski Node.js s\u00fcr\u00fcm\u00fc</p> <p>Paket i\u00e7indeki baz\u0131 ba\u011f\u0131ml\u0131l\u0131klar (<code>raw-body@3</code>, <code>multer</code>, <code>cookie@0.7</code>) eski Node.js s\u00fcr\u00fcmlerinde \u00e7al\u0131\u015fmaz. Mutlaka 18.16+ kullan\u0131n.</p>"},{"location":"baslangic/kurulum/#adm-2-node-red-kurulumu","title":"Ad\u0131m 2 \u2014 Node-RED Kurulumu","text":"<p>E\u011fer hen\u00fcz Node-RED kurulu de\u011filse:</p> Windows / Linux / macOSWindows (y\u00f6netici) <pre><code>npm install -g --unsafe-perm node-red\n</code></pre> <pre><code>npm install -g node-red\n</code></pre> <p>Kurulumdan sonra ba\u015flat\u0131n:</p> <pre><code>node-red\n</code></pre> <p>Taray\u0131c\u0131dan <code>http://localhost:1880</code> adresine giderek aray\u00fcz\u00fc kontrol edin.</p>"},{"location":"baslangic/kurulum/#adm-3-paketi-kurma","title":"Ad\u0131m 3 \u2014 Paketi Kurma","text":""},{"location":"baslangic/kurulum/#yontem-a-palette-manager-uzerinden-onerilen","title":"Y\u00f6ntem A: Palette Manager \u00fczerinden (\u00f6nerilen)","text":"<ol> <li>Node-RED aray\u00fcz\u00fcnde sa\u011f \u00fcstteki men\u00fcden Manage palette'i a\u00e7\u0131n.</li> <li>Install sekmesine ge\u00e7in.</li> <li>Arama kutusuna <code>node-red-trexmes-service</code> yaz\u0131n.</li> <li>Install butonuna t\u0131klay\u0131n.</li> </ol>"},{"location":"baslangic/kurulum/#yontem-b-komut-satrndan","title":"Y\u00f6ntem B: Komut sat\u0131r\u0131ndan","text":"<p>Node-RED kullan\u0131c\u0131 klas\u00f6r\u00fcn\u00fcze gidin (genelde <code>~/.node-red</code> veya <code>C:\\Users\\&lt;kullanici&gt;\\.node-red</code>):</p> <pre><code>cd ~/.node-red\nnpm install node-red-trexmes-service\n</code></pre> <p>Sonra Node-RED'i yeniden ba\u015flat\u0131n.</p>"},{"location":"baslangic/kurulum/#yontem-c-yerel-kaynak-klasorden","title":"Y\u00f6ntem C: Yerel kaynak klas\u00f6rden","text":"<p>Geli\u015ftirme/test ama\u00e7l\u0131 yerel klas\u00f6rden kurmak i\u00e7in:</p> <pre><code>cd ~/.node-red\nnpm install C:\\node-red-nodes\\node-red-trexmes-service\\nodes\n</code></pre>"},{"location":"baslangic/kurulum/#adm-4-kurulumu-dogrulama","title":"Ad\u0131m 4 \u2014 Kurulumu Do\u011frulama","text":"<p>Node-RED aray\u00fcz\u00fcnde sol paletin alt\u0131na bak\u0131n. <code>trexMes service</code> kategorisi alt\u0131nda a\u015fa\u011f\u0131daki node'lar\u0131 g\u00f6rmelisiniz:</p> <ul> <li><code>trex Subscriber</code></li> <li><code>Business Events</code>, <code>System Events</code>, <code>Communication Events</code>, <code>Display Events</code>, <code>Form Events</code></li> <li><code>Display Methods</code>, <code>Method Returns</code>, <code>Responser</code></li> <li><code>Custom Form</code>, <code>Form Bind Controls</code>, <code>Control Properties</code></li> <li><code>Button Configurator</code>, <code>Main Form Action</code></li> <li><code>Method Invoker</code>, <code>Execute Process</code>, <code>Execute Script</code></li> <li><code>Handle Setter</code>, <code>LLM Flow Builder</code></li> </ul> <p>Paket ba\u015far\u0131yla kuruldu</p> <p>Yukar\u0131daki node'lar paletinizde g\u00f6r\u00fcn\u00fcyorsa kurulum tamamlanm\u0131\u015f demektir. H\u0131zl\u0131 Ba\u015flang\u0131\u00e7 ile devam edebilirsiniz.</p>"},{"location":"baslangic/kurulum/#adm-5-trexmes-edge-taraf","title":"Ad\u0131m 5 \u2014 trexMes Edge Taraf\u0131","text":"<p>Node-RED taraf\u0131ndaki paket tek ba\u015f\u0131na yetmez. trexMes Edge panel yaz\u0131l\u0131m\u0131nda Node-RED konnekt\u00f6r eklentisinin etkin oldu\u011fundan emin olun:</p> <ol> <li>trexMes Edge yap\u0131land\u0131rma ekran\u0131n\u0131 a\u00e7\u0131n.</li> <li>Plugins sekmesinden Node-RED Connector'\u0131 aktif edin.</li> <li>Node-RED sunucusunun IP ve port bilgisini panele tan\u0131t\u0131n (varsay\u0131lan: <code>http://&lt;node-red-host&gt;:1880</code>).</li> <li>Paneli yeniden ba\u015flat\u0131n.</li> </ol> <p>Ba\u011flant\u0131 kontrol\u00fc</p> <p>Ak\u0131\u015f\u0131 deploy edip <code>trex Subscriber</code> node'unun durum \u00e7ubu\u011funu (status) kontrol edin. Ye\u015fil \"Triggered\" etiketi g\u00f6r\u00fcyorsan\u0131z panel ile ba\u011flant\u0131 sa\u011flanm\u0131\u015f demektir.</p>"},{"location":"baslangic/kurulum/#custom-form-designer-istege-bagl","title":"Custom Form Designer (\u0130ste\u011fe Ba\u011fl\u0131)","text":"<p><code>Custom Form</code> node'unda XML-tabanl\u0131 form tasar\u0131mc\u0131s\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilmek i\u00e7in Windows \u00fczerinde bir <code>customFormDesigner.exe</code> yard\u0131mc\u0131s\u0131 gerekir. Bu yolu Node-RED <code>settings.js</code> dosyas\u0131nda global context olarak tan\u0131t\u0131n:</p> <pre><code>// ~/.node-red/settings.js\nfunctionGlobalContext: {\n customFormDesignerPath: \"C:\\\\trex\\\\tools\\\\customFormDesigner.exe\"\n},\n</code></pre> <p>Designer \u00e7al\u0131\u015ft\u0131\u011f\u0131nda \u00e7\u0131kt\u0131 \u015fu konuma yaz\u0131l\u0131r:</p> <pre><code>C:\\temp\\&lt;filename&gt;_form_design.xml\n</code></pre>"},{"location":"baslangic/kurulum/#guncelleme","title":"G\u00fcncelleme","text":"<p>Paketi g\u00fcncellemek i\u00e7in:</p> <pre><code>cd ~/.node-red\nnpm update node-red-trexmes-service\n</code></pre> <p>Veya Palette Manager \u2192 Nodes sekmesinden g\u00fcncel s\u00fcr\u00fcm\u00fc kontrol edin.</p>"},{"location":"baslangic/kurulum/#kaldrma","title":"Kald\u0131rma","text":"<pre><code>cd ~/.node-red\nnpm uninstall node-red-trexmes-service\n</code></pre> <p>Ak\u0131\u015flarda kullan\u0131lan node'lar</p> <p>Paketi kald\u0131rmadan \u00f6nce, kullanan t\u00fcm ak\u0131\u015flar\u0131 durdurun veya silin. Aksi takdirde Node-RED yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda \"Missing types\" hatas\u0131 al\u0131rs\u0131n\u0131z.</p>"},{"location":"baslangic/kurulum/#sorun-giderme","title":"Sorun Giderme","text":"Sorun \u00c7\u00f6z\u00fcm Paket palette'te g\u00f6r\u00fcnm\u00fcyor Node-RED'i yeniden ba\u015flat\u0131n (<code>Ctrl+C</code> ve <code>node-red</code>) \"Missing type: trex Subscriber\" Paket y\u00fcklenmemi\u015f olabilir; <code>npm list</code> ile kontrol edin <code>cookie@0.7.2 not found</code> Node.js s\u00fcr\u00fcm\u00fcn\u00fcz\u00fc 18.16+'a y\u00fckseltin Olay node'lar\u0131 trigger alm\u0131yor trexMes Edge'de Node-RED Connector eklentisini kontrol edin Custom Form designer \u00e7al\u0131\u015fm\u0131yor <code>settings.js</code> i\u00e7inde <code>customFormDesignerPath</code> tan\u0131m\u0131n\u0131 kontrol edin"},{"location":"baslangic/mesaj-yapisi/","title":"Mesaj (msg) Yap\u0131s\u0131","text":"<p>Bu sayfa, <code>node-red-trexmes-service</code> node'lar\u0131 aras\u0131nda dola\u015fan <code>msg</code> nesnesinin anatomisini, \u00fcretilen <code>operationtype</code> de\u011ferlerini ve <code>dataType</code> (msg/flow/global/...) \u00e7\u00f6z\u00fcmlemesini detayl\u0131 a\u00e7\u0131klar.</p>"},{"location":"baslangic/mesaj-yapisi/#temel-yaklasm","title":"Temel Yakla\u015f\u0131m","text":"<p>Pakette t\u00fcm form/aksiyon node'lar\u0131 ayn\u0131 s\u00f6zle\u015fmeyi kullan\u0131r:</p> <ol> <li>Giri\u015f: \u00d6nceki node'dan gelen <code>msg.payload</code> ya bir array ya da scalar olabilir.</li> <li>\u00c7\u0131k\u0131\u015f: <code>msg.payload</code> her zaman bir array'dir; node kendi operasyonunu sona ekler.</li> </ol> <pre><code>flowchart LR\n A[msg.payload&lt;br/&gt;any] --&gt; N[Node X]\n N --&gt; B[msg.payload&lt;br/&gt;= prevOps + newOp]\n\n style N fill:#ccffcc,color:#000</code></pre>"},{"location":"baslangic/mesaj-yapisi/#giris-cozumleme-sozlesmesi","title":"Giri\u015f \u00c7\u00f6z\u00fcmleme S\u00f6zle\u015fmesi","text":"<p>Her node \u015fu Standart blo\u011fu \u00e7al\u0131\u015ft\u0131r\u0131r:</p> <pre><code>let payload = msg.payload;\nlet receiveddata = null;\n\nif (Array.isArray(payload)) {\n // \u00d6nceki bir form/event node'undan zincirleme geliyor\n if (payload.length &gt; 0 &amp;&amp; payload[0].receiveddata !== undefined) {\n receiveddata = msg.payload[0].receiveddata;\n }\n} else {\n // \u0130lk giri\u015fte (Event node'undan gelir)\n receiveddata = msg.payload;\n msg.payload = []; // &lt;-- yeniden array yap\u0131l\u0131r\n}\n</code></pre> <p><code>receiveddata</code> nedir?</p> <p>Panelden gelen ham olay verisini ta\u015f\u0131yan de\u011ferdir. Zincirin ilk eleman\u0131nda bir kez set edilir; sonraki t\u00fcm operasyonlara aktar\u0131l\u0131r. Panel taraf\u0131 bu veriyi karar mant\u0131\u011f\u0131nda kullan\u0131r.</p>"},{"location":"baslangic/mesaj-yapisi/#operasyon-format","title":"Operasyon Format\u0131","text":"<p>Her node <code>msg.payload</code> array'ine bir operation object ekler. En s\u0131k kar\u015f\u0131la\u015faca\u011f\u0131n\u0131z alanlar:</p> Alan Tip A\u00e7\u0131klama <code>operationtype</code> string \u0130\u015flem t\u00fcr\u00fc (zorunlu) <code>name</code> string Hedef form / kontrol ad\u0131 <code>receiveddata</code> any Orijinal olay verisi <code>value</code> any \u0130\u015fleme \u00f6zg\u00fc de\u011fer <code>customformxml</code> string Form XML'i (Custom Form i\u00e7in) <code>bindcontrols</code> array Ba\u011flanacak kontroller listesi <code>continueevent</code> string|bool Sonraki event ak\u0131\u015f\u0131 kontrol\u00fc <code>message</code> string Method ismi / script kodu <code>isstyled</code> boolean Form stillendirildi mi?"},{"location":"baslangic/mesaj-yapisi/#butun-operationtype-degerleri","title":"B\u00fct\u00fcn <code>operationtype</code> De\u011ferleri","text":"<p>Pakette 11 farkl\u0131 operationtype \u00fcretilir:</p> CustomDialogMainFormBindControlControlPropertiesUIButtonConfigTriggerMainMethodInvokerProcessExecuteProcessExecuteScriptTrexEventHandler <p>\u00dcreten: <code>Custom Form</code> (formainform=<code>false</code>) Anlam\u0131: Panelde yeni bir modal/dialog form a\u00e7.</p> <pre><code>{\n \"operationtype\": \"CustomDialog\",\n \"receiveddata\": { /* event data */ },\n \"name\": \"OrderEntryForm\",\n \"continueevent\": \"Continue\",\n \"customformxml\": \"&lt;form&gt;...&lt;/form&gt;\",\n \"isstyled\": true\n}\n</code></pre> <p>\u00dcreten: <code>Custom Form</code> (formainform=<code>true</code>) Anlam\u0131: Panelin ana formunu yeni i\u00e7erikle g\u00fcncelle.</p> <pre><code>{\n \"operationtype\": \"MainForm\",\n \"receiveddata\": { /* event data */ },\n \"name\": \"OrderEntryForm\",\n \"continueevent\": \"Break\",\n \"customformxml\": \"&lt;form&gt;...&lt;/form&gt;\",\n \"isstyled\": true\n}\n</code></pre> <p>\u00dcreten: <code>Form Bind Controls</code> Anlam\u0131: Form \u00fczerindeki kontrollere veri ba\u011fla.</p> <pre><code>{\n \"operationtype\": \"BindControl\",\n \"receiveddata\": { /* event data */ },\n \"name\": \"OrderEntryForm\",\n \"bindcontrols\": [\n { \"Name\": \"txtOrderNo\", \"FieldName\": \"orderNo\" },\n { \"Name\": \"txtCustomer\", \"FieldName\": \"customer\" }\n ],\n \"value\": { \"orderNo\": \"ORD-001\", \"customer\": \"ACME\" }\n}\n</code></pre> <p>\u00dcreten: <code>Control Properties</code> Anlam\u0131: Kontrollerin g\u00f6rsel/i\u015flevsel \u00f6zelliklerini ayarla.</p> <pre><code>{\n \"operationtype\": \"ControlProperties\",\n \"receiveddata\": { /* event data */ },\n \"name\": \"OrderEntryForm\",\n \"value\": [\n { \"ControlName\": \"btnSubmit\", \"PropertyName\": \"Enabled\", \"Value\": true },\n { \"ControlName\": \"lblTitle\", \"PropertyName\": \"Text\", \"Value\": \"Yeni Sipari\u015f\" }\n ]\n}\n</code></pre> <p>\u00dcreten: <code>Button Configurator</code> Anlam\u0131: Form \u00fczerindeki butonlar\u0131n g\u00f6r\u00fcn\u00fcm/davran\u0131\u015f\u0131n\u0131 yap\u0131land\u0131r.</p> <pre><code>{\n \"operationtype\": \"UIButtonConfig\",\n \"receiveddata\": { /* event data */ },\n \"value\": [\n {\n \"ButtonIndexType\": 0,\n \"DefaultCaption\": \"Kaydet\",\n \"IsVisible\": true,\n \"IsToOverrideDefaultHandler\": true,\n \"ComponentName\": \"btnSave\"\n }\n ]\n}\n</code></pre> <p>\u00dcreten: <code>Main Form Action</code> Anlam\u0131: Ana formdaki bir butonu tetikle.</p> <pre><code>{\n \"operationtype\": \"TriggerMain\",\n \"receiveddata\": { /* event data */ },\n \"name\": \"3\"\n}\n</code></pre> <p>\u00dcreten: <code>Method Invoker</code> Anlam\u0131: Panel taraf\u0131ndaki bir method'u \u00e7a\u011f\u0131r.</p> <pre><code>{\n \"operationtype\": \"MethodInvokerProcess\",\n \"receiveddata\": { /* event data */ },\n \"name\": \"GetOrderDetails\",\n \"message\": \"OrderService.GetOrderDetails\",\n \"value\": [\n { \"ParameterName\": \"orderNo\", \"Value\": \"ORD-001\" }\n ]\n}\n</code></pre> <p>\u00dcreten: <code>Execute Process</code> Anlam\u0131: Panel taraf\u0131nda tan\u0131ml\u0131 bir process'i tetikle.</p> <pre><code>{\n \"operationtype\": \"ExecuteProcess\",\n \"receiveddata\": { /* event data */ },\n \"message\": \"ProductionStart\"\n}\n</code></pre> <p>\u00dcreten: <code>Execute Script</code> Anlam\u0131: Bir form \u00fczerinde script \u00e7al\u0131\u015ft\u0131r.</p> <pre><code>{\n \"operationtype\": \"ExecuteScript\",\n \"receiveddata\": { /* event data */ },\n \"name\": \"OrderForm\",\n \"message\": \"if(value &gt; 100) { btnAlert.Visible = true; }\"\n}\n</code></pre> <p>\u00dcreten: <code>Handle Setter</code> Anlam\u0131: Olay\u0131n handle edilip edilmedi\u011fini panele bildir.</p> <pre><code>{\n \"operationtype\": \"TrexEventHandler\",\n \"continueevent\": false\n}\n</code></pre>"},{"location":"baslangic/mesaj-yapisi/#datatype-cozumleme","title":"<code>dataType</code> \u00c7\u00f6z\u00fcmleme","text":"<p>Bir \u00e7ok node (<code>Form Bind Controls</code>, <code>Control Properties</code>, <code>Method Invoker</code>) parametre de\u011ferlerini farkl\u0131 kaynaklardan okuyabilir. Bu kaynak <code>dataType</code> ile belirtilir:</p> <code>dataType</code> Kaynak \u00d6rnek <code>msg</code> Ge\u00e7erli mesaj nesnesinden <code>msg.payload.orderNo</code> <code>flow</code> Flow context <code>flow.get(\"currentOrder\")</code> <code>global</code> Global context <code>global.get(\"config.companyName\")</code> <code>num</code> Sabit say\u0131 <code>42</code> <code>json</code> Sabit JSON <code>{\"a\":1}</code> <code>bool</code> Sabit boolean <code>true</code> / <code>false</code> <code>jsonata</code> JSONata ifadesi <code>$.items[price &gt; 100]</code>"},{"location":"baslangic/mesaj-yapisi/#cozumleme-mantg","title":"\u00c7\u00f6z\u00fcmleme Mant\u0131\u011f\u0131","text":"<pre><code>switch (item.dt) { // item.dt = dataType\n case 'msg':\n computedValue = RED.util.getMessageProperty(msg, item.d);\n break;\n case 'flow':\n computedValue = node.context().flow.get(item.d);\n break;\n case 'global':\n computedValue = node.context().global.get(item.d);\n break;\n case 'num':\n computedValue = Number(item.d);\n break;\n case 'json':\n try { computedValue = JSON.parse(item.d); }\n catch (e) { computedValue = null; }\n break;\n case 'bool':\n computedValue = item.d === 'true';\n break;\n case 'jsonata':\n let expr = RED.util.prepareJSONataExpression(item.d, node);\n RED.util.evaluateJSONataExpression(expr, msg, /* callback */);\n break;\n}\n</code></pre>"},{"location":"baslangic/mesaj-yapisi/#continueevent-davrans","title":"<code>continueevent</code> Davran\u0131\u015f\u0131","text":"<p><code>continueevent</code> alan\u0131, panele \"bu form/olay sonras\u0131nda ak\u0131\u015f nas\u0131l ilerlesin?\" sorusunu cevaplar.</p> De\u011fer Anlam\u0131 <code>\"Continue\"</code> Form kapat\u0131ld\u0131\u011f\u0131nda ak\u0131\u015f devam etsin <code>\"Break\"</code> Ak\u0131\u015f burada dursun <code>true</code> / <code>false</code> <code>Handle Setter</co