SS7 blog

Горна Диканя hi-tech

Видях в facebook-a (съвсем случайно, докато отговарях на покани за приятелство, иначе там не влизам) , че Делян се е уплашил от OPEX-a на автомобил. И то със право :)

Ето сметките за моята кола към 1.6.2009 (за шест месеца) :

total of driven kilometers: 9.706 km
sum of costs 5.212,69
costs per kilometer Kilometer 0,54

Сумите са в лева. Наистина си е страшно :(  Най-голямия процент засега е амортизацията, но до края на годината, разходите за гориво, ще я бият. Другите разходи са горе-долу незначителни.

Жега !

2 comments

Жега , а няма и седем дни, откакто температурата падаше до 10 градуса (през ноща)

graph_imagephp

Отгоре на всичкото, днес с колегата ходихме до Сандански – е там вече наистина не се живееше. Монтирахме набързо един ПОС терминал в една дискотека – Down town (ама огромна дискотека – за над 1000 човека)

Сега съм включил всичките климатици вкъщи на макс и разхлаждам :)

Размяна на писъмца :)

Уважаеми г-н ………,

Бихме искали да Ви информираме, че

Договора за ползване на услугата ADSl e изтекъл на 28.02.2009 г.

В „специалните условия”, включени в Договора е посочено, че

след срока на изтичане на Договора, същия се подновява автоматично,

докато една от страните не предупреди другата с писмено предизвестие,

изпратено 30 /тридесет/ дни преди изтичане на предварително уговорения срок.

В случай, че прекратите Договора предсрочно, то Вие заплащате оставащите

месечни такси до края на удължения срок.

С Уважение,

Отдел Обслужване на клиенти


И от мен :

Във връзка с сметка 1045956679 /5.7.2009 , тел. 0701/50137

Уважаеми Господа,

аз пък искам да ви информирам, че изтеклия на 28.2.2009 договор е
сключен на 27.2.2007 и в него НЯМА “СПЕЦИАЛНИ УСЛОВИЯ” , ако бъдете
така добри го намерите и прочетете.

Моля да ми бъде изпратено ксерокопие (с мой подпис) от последния
договор(заявка) с Вас .

Неполучаването на копие от договора в срок от един месец, ще считам за
отказ и ще се обърна към съответните органи във връзка с порочната
практика за непредоставяне на договори на клиентите Ви и съответно
отказа Ви.

Искам и да ви напомня, че при откриването на телефонния пост съм платил авансово ДВА абонамента, и , че ми дължите единия в размер на 20 лв, във връзка със закриването на тел.пост на 31.7.2009г.

Те, че пари от мен няма да видят е ясно, ама сега ще ги гоня и за едни 20 лв. дето ми взеха в началото.

Аз пък ги топнах за начало на КЗП , следва КРС :

Жалба срещу БТК АД

Уважаеми Господа

На 27.02.2007 подписах заявление -договор с БТК АД за услугата АДСЛ. Не ми беше дадено копие от договора, въпреки моето изрично настояване. В споменатия договор липсват н.нат “специални условия”, според които след изтичане на договора, той се подновява автоматично за срок от една година.

На 12.6.2009 прекратих споменатия договор (след изтичане на срока му на 28.2.2009г) , а според ОУ на БТК АД, след изтичане на срока му той се подновява само за един месец – т.е става безсрочен.

На 5.7.2009г. съгласно сметка 1045956679 /5.7.2009 БТК АД ми начиславя “неустойка” в размер на 144 лв.

След връзка с отдел Обслужване на клиенти , ми беше отговорено, че договора се подновявал ватоматично за срок от една година въз основа на “специалните условия” , каквито липсваха в моя договор от 27.2.2007 г.

Отново получих гласен отказ на желанието ми да ми бъда дадено копие от споменатия договор.

Моля за съдействие за получаването на копие от договора ми с БТК АД от 27.2.2007г, в който е видно, че такива “специални условия” липсват.

с Уважение:

p.s.

Ето и бланка на самата заявка(договор) , подписана февруари 2007 г.
Няма клауза “специални условия”

Имах един изостанал АДСЛ (с отдавна изтекъл договор) и фиксиран телефон към него. Миналия месец реших да го спра (на 15.6.2009 АДСЛ-а) и на 30.6.32009 телефона.

