Sedan tidigare har jag kört med en gammal sticka, men vill inte ha en dator stående på bästa plats längre.
Jag vill INTE koppla mig till Live! Dels för att jag vill kunna själv samt för att jag bor på landet och adsl:en kan vara nere.
Det är ju tur att man har ett lokalt nät och kan hacka glatt ändå!
Jag vill ha en liten enkel server som kan tex nyregistrera i configfilen tex nya sensorer och knappar. Då med namnet "Unknown n" Där n är ett löpande nummer beroende på vad som finns i configfilen redan.
Sedan ska den lyssna på anrop på en annan port för själva styrningen, troligen någon form av Json-format.
Inte på det klara helt än hur det ska se ut, men det ska vara enkelt!
Jag vill senare hålla mig helst till ren C då jag är mest van vid det.
Men nu vid tester och att få förståelse så duger nästan vad som!
Jag har inte hunnit att pilla sådär jättemycket, men jag moddade ett litet python script som knackar på porten till det lokala interfacet:
Code: Select all
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket, re, sys
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
UDPSock.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
UDPSock.setblocking(1)
# bort då jag inte fick kontakt först
#UDPSock.settimeout(3)
UDPSock.bind( ('192.168.38.101', 42314) )
print "Autodiscover TellStick Net..."
UDPSock.sendto("D", ('255.255.255.255',30303))
p = re.compile('(.+):(.+):(.+):(.+)')
ip = None
while 1:
try:
(buf, (ip, port)) = UDPSock.recvfrom(2048)
except socket.error, msg:
break
m = p.match(buf)
print "%s" % buf
print "Found %s on ip %s firmware version %s" % (m.group(1), ip, m.group(4))
if (m.group(4) == '17'):
print " This has firmware X, lets use it"
break
else:
print " Not using correct firmware"
ip = None
if (ip == None):
print "No TellStick Net with correct firmware found"
sys.exit(1)
# Här kommer moddningen!
# Väntar på en sändare att den ska sända (jag gör det med den gamla stickan)
# sparar meddelandet i en fil för vidare analys
# Registrera den här datorn som lyssnare!
UDPSock.sendto("B:reglistener", (ip,42314))
print "--------------------"
while 1:
try:
(buf, (ip, port)) = UDPSock.recvfrom(4096)
except socket.error, msg:
break
print "-Received:"
print " %s " % buf
f = open("/root/tinput.txt","w")
f.write(buf)
f.close()
print "--------------------"
sys.exit(0)
Code: Select all
7:RawDatah8:protocol7:arctech5:modelA:codeswitch4:dataiE0Ess
Jag har kommit så långt att först är det 7 tecken, dvs "RawData", men sedan vad fasen är "h"?
"8" Stämmer ju med "protocol" som i sin tur är "7" långt och "arctech", "5" - "model" som är 10 långt och "codeswitch".
Sedan kommer "4" och "data" och till sist själva datat som är "i" långt, alltså 105 tecken långt.
Någon som kan förklara mer, "h" och datat hur avkodar men det på bra sätt?
Har läst en del men det är väldigt spretigt och rörigt, ingen samlad information direkt.
Mycket beror på dåligt med tid, att jag inte har kopplat riktigt hur det funkar.
Ja, ja, jag pillar väl vidare!