====== Mroźna majówka ======
^Zamieszany|[[user>mroz]] |
^Rozpoczęto|2018-04-30 |
^Status|{{tag>zakończone}} |
^Tagi|{{tag>projekt wydarzenie jednorazowe}} |
Majówka to piękny czas, żeby wreszcie coś zrobić, a dokładniej 7 takich cusiów - jeden na każdy dzień majówki.
===== Worklog =====
==== Projekt 1 - pokazówka na warsztaty z micro:bit ====
W najbliższym czasie, będę prowadzić warsztaty z programowania w micropython na micro:bitach w mojej firmie (adva), aby nie przyjść z pustymi rękoma, postanowiłem przygotować projekt - pokazówkę. Jako że firma produkuje sprzęt sieciowy, zaś ja osobiście siedzę w dziale automatyzacji, postanowiłem przygotować przykładowy układ/test jig oparty na micro:bit prezentujący możliwości wykorzystania tej technologi to tworzenia szybkich prototypów układów testujących produkowane urządzenia.
Wymagania:
- kontrola przez interfejs CLI
- układ ma być w stanie fizycznie podłączyć i odłączyć przewód LAN
- układ ma być w stanie podłączyć oraz odłączyć urządzenie do/z zasilania
- układ ma być w stanie fizycznie podłączyć oraz odłączyć wtyczkę SFP do testowanego urządzenia.
Wyniki:
Udało się uzyskać wszystkie wymagania oprócz ostatniego - podłączania/odłączania wtyczki SFP - zabrakło na to czasu. Do projektu wykorzystano: kawałek deski, kilka śrub, kątowniki stolarskie, taśma montażowa, micro:bit, moduł 2x przkaźnik, serwo, konwerter buck-boost, płytkę prototypową, adapter micro:bit - płytka prototypowa, kabelki.
=== Kod ===
from microbit import *
class Actions(object):
def connect_lan(self):
"""Connect the lan plug int the DUT"""
pin16.write_analog(130)
sleep(10c00)
pin16.write_digital(0)
def disconnect_lan(self):
"""Disconnect the lan plug from the DUT"""
pin16.write_analog(60)
sleep(1000)
pin16.write_digital(0)
def plug_power(self):
"""Power on the DUT by enabling power"""
pin12.write_digital(1)
def unplug_power(self):
"""Disconnect power from the DUT"""
pin12.write_digital(0)
def _wrong_action(self):
uart.write("\nthere is no such action. try again\n")
def help(self):
"""Display list of avalaible commands"""
uart.write("""
connect_lan - Connect the lan plug int the DUT
disconnect_lan - Disconnect the lan plug from the DUT
plug_power - Power on the DUT by enabling power
unplug_power - Disconnect power from the DUT
help - show this help
""")
def read_command():
command = ''
while True:
while not uart.any():
sleep(1)
byte = uart.read(1)
uart.write(byte)
if ord(byte) == 13:
break
command += chr(ord(byte))
return command
actions = Actions()
uart.write("Hello, enter 'help' for commands list\n")
while True:
command = read_command()
uart.write("\n\ncommand: {}\n\n".format(command))
getattr(actions, command, actions._wrong_action)()
=== Zdjęcia ===
Tak oto wygląda wynik prac projektowych:
{{ :projekty:img_20180430_235214.jpg?direct&200 }}
{{ :projekty:img_20180430_235229.jpg?direct&200 }}
==== Monolit ====
Celem projektu jest budowa monolitu inspirowanego czarnym [[https://en.wikipedia.org/wiki/Monolith_(Space_Odyssey) | monolitem]] z odysei kosmicznej, który służy do godnego prezentowania obydwu tomów Sztuki Elektroniki. Szafeczka, która ma posłużyć powstała wcześniej.
Wymagania funkcjonalne:
- szafeczka ma przechowywać oraz godnie eksponować dwa tomy Sztuki Elektroniki
- szafeczka ma mieć system automatycznego otwierania oraz zamykania drzwiczek sterowany przy pomocy guzika.
- drzwiczki szafeczki mają się otwierać pełnym godności, powolnym posuwistym ruchem
- otwieraniu drzwiczek ma towarzyszyć muzyka z odysei kosmicznej
- otwieraniu drzwiczek mają towarzyszyć zgrane z muzyką efekty świetlne
- wnętrze monolitu, celem podkreślenia efektów świetlnych ma być białe
- z zewnątrz monolit ma być czarny
=== Postępy ===
- Kiedyś - budowa szafeczki, pomalowanie wnętrza na biało
- 1 V 2018 - skonstruowanie czujników otwarcia i zamknięcia drzwiczek opartych na fotoprzerywnikach oraz analogowych śrubkach, mechanizmu otwierania i zamykania drzwiczek opartego na silniku z drukarki, lego, sznurka, prętów metalowych z drukarki oraz zużytych baterii jako przeciwwagi
=== Galeria ===
{{ :projekty:img_20180501_225315.jpg?direct&200 | Dzień 1: zewnętrzny ogląd monolitu - widać mechanizm otwierający/zamykający }}
{{ :projekty:img_20180501_225222.jpg?direct&200 | Dzień 1: wnętrze monolitu widać przeciwwagę odpowiedzialną za zamykanie drzwiczek oraz fotoprzerywacze odpowiedzialne za detekcję zamknięcia drzwiczek }}
{{ :projekty:img_20180501_225230.jpg?direct&200 | Dzień 1: fotoprzerywacz oraz śrubka pełniąca rolę czujnika otwarcia drzwiczek}}
{{ :projekty:img_20180501_225251.jpg?direct&200 | Dzień 1: tył monolitu - serwomechanizm otwierający drzwiczki}}
==== Open Machine Spirit - kontroler zaworu grzejnika ====
W ramach projektu [[projekty:open_machine_spirit | Open Machine Spirit]] projektujemy wspólnie system automatyki domowej. W ramach tego projektu mam zamiar stworzyć dzisiaj sprawny prototyp zaworu grzejnikowego. Wstępny prototyp oparty o wyjęty z komercyjnego rozwiązania serwomechanizm zaworu, mostek H na tranzystorach bipolarnych oraz micro:bit został przygotowany wcześniej.
Wymagania:
- układ musi być w stanie wysterować komercyjny serwomechanizm wyjęty z innego, dostępnego na rynku sterownika
- układ musi być zdalnie sterowany z poziomu wygodnego panelu administracyjnego
=== Postępy ===
- 2 V 2018 - analiza dokumentacji [[http://home-assistant.io|Home Asisstant]] pod kątem dodania wsparcia dla micro:bit
=== Galeria ===
{{ :projekty:img_20180502_175113.jpg?direct&200 | Dzień 1: wstępny prototyp oparty na mostku H z tranzystorów bipolarnych, micro:bit oraz serwomechanizmu zaworu }}
==== Projekt pusty ====
Czwartek jest ciężki i pasuje ;p poczytałem se o zasłonach zaciemniających i posłuchałem podcastu Joe Rogann 1109 z gościem od głowy i snu. I tyle.
==== Wieszak na ręczniki papierowe ====
Plan jest prosty - potrzebuję w kuchni wieszaka papierowe ręczniki. Idealny projekt na relaksujący piątek. Z wykorzystaniem Jackowej piły posuwowej i czyjejś (czyjej?) szlifierki pasowej całość zajmuje tylko chwilę.
=== Wymagania ===
- wieszak ma być estetyczny
- wieszak ma być podczepiany pod półkę, która już wisi na ścianie.
=== Rozwiązanie ===
- kawałek drewna, odpadek z budowy półki
- kawałek stalowego(?) pręta.
- lakier do drewna.
projekt jest równie prosty co problem - kawałek zaokrąglonej, polakierowanej deseczki, z której pod kątem prostym wystaje długi, metalowy pręt służący do wieszania ręczników.
=== Galeria ===
{{ :projekty:img_20180504_154546.jpg?direct&200 | Materiały na projekt - deska i pręt }}
zdjęcie gotowego projektu będzie jutro - gdy wyschnie lakier.
{{ :projekty:img_20180505_221831.jpg?direct&200 |}}
{{ :projekty:img_20180505_221809.jpg?direct&200 |}}
==== Projekt 6: raport z rynku trójmiejskich nieruchomości ====
Jako przedstawiciel pracującej szlachty IT posiadam pewien nadmiarowy przychód, który warto by zainwestować w coś dochodowego i bezpiecznego, a czy istnieje na tym świecie inwestycja bezpieczniejsza niż inwestycja w nieruchomość?
=== Wymagania ===
- zbudować bazę danych zawierającą: powierzchnię, liczbę pokoi, cenę i adres nieruchomości na terenie trójmiasta
- zbudować bazę danych zawierającą: powierzchnię, liczbę pokoi, cenę i adres nieruchomości pod wynajem na terenie trójmiasta
- stworzyć heatmapę cen nieruchomości
- stworzyć heatmapę cen wynajmu
- znaleźć kolejne możliwości analizy uzyskanych danych.
=== Dziennik prac ===
- 2018/05/05 12:43 -- początek prac nad projektem -- znaleźć stronę zawierającą informację o nieruchomościach na sprzedaż i użyć scrapy do pobrania danych, narazie, o jednej nieruchomości. Udało się ukraść całą bazę danych mieszkań na trójmiasto.pl
- 2018/05/12 -- instalacja Nominatim w lokalnej maszynie wirtualnej -- bazy danych adresów, która umożliwi stworzenie mapy wizualizującej wyniki raportu. Instalacja przeprowadzona na podstawie: [[http://nominatim.org/release-docs/latest/appendix/Install-on-Ubuntu-16/]], kolejny krok to import bazy OSM. Aktualny stan: ''Internal Server Error: nativecode=pg_connect(): Unable to connect to PostgreSQL server: FATAL: database "nominatim" does not exist ** pgsql://@/nominatim''.
=== Kod ===
class NieruchomosciTrojmiastoCrawler(scrapy.Spider):
name = "nieruchomosci_trojmiasto_pl"
def start_requests(self):
urls = [
'https://dom.trojmiasto.pl/nieruchomosci-sprzedam/wi,100.html?strona=101', # mieszkania
#'https://dom.trojmiasto.pl/nieruchomosci-sprzedam/wi,200.html', # domy
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
items = response.css('.ogloszenia .ogl-item')
for item in items:
url = item.css('h3.title a::attr(href)').extract_first()
name = item.css('h3 a::text').extract_first()
price = item.css('.prize strong::text').extract()[0].strip()
price = ''.join(re.findall('\d+', price))
address = item.css('.place::text').extract_first().strip()
address = (';'.join(filter(None, re.split('\s+', address)))).replace(';/;','/')
attrs = item.css('.ogl-params li::text').extract()
rooms = level = surface_area = 'None'
for attr in attrs:
if 'pok.' in attr:
rooms = re.search('\d+', attr).group(0)
elif 'piętro' in attr:
level = re.search('\d+', attr).group(0)
elif 'm' in attr:
surface_area = re.search('\d+(\.\d+)?', attr).group(0)
if price and surface_area != 'None':
price_per_m2 = "{0:.2f}".format(float(price) / float(surface_area))
yield {
'url': url, 'name':name, 'price':price, 'address':address,
'rooms':rooms, 'level': level, 'surface_area':surface_area,
'price_per_m2': price_per_m2
}
next_url = response.css('.subcontent-body.ogloszenia .navi-bar .navi-pages li.page-last a::attr(href)').extract_first()
I('next_url={}'.format(next_url))
if next_url:
yield response.follow(response.url.split('?')[0] + next_url, callback=self.parse)
==== Projekt ostatni: Zamek do warsztatu====
od wieków @yazjack próbuje odpalić kontrolę dostępu do warsztatu, ale nie może bo c++. Dlatego też w ostatni dzień będę próbował zintegrować istniejący serwer kontroli dostępu stworzony przez @algreed z urządzeniem @yazjack. Trzymajcie kciuki.
=== Dziennik prac ===
- 6 V 2018 - główny problem został rozwiązany - esp potrafi się komunikować z serwerem i interpretować odpowiedź. teraz trzeba jeszcze dodać obsługę serva i wywalić bazę danych z github . Branchyk: https://github.com/allgreed/core-doorctl/tree/mroz-working-connection