Току що виждам, че БТК за довиждане са ми праснали (1.7.2009) фактура за 140 лв ?!?

Мамицата им, утре ще им разгоня фамилията. Ако трябва ще се оплача и на КРС.

Не се занимавайте с тия ИЗМАМНИЦИ !

Току що им написах следното възражение :

Възражение срещу сметка 1045956679 /5.7.2009 , тел. 0701/50137

Начислили сте ми неустойка за прекратяване на 12М договор за АДСЛ , при условие, че :

1. Договора ми за АДСЛ е изтекъл .

2. Никога не съм подписвал договор със “специални условия при 12 или 24 месечен договор” , поради простата причина, че договора е от преди да въведете тези ЗАРОБВАЩИ тайни условия и то не в ОУ, където им е мястото, а в някаква си заявка за услуга.

Явно това е начина за изразяване на благодарност към дългогодишните ви клиенти. Радвам се че прекратих договора с Вашата измамническа компания, и ако не коригирате измислената “неустойка” , ще се оплача на КРС и комисията за защита на потребителите. Отделно ще се погрижа този факт да стане широко достояние на сегашните ви и евентуално новите ви клиенти, за да разберат със що за компания си имат работа.

Без уважение : ………..

Интересно,интересно – на неустойката не са начислили ДДС , какво ли ще кажат данъчните по въпроса :) (за съжаление неустойките наистина не се облагат с ДДС)

Ако нафтовата печка Ecotec започне да променя оборотите на празен ход (леко и съпроводено с постоянно движение на клапата за въздуха) , причината е най-вероятно в т.нар “дебитомер” – датчик , измерващ количеството въздух влизащ в двигателя.

Основен симптом е леката промяна на оборотите на празен ход (увеличава се при по-високи обороти и ненатоварен двигател) и характерното “придърпване” при отпускане на газта при движение на скорост.

Начина за проверка е като се изключи напълно дебитомера – ако оборотите на празен ход се стабилизират и клапата за въздуха спре да се мести напред-назад – ясна е работата.

Неприятното е , че ECU -то не може да хване този проблем и при диагностика не излизат грешки.

Та начина за хващане на проблема е чрез изключването на дебитомера. Вчера установих, че фронтерката се нуждане минимум от почистване на този датчик. И дано се размина само с почистване, че нов дебитомер струва майка си и баща си :(

За съжаление, той е закрепен с някакви интересни болтове , за които нямам инструмент (абе тия от Опел как не им омръзна да използват бахти изчанчените болтове) , та процедурата по поистването му се отлага няколко дни до намирането на инструмент.

Предстои ми смяна на масло (двигател + СК + евентуално преден диференциал) – минимум 12 литра скъпо масло 10W40 (скоростната кутия е с двигателно масло) и смяна на пистов ремък + 2 шайби към него.

Поддръжката на тая кола си е бая скъпа, тъкмо паднах под 1лв/км . Хубавото обаче е, че не ми пука за дупки и локви, лошото е твърдото окачване, осигуряващо комфортно возене само по нови и равни пътища не само без дупки, а дори и без неравности, че иначе друса.

Напоследък се нагледах на противоположността на “How to …..” .

Или как заради не дотам добро проектиране се стига до изгъзицата да се пише програма обработваща MAC фреймофе на JavaScript . От която задача аз изпаднах в потрес, който още ме държи.

Та имаме система за автоматизация, която в общи линии използва за преносна среда захранването (powerline) , стъпила е на един архаичен стандарт – KNX/EHS и е развита (според мен) в неправилна посока.

Всички знаем, че една система за автоматизация се състои от управляваща част , изпълнителна част и датчици. И общо взето е централизирана – цялата управляваща логика е на едно място, съответно с добър процесор/контролер , а останалата част е максимално проста – на изпълнителната част и датчиците не им трябва мозък – трябва им само адрес и евентуално да потвърждават изпълнена команда.

Да , обаче в нашия случай не е баш така. “Интелигентно” е дори това, което не трябва – например прост ключ за пускане/спиране . А управляващата част (централната) просто липсва. Т.е. имаме някакъв вид разпределена система, при която всяко устройство може да си говори с всички останали.

Освен, че не виждам смисъл даден ключ да може да си говори с друг ключ, това може да докара сериозни проблеми за достъпа до медията на MAC ниво, комуникацията е в килохерцовия обхват и скоростите са килобити в секунда.

Направен е опит функционалността на централния контролер (който както казах липсва) да се направи в интерфейсните модули. Такива има няколко – IR , GSM , bluetooth (сериен) и сериен – RS232 . Все още не знам каква управляваща логика има там (освен в серийните интерфейси – там няма никаква).

Сегашната задача е да се направи IP интерфейс (дистанционното има wireless , JavaScript и socket в JavaScript-a) . И как е направен интерфейса ? Ами чудно – IP to RS232 -> RS323 to powerline , напълно неинтелигентен . В допълнение трябва етернет мрежа и безжичен AP .

Как бих го направил аз ? Хм , по възможно най-лесния начин (и най скалируемия) – един Alix (имаме етернет, имаме minipci за безжична карта, имаме и сериен порт) , Alix-a струва малко по скъпо от IP to RS323 адаптера. Щях да сложа един линукс на Аликс-а , да пусна безжичната карта и да наблъскам там целия необходим код за управление. Дистанционното щеше да си говори с него на приложно ниво, с команди от вида “SET” , “GET”. И един RS232 to powerline .

Е предпочитам да парсвам МАК фреймове със С и под линукс, отколкото на JavaScript и под непозната ОС, без никакви средства за дебъгване. Да не говорим, че второ дистанционно (и десето ако трябва) ще се добави без никакви проблеми. Хе, ще ми се да питам (и ще питам) разработчика на настоящата система КАК ПО ДЯВОЛИТЕ ЩЕ ДОБАВИ ВТОРО ДИСТАНЦИОННО ? Разбира се той ще измисли workaround , работещ и неефективен workaround , вместо да вземе да проектира както трябва.

Като говорехме за проектиране, някой виждал ли е комуникационен протокол, при който адресите са някъде към края на фрейма , при това не на фиксирано място, а зависещо от нещо си. Е аз видях вече :)

