| Server IP : 34.87.99.72 / Your IP : 216.73.217.31 Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 User : bitnami ( 1000) PHP Version : 7.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /opt/bitnami/apache/htdocs/app/app/Http/Services/ |
Upload File : |
<?php
namespace App\Http\Services;
use App\Classes\LockerBoardCore;
class LockerBoardService extends LockerBoardCore
{
const COMMAND_HEADER_OPEN = "8A";
const COMMAND_HEADER_CHECK = "80";
const COMMAND_HEADER_PASSIVE = "81";
const QUERY_CODE_OPEN = "11";
const QUERY_CODE_CHECK = "33";
const QUERY_CODE_FEEDBACK = "00";
const FEEDBACK_SUCCESS = "00";
const FEEDBACK_ERROR = "11";
const NO_WHITESPACE = "";
const SINGLE_WHITESPACE = " ";
########################## OPEN_LOCK REQUEST ##############################
// for api
public function requestOpenAll()
{
return self::requestOpenLock('00');
}
// for api
public function requestOpenLock($lockNum, $boardAddress = 1)
{
return [
"command" => self::getOpenLockCommand($lockNum, $boardAddress),
"openSuccessResponse" => self::getOpenSuccessResponseCode($lockNum, $boardAddress),
];
}
// compute commnad for android-box to open box
public function getOpenLockCommand($lockNum, $boardAddress) : string
{
return self::computeCommand([
self::COMMAND_HEADER_OPEN,
self::getHexString($boardAddress),
self::getHexString($lockNum),
self::QUERY_CODE_OPEN
], self::SINGLE_WHITESPACE);
}
// compute commnad for android-box to cross-check
// (if not same , report to server ?? )
public function getOpenSuccessResponseCode($lockNum, $boardAddress) : string
{
if($lockNum == "00"){
// if is open all (to be verify for multiboard cases)
return self::computeCommand([
self::COMMAND_HEADER_OPEN,
self::getHexString($boardAddress),
"01",
"00"
], self::SINGLE_WHITESPACE);
}
return self::computeCommand([
self::COMMAND_HEADER_OPEN,
self::getHexString($boardAddress),
self::getHexString($lockNum),
self::FEEDBACK_SUCCESS
], self::SINGLE_WHITESPACE);
}
########################## CHECK_STATUS REQUEST ##############################
// for api
public function requestCheckLockStatus($lockNum, $boardAddress = 1)
{
// self::getCheckLockStatusCommand($lockNum, $boardAddress);
}
public function getCheckLockStatusCommand($lockNum, $boardAddress) : string
{
return self::computeCommand([
self::COMMAND_HEADER_CHECK,
self::getHexString($boardAddress),
self::getHexString($lockNum),
self::QUERY_CODE_CHECK
], self::SINGLE_WHITESPACE);
}
########################## DECODE CHECK_STATUS RESPONSE ##############################
/*
locker board's check-all feedback
80 01 00 00 08 00 33 BA => 12
80 01 00 08 00 00 33 BA => 20
80 01 00 10 00 00 33 BA => 21
80 01 00 80 00 00 33 BA => 24
80 01 00 03 00 00 33 BA => 17,18
80 01 00 00 00 FF 33 BA => 1-8
80 01 00 07 FF 00 33 BA => 9-19
80 01 00 FF FF FF 33 BA => 1-24
possible usage :
$related_locks = self::decodeAllLockerStatus("80 01 00 FF FF FF 33 BA");
$locks = Lock::whereIn('id', $related_locks )->get();
// will get 1-24
*/
public function decodeAllLockerStatus($feedback = "80 01 00 0A 00 10 33 BA") : array
{
$feedback = str_replace(' ', '', $feedback);
$boardID = self::getCommandSection($feedback,2);
$chuck3 = self::getCommandSection($feedback,4);
$chuck2 = self::getCommandSection($feedback,5);
$chuck1 = self::getCommandSection($feedback,6);
$lockIDs = array_merge(
self::readStatus($chuck1),
self::readStatus($chuck2, 2),
self::readStatus($chuck3, 3)
);
return $lockIDs;
}
public function decodeLockStatus()
{
}
########################## DECODE PASSIVE RESPONSE ##############################
/*
81 01 18 11 98 - on door close
81 01 18 00 98 - on open manually by human
*/
// PASSIVE feedback from lock-board (physically)
// (if header is 81 , android-box should call api ? )
public function decodeFeedback($feedback, $lockNum)
{
$feedback = str_replace(' ', '', $feedback);
/*
if($feedback != self::getFeedback($lockNum)){
// throw new Exception;
}
*/
$boardID = self::getCommandSection($feedback,2);
$status = self::getCommandSection($feedback,4);
if($status == FEEDBACK_ERROR){
//
}
//
}
}