by Intelliverse X

Reyeah / Ruiye JD: cabinet and Operator X guide

Open the illustrated installation atlas and cabinet checklist.

Identify Reyeah, preserve its configuration and verify the approved migration.

Instructional illustration; screens and device details vary. Follow the exact steps and approved release record below.

Use this for a confirmed Reyeah JD VMC and its Android head unit. It does not identify the manufacturer of a photographed cabinet, authorize replacing Silkron/Vendron, or make the Reyeah protocol interchangeable with ZHZN.

The cabinet runs com.ruiye.jd; Operator X runs separately on your phone. Reyeah's cabinet app talks to the controller using FF 00 55 frames and to Kiosk-X through /apk/* plus MQTT. Operator X manages the same cloud machine record through /api/v1/*. The inspected cabinet APK is 1.2.8/128; use the pinned download and verification record below. A verified signature is not physical-cabinet certification.

Version 1.2.8 removes the bundled gotoagent remote-control integration and advances the Android version code. It retains the earlier offline-report cache correction. Published from source d91b652379b46d2c1def6d9f3cc6bbcb677dc806 by CI run 33333140314; the public file was fetched and its manifest/signature/hash checked on September 7, 2026 (24,977,934 bytes).

1. Identify and record the cabinet

Record the printed cabinet model/serial, Android model/version/ABI, VMC model/firmware, the existing package/version/certificate, the serial reported on the kiosk and its Operator X machine number. The documented Reyeah board is RK3288, Android 7.1.2/API 25, 32-bit ARM. That is a known configuration, not a claim about every Reyeah cabinet.

The app reads a controller ID and uses it as equipmentNo. Do not substitute the Android debugging serial or invent a new machine number because the existing number belongs to another operator. Transfer the existing record through the platform's ownership procedure.

Read-only Android inventory, once the intended tablet is connected:

adb devices -l
KIOSK_ADB_SERIAL='REPLACE_WITH_THE_CONNECTED_ADB_SERIAL'
adb -s "$KIOSK_ADB_SERIAL" shell getprop ro.product.model
adb -s "$KIOSK_ADB_SERIAL" shell getprop ro.build.version.release
adb -s "$KIOSK_ADB_SERIAL" shell getprop ro.product.cpu.abilist
adb -s "$KIOSK_ADB_SERIAL" shell dumpsys package com.ruiye.jd

If the screen flickers, first establish whether it also flickers on Android Settings/boot screens. A cabinet APK update cannot establish or repair a panel/power/cable defect. Use the cabinet-specific diagnostic report before migrating software. Have the manufacturer technician inspect internal connections with the machine safely isolated; do not trial unfamiliar UART voltage levels or rewire while live.

2. Install or update the cabinet APK

Use Reyeah 1.2.8 / build 128, after matching the cabinet. Its SHA-256 is a428bd2a020f1985a02e7b08b39d84e6f01b64c5626f0b929e8543552e9181cd; the release certificate SHA-256 is d76b4ae53c8466ffaf04b93021507bf27d9c6ea44eb794ee7c6e70ddb91a6ffd. This pinned file is an identified release for bench/field acceptance, not a guarantee that every Reyeah cabinet works. Never install emulator/reyeah-jd-emulator.apk: its native serial implementation is a fake VMC. Never use an oldcloud or pristine vendor-reference APK for Kiosk-X operation.

For a cabinet already using the same Kiosk-X signing identity, in a service window with no payment, motor movement, update or unresolved report:

adb -s "$KIOSK_ADB_SERIAL" install -r 'reyeah-vending-kioskx-1.2.8-a428bd2a020f.apk'
adb -s "$KIOSK_ADB_SERIAL" shell am start -n com.ruiye.jd/com.ruiye.jd.ui.activity.SplashActivity

The stock vendor app shares the package name but has a different signer. First-time conversion requires a planned migration and an approved recovery copy of its configuration, serial binding and outstanding transactions. An uninstall removes local data; it is not a routine update instruction. Preserve the existing application until the migration is prepared. For a mismatch, obtain the correctly signed package or have the release owner supervise the conversion.

INSTALL_FAILED_NO_MATCHING_ABIS means the artifact does not match the Android CPU ABI. VERSION_DOWNGRADE means the versionCode is lower. Neither error is fixed by arbitrary reinstalling.

The APK needs the OEM ROM's serial-device permissions. Its port discovery and serial settings are controller-specific: source references /dev/ttyS1, /dev/ttyS0 and /dev/ttyS8; command traffic uses 9600 baud and firmware-related paths also reference 115200. These are evidence to compare with the actual cabinet, not instructions to force every port to the same speed or make all serial nodes world-writable. Do not run another vending driver against the same port.

3. Pair the cabinet with Operator X

  1. Give the cabinet a working network, correct clock and its approved Kiosk-X configuration. Confirm it is contacting the intended backend and reporting its actual controller serial. A product grid alone does not prove ownership or current connectivity.
  2. Sign in to Operator X on the operator's phone. Open Set up machine and enter/scan that exact serial. Select Claim machine under the correct operator account.
  3. Complete Locate using the structured address check, review/select the returned match and explicitly confirm it. At the actual cabinet, enter its exact machine number and placement and record the separate on-site installation declaration. A legacy label, map pin or geocoder match does not prove physical installation or postal deliverability. Verify venue time zone and the separate host revenue agreement. Follow the current address walkthrough.
  4. If fitted, complete the payment-reader setup using the reader's actual Device Number, including leading zeros, not its shorter Machine ID. Confirm the saved number is on this cabinet. The VMC/MDB wiring and payment account must also be configured.
  5. Assign each actual product, price, currency, age tier and lane capacity. Fill physically before confirming counts in Stock. Use a partial count for a partial fill.
  6. Check fresh presence, board readiness, enabled payment methods, stock and catalog. Complete the acceptance transactions below before Go live. Do not force incomplete checks green or bind a fake reader to satisfy a setup screen. Resolve a QR-only or other payment profile with the platform owner.

4. Manage products, prices and stock

In the machine's aisle list, identify the lane by its surveyed coil label if available; otherwise use the aisle number and verify the physical lane. − / + changes the count; Fill means filling to the saved maximum. These controls record stock; they do not load product into the cabinet. Wait for saves and refresh to confirm.

Verified Flutter Operator 3.2.1 (Android build 38 / Apple build 39) includes Machines → machine → aisle → Edit product & price for product name/code, price, age tier and lane availability. Image/category edits remain in the authorized web/API editor. The phone editor retains the currency from this machine's fresh inventory response and does not overwrite stock or unchanged availability. Confirm the refreshed cloud value and the cabinet's displayed product, checkout amount and reader amount before sale. A numeric price change does not change currency. See Operator platform and feature status.

Never leave a Reyeah sale lane at zero price. The OEM PayingPOP source takes the zero-total path directly to dispensing. Use an explicit supervised test command for service work; do not create a public zero-price product as a test shortcut. Use the lane availability control while servicing, and clear a fault only after the physical fault is fixed.

5. Cabinet service menu and test dispensing

On the normal kiosk screen, long-press the invisible top-right service hotspot. Enter the authorized cloud-managed cabinet PIN. The native manager screens provide device configuration, aisle configuration, VMC logs, offline orders and test dispensing. This PIN is different from Operator X login. Do not use default PINs copied from old documentation.

With no shopper present, a technician can run one known-lane test from the native menu. Prefer this supervised cabinet procedure during a repair. Authorized cloud commands also actuate real hardware; a queued command may execute later. The current Flutter phone releases have no test-vend button. Do not create repeated remote commands when the machine is silent; resolve its state and any existing command first. Save the command/order reference when using an approved supervised web workflow.

Reyeah remote commands use MQTT delivery. The vendor APK does not poll the generic Partner /commands/pending endpoint; older runbooks incorrectly promise that fallback. A queued/accepted command is not a completed drop. Observe the correct coil, exactly one product in the pickup compartment and its final command outcome. Do not repeatedly enqueue because a first command appears delayed.

6. Verify a sale and recover a failure

For each enabled payment method, select one stocked inexpensive product, verify price/currency, pay once, retain the order/processor reference, and observe exactly one correct product. In Operator X check the same machine/order, payment status, delivery evidence and exactly one stock decrement. Verify actual merchant settlement in the processor's own reports; the app's account label is not proof of deposit. A paid state alone is not successful delivery; a motor ACK alone does not prove the customer received the item.

For a controlled bench failed-vend case, retain the original order, observed outcome and device logs. Inspect Refunds and the order details. A failed vend does not establish that a refund happened:

Partial or disputed cash delivery

Example Operator refund queue: original cash and actual captured currency remain separate, and unresolved refund totals are unavailable.

Open the full-size example.

Actual web-app screen with synthetic example records. It is not a real shopper receipt or cabinet acceptance record. Enlarge the image to read the labels.

If a cash basket delivers only some items, its original reported cash amount stays on the order. Complete, matching unit counts restore only the reported undelivered stock and its original purchase cost. Missing, malformed or conflicting counts require reconciliation; they do not authorize another vend or an automatic stock restoration. A late receipt after ownership changes must not change the new owner's physical count.

A cash cart can have separate original orders for each lane while the firmware reports the whole cart under the first order number. Mismatched or multi-lane counts therefore remain under review: support must reconcile every original lane order against the actual stock and cash. Do not assume the first order's amount covers the cart, allocate the refund automatically, or issue another vend.

Use the newest Operator X release that supports Cash receipt needs review; older clients do not provide the partial-cash review queue or its amount warnings. When accounting says Cash delivery receipts are partial, unknown or conflicting, pause the affected lane, retain the order number and original device logs, count the actual remaining stock, and record what the shopper received and what cash was actually retained or returned. The accounting totals and the unresolved refund amount remain unavailable while this evidence is unresolved. A conflicting retry keeps the first accepted count; it does not settle the shopper's dispute.

Ask authorized support to reconcile the original order, stock/FIFO records and cash-return evidence. The current whole-order Refund action, including external-reference completion, cannot close an unresolved partial cash basket. An interrupted inventory write also requires review; resending the receipt will not apply the restoration again. Do not substitute the entire basket price for an unknown partial refund, mark it refunded without a real cash return, or create a replacement paid order to clear the warning.

7. Boot, outages and maintenance

The APK declares boot handling; verify real OEM auto-start after a cold reboot. Registration, service access, serial discovery, catalog and payment availability must all recover. Set the OEM's approved kiosk-launch policy; an installed package alone does not prove managed kiosk or silent OTA privileges.

For network loss, preserve local configuration and offline-order records. Source version 1.2.7 fixes the offline drain's shared HTTP-cache defect, but this audit did not simulate real payment/network recovery on a cabinet. Offline card selling depends on actual VMC/reader configuration and cached catalog; QR payment needs connectivity. Restore connectivity and reconcile every queued sale without repeating its vend. Do not clear storage to fix an outage.

For an update, retain the signing identity, stage a higher versionCode, validate the offered digest, and check the installed version and boot after completion. Pause a bad rollout and use an approved fix-forward build. An OTA offer or completed download is not proof Android installed it.

8. Acceptance record — complete for each cabinet

Record serial/model, VMC firmware, Android/ABI, APK hash/signer/version, Operator X build, backend release, date and technician. Mark each item pass / fail / not tested with evidence:

This audit verified artifact metadata and code, not these physical acceptance items. The ZHZN APK's separate reyeah_jd driver has a known no-real-hardware-validation gap; it is not a certified replacement for com.ruiye.jd. Its optional Reyeah screen-companion role also does not replace the vendor dispensing app.

The technical source review covered the Reyeah build/provenance records, native service/PIN/zero-total flows, backend inventory and refund contracts, and Flutter setup/controls. These sources establish implementation details, not completion of physical acceptance.