151 lines
5.2 KiB
Python
Executable File
151 lines
5.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Copyright (c) 2022 Clément Martin <twisla@twis.la. All rights reserved.
|
|
# Unauthorized copying of this file, via any medium is strictly prohibited
|
|
|
|
"""Home network diagram
|
|
"""
|
|
|
|
from diagrams import Cluster, Diagram
|
|
from diagrams.generic.network import Firewall, Router, Switch
|
|
from diagrams.onprem.network import Internet
|
|
from diagrams.onprem.client import User, Users
|
|
from diagrams.onprem.compute import Server
|
|
from diagrams.generic.storage import Storage
|
|
|
|
from audio import Amplifier, AudioStreamer, TubeAmp, TurnTable
|
|
from consoles import NintendoSwitch, PlayStation4
|
|
from devices import AndroidPhone, IPhone, Laptop, NUC, Printer, Rpi4, WashingMachine
|
|
from edges import MyEdge, Legend
|
|
from electricity import Boxx, CPL
|
|
from fitbit import Aria
|
|
from lights import HueBridge, HueBulb, HueSpot, SmartPlug, Tradfri
|
|
from network import Modem, UniFiAP
|
|
from video import ProximusTV, Television, UltraWideScreen
|
|
|
|
GRAPH_ATTRS = {
|
|
'layout' : 'dot',
|
|
'compound': 'True',
|
|
'splines' : 'spline',
|
|
'clusterrank':'local',
|
|
'ordering':'in'}
|
|
|
|
|
|
with Diagram('Konijnenberg', direction='BT', graph_attr=GRAPH_ATTRS):
|
|
|
|
with Cluster('Users'):
|
|
alistair = User('Alistair')
|
|
clement = User('Clément')
|
|
maithe = User('Maïthé')
|
|
|
|
guests = Users('Guests')
|
|
|
|
|
|
with Cluster('Mobile'):
|
|
laptop_clement = Laptop('Laptop Clément')
|
|
laptop_maithe = Laptop('Laptop Maïthé')
|
|
nintendo_switch = NintendoSwitch('Switch Alistair')
|
|
tel_alistair = AndroidPhone('Téléphone Alistair')
|
|
tel_clement = AndroidPhone('Téléphone Clément')
|
|
tel_maithe = IPhone('Téléphone Maïthé')
|
|
|
|
wifi_devices = [ nintendo_switch, laptop_clement, laptop_maithe,
|
|
tel_alistair, tel_maithe, tel_clement ]
|
|
|
|
|
|
with Cluster('Salon'):
|
|
boxx = Boxx()
|
|
hue = HueBridge('Hue Bridge')
|
|
living_cpl = CPL('CPL salon')
|
|
malkovitch = Firewall('malkovitch')
|
|
proximus = Internet('Proximus')
|
|
proximus_router = Modem('Proximus')
|
|
telenet = Internet('Telenet')
|
|
telenet_router = Modem('Telenet')
|
|
wifi_ap = UniFiAP('NanoHD')
|
|
|
|
|
|
with Cluster('Sono'):
|
|
ampli = Amplifier('Ampli')
|
|
hifi = AudioStreamer('HiFi')
|
|
preamp = TubeAmp('Preampli phono')
|
|
turntable = TurnTable('Platine')
|
|
|
|
ampli << MyEdge('audio') >> [ hifi, preamp ]
|
|
preamp << MyEdge('audio') >> turntable
|
|
|
|
|
|
with Cluster('Video'):
|
|
tv = Television('TV')
|
|
jack = Rpi4('Jack')
|
|
proximus_tv = ProximusTV('Decodeur')
|
|
|
|
tv << MyEdge('hdmi') << [ jack, proximus_tv ]
|
|
|
|
|
|
with Cluster('Lights'):
|
|
with Cluster('Salon'):
|
|
lumieres_salon = [ HueBulb('Boule Salon'), HueBulb('Lustre Canapé'), HueBulb('Lustre Table'),
|
|
SmartPlug('Vinyls'), SmartPlug('Mappemonde'),
|
|
Tradfri('Vaisselier') ]
|
|
|
|
with Cluster('Veranda'):
|
|
lumieres_veranda = [ HueSpot(f'Veranda {x}') for x in range(6) ]
|
|
|
|
|
|
wifi_ap << MyEdge('wifi') >> [ tv, jack, boxx, hifi ]
|
|
malkovitch << MyEdge('ethernet') >> [telenet_router, proximus_router, wifi_ap]
|
|
telenet_router << MyEdge('cable') >> telenet
|
|
proximus_router << MyEdge('adsl') >> proximus
|
|
malkovitch << MyEdge('ethernet') >> living_cpl
|
|
proximus_router << MyEdge('ethernet') >> [ hue, proximus_tv ]
|
|
hue << MyEdge('zigbee') >> lumieres_salon
|
|
hue << MyEdge('zigbee') >> lumieres_veranda
|
|
|
|
|
|
with Cluster('Bureau'):
|
|
tv_bureau = Television()
|
|
ecran_bureau = UltraWideScreen()
|
|
walter = NUC('walter')
|
|
switch = Switch('dlink')
|
|
office_cpl = CPL('CPL bureau')
|
|
printer = Printer()
|
|
rainbow = Rpi4('Rainbow')
|
|
rpi4_1 = Rpi4('RPI4/1')
|
|
rpi4_2 = Rpi4('RPI4/2')
|
|
rpi4_3 = Rpi4('RPI4/3')
|
|
rpi4_4 = Rpi4('RPI4/4')
|
|
rpi4_5 = Rpi4('RPI4/5')
|
|
ps4 = PlayStation4()
|
|
zippo = Storage('Zippo')
|
|
lumieres_bureau = [ HueSpot('Plafond bureau 1'), HueSpot('Plafond bureau 2') ]
|
|
|
|
ecran_bureau << MyEdge('hdmi') >> walter
|
|
tv_bureau << MyEdge('hdmi') >> [ ps4, rainbow ]
|
|
switch << MyEdge('ethernet') >> [ office_cpl, printer, walter, ps4,
|
|
rainbow, rpi4_1, rpi4_2, rpi4_3,
|
|
rpi4_4, rpi4_5, zippo ]
|
|
|
|
|
|
with Cluster('Salle de bain'):
|
|
balance = Aria('Balance')
|
|
|
|
|
|
with Cluster('Cuisine'):
|
|
flex2i = AudioStreamer('Flex 2i')
|
|
|
|
|
|
with Cluster('Garage'):
|
|
lessiveuse = WashingMachine('Lave linge')
|
|
|
|
living_cpl << MyEdge('electric') >> office_cpl
|
|
wifi_ap << MyEdge('ethernet') >> malkovitch
|
|
wifi_ap << MyEdge('wifi') >> wifi_devices
|
|
wifi_ap << MyEdge('wifi') >> balance
|
|
wifi_ap << MyEdge('wifi') >> flex2i
|
|
wifi_ap << MyEdge('wifi') >> lessiveuse
|
|
hue << MyEdge('zigbee') >> lumieres_bureau
|
|
|
|
alistair >> [ nintendo_switch, tel_alistair ]
|
|
maithe >> [ tel_maithe, laptop_maithe ]
|
|
clement >> [ tel_clement, laptop_clement, walter ]
|