OCPP loglarında [4, ...] ile başlayan bir satır gördüğünüzde, bir mesajın karşı tarafça işlenemediğini anlarsınız. Bu mesaj tipine CALLERROR denir. Bir CALLERROR, iş kuralı reddinden (örneğin geçersiz kart) farklıdır; mesajın kendisinde veya işlenmesinde teknik bir sorun olduğunu gösterir. Bu yazıda standart hata kodlarını ve her biri için ilk bakılacak yeri anlatıyoruz.

CALLERROR'un yapısı

Bir CALLERROR beş elemanlı bir dizidir: mesaj tipi (4), isteğin MessageId'si, hata kodu, kısa açıklama ve ayrıntı nesnesi. Örnek:

[4, "a1b2c3", "PropertyConstraintViolation", "connectorId out of range", {}]

Hata kodu, OCPP spesifikasyonunda tanımlı sabit bir listeden seçilir. Açıklama ve ayrıntılar ise uygulamaya özeldir; sorunu anlamak için genellikle en değerli bilgi açıklama alanındadır.

Standart hata kodları

NotImplemented

İstenen işlem karşı tarafta hiç tanımlı değildir. Örneğin eski bir cihaza TriggerMessage gönderdiğinizde bu cevabı alabilirsiniz. Çözüm: cihazın desteklediği profilleri kontrol edin ya da bu işlemi o cihaz için kullanmayın.

NotSupported

İşlem tanınıyor ama desteklenmiyor. Pratikte NotImplemented ile benzer şekilde ele alınır. Örneğin cihaz Smart Charging profilini desteklemiyorsa SetChargingProfile isteğine bu cevabı verebilir.

InternalError

Karşı taraf mesajı anladı ama işlerken içeride bir hata oluştu. Bu genellikle bir yazılım hatasıdır. Tekrarlanıyorsa cihaz üreticisine veya yazılım sağlayıcısına log örneğiyle birlikte bildirin.

ProtocolError

Mesaj OCPP kurallarına uymuyor; örneğin yük eksik ya da dizi yapısı bozuk. Ham JSON'u inceleyin; çoğu zaman bir alanın eksik olması veya fazladan virgül gibi basit bir sorundur.

SecurityError

İşlem güvenlik nedeniyle reddedildi. Örneğin cihaz, yetkisi olmayan bir işlem isteği aldığında ya da kimlik doğrulama tamamlanmadan mesaj gönderildiğinde görülebilir.

FormationViolation

Yük sözdizimi açısından hatalı; JSON ayrıştırılamıyor veya beklenen yapıya uymuyor. Kendi entegrasyonunuzu yazıyorsanız JSON üretimini kontrol edin.

PropertyConstraintViolation

Bir alanın değeri kurallara uymuyor; örneğin var olmayan bir konnektör numarası veya izin verilen listede olmayan bir durum değeri.

OccurrenceConstraintViolation

Zorunlu bir alan eksik ya da bir alan izin verilenden fazla kez kullanılmış.

TypeConstraintViolation

Alanın tipi yanlış; örneğin sayı beklenen yerde metin gönderilmiş ("connectorId": "1" yerine "connectorId": 1 olmalı).

GenericError

Diğer kodlara uymayan genel hata. Açıklama alanına bakmak şarttır.

OCPP 2.0.1 ve 2.1'de bu listeye MessageTypeNotSupported ve RpcFrameworkError gibi birkaç ek kod da gelmiştir; ayrıca bazı adlar küçük farklarla yazılır (örneğin FormatViolation). Mantık aynıdır.

CALLERROR ile iş reddi arasındaki fark

Bu ayrım, sahada en çok karıştırılan konudur. Bir RFID kart tanınmadığında CSMS CALLERROR göndermez; CALLRESULT içinde "idTagInfo": {"status": "Invalid"} döner. Bir uzaktan başlatma isteği cihaz meşgul olduğu için uygulanamıyorsa cevap "status": "Rejected" olur. Yani:

  • CALLERROR: "Mesajını işleyemedim."
  • CALLRESULT + Rejected/Invalid: "Mesajını anladım ama isteğini kabul etmiyorum."

Bu ayrımı bilmek, sorunun teknik bir uyumsuzluk mu yoksa iş kuralı mı olduğunu hemen anlamanızı sağlar.

Sık karşılaşılan senaryolar

  • Yeni cihaz bağlandı, bazı komutlar NotImplemented dönüyor: Cihaz bazı isteğe bağlı profilleri desteklemiyor. Panelden bu komutları o model için devre dışı bırakmak en temiz çözümdür.
  • Firmware güncellemesinden sonra FormationViolation hataları başladı: Üretici, bir alanı farklı biçimde göndermeye başlamış olabilir. Güncelleme öncesi ve sonrası logları karşılaştırın.
  • Belirli bir konnektörde PropertyConstraintViolation: Panelde tanımlı konnektör sayısı ile cihazın bildirdiği sayı uyuşmuyor olabilir.

Konnektörlerin durum hatalarını (örneğin Faulted ve errorCode değerlerini) ise OCPP hata kodları rehberimizde ayrıca ele aldık. Mesaj zarfının genel yapısı için OCPP mesaj yapısı yazısına bakabilirsiniz.

Hızlı teşhis için öneriler

Her CALLERROR'u, ilgili CALL mesajıyla birlikte saklayın. Hata kodu, işlem adı ve cihaz modeli bazında istatistik tutmak, hangi modelde hangi sorunun yoğunlaştığını gösterir. Üreticy'nin OCPP yazılımı, tüm OCPP trafiğini aranabilir loglarda tutar; bir konnektör veya cihaz için yalnızca hataları filtreleyerek hızlıca inceleyebilirsiniz.

Sonuç

CALLERROR, OCPP haberleşmesinde teknik bir sorunun habercisidir. Hata kodunu ve açıklamasını birlikte okumak, sorunun mesaj formatında mı, desteklenmeyen bir işlemde mi yoksa karşı tarafın iç hatasında mı olduğunu kısa sürede ortaya koyar.