Page 1 of 1

Nowy typ dla Channel.state

Posted: Mon Apr 08, 2019 3:22 pm
by magx2
W tej chwili Channel.state nie ma żadnego typu przez co generatory kodu nie działają. Proponuję dodać nowy typ ChannelState który będzie miał wszystkie możliwe pola, które da się przesłać.

W swaggerze mogło by to wyglądać tak:

Code: Select all

ChannelState:
	properties:
		hi:
			type: boolean
		partialHi:
			type: boolean
		temperature:
			type: integer
		humidity:
			type: integer
		isCalibrating:
			type: boolean
		shut:
			type: integer
		on:
			type: boolean
		brightness:
			type: integer
			min: 0
			max: 100
		colorBrightness:
			type: integer
			min: 0
			max: 100
		depth:
			type integer
		distance:
			type: integer
Przykładowa implementacja w javie: https://github.com/magx2/jSuplaApi/blob ... State.java

Re: Nowy typ dla Channel.state

Posted: Wed Apr 10, 2019 11:15 am
by fracz
Takie obiekty będą niepoprawne w sensie programowania obiektowego... Bo zawsze będą miały tylko część pól z sensowną wartością.

Ale rzeczywiście taki typ pomógłby w odczycie wartości, dodam.

Re: Nowy typ dla Channel.state

Posted: Wed Apr 10, 2019 12:07 pm
by magx2
Póki co to nie ma niczego więc lepiej dodać żeby było cokolwiek.

Co do czystych praktyk programowania obiektowego w kilku miejscach i tak są one już naruszone, np. param1/2/3 mają różne znaczenia zależnie od kontekstu (typu channelu). Rozwiązaniem tego problemu (i problemu z ChannelState) byłoby wprowadzenie abstrakcyjnej klasy Channel i dziedziczących po niej klas dla konkretnej funkcji, tj. LedChannel, GateChannel, SwitchChannel, ect. Jak to zrobić w swaggerze znajdziesz tutaj: https://swagger.io/docs/specification/d ... ymorphism/

Oczywiście to rozwiązanie, które zaproponowałem wymaga dużych zmian w swaggerze (zerwanie kompatybilności ) i na backendzie dlatego proszę tylko o dodanie ChannelState ;)

Re: Nowy typ dla Channel.state

Posted: Wed Apr 10, 2019 12:15 pm
by pzygmunt
Bierzesz pod uwagę, że Supla składa się również z elementów, które nie są pisane obiektowo ?
Stąd np Param1 który ma wiele znaczeń. Gdyby supla-server był napisany w Javie czy w innym wysokopoziomowym języku to wydajność spadłaby na tyle, że utrzymywanie serwerów bezpłatnie byłoby niemożliwe na tym etapie projektu.

Re: Nowy typ dla Channel.state

Posted: Wed Apr 10, 2019 12:34 pm
by magx2
W javie można bezproblemowo pisać programy które będą obsługiwać tysiące socketów w czasie rzeczywistym (są do tego gotowe biblioteki takie jak Netty czy Java NIO) ale nie o tym. Z tego co widzę to Supla Cloud jest napisany w PHP z corem w C/C++ (do komunikacji). Czy nie ma warstwy abstrakcji tuż przed REStowym endpointem, na której da się dokonać takiej konwersji?

Re: Nowy typ dla Channel.state

Posted: Wed Apr 10, 2019 2:02 pm
by pzygmunt
Ad 1. Tu nie chodzi o to czy można... w najmniej wydajnym języku napiszesz wielosocket-owy serwer... kwestia kosztów.
I tu w wysokopoziomowych językach koszt wytworzenia jest mniejszy, ale już koszt CPU jest dużo wyższy.

Ad 2. Jest taka warstwa ale nie możemy też zbyt drastycznie ewoluować z uwagi na kompatybilność wsteczną. Weź też pod uwagę nasze zasoby i historię projektu. Dziś gdy projekt jest w jakimś miejscu naturalnie nasuwają się spostrzeżenia mówiące, że to i owo (w rzeczywistości bardzo dużo;) ) należałoby inaczej zaprojektować. Twoje spostrzeżenia są również bardzo trafne i słuszne... niemniej jednak na wiele z tych zmian nie możemy sobie od razu pozwolić. :) Tak czy inaczej wszelkie uwagi i sugestie są mile widziane.

Re: Nowy typ dla Channel.state

Posted: Mon Apr 15, 2019 4:04 pm
by magx2
Jakiś update dotyczący tego?

Re: Nowy typ dla Channel.state

Posted: Fri May 24, 2019 12:25 pm
by magx2
Cos bedziemy z tym robic - przydalo by sie chociaz wpraowadzic tan pomysl z 1szego postu