From 63544160d829d3cfff0a372395ba30c7693cc691 Mon Sep 17 00:00:00 2001 From: sebseb7 Date: Thu, 22 Jan 2026 09:24:07 -0500 Subject: [PATCH] pic --- modelPics/S3SN-0U12A.png | Bin 0 -> 3278 bytes modelPics/S3SN-0U12A_big.png | Bin 0 -> 48501 bytes modelPics_backup/S3SN-0U12A.png | Bin 0 -> 12033 bytes tapo_test.js | 139 -------------------------------- test_db_upsert.js | 63 --------------- 5 files changed, 202 deletions(-) create mode 100644 modelPics/S3SN-0U12A.png create mode 100644 modelPics/S3SN-0U12A_big.png create mode 100644 modelPics_backup/S3SN-0U12A.png delete mode 100644 tapo_test.js delete mode 100644 test_db_upsert.js diff --git a/modelPics/S3SN-0U12A.png b/modelPics/S3SN-0U12A.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4367f49bd60a6eab1266ccc85bf5669cfd5193 GIT binary patch literal 3278 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 literal 0 HcmV?d00001 diff --git a/modelPics/S3SN-0U12A_big.png b/modelPics/S3SN-0U12A_big.png new file mode 100644 index 0000000000000000000000000000000000000000..35c0f8288edf42a4404dd226d1404446a0b1c60f GIT binary patch literal 48501 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

7FE?K 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 literal 0 HcmV?d00001 diff --git a/modelPics_backup/S3SN-0U12A.png b/modelPics_backup/S3SN-0U12A.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad6e76d0b14898d8fa68f3b4e29a093d64d69ce GIT binary patch literal 12033 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 24) & 0xff, (this.seq >> 16) & 0xff, (this.seq >> 8) & 0xff, this.seq & 0xff]), encrypted]); - return { payload: Buffer.concat([KlapCipher.sha256(sigData), encrypted]), seq: this.seq }; - } - - decrypt(seq, data) { - const decipher = crypto.createDecipheriv('aes-128-cbc', this.key, this._ivSeq(seq)); - return Buffer.concat([decipher.update(data.subarray(32)), decipher.final()]).toString('utf8'); - } -} - -function httpRequest(ip, path, body, cookie = null) { - return new Promise((resolve, reject) => { - const options = { - hostname: ip, port: 80, path: `/app${path}`, method: 'POST', - headers: { 'Content-Type': 'application/octet-stream', 'Content-Length': body.length }, - timeout: 5000 - }; - if (cookie) options.headers['Cookie'] = cookie; - - const req = http.request(options, (res) => { - const chunks = []; - res.on('data', chunk => chunks.push(chunk)); - res.on('end', () => resolve({ status: res.statusCode, headers: res.headers, body: Buffer.concat(chunks) })); - }); - req.on('error', reject); - req.on('timeout', () => { req.destroy(); reject(new Error('Timeout')); }); - req.write(body); - req.end(); - }); -} - -async function connectDevice(ip, username, password) { - const authHash = KlapCipher.sha256(Buffer.concat([ - KlapCipher.sha1(Buffer.from(username.toLowerCase().trim())), - KlapCipher.sha1(Buffer.from(password)) - ])); - - const localSeed = crypto.randomBytes(16); - const hs1 = await httpRequest(ip, '/handshake1', localSeed); - if (hs1.status !== 200) throw new Error(`Handshake1 failed: ${hs1.status}`); - - const cookies = hs1.headers['set-cookie']; - const cookieStr = Array.isArray(cookies) ? cookies[0] : cookies; - const cookie = cookieStr.match(/TP_SESSIONID=([^;]+)/)?.[0] || ''; - - const remoteSeed = hs1.body.subarray(0, 16); - const serverHash = hs1.body.subarray(16, 48); - const localHash = KlapCipher.sha256(Buffer.concat([localSeed, remoteSeed, authHash])); - if (!localHash.equals(serverHash)) throw new Error('Auth failed'); - - const hs2Payload = KlapCipher.sha256(Buffer.concat([remoteSeed, localSeed, authHash])); - const hs2 = await httpRequest(ip, '/handshake2', hs2Payload, cookie); - if (hs2.status !== 200) throw new Error(`Handshake2 failed: ${hs2.status}`); - - return { cipher: new KlapCipher(localSeed, remoteSeed, authHash), cookie }; -} - -async function request(ip, cipher, cookie, method, params = {}) { - const requestData = JSON.stringify({ method, params }); - const { payload, seq } = cipher.encrypt(requestData); - const response = await httpRequest(ip, `/request?seq=${seq}`, payload, cookie); - if (response.status !== 200) throw new Error(`Request failed: ${response.status}`); - return JSON.parse(cipher.decrypt(seq, response.body)); -} - -async function testDevice(ip, type) { - console.log(`\n${'='.repeat(60)}`); - console.log(`Testing ${type} at ${ip}`); - console.log('='.repeat(60)); - - try { - const { cipher, cookie } = await connectDevice(ip, process.env.TAPO_USERNAME, process.env.TAPO_PASSWORD); - - // Get device info - const info = await request(ip, cipher, cookie, 'get_device_info'); - console.log('\nšŸ“± get_device_info result:'); - console.log(JSON.stringify(info.result, null, 2)); - - // For hubs, get child devices - if (type.includes('H100')) { - const children = await request(ip, cipher, cookie, 'get_child_device_list'); - console.log('\nšŸ‘¶ get_child_device_list result:'); - console.log(JSON.stringify(children.result, null, 2)); - } - - } catch (e) { - console.log(`āŒ Error: ${e.message}`); - } -} - -async function main() { - console.log('Tapo Device Info Test'); - console.log('Username:', process.env.TAPO_USERNAME); - - // Test each device type - await testDevice('192.168.3.18', 'P100'); - await testDevice('192.168.3.21', 'P115(EU)'); - await testDevice('192.168.3.28', 'H100(EU)'); - await testDevice('192.168.3.45', 'C200'); - await testDevice('192.168.3.22', 'C200 #2'); -} - -main().catch(console.error); diff --git a/test_db_upsert.js b/test_db_upsert.js deleted file mode 100644 index 48965e0..0000000 --- a/test_db_upsert.js +++ /dev/null @@ -1,63 +0,0 @@ -import sqlite3 from 'sqlite3'; - -const db = new sqlite3.Database(':memory:'); - -db.serialize(() => { - db.run("CREATE TABLE devices (mac TEXT PRIMARY KEY, model TEXT, connected INTEGER, last_seen TEXT)"); -}); - -const upsertSql = ` - INSERT INTO devices (mac, model, connected, last_seen) - VALUES (?, ?, ?, ?) - ON CONFLICT(mac) DO UPDATE SET - model = excluded.model, - connected = COALESCE(excluded.connected, devices.connected), - last_seen = excluded.last_seen -`; - -console.log("Starting sequential tests..."); - -// Test 1: Insert initial online device -db.run(upsertSql, ['AA:BB:CC', 'T110', 1, '2023-01-01T12:00:00Z'], (err) => { - if (err) console.error(err); - checkDevice('Test 1 (Init Online)', 'AA:BB:CC', 1, () => { - - // Test 2: Update with NULL status - db.run(upsertSql, ['AA:BB:CC', 'T110', null, '2023-01-01T12:05:00Z'], (err) => { - if (err) console.error(err); - checkDevice('Test 2 (Sensor Event/Null)', 'AA:BB:CC', 1, () => { - - // Test 3: Update with offline status - db.run(upsertSql, ['AA:BB:CC', 'T110', 0, '2023-01-01T12:10:00Z'], (err) => { - if (err) console.error(err); - checkDevice('Test 3 (Offline/0)', 'AA:BB:CC', 0, () => { - - // Test 4: Update with NULL status while offline - db.run(upsertSql, ['AA:BB:CC', 'T110', null, '2023-01-01T12:15:00Z'], (err) => { - if (err) console.error(err); - checkDevice('Test 4 (Sensor Event while Offline)', 'AA:BB:CC', 0, () => { - - // Test 5: Back online - db.run(upsertSql, ['AA:BB:CC', 'T110', 1, '2023-01-01T12:20:00Z'], (err) => { - if (err) console.error(err); - checkDevice('Test 5 (Online again)', 'AA:BB:CC', 1, () => { - console.log("All tests completed."); - }); - }); - }); - }); - }); - }); - }); - }); - }); -}); - -function checkDevice(testName, mac, expectedConnected, callback) { - db.get("SELECT * FROM devices WHERE mac = ?", [mac], (err, row) => { - if (err) console.error("DB Error:", err); - const status = row.connected === expectedConnected ? 'PASS' : 'FAIL'; - console.log(`${testName}: connected=${row.connected} (Expected: ${expectedConnected}) -> ${status}`); - if (callback) callback(); - }); -}