15 Ekim 2016 Cumartesi

ZİMBRA Mail Sistemi Veri Kurtarma-01

Zimbra Mail Server Üzerinden Veri Kurtarma Hakkında;

Zimbra Mail sistemi, bilenen diğer mail sistemlerinin aksine, parçalı bir yapıda mailleri saklamakta ve yönetilmesini sağlamaktadır. (Kendi adıma bu şekilde olmasını beğeniyorum.) Bu parçalı yapı, başlık bilgileri olarak kullanılan bilgiler MySql database i ve mailin kendisini bir dosya olarak kullanıcı için tanımlanan dizinin altında saklayan bir yapıdır. Hal böyle olunca felaket anlarında geri dönüşler görece daha rahat olabilmektedir.

Bir felaket anı kurgusu olarak, mail sisteminizin çoktüğü anda en yakın yedeğinizin 1 gün önce olduğunu varsayalım. Yedekten dönüş yaptığınızda, yedek alınan an ile sistemin çöktüğü an arasındaki maillerin posta kutusunda olmadığını göreceksiniz.

Böyle bir sorun kaşlısında, çöken sistemde, maillerin kaydedildiği yeri seçerek, yedek alınan tarihten sonra değişiklik olmuş tüm dosyaları aratıp, dışarıya kopyalayınız.

Sonrasında, çalışan mail sisteminize bir dizin açarak (ki hem root hem zimbra ulaşabilmelidir bu dizine) dosyaları buraya kopyalayın.

Kendi posta kutunuzda (Örnek x@y.com.tr olsun) Zimbra Mail ekranında, "Gelen Kutusu" altına bir dizin açın örnek olarak "YEDEK"

Artık yapmanız gereken tek şey, aldığınız dosyaların olduğu dizine komut satırı ile girmek ve

for i in * ; do zmmailbox -z -m x@y.com.tr addMessage /inbox/YEDEK $i ; done
 
 
Zimbra posta kutunuzda açtığınız "YEDEK" dizini altına bu maillerin geldiğini göreceksiniz.


Zimbrada dışarıdaki ham mail dosyalarını *.msg bir posta kutusunun içine import etmek içinde bu bu komut kullanılabilir.

zmmailbox -z -m x@y.com.tr /addMessage /inbox 012312312.msg 

11 Ekim 2016 Salı

Linux İşletim Sisteminde, Farklı bir VLAN a ulaşamamak 01;

Linux İşletim Sisteminde, Farklı bir VLAN a ulaşamamak;

Linux'un yeni dağıtımlarında güvenlik seviyesi bir kademe daha arttırıldığı için, Linux işletim sisteminin bağlı olduğu VLAN'dan farklı bir VLAN'a ulaşmada sıkıntı yaşanabilmektedir.

Bunun için IPTABLES ayarları yada Firewalld ayarlarının yapılmasının yanınıda daha basit bir yöntemden burada bahsedeceğim.

Örneğin, 192.168.0.x network üzerindesiniz ve 192.168.5.x networke (ağ geçitiniz ve diğer ayarlarınız doğru olmasına rağmen) ulaşamıyorsunuz (ping atamıyorsunuz). Yapmanız gereken, Linux işletim sistemini 192.168.5.x lie networke dahil edip bu networkteki bir IP'ye bir kere ping atmak, sonrasında o IP dende bir kere Linux işletim sistemine ping atmaktır. Bu işlem sonrasında, Linux işletim sisteminizi tekrar 192.168.0.x li VLAN a aldığınızda artık, 192.168.5.x li networke ulaşabildiğinizi göreceksiniz.

Selamlar.

MAKEL ELEKTRİK SAYACI VERİ OKUMA (RS 485)

MAKEL ELEKTRİK SAYACI VERİ OKUMA (RS 485)

Merhaba,

Yine gündelik hayatta pek kullanmadığımız ancak ihtiyacımız olduğunda bulunması zor olan bir konuyu yazmaya çalışacağım.

İşletmlerede maliyetin büyük bir kısmını enerji tüketimleri oluşturmaktadır. Bu durumda enerji tüketiminin en iyi şekilde takibi ve kayıt altına alınması bir yerden sonra zorunluluk halini almıştır. Burada MAKEL marka elektrik sayaçlarından, C# kodu üzerinden nasıl veri alındığına biraz değineceğim.

İlkin, kabaca RS485 seri port iletişiminden bahsetmekte fayda var. RS485 seri port iletişimi, bir hat üzerinden birden fazla nokta ile iletişimimizi sağlayan bir teknolojiye sahiptir. Genel prensip olarak, iki tel arasında gönderilen sinyaller, bağlı olan tüm cihazlara gider. Cihazlardan hangisi ile iletişim kurulacak ise o cihazın "numarası" gönderilen bilginin içinde olduğunda, ilgili cihaz kendisi ile iletişim kurulmak istendiğini anlar ve kendisinden istenen bilgileri gönderir, yada yapar.

Hemen hemen her bilgisayarda en az 1 adet seri port vardır. Olmasa bile RS485 seri port kartları bulunabiliyor. Ancak ben bu kartlar yerine RS485 to Ethernet çeviricileri tercih ediyorum. Bu sayede network alt yapınız üzerinden bu bilgileri toplama imkanınız oluyor. Bu çeviricilerin genel olarak bir IP adresi üzerinden ara yüzüne bağlanıyorsunu ve burada yaptığınız ayarlarla verdiğiniz IP üzerinden bilgisayarınıza kurduğunuz (çeviricinin programı ile) program ile sanal portlar yaratıp bu portlar üzerinden veri okuyabiliyorsunuz. Burada dikkat edilecek nokta, 7 Bit + 1 Stop Bit ve "EVENT" ayarlarının yapılması (RS485 ayar ekranına girdiğinizde bunları seçenekler içinde görebilirsiniz)

Artık COM portumuzda olduğuna göre, kod ile veri okumaya başlayabiliriz.

C# kodları ile okumak için

                        serialPort1.Close(); //Seripart objesini ne olur ne olmaz diye kapatıyoruz.
                        serialPort1.BaudRate = 300; //bound rate 300 yapıyoruz, ilk iletişim için zorunlu
                        serialPort1.PortName = "COM2"; //iletişim kurulacak port numarasını yazıyoruz.
                        serialPort1.Open(); //seri portu açıyoruz.

Buraya kadar, ilk letişim için 300 bpd ile bağlantı yapılıyor. Şimdi okuyacağımız sayacın olup olmadığına bakacağız.

      if (serialPort1.IsOpen) //Port açık ise işlemleri yap
                        {
                            Thread.Sleep(100); //biraz bekle
                            serialPort1.Write("/?MSY" + sayacSeriNo + "!"); //sayacSerino=okumak istediğiniz //sayacın üzerindeki seri numarasıdır. Bu işlemler bu bilgiyi RS485 üzerinden gönderiyoruz.
                            serialPort1.Write("\r\n"); // satır başı

                            Thread.Sleep(200); //az biraz bekle
                            int read = 0;
                            int shouldRead = readData1.Length;
                            int len;
                            while (read < shouldRead)
                            {
                                len = serialPort1.Read(buffer, 0, readData1.Length); //Eğer RS485 üzerinde cihazımız var ise burada bize seri numarasını göndermiş olmalı eğer bu satırı geçemiyorsak okuma yapamıyoruzdur.
                                if (len == 0)
                                    continue;
                                Array.Copy(buffer, 0, readData1, read, len);
                                read += len;
                                string Baslik = HexString2Ascii(BitConverter.ToString(readData1).Replace("-", string.Empty)); //okuduğumuuz bilyi bir string değişkene aldırk
                                //System.Threading.Thread.Sleep(250);
                            }

                            serialPort1.Write(char.ConvertFromUtf32(6) + "057"); //kontrol için gönderiliyor, bu bilgiyi gönderdiğimizde bize üzerindeki tüm bilgileri dökmeye hazır duruma gelmeli
                            serialPort1.Write("\r\n" + char.ConvertFromUtf32(6) + "057");
                            serialPort1.Write("\r\n");

                            serialPort1.Close(); //300 bps ile olan bağlantıyı kapatıyoruz.

                            serialPort1.BaudRate = 9600; //9600 bps e ayarlıyoruz.
                            serialPort1.Open(); // tekrar açıyoruz.

                            serialPort1.DtrEnable = true; //DTR özelliğini açıyoruz.

                            readData1 = new byte[6566]; // alınacak data boyutunu en yüksek seviyeye ayarlıyoruz.
                            buffer = new byte[6566];
                            int read2 = 0;
                            int shouldRead2 = readData1.Length;

                            int k = 1;
                            serialPort1.ReadTimeout = 10000; //Okuma için time out belirliyoruz.
                            for (int m = 0; m < k; m++)
                            {
                                //if (txtAyrinti.Text.Contains('!'))
                                //{
                                //    break;
                                //}                              

                                string[] d = Regex.Split(txtAyrinti.Text, "\r");
                                try
                                {
                                     string Bilgiler += serialPort1.ReadLine() + "\r\n"; //gelmiş olan bilgileri satır satır okuyoruz.
                                }
                                catch (Exception ex)
                                {
                                    break;
                                }
                                k = d.Length;
                               }


Bu yöntem ile MAKEL üzerindeki tüm bilgileri bir kerede çekerek gelen bilgileride IEC 62056-21 standartına göre değerlendirerek kullanabilirsiniz.

Kolay gelsin.

NOT: Kodlar yazılan bir örnekten alınmıştır, örnek çalışıyor ancak aktarırken hata yapılmış olabilir, çalışmayan yer olursa bir miktar uğraşmanız gerekebilir.