Token Gen Protocol¶
Reference: ACP-1 Protocol (GitHub)
Table of Contents¶
- OVES Omni-Pay™ System Overview
- OVES PAYG-Ready System Architecture
- OVES Product Activation Protocol V.1 (ACP-1)
- OVES Omni-Pay PAYG Top-Up Logic
- ACP-1 Implementation (PHP)
- Product Data Exchange Protocol V.1 (DEP-1)
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¶
- Scheme I — Positive AND Negative Credit Carry-Over (no forgiveness)
- Scheme II — Positive Credit Carry-Over, Negative Cleared (forgiving)
- 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.