A NetAcademia lenyűgöző C# tanfolyam kiegészítő kódtára
-
több alkalomra szétszedtük a tanfolyamot
- Rasberry PI használata C# nyelven, led villogtatás (ma)
- Saját csevegőrobot készítése saját gépen (botframework-simulator használatával)
- csevegőrobot felhőbe telepítése (Azure) és összekötjük a Skype és a Facebook Messenger platformokkal.
facebook: dotnet cápák
-
Visual Studio Code + Git telepítése (innen) alapértelmezett beálításokkal, egyedül a szerkesztőnél kell beállítani a VIM helyett például a VisualStudioCode-ot.
-
fritzig: rajzolóprogram (innen tudjuk letölteni) Válasszuk a No Donation-t az ingyenes letöltéshez. Letöltés után a .zip archívumot tömörítsük ki valahová, ott tudjuk majd elindítani.
-
DotNet környezet telepítése innen Letöltjük és futtatjuk a telepítőt, alapértelmezett beállításokkal.
-
Docker telepítése innen letöltjük, telepítjük. Fontos:
- csak adminisztrátor felhasználóként telepítsük,
- többször újraindíthatja a gépet.
- HyperV-t engedélyezteti első induláskor
-
SSH kliens (Windows-hoz: a Putty-ot fogjuk használni, innen letölthető)
-
zenmap: ezzel keressük meg a Raspberry-nket a hálózatunkon innen.
-
Visual Studio Extensions: C#, Docker (Baloldalon az alsó ikon, és a keresőmezőbe: C#/Docker, Install gomb majd Reload gomb)
A Fritzing használatával kapcsolási rajzot készítünk a megvalósításhoz. Akit az elektronikai kérdések érdekelnek, az ezen az ingyenes tanfolyamon tud egy kicsit jobban elmélyülni.
- A Raspberry GPIO az a felület, ahol elektronikai eszközöket tudunk a számítógéphez csatlakoztatni.
- A GPIO a tápfeszültség csatlakozóval szemben lévő oldalon van, két sor tüske.
- A külső oldalán fogunk két tüskét tüskét használni.
- (Ha felénk áll a tápfeszültség csatlakozó, akkor) Balról a harmadik tüske a földpont.
- A hatodik pedig az áramkörünk másik végpontja: ezt tudjuk PIN01 névvel megszólítani.
- Egy ledet és egy 650 Ohm-os ellenállást kötünk sorba erre áramkörre.
Egy ingyenes tanfolyam a Raspberry lelkivilágáról.
md rpi.server
cd rpi.server
dotnet new webapi
- A Dockerfile-ban leírjuk, hogy hogy épül fel a csomag
- build.bat-ban elkészítjük a "programot", ami előállítja és felküldi a docker hub-ra az egészet
- készítünk egy Docker Hub repo-t, ahova kerül a docker csomag, és ahonnan lehúzzuk a Raspberry-re (ezaz
- ugyanazon a hálózati eszközön van, mint mi
- az IP címünket megkeressük IPConfiggal
Ethernet adapter Ethernet 2: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::84af:ad94:47f1:242d%12 IPv4 Address. . . . . . . . . . . : 192.168.1.128 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.1.1
- zenmap-pel kiadjuk a parancsot:
nmap -sn 192.168.1.128/24
ahol a mi címünk: 192.168.1.128
- putty-tyal az így megszerzett címre behívunk SSH-val név: pi jelszó: raspberry
curl -sSL https://get.docker.com | sh
sudo docker pull gplesz/rpi.server
sudo docker run -p 5000:5000 gplesz/rpi.server
de ez a második parancs nem éri el a gpio-t a dockerből, így ezt egy külön paraméterrel engedélyezni kell. Vagyis, a jó alkalmazás indítás a következő:
sudo docker run -p 5000:5000 --device /dev/gpiomem gplesz/rpi.server
vágólapról odamásolni a putty konzolba jobb egér kattintással lehet
Egy nuget csomagot használunk:
dotnet add package Unosquare.Raspberry.IO --version 0.14.0
- Programozási alapismeretek C# nyelven
- elektronikai ismeretek
- Egy Raspberry bevezetés a Raspberry lelkivilágáról.
- Hálózati alapismeretek
Áttekintő ábra:
+------------------+
| Skype |
| | +------------------------------------>+
| | v
| |
+------------------+ +----------------------------+
| |
+------------------+ | Internetes | +-----------------------+
| Messenger | | csevegőrobot | +-------> | Csevegőrobot |
| +-----------------------> | csatornaszolgáltatás | | |
| | | | | |
| | | | <------+ | |
+------------------+ | | +-----------------------+
| |
+------------------+ | |
| Teams chat | +----------------------> | |
| | +-----------------+----------+
| | ^
| | |
+------------------+ |
|
+------------------+ |
| Slack | |
| | +----------------------------------------->+
| |
| |
+------------------+
érdemes a legutolsó .NET Core SDK-t használni.
Letöltés és telepítés után használható is.
md bot.server
cd bot.server
dotnet new webapi
A .NET Core és az ASP.NET Core újdonságai
Ha valakinek a Developer Certificate-et nem fogadja el a gépe, akkor ezt kell mondania:
dotnet dev-certs https --trust
Ahhoz, hogy programozási környezetünk legyen a saját gépünkön, telepítjük a Bot Framework Emulator-t, innen.
Összefoglaló cikk a rendszerről.
rövid leírás a HTTP protokolról
A Bot Framework szabályai:
- a kérést POST üzenetként kapja az alkalmazásunk.
- a válaszunknak HTTP OK kódnak kell lennie
A kommunikációhoz telepítjük a következő nuget csomagot:
dotnet add package Microsoft.Bot.Connector.AspNetCore --version 2.0.1.7
Ahhoz, hogy a csevegőrobotunkból elérjük a raspberry-n futó alkalmazást, RestApi hívást kell csinálni a RestSharp nevű nuget csomaggal.
dotnet add package RestSharp --version 106.3.0
Áttekintő ábra
INTERNET +--------------------------+ +-------------------------+
| | | bot.server |
| Azure Csevegőrobot | | Kitesszük az Internetre|
| csatornaszolgáltatás | | az azure webalkamazás |
| (Bot channel service) | | segítségével |
| | | (azure webapp) |
| | | |
+--------------------------+ +-------------------------+
+ ^
| |
| |
| |
| |
+---+ +-----+ +--------+ +-------+ +-----+ +---+ | +--+ | +-----------+ +--------------+ +--+
| |
LOKÁLIS HÁLÓZAT v +
+-------------------------+
| |
| Raspberry webapi |
| lokális hálózat |
| (192.168.0.102) |
| |
| |
+-------------------------+
Ehhez az Azure CLI-t fogjuk használni.
- Vagy regisztrálunk az Azure oldalán
- vagy regisztrálunk a Visual Studio Dev Essentials
Ezzel egy éves ingyenes hozzáféréshez, és 200USD lehasználható kredithez jutunk
Egy korábbi cikk az az webapp new
használatához, ez sajnos a webapp 0.2.x változatával már nem működik.
D:\Repos\LenyugozoCsharp\bot.server> az login
után kapunk egy kódot és egy linket, a linket beírva a böngészőbe, majd a kódot a megfelelő helyre, egy Microsoft bejelentkezés után a parancssorunk is bejelentkezett az azure-ba.
bejelentkezés után -ha több fiókunk is van- kiválaszthatjuk akár névvel is, hogy melyiket akarjuk most használni:
ac account list
az account set --subscription "előfizetés neve"
még érdemes megadni, hogy melyik régió központjában szeretnénk dolgozni:
az configure --defaults location="North Europe"
+--------------------------------------------------------------------------------------------+
| Resource Group (erőforrás csoport) |
| |
| |
| +-------------------------------------------------------------------------+ |
| | | |
| | AppService plan (milyen erőforrást rendel az alkalmazás mögé | |
| | az Azure, és ezzel összefüggésben mennyit kell érte fizetni?) | |
| | | |
| | +---------------------------------------------------------+ | |
| | | | | |
| | | WebApp (Ez a webkiszolgáló, ami az alkalmazásunkat | | |
| | | futtatni fogja) | | |
| | | | | |
| | | +---------------------------------+ | | |
| | | | App (bot.server) | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | +---------------------------------+ | | |
| | | | | |
| | | | | |
| | | | | |
| | +---------------------------------------------------------+ | |
| | | |
| +-------------------------------------------------------------------------+ |
| |
| |
+--------------------------------------------------------------------------------------------+
az group create --name rgForLenyugozoCSharp
az appservice plan create --resource-group rgForLenyugozoCSharp --name appsvcForLenyugozoCSharp --sku FREE
ehhez telepíteni kell az azcli alá a webapp extension-t:
az extension add --name webapp
ha frissíteni akarnám:
az extension update --name webapp
( Választható extension-ök listája:
az extension list-available
)
WebApp létrehozása
az webapp create --resource-group rgForLenyugozoCSharp --name appBotSvcForLenyugozoCSharp --plan appsvcForLenyugozoCSharp
lekérdezzük a gites telepítő végpont címét:
PS D:\Repos\LenyugozoCsharp\bot.server> az webapp deployment source config-local-git --name appBotSvcForLenyugozoCSharp --resource-group rgForLenyugozoCSharp
{
"url": "https://[email protected]/appBotSvcForLenyugozoCSharp.git"
}
opcionális: git kliens telepítés chocolatey-vel
majd egy könyvtárba bemásolni a kódot, és:
git init
git add .
git commit -am "első változat"
git remote add azure https://[email protected]/appBotSvcForLenyugozoCSharp.git
Ez utóbbival egy távoli végpontot hoztunk létre, aminek a segítségével felküldhetjük a forráskódot az azure-ra.
Áttekintés
ResourceGroup+AppServicePlan+WebApp
INTERNET +--------------------------+ +-------------------------+ +------------------------+
| | | bot.server | BUILD | deployment git repo |
| Azure Cse^egőrobot | | Kitesszük az Internetre| <---+ | |
| csatornaszolgáltatás | | az azure webalkamazás | | |
| (Bot channel ser^ice) | | segítségé^el | | |
| | | (azure webapp) | | |
| | | | | |
+--------------------------+ +-------------------------+ +------------------------+
+ ^ ^
| | |
| | | PUSH
| | |
| | |
+---+ +-----+ +--------+ +-------+ +-----+ +---+ | +--+ | +-----------+ +--------------+ +--+
| | |
LOKÁLIS HÁLÓZAT v + +
GIT
+-------------------------+ +-----------------------+
| | | |
| Raspberry webapi | | |
| lokális hálózat | | Forráskód |
| (192.168.0.102) | | |
| | | |
| | | |
+-------------------------+ +-----------------------+
Ezek után telepítés a pshsal történik:
git push azure master
Ha nem tudom az azure-os FIÓKHOZ tartozó telepítő jelszót, akkor így beállíthatom:
az webapp deployment user set --user-name <felhasználónév> --pasword <jelszó>
Az első probléma:
két projekt is van a könyvtárban, nem tudja, hogy melyiket kell buildelnie:
remote: Unable to determine which project file to build. D:\home\site\repository\bot.server\bot.server.csproj, D:\home\site\repository\rpi.server\rpi.server.csproj.y\rpi.server\rpi.server.csproj.
remote: Error - Changes committed to remote repository but deployment to website failed.
Ehhez innen kipróbáljuk, a .deployment file használatát.
Telepítjük az azcli-be a botservice extension-t:
az extension add --name botservice
És a robot létrehozás így menne:
az bot create --resource-group rgForLenyugozoCSharp --kind webapp --name botchannelForLenyugozoCSharp
Ez sajnos nem jó, mert távolról a szükséges nevet és felhasználót nem tudom rögzíttetni az Azure-ral:
Unable to provision appid and password for supplied credentials
Marad a kézi hajtány, azure weboldalon hozzuk mindezt létre.
- a bot channel registration-ben meg kellett adni (egy új oldalon létrehoztunk egy újat) egy Microsoft alkalmazásjelszót. Ezt a jelszót kell kezelnünk a saját alkalmazásunkban, enélkül nem lesz kapcsolat.
- a saját gépünkön a bot framework emulatort úgy kapcsoltuk a bot.server-hez, hogy beállítottuk a név+jelszó párt.
így, tudjuk tesztelni az alkalmazásunk működését helyben, mielőtt az azurra telepítjük.
A Microsoft dokumentációja alapján
ResourceGroup+AppServicePlan+WebApp
Credentials
INTERNET +--------------------------+ (appid+apppassword)-----------------------+ +------------------------+
| | | bot.server | BUILD | deployment git repo |
+-----------+ | Azure Cse^egőrobot | <------------+ | Kitesszük az Internetre| <---+ | |
| Facebook | <---------+ | csatornaszolgáltatás | | az azure webalkamazás | | |
| Messanger | | (Bot channel ser^ice) | +------------> | segítségé^el | | |
+-----------+ +---------> | | | (azure webapp) | | |
| | | | | |
+---+--+-------------------+ +-------------------------+ +------------------------+
+-----------+ | ^
| Skype | | | + ^ ^
| | <----------------v | | | |
+-----------+ | | | | PUSH
+-------------------> | | |
| | |
+---+ +-----+ +--------+ +-------+ +-----+ +---+ | +--+ | +-----------+ +--------------+ +--+
| | |
LOKÁLIS HÁLÓZAT v + +
GIT
+-------------------------+ +-----------------------+
| | | |
| Raspberry webapi | | |
| lokális hálózat | | Forráskód |
| (192.168.0.102) | | |
| | | |
| | | |
+-------------------------+ +-----------------------+
config-zip megoldás?
- ki kell deríteni, hogy miért nem működik a csevegőrobotunk
- kivételek képződése esetén (mivel async/await környezetben vagyunk, így több szálú végrehajtás történik) a kivételek nem kerülnek a kivételkezelés normális menetére
- a hiba oka egészen triviális: letelt az egy hetes próba előfizetésünk
- exception drive development
- ha hibába futhatunk, érdemes gondoskodni, hogy legyen valamilyen válaszunk
- kitesszük a robotot az Internetre, és megnézzük, hogy működik-e?
- lokális Raspberry PI elérése Internetről (ngrok)
- hogyan tudunk információhoz jutni, ha már telepítettük a robotot az azure-ra
- ha nem működik, akkor nincs naplónk, ezért ezt be kell építeni: Serilog
- két parancs:
- dotnet add package Serilog
- dotnet add package Serilog.Sinks.File
Azure
+------------------------------------------------------------------------------------------+
| |
| Git kódtár WebApp |
Lokális számítógép | +-----------------+ +------------------+ |
+------------------------------------+ | | | | | |
| Git kódtár | | | | Automatikus | | |
| +---------------+ | | | | telepítés | | |
| | | | git push | | | | | |
| | | +-------------------------------------------> | | +---------------+ | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | +-----------------+ +------------------+ |
| +------------+--+ | | https://appbotsvcforlenyugozocsharp.azurewebsites.net |
| ^ | | |
| Working folder | | | |
| +--------------+ | | | |
| | | | | | Cse^egőrobot csatornaregisztrácó |
| | | | | | +-----------------------------------------+ |
| | | | | | | | |
| | | +------+ | | | | |
| | | git commit | | Web chat | | |
| | | | | +-------------------------+ | | |
| +--------------+ | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| Bot framework emulator | | | | +-----------------------------------------+ |
| +------------------------------+ | | | | |
| | | | | +-------------------------+ |
| | | | | |
| | | | +------------------------------------------------------------------------------------------+
| | | |
| | | |
| | | | Facebook app
| | | | +------------------------+
| | | | | |
| +------------------------------+ | | |
| | | |
+------------------------------------+ | |
| |
| |
| |
| |
+------------------------+