Би трябвали всеки, който седне да проектира такъв протокол да погледне етернет спецификацията и да си набие в главата : ИЗТОЧНИК , ПОЛУЧАТЕЛ, ДЪЛЖИНА , ДАННИ ! При това адресите да са с ФИКСИРАНА , а не с променлива дължина (щото и това го има хе,хе).

Мани,мани, мога да изпиша страници.

За капак на всичко, дистанционното TSU9400 (което струва между другото около 1000 лв) прави един номер, който скапва иначе добре написания (от Филипс) TCP клиент.

Та , сокета при него има callback функция .onConnect и променлива .connected. Интересната част е, че лежащия от долу ОС сетва .connected = true, но извиква .onConnect фунцията, когато сметне за добре , ако е натоварен процесора – дори след секунди. През това време всичко що работи със сокета си мисли, че сокета е конектнат и пише и маже смело в него. Писането минава, с изключение на първото писане, щото пък TCP клиента по ред причини го слага във .onConnect функцията. И настава едно мазало – немам думи.

Та идеята на целия тоя дълъг пост е, че когато нещо е проектирано добре (например ПИКОИП), са необходими само 10-на реда код, за да го интерфейсне всеки с минимална грамотност, към каквото и да е, докато в обратния случай са необходими поне 300 реда код (и то на JavaScript) , да не говорим пък, че хората, които могат да го направят се броят на пръстите на едната ръка.

Ех, припомних си отминалите времена , когато бях добър на C . И май още съм добър, въпреки омразата ми към програмирането.

Пиша много бавно, щото много мисля преди това , но ефекта е поразителен.

Събрах три функции (около 60 120 реда код) на един колега в един единствен ред :) :

var DA = String.fromCharCode(parseInt(addr.substring(0,1),16)*16) + String.fromCharCode(parseInt(addr.substring(1,2),16)) ;

Първо ЧЕЗ ми скапаха root партишъна на домашния ми комп. (Мамицата ви ЧЕЗ – не съм ви “благославял” отдавна) . Възстанових го , въпреки изтръпването и изправянето на косата. Добре, че /home е не само на друг партишън , ами и на друг диск.

