Skip to content

Token Gen Protocol

Reference: ACP-1 Protocol (GitHub)

Table of Contents

OVES Omni-Pay™ System Overview

This document explains the functionality and requirements for implementing a One-Time-Passcode system for off-grid energy systems and appliances.

Interoperable Protocol

The purpose is to support interoperability between Pay-As-You-Go (PAYG) operators and OVES Products.

Participants:

  • The User — Installs products at home and uses them daily. Many users desire limited down-payment and credit balance (PAYG).
  • The Merchant — Sells products on credit with a Payment Plan, collects payments. Mobile money and product intelligence enable automated payment and credit controls.

"PAYG-Ready" Concept

PAYG-Ready Products can function as normal off-grid energy products and have the additional ability to de-activate and activate via encryption technology. Usage is typically measured in time periods. The interface between Credit and Usage is managed by the PAYG operator (C2U conversion).

OVES Omni-Pay™ System

At the core is a code-controlled timer that can securely switch off output power once allocated time runs out. Each product timer is assigned a unique "receptor" code. OVES Omni-Pay™ uses a proprietary 21-digit numeric message format.

OVES PAYG-Ready System Architecture

Definitions

Term Definition
Activation Command Protocol Commands must follow pre-defined rules for product interpretation
Activation Control Protocol (ACP™) OVES uniform command interface. ACP-1 implements 21-digit Days-of-Usage structure
C2U Conversion Conversion between Credit and Physical Usage
Omni-Lock™ Unique digital locking assigned at manufacturing
Payment Plan Contract between Merchant and User specifying payment details

OVES Product Activation Protocol V.1 (ACP-1)

ACP-1 is a plain-text command with three parts:

  • PAYG-Ready Product Interface (PPI) — How the product receives and reacts to passcode input
  • Code Generator Interface (CGI) — Software for generating PAYG passcodes
  • Binding — One-time initialization binding Code Generator and Product at manufacturing

ACP-1 Description

  • Activate product (ENABLED)
  • Deactivate product (DISABLED)
  • Set permanently enabled (FREE) or back to PAYG mode

ACP-1 uses SHA-1 based OTP (RFC-2289, S/Key scheme):

  • One-time, one-product
  • Secure: no 3rd party can issue OTP without access to the secret Seed

System Constants

Constant Definition Value Generator Parser
Hash Chain Length Steps between hash_top and hash_root 100,000 YES NO
Max Hash Jump Parser match limit 1,096 YES YES

OTP Generation

Input: number of days to add (hash_jump). State variables: hashRoot, hashIndex.

$otp_hash_hex = OTP_hex($PAYG_security_hash_root, $current_hash_index, $hash_jump);
$otp_hash_formatted = dec_str_padding_low_high($otp_hash_hex);

OTP Simulator

https://omnivoltaic.com/otp_simulator/ — Password: @otp101master_ACC

Simulates: Product–Key binding, server passcode generation, product code acceptance and count-down.

OVES Omni-Pay PAYG Top-Up Logic

Top-Up Schemes

  1. Scheme I — Positive AND Negative Credit Carry-Over (no forgiveness)
  2. Scheme II — Positive Credit Carry-Over, Negative Cleared (forgiving)
  3. Scheme III — No Carry Over (rental model)

Key Variables

  • TUV — Top-up Value (days to add)
  • CDT — Credit Day Timer (remaining days)
  • St, Et — Credit Start/End timestamps

ACP-1 Implementation (PHP)

Requires PHP 4+ for sha1 function. See GitHub repository for full implementation.

Product Data Exchange Protocol V.1 (DEP-1)

DEP-1 enables read/write to OVES devices:

  • FDL (Functional Device Layer) — Synchronous single-frame data exchange (SMBus, RS485, IR, NFC, Bluetooth)
  • ECL (External Communication Layer) — Asynchronous JSON over Internet/mobile

ECL Request Example

{
  "PROT": "DEP-1",
  "RQT": "R",
  "RQID": 0000,
  "array": [
    {"N": "OPID"},
    {"N": "PPID"},
    {"N": "ALL"}
  ]
}

Device Parameter Dictionary

Abbreviation Parameter Type R/W
OPID OEM_Product_ID String R
PPID PAYG_Product_ID String R
PS PAYG_State bool R
RPD Remaining_PAYG_Days integer R
RSOC Relative_SOC uint R

Keypad Code Entry

Numeric codes only. After last number, press #. 3rd LED flickers for valid code; all 3 flicker for rejected code.