Второ – изгоря ми bluetooth джиджавката , а тя ми е върло необходима на последък – интерфейса към ония powerline devices е RS 323 over bluetooth .

И трето – “великото” IDE на Филипс за прословутите дистанционни ми затри последната версия на кода ( и аз не разбрах как и защо) . Добре, че няколко часа преди това го бях постнал тук :) , иначе трябваше да пиша на ново. А аз пиша хем бавно, хем с много грешки , т.е. щах да утрепя поне половин ден.

Последно – оказа се че имам само изгорели АП-та , та сега се налага да пускам микротик на едно ПЦ , та да имам wireless ( щото онова дистанционно на Филипс има wireless)

Добрите новини : Сложих 2 USB конектора в колата (то вече напоследък всичко ползва USB за захранване)  и си оправих “mp3 плеара + FM трансмитер + bluetooth handfree” – то да не забива при палене на двигатела. Китайците бяха направили ебати икономиите във захранването му. С новото захранване вече пее и не забива.

JavaScript

No comments

Е не е истина просто :) . Пиша протоколен стек за протокол, които едва познавам, на език от който пък си нямам грам представа :)

Задачата е да се четат пакети на MAC ниво и да се извлекат данни, които са капсулирани във два вложени един над друг протоколи :) . И тва на JavaScript . Мъкааа , мъка . Абе май вложените протоколи са повечко : Powerline във RS323 във IP . Както се вика три в едно :)

Трябва малко пояснение : Благодарение на ето този пост. започнах работа във една фирма за домашна автоматизация. Всъщност малко е сложно – фирмата тепърва мисли да се занимава с това, като ще продават и внедряват продуктите на една друга фирма . Другата фирма пък иска да интерфейсне системата си към едни дистанционни на Филипс (там всъщност ще се изпълнява JavaScript-a) .

Всъщност, докато преговаряхме, изобщо не стана дума за програмиране ( аз щях да откажа, щото хм…. ) , пък и видях, че търсеха и програмист отделно, но някак си тоя товар с JavaScript-а дойде на мой гръб. Но твърдо смятам това да са последните редове код, които пиша на тоя хм … т.нар.  език.

Та ето какво сътворих дотук . Има още работа, но общи линии кода работи. Добре, че Филипс бяха написали наготово TCP клиент ( на JavaScript , хехе)

System.setDebugMask(9) ;

var testFrame =
“\x55\xC1\xF0\x01\x00\x00\x5A\x00\x00\x10\x0B\x40\x08\xB0\x06\x5A\xA0\x0B\x00\x00\x00\x0B\x00

\x00\x10\x00\x00\x00\xA0\x0D\x00\x00\xC0\x08\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x06

\x00\x00\x40\x07\x00\x00\x10\x0E\x00\x00\xC0\x00\x00\x00\x40\x00\x00\x00\x00\x01\x00\x00\x10

\x04\x00\x00\x30\x03\x00\x00\xD0\x0B\x10\x00\xAA”;

eval(CF.widget(“TCPCLIENT”, “SCRIPTS”).label);
var wSTATE_VALUE1 = widget(“STATE_VALUE1”);
var trace = com.philips.trace;
var traceHex = com.philips.traceHex;

var Delimiter = “\xAA”;
var IP = CF.widget(“IP”, “PARAMETERS”).label;
var Port = CF.widget(“PORT”, “PARAMETERS”).label;
intervalTMP = 500; //parseInt(CF.widget(“UPDATE”, “PARAMETERS”).label, 10);
var updateInterval = intervalTMP > 100 ? intervalTMP:intervalTMP*1000;
var Client = null;
var timeStamp = new Date();
var AWAKENING_SAFETY_TIMEOUT = 5000;

// test na simulatora , da se mahne w krajnija wariant
processPacket(testFrame);

function processPacket(data)
{
var obj ; // za da definiram obekt, trjabwa da se def funkcia, oba4e kakwa ?, zasega karame samo s promenivi
traceHex(data, 500); // tuk polu4avame celiq paket
var interface_code = (data.charCodeAt(2) | data.charCodeAt(3));
System.print(“Iface Code: ” + interface_code.toString(16));
var service_selector = (data.charCodeAt(4) | data.charCodeAt(5));
System.print(“Service_sel: ” + service_selector);
// only if 0xF1 interface AND SERVICE SELECTOR = 0 , else discard packet
if( interface_code == 241 && service_selector == 0 )
{
var index = data.lastIndexOf(‘\x5A’);
index++ ;
var field2 = data.substring(index);
index=16; // first address byte
var Addr = (field2.charCodeAt(index) | field2.charCodeAt(index+1));
System.print(“Address: ” + Addr.toString(16));
index=index+16 ; //HEADER
var header = (field2.charCodeAt(index) | field2.charCodeAt(index+1));
System.print(“Header: ” + header.toString(16));
var suaPresent = header & 3; // HEADER AND 11
var ssua = 0;
switch(suaPresent)
{
case 0 : { index=index+4; ssua = (field2.charCodeAt(index) | field2.charCodeAt(index+1)); index=index+4;break;}
case 1 : {index=index+4; break;}
case 2 : {index=index+4; break;}
}
System.print(“SSUA: ” + ssua.toString(16));
index = index + 12; //SERVICE
var service = (field2.charCodeAt(index) | field2.charCodeAt(index+1));
System.print(“Service: : ” + service.toString(16));
if (service == 64 || service == 32 ) // if service = 0x40 (READ) = 0x20(INF. REPORT), else discard packet
{
index = index+4; // first byte of DATA_LENGHT
var data_lenght = (field2.charCodeAt(index) | field2.charCodeAt(index+1));
System.print(“Data_lenght: ” + data_lenght);
index = index+4; // first byte of DATA

var obj_data=””; //APPLICATION_DATA

//READ APPLICATION_DATA +++++ PROBLEM S STRINGA ++++++ SOLVED ++++
while(data_lenght)
{
//System.print(“iteration: ” + data_lenght);
obj_data += String.fromCharCode(field2.charCodeAt(index) | field2.charCodeAt(index+1));
index=index+4;
data_lenght–;
}

traceHex(obj_data);
System.print(“Data : ” + obj_data);
updateScreen(Addr,obj_data);
}
}
}

function ioError()
{
Diagnostics.log(“io error”);
}

Client = new com.philips.TCPClient(processPacket, ioError, Delimiter, IP, Port);
//enableMAC();
//requestStatus();

function enableMAC()
{
trace(“Request enable MAC”);
Client.execute(“\x55\xE0\xF0\x00\x00\x00\xAA”);
}

function requestStatus()
{

Client.execute(“\x55\xE0\x80\x08\x00\x00\x00\x07\x40\x00\x00\x00\x00\x00\x10\x0E\xC0\x00\x40\x00\x00\x00”);
Client.execute(“”);
Client.execute(“”);
Client.execute(“\x5A\xC0\x08”); // tuk individualen adres
Client.execute(“\x5A\x00\x01\x5A\x00\x00\x5A\xA0\x0B\x00\x0B\x5A\x10\x00\xAA”);

System.delay(140);

// REPEAT FOR ALL ADDRESSES

}

function keepAlive()
{
var tmpTime = new Date();
var interval = tmpTime – timeStamp;
if ( interval > (updateInterval + AWAKENING_SAFETY_TIMEOUT))
{
//In this case the Pronto comes out of sleep and a sync function will have to be called
trace(tmpTime + ” – ” + timeStamp + ” = ” + interval);
trace(“perodic request! ” + interval);
requestStatus();
}
timeStamp = tmpTime;
scheduleAfter(updateInterval, keepAlive);
}

function updateScreen(adr,val)
{

System.print(“Data_len: ” + val.length);
if(val.length == 1) //INDIVIDUAL RESPONSE
{
System.print(“Data 2 : ” + val.charCodeAt(0));
switch(adr)
{
case 200 : { wSTATE_VALUE1.label = val.charCodeAt(0) + ” %” ; return;}
//case adr2: {wSTATE2_VALUE.label = val ; return;}
//case adr3: {wSTATE3_VALUE.label = val ; return;}
//case adr4: {wSTATE4_VALUE.label = val ; return;}
}

} else

{
//group request response – data >1 , ne se znae kakwo

}

}

Отдавна се бях зарекъл да направя карта на засадите на Дупнишките катаджии :) .

Ето тук е това общественополезно дело .

По късно ще ги направя и във файл за GSP навигации.

42.349100, 23.095100