# OHJELMOINTI

# Prosessorimoduulin (CPU-SoM) ohjelmointi

### <span style="color: rgb(0, 0, 0); background-color: rgb(251, 238, 184);">1.Valmistelut</span>

Työpisteellä pitäisi olla valmiina:

- Verdin Development Board (kuvassa), johon on kytketty: 
    - Muistitikku, jossa tarvittava tiedosto prosessorin ohjelmointia varten
    - Näyttö HDMI-kaapelilla kytkettynä
    - Näppäimistö USB-kaapelilla kytkettynä
    - Virtajohto
    - Kokoamispisteen Linux-kone (USB-kaapeli X34-liittimessä) 
        - - - Tämä vain uudelleenohjelmointia varten

- Development Board on off-tilassa 
    - +V5 STB LED on päällä
    - X34-liittimen merkkivalo on päällä

- Ethernet-kaapeli

[![PIENdevboard-kytkennät.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/BCWpiendevboard-kytkennat.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/BCWpiendevboard-kytkennat.jpg)

### <span style="background-color: rgb(251, 238, 184); color: rgb(0, 0, 0);">2. Ohjelmointi</span>

- Aseta CPU-SoM Development Boardille
- Paina ON/OFF -näppäintä

[![PIENkortti-devboardiin.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/pienkortti-devboardiin.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/pienkortti-devboardiin.jpg)[ ![PIENON-OFF-painike2.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/pienon-off-painike2.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/pienon-off-painike2.jpg)

- Näyttöön avautuu Toradex easy installer
- Valitse listalta oikea image (nuolinäppäinten avulla). Jos et tiedä mikä on oikea, noudata seuraavaa ohjetta:

### <span style="background-color: rgb(251, 238, 184); color: rgb(0, 0, 0);">3. Imagen valinta</span>

<details id="bkmrk-valitse-listalta-ima"><summary></summary>


- Valitse listalta image jonka otsikko on integral **pääkortin versio**. Versio näkyy numerosarjan lopusta (modeemipaikan reunassa). 
    - Jos on useita, valitse **tuorein revisio**
    - Jos on samannimisiä, valitse **uusin päivämäärä**
- **Esimerkkikuvassa** alla ollaan kokoamassa integralia, jonka pääkortin versio on <span style="background-color: rgb(251, 238, 184);">A.22</span>. Tästä on kaksi <span style="background-color: rgb(191, 237, 210);">revisiota</span>, joista valitaan tuorein. Tuoreimmassa versiossa on myös <span style="background-color: rgb(199, 207, 243);">uusin päivämäärä</span>.[![Imagen-valinta03.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/imagen-valinta03.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/imagen-valinta03.jpg)

</details>### <span style="background-color: rgb(251, 238, 184); color: rgb(0, 0, 0);">4. Imagen asennus</span>

- Aloita asennus painamalla näppäimistöltä **i** (install)

[![install.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/35Einstall.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/35Einstall.jpg)

- Näyttöön avautuu valintaikkunoita. Valitse **"Yes"** ja **"Accept"**, painamalla näppäimistöltä **Y** ja **C** (alleviivatut kirjaimet)

[![image.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/scaled-1680-/image.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/image.png)

[![accept.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/accept.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/accept.jpg)

- Toradex Easy Installer asentaa imagen prosessorille. Tämä saattaa kestää hetken.

<p class="callout info">Jos tämä työvaihe on sinulle tuttu, voit aloittaa seuraavia vaiheita sillä välin kun image latautuu.</p>

- Valitse avautuvasta valintaikkunasta **"Power off"** painamalla näppäimistöltä **P**

[![image.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/scaled-1680-/Vf8image.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/Vf8image.png)

- Irrota prosessorimoduuli development boardista. Lukituksen voi vapauttaa lyhyillä sivuilla olevista jousista, vetämällä niitä ulospäin.

### <span style="background-color: rgb(251, 238, 184); color: rgb(0, 0, 0);">4. Prosessorimoduulin (CPU-SoM) uudelleenohjelmointi</span>

<details id="bkmrk-kun-prosessorimoduul"><summary></summary>

Kun prosessorimoduuli on ohjelmoitu normaalisti (edellinen ohje), sitä ei voida tehdä uudelleen ilman että SoM:lle ladataan ensiksi uudelleen toradexin **Easy Install** apuohjelma (joka näyttää edellisen ohjeen valikot).

Easy install voidaan käynnistää USB-kaapelin ja Toradexin EasyInstall -apuohjelman avulla, jonka voi ladata eri SoM-tyypeille Toradexin sivuilta:

[https://developer.toradex.com/easy-installer/toradex-easy-installer/download-tezi/](https://developer.toradex.com/easy-installer/toradex-easy-installer/download-tezi/)

##### 4.1 Valmistelu

Sammuta Verdin Development Board joko on/off painikkeesta, tai käyttämällä jännitteen syöttöliitintä irti. Kytke syöttöliittin takaisin kiinni. Development Board (off) tilaan, mutta **+V5 STB** LED:iin syttyy valo.

##### 4.2 Kytkentä

Varmista seuraavat:

- Development Boardiin on kytketty USB-tikku, joka sisältää asennettavan käyttöjärjestelmän.
- USB-kaapeli on kytketty ohjelmointitietokoneen ja development boardin X34 liittimen väliin.

[![Screenshot_2026-01-26_12-41-29.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/scaled-1680-/screenshot-2026-01-26-12-41-29.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/screenshot-2026-01-26-12-41-29.png)[![Screenshot_2026-01-26_12-39-29.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/scaled-1680-/screenshot-2026-01-26-12-39-29.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/screenshot-2026-01-26-12-39-29.png)

##### 4.3 Easy Installerin asennus

- Käynnistä Toradex easyInstaller -asennusohjelma tietokoneelta

<p class="callout warning">Huomaa, että **eri SOM mallit käyttävät eri palautusohjelmaa!** Alla oleva ohjelma on **Verdin iMX8M Mini** sarjan laitteille (tunniste iMX8MM).</p>

[![Screenshot_2026-03-04_17-07-21.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/scaled-1680-/screenshot-2026-03-04-17-07-21.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/screenshot-2026-03-04-17-07-21.png)

Tarvittaessa syötä seuraavat komennot:

```bash
>$ cd Verdin-iMX8MM_ToradexEasyInstaller_6.8.5+build.14
>$ sudo ./recovery-linux.sh
```

- Ohjelma jää odottamaan että se löytää USB-väylästä **Verdin Development Board:in** palautustilassa.

[![image.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/scaled-1680-/image.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/image.png)

- Paina (ja pidä painettuna) **RECOVERY-painike**, ja samaan aikaan napauta **ON/OFF**-painiketta.

[![PIENuudelleenohjelmointi.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/kmVpienuudelleenohjelmointi.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/kmVpienuudelleenohjelmointi.jpg)

- EasyInstaller -ohjelma tunnistaa Recovery-tilassa oleva prosessorimoduuli, ja aloittaa palautus:

[![image.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/scaled-1680-/uPAimage.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-01/uPAimage.png)

<p class="callout success">**VALMIS:** Nyt SoM-prosessorimoduuli on palautettu tehdastilaan, ja se voidaan ohjelmoida normaalisti uudelleen. </p>

</details>

# Moduulien ohjelmointi, device setup ja moduulien testaus

### 1. Valmistelut

#### 1.1 IP-osoitteen tarkistus 

- Mene ensin osoitteeseen **192.168.10.134** ja varmista, ettei muita laitteita ole tässä osoitteessa.  
    
    - Jos muita laitteita ei ole, selainikkuna valittaa time-outista
    - Jos muita laitteita on, ilmestyy kirjautumisikkuna. Tässä saattaa olla myös kyse siitä, että jotain on jäänyt selaimen välimuistiin - muista päivittää ikkuna varmistaaksesi asian.

 Jos osoite on vapaa, jatka seuraavasti:


#### 1.2 Integralin kytkeminen Workbench/Testbenchiin


[![PIENdevice-setup-setup.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/piendevice-setup-setup.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/piendevice-setup-setup.jpg)


##### 1.2.1 Kytkennät

- Kytke virtajohdin virtaliittimestä pistorasiaan. 
    - **Ensin** virtaliitin
    - Sitten pistorasiaan
- Eth1-porttiin syttyy oranssi valo. **Odota**, että valo sammuu.
- Kytke Ethernet-kaapeli johonkin vapaaseen Eth-porttiin.

[![kytke_integral03.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/scaled-1680-/kytke-integral03.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/kytke-integral03.jpg)

##### 1.2.2 Selainikkunan avaaminen

- Linux-koneelta: 
    - [![Workbench-server-icon.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/workbench-server-icon.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/workbench-server-icon.png) Käynnistä Integral Workbench Server (mustavihreä ikoni). Avautuu teksti-ikkuna.
    - [![Workbench-user-mode-icon.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/workbench-user-mode-icon.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/workbench-user-mode-icon.png) Käynnistä Workbench user mode (turkoosi vasara). Avautuu selainikkuna.

[![mainmenu.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/mainmenu.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/mainmenu.png)

<p class="callout success">Olet nyt Integral testbenchin Main menussa, ja Integral on kytketty koneeseen.</p>


### <span style="background-color: rgb(194, 224, 244);">2. Moduulien ohjelmointi</span>

<p class="callout info">Moduulit pyritään ohjelmoimaan valmiiksi etukäteen. Jos joudut ohjelmoimaan moduulit, tee se tässä vaiheessa.</p>

<details id="bkmrk-klikkaa-run-valitse-"><summary></summary>

[![mainmenu-moduleprogramming.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/mainmenu-moduleprogramming.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/mainmenu-moduleprogramming.png)

- Klikkaa **Run**

**[![module-programming-2.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/module-programming-2.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/module-programming-2.png)**

- Valitse Integral-moduulit alasvetovalikosta kuhunkin moduulipaikkaan.

<p class="callout warning">Huomioi moduulipaikkojen järjestys! Moduulipaikka 1 on virtaliittimen puoleisessa päädyssä.</p>

<p class="callout warning">**USB-C-4P-**moduulia ei ohjelmoida. Valitse None.</p>

[![module-programming-3 - rajattu.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/scaled-1680-/module-programming-3-rajattu.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/module-programming-3-rajattu.png) [![moduulipaikat-simple.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/scaled-1680-/moduulipaikat-simple.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-03/moduulipaikat-simple.png)

- Klikkaa **Confirm**
    - Ohjelma hakee Dropboxista uusimmat firmwaret ja asentaa ne vastaaviin moduuleihin.
    - Lisäksi ohjelma luo laitteelle sarjanumeron.

[![module-programming-4.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/module-programming-4.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/module-programming-4.png)

- Klikkaa **Back to home screen**

### **[![module-programming-5.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/module-programming-5.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/module-programming-5.png)**

##### <span style="background-color: rgb(194, 224, 244);">2.1 Moduulien uudelleenohjelmointi</span>

Jos joudut ohjelmoimaan moduulit uudestaan, paina im-programming -ikkunassa RESET, ja suorita samat vaiheet kuin ensimmäiselläkin kerralla.

</details>### 3. Device setup



<p class="callout info">Huom! Jos moduulit on ohjelmoitu jo aiemmin, ja aloitat Testbenchin käytön Setup-vaiheesta, odota noin 3 minuuttia kytkemisen jälkeen, että laite herää.</p>

Seuraavaksi konfiguroidaan käyttöjärjestelmä:

[![mainmenu-operatingsystemsetup.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/mainmenu-operatingsystemsetup.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/mainmenu-operatingsystemsetup.png)

- Klikkaa **Run**

**[![operating-system-setup-2.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/operating-system-setup-2.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/operating-system-setup-2.png)**

Ohjelma konfiguroi käyttöjärjestelmän. Tämä on monivaiheinen toimenpide, jossa voi kestää 7-8 minuuttia. Eth1-portin vilkkuva oranssi valo kertoo, että toimenpide on edelleen käynnissä.

Toimenpide sisältää seuraavat asiat:

- - MAC-osoitteen asettaminen Eth2-portille
    - Actiweb-ohjelmistoalustan ja siihen liittyvien pakettien asentaminen
    - Palomuurin konfigurointi
    - Kernelin watchdog-ajastimen setup
    - Käyttöliittymän salasanan vaihtaminen
    - Sarjanumeron ym. tallentaminen CSV-tiedostoon

[![operating-system-setup-31.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/scaled-1680-/operating-system-setup-31.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-02/operating-system-setup-31.png)


<p class="callout info">Setup kestää noin 7-8 min. Jos työvaihe on tuttu, voit tehdä esimerkiksi liittimien tarrojen liimailua tässä kohtaa.</p>

##### 3.1 Näytön tarkistus

- Set-upin jälkeen näytössä tulisi näkyä aloitusvalikko tai vastaava.

<p class="callout warning">Testaa, että näyttö reagoi kosketukseen.</p>

##### 3.2 Tietojen tarkistus

- Lopuksi tarkistetaan että tiedot ovat tallentuneet **produced\_devices.csv** -tiedostoon (sijaitsee actiweb-käyttäjän kotihakemistossa):

1. Sarjanumero 
    - - On muotoa \[vuosiluku\]\[kuukausi\]\[päivä\]\[juokseva numero 5 merkkiä\], esim. 2026081500345
2. Device ID
3. Admin-salasana
4. Linux-salasana
5. Päivämäärä
6. Eth2 portin MAC-osoite

<p class="callout success">Tässä vaiheessa on hyvä kirjoittaa sarjanumero lapulle ja teipata se Integralin päätyyn. Näin laitteet eivät mene sekaisin, jos kokoaa monta kerralla.</p>

##### 3.2 Operating system setup uudelleen


<details id="bkmrk-%C2%A0-operating-system-s"><summary></summary>

**Operating system setup** ‑toimintoa ei voi suorittaa useita kertoja peräkkäin, koska toiminto vaihtaa laitteelle uuden salasanan. Seuraavalla yrityksellä toiminto yrittää kirjautua Integraliin vanhalla salasanalla, mikä estää toiminnon onnistumisen.

Toimi seuraavasti:

- Kytke Integral irti piuhoista.
- Tee tilaa CPU-SoM-kortin irrotusta varten 
    - Irrota antennipiuha modeemista + irrota virtaliitin + ota Integral ulos kotelosta.
    - <span style="background-color: rgb(251, 238, 184);">**TAI**</span>
    - Ruuvaa antennipiuha irti kotelosta (tämä on hankalampi kiristää kunnolla takaisin laitettaessa, mutta on vähemmän vaiheita).
- Irrota CPU-SoM Integralin pääkortista.
- Tee **[Prosessorimoduulin (CPU-SoM) uudelleenohjelmointi](https://wiki.bithouse.fi/books/integral-universaali-alakeskusprosessori/page/prosessorimoduulin-cpu-som-ohjelmointi#bkmrk-3.3-prosessorimoduul).**
- Aseta CPU-SoM takaisin Integralin pääkorttiin (liitä takaisin virtaliitin jos olet irrottanut sen 2-kohdassa).
- Tee [**Valmistelu.**](https://wiki.bithouse.fi/books/integral-universaali-alakeskusprosessori/page/moduulien-ohjelmointi-ja-testaus#bkmrk-5.-set-up-1)
- Tee tämän ohjeen **Device setup.**
- Kokoa takaisin aiemmin purkamasi osat.

<p class="callout info">Uudelleen konfiguroidessa toiminto ilmoittaa virheestä: source already added. Tämä kuuluu asiaan.</p>

<p class="callout warning">HUOM! Jos yrittää tehdä **Operating system setup** -toiminnon väärällä salasanalla, laite lukitsee turvallisuussyistä itsensä määräajaksi.</p>

- Mene kahville.

</details>
### <span style="background-color: rgb(194, 224, 244);">4. Testaukset (niille moduuleille joita laitteessa on) </span>

Testataan ne moduulit, joita laitteeseen on asennettu. Kaikille ei ole vielä testiä, mutta testataan ne, jotka pystytään.

<p class="callout info">Testaus tehdään vasta Setup-vaiheen jälkeen.</p>

#### <span style="background-color: rgb(194, 224, 244);">4.1 IM-IO816</span>

- Testi tulossa.

#### <span style="background-color: rgb(194, 224, 244);">4.2 IM-RS485-2P (modbus)</span>

- Kytke testausliitin IM-RS485-2P -moduuliin.

[![RS-testiliitin.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/scaled-1680-/rs-testiliitin.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/rs-testiliitin.jpg)

<span style="color: rgb(251, 238, 184);">[![mainmenu-modbustest.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/mainmenu-modbustest.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/mainmenu-modbustest.png)</span>

- Valitse Modbus-testi.
- Klikkaa **Run**.

<span style="color: rgb(251, 238, 184);"><span style="color: rgb(251, 238, 184);">[![modbus-test-success.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/scaled-1680-/modbus-test-success.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/modbus-test-success.png)</span></span>

#### <span style="background-color: rgb(194, 224, 244);">4.3 IM-MBUS-10/250</span>

- Kytke IM-MBUS-10 tai IM-MBUS-250 mittariin, joka on testausta varten kokoamispisteellä.

[![mbus-testilaite.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/scaled-1680-/mbus-testilaite.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/mbus-testilaite.jpg)

<span style="color: rgb(251, 238, 184);">[![mainmenu-mbustest.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/mainmenu-mbustest.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/mainmenu-mbustest.png)</span>

- Valitse Mbus-testi.
- Klikkaa **Run**.


[![mbus-test-success.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/scaled-1680-/mbus-test-success.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/mbus-test-success.png)

#### <span style="background-color: rgb(194, 224, 244);">4.4 IM-USB-C-4P</span>

- Terminaali auki (ctrl-alt-t) 
    - ssh actiweb@192.168.10.134
- ei mitään kiini im-usb-4c:ssä 
    - lsusb -&gt; näyttää kaikki laitteet
- Kiinitetään USB-tikku/-tikut 
    - lsusb -&gt; näyttää 1/2/3/4 uutta riviä
    - toistetaan tarvittaessa, koska testipisteellä ei välttämättä ole neljää tikkua joilla testata

[![USB-test.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/scaled-1680-/usb-test.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/usb-test.jpg)

- tikku/tikut irti 
    - lsusb -&gt; ei näytä tikkua/tikkuja

Esimerkkikuvassa testattu kaksi porttia kerrallaan.

[![usb-test-success-highlight.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/scaled-1680-/usb-test-success-highlight.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-07/usb-test-success-highlight.jpg)

# VPN ja Customization (asiakaskohtaiset asennukset)

### 1. VPN

#### 1.1 Avaa tarvittavat tiedostot

- Avaa Produced\_devices.CSV -tiedosto (Actiweb-käyttäjän kotihakemistosta)
- Avaa VPN jump pikalinkit.ods -tiedosto (työpöydältä)

<p class="callout info">VPN jump pikalinkit -tiedostosta on lukittu tarvittavat solut joten siihen ei voi syöttää vääriin kohtiin tietoa.</p>

- kopioi Produced\_devices.CSV -tiedostosta **Device ID**
- Liitä se punaisella merkittyihin soluihin, jolloin tiedosto automaattisesti muokkaa tarvittavat rivit 
    - Mikäli solut vaihtavat väriä (ei enää punainen), tee uudestaan 
        - UNDO ja uus yritys
        - Liitä mieluummin Excelin syöttöriville kuin suoraan soluun, niin onnistuu paremmin

<table border="0" cellspacing="0" id="bkmrk-vpn-linkin-luonti-co" style="width: 100%;"><colgroup width="83"></colgroup> <colgroup width="56"></colgroup> <colgroup width="41"></colgroup> <colgroup span="2" width="72"></colgroup> <colgroup width="204"></colgroup> <colgroup width="72"></colgroup> <colgroup width="53"></colgroup> <colgroup width="449"></colgroup><tbody><tr><td align="center" bgcolor="#FFFF00" colspan="9" data-sheets-value="{ "1": 2, "2": "VPN linkin luonti"}" height="37" rowspan="2" style="border: 2px solid rgb(0, 0, 0); width: 99.8608%;" valign="middle">**<span style="color: #000000; font-size: x-large;">VPN linkin luonti</span>**</td></tr><tr></tr><tr><td align="center" bgcolor="#D9F2D0" colspan="3" data-sheets-value="{ "1": 2, "2": "common name"}" height="18" style="border: 2px solid rgb(0, 0, 0); width: 33.2869%;" valign="bottom">**<span style="color: #000000;">common name</span>**</td><td align="center" bgcolor="#F2CFEE" colspan="3" data-sheets-value="{ "1": 2, "2": "url"}" style="border: 2px solid rgb(0, 0, 0); width: 33.2869%;" valign="bottom">**<span style="color: #000000;">url</span>**</td><td align="center" bgcolor="#FBE3D6" colspan="2" data-sheets-value="{ "1": 2, "2": "customer"}" style="border: 2px solid rgb(0, 0, 0); width: 22.1913%;" valign="bottom">**<span style="color: #000000;">customer</span>**</td><td align="center" bgcolor="#4E95D9" data-sheets-value="{ "1": 2, "2": "address"}" style="border-top: 2px solid rgb(0, 0, 0); border-bottom: 2px solid rgb(0, 0, 0); border-left: 2px solid rgb(0, 0, 0); width: 11.0956%;" valign="bottom">**<span style="color: #000000;">address</span>**</td></tr><tr><td align="center" bgcolor="#FF3838" colspan="3" data-sheets-value="{ "1": 2, "2": "INSERT DEVICE ID"}" height="34" style="border-width: 2px 1px 2px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 33.2869%;" valign="middle"><span style="color: #000000; font-family: Liberation Sans;">INSERT DEVICE ID</span></td><td align="center" bgcolor="#FF3838" colspan="3" data-sheets-value="{ "1": 2, "2": "INSERT DEVICE ID"}" style="border-width: 2px 1px; border-style: solid; border-color: rgb(0, 0, 0); width: 33.2869%;" valign="middle"><span style="color: #000000; font-family: Liberation Sans;">INSERT DEVICE ID</span></td><td align="center" bgcolor="#FFFFFF" colspan="2" data-sheets-value="{ "1": 2, "2": "generic"}" style="border-width: 2px 1px; border-style: solid; border-color: rgb(0, 0, 0); width: 22.1913%;" valign="middle"><span style="color: #000000; font-size: medium;">generic</span></td><td align="center" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="border-top: 2px solid rgb(0, 0, 0); border-bottom: 2px solid rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000; font-size: medium;">  
</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" colspan="9" data-sheets-value="{ "1": 2, "2": "Permission key:"}" height="18" style="border-width: 2px 2px 1px; border-style: solid; border-color: rgb(0, 0, 0); width: 99.8608%;" valign="bottom"><span style="color: #000000;">Permission key:</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" colspan="9" data-sheets-value="{ "1": 2, "2": "G76NK9645U367R9K6W49"}" height="18" style="border-bottom: 2px solid rgb(0, 0, 0); border-left: 2px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 99.8608%;" valign="bottom"><span style="color: #000000; font-family: Liberation Sans;">G76NK9645U367R9K6W49</span></td></tr><tr><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" height="18" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td></tr><tr><td align="center" bgcolor="#CAEEFB" colspan="9" data-sheets-value="{ "1": 2, "2": "Terminaalissa seuraavat järjestyksessä:"}" height="30" style="border: 2px solid rgb(0, 0, 0); width: 99.8608%;" valign="middle">**<span style="color: #000000; font-size: large;">Terminaalissa seuraavat järjestyksessä:</span>**</td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 1}" height="30" style="border-width: 2px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">1</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": "ssh machine@192.168.0.250"}" style="border-top: 2px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">ssh [machine@192.168.0.250](mailto:machine@192.168.0.250)</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 2}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">2</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": "cd pkigenerator"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">cd pkigenerator</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 3}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">3</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": ".\/bit_vpn create --common-name INSERT DEVICE ID --url INSERT DEVICE ID --customer generic --street-address '  '"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">./bit\_vpn create --common-name INSERT DEVICE ID --url INSERT DEVICE ID --customer generic --street-address ' '</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 4}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">4</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": "G76NK9645U367R9K6W49"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">G76NK9645U367R9K6W49</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 5}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">5</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": ".\/bit_vpn userhosts-reconfigure"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">./bit\_vpn userhosts-reconfigure</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 6}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">6</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": ".\/bit_vpn config-push --openvpn --nginx --userhost"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">./bit\_vpn config-push --openvpn --nginx --userhost</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 7}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">7</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": ".\/bit_vpn push-to-client -cn INSERT DEVICE ID --ip-address 192.168.0.134"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">./bit\_vpn push-to-client -cn INSERT DEVICE ID --ip-address 192.168.0.134</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">  
</span></td><td align="center" bgcolor="#FFFF6D" colspan="8" data-sheets-value="{ "1": 2, "2": "TÄSSÄ VAIHEESSA KYSY LINUX(SYSTEM) SALASANA!!!!!!!"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle">**<span style="color: #c9211e;">TÄSSÄ VAIHEESSA KYSYTÄÄN LINUX(SYSTEM) SALASANA</span>**</td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 8}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">8</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": "exit"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">exit</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 9}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">9</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": "ssh actiweb@192.168.0.134"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">ssh actiweb@192.168.10.134</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 10}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">10</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": "sudo .\/clientSetup.sh"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">sudo ./clientSetup.sh</span></td></tr><tr><td align="center" bgcolor="#FFFFFF" data-sheets-numberformat="{ "1": 2, "2": "0", "3": 1}" data-sheets-value="{ "1": 3, "3": 11}" height="30" style="border-width: 1px 1px 1px 2px; border-style: solid; border-color: rgb(0, 0, 0); width: 11.0956%;" valign="middle"><span style="color: #000000;">11</span></td><td align="center" bgcolor="#FFFFFF" colspan="8" data-sheets-value="{ "1": 2, "2": "ip addr show"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 2px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle"><span style="color: #000000;">ip addr show</span></td></tr><tr><td align="left" bgcolor="#FFFFFF" data-sheets-value="{ "1": 2, "2": ""}" height="37" style="width: 11.0956%;" valign="bottom"><span style="color: #000000;">  
</span></td><td align="center" bgcolor="#FFFF6D" colspan="8" data-sheets-value="{ "1": 2, "2": "Tässä tarkistetaan onko VPN yhteys kunnossa! Mene osoitteeseen 192.168.0.60. Device Id on oltavana siinä yleensä alimmana rivinä! Voi mennä hetki ! Päivittele sivu jos ei näöy!"}" style="border-top: 1px solid rgb(0, 0, 0); border-bottom: 1px solid rgb(0, 0, 0); border-right: 2px solid rgb(0, 0, 0); width: 88.7652%;" valign="middle">**<span style="color: #c9211e;">Tässä tarkistetaan onko VPN yhteys kunnossa (osoite 192.168.0.60). Jos laite ei näy heti listalla niin odota/päivitä.</span>**

</td></tr></tbody></table>

#### 1.2 Terminaali (komentokehoite)

- **Avaa terminaali** (2 vaihtoehtoista tapaa): 
    - \[se yks näppäin joka ois windows-näppäin jos tässä ois windows\] + T
    - ctrl-alt-t

- **Copy-paste rivi kerrallaan** VPN-excelistä 
    - Kopiointi voi olla vähän ärsyttävää riippuen valitsetko hiiren klikkauksilla 'copy' vai käytätkö näppäimistöltä Ctrl+C 
        - joillain riveillä on tekstiä, joka kopioituu vain valitsemalla Excelin syöttöriviltä (ei siis solusta itsestään vaan siitä kohtaa mihin sisältöä kirjoitetaan)
        - joillain riveillä puolestaan ei SAA kopioida sieltä syöttöriviltä koska siinä on automaattisesti päivittyvää sisältöä (juuri ne mitä kopioit aiemmin Produced Devices -tiedostosta ja jotka siitä kopioituivat automaattisesti tarvittaville riveille)

<p class="callout info">Paste eli liittäminen terminaaliin pitää valita **hiirellä**, koska pikanäppäin Ctrl+V ei toimi terminaalissa.</p>

##### 1.2.1 Erityishuomioita tiettyjen VPN-tiedoston rivien kohdalla

- Syötettyäsi **rivin 3** komennon, kysytään onko tiedot oikein ja haluatko jatkaa **y/N**. Siinä kohtaa tarkista, että Device id vastaa sitä laitetta, jota olet työstämässä. Vastaa kyllä jos homma ok.
- Syötettyäsi **rivin 7** komennon, sinun pitää kopioida **Linux-password** Produced Devices -tiedostosta ja liittää se terminaaliin.
- Syötettyäsi **rivin 10** komennon, kysytään **y/N** että haluatko jatkaa. Kyllä haluat.


#### 1.3 Tarkistus että onnistui

- Mene osoitteeseen [192.168.0.60](http://192.168.0.60)
- Siellä on lista VPN-yhteyksistä, siellä pitäis näkyä oikee laite (device ID:n perusteella tunnistat).
- Luultavasti listan viimeisenä.

[![VPN-vastaavuus-cropped.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/scaled-1680-/vpn-vastaavuus-cropped.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/vpn-vastaavuus-cropped.png)

- Testaa VPN-listan linkki että toimii. 
    - tarkista admin/admin(actiweb) salasanalla että pääset sisään.
    - Jos ei pääse on selvitettävä, mistä johtuu.

[![login-actiweb.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/scaled-1680-/login-actiweb.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/login-actiweb.jpg)[ ![login-actiweb2.jpg](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/scaled-1680-/login-actiweb2.jpg)](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/login-actiweb2.jpg)

### 2. Asiakaskohtaiset asennukset


Mikäli laite on menossa jollekulle seuraavista asiakkaista, tehdään asiakaskohtaiset asennukset:

- Högfors GST
- ClimaPri

<p class="callout warning">**ClimaPri** customization -vaiheen tekee tällä hetkellä Risto Kokkola. Toimita laite hänelle tämän vaiheen suorittamiseksi.</p>

<span style="color: rgb(251, 238, 184);">[![mainmenu-Climapricustomize.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/scaled-1680-/mainmenu-climapricustomize.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-04/mainmenu-climapricustomize.png)</span>

#### <span style="color: rgb(0, 0, 0);">2.1 HögforsGST Oy</span>

- <span style="color: rgb(0, 0, 0);">Tarvitsee julkisen VPN-etäyhteysosoitteen.</span>

[![image.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-05/scaled-1680-/tsjimage.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-05/tsjimage.png)

<span style="color: rgb(0, 0, 0);">Eli tämä:</span>

- <span style="color: rgb(0, 0, 0);">osoitteesta [192.168.0.60](https://192.168.0.60)</span>
- <span style="color: rgb(0, 0, 0);">valitse DEVICE ID:n perusteella oikea rivi</span>
- <span style="color: rgb(0, 0, 0);">sisältäen https:// osan</span>
- <span style="color: rgb(0, 0, 0);">loppuu .io</span>
    - <span style="color: rgb(0, 0, 0);">EI kauttaviivoja tai mitään sen jälkeen</span>

[![image.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-05/scaled-1680-/1xRimage.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-05/1xRimage.png)

#### 2.2 ClimaPri Oy

- Climapri kustomointia varten täytyy tietää keskuksen LVI-tuotenumero (esim **2018806**)
    
    [![image.png](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/scaled-1680-/fFcimage.png)](https://wiki.bithouse.fi/uploads/images/gallery/2026-08/fFcimage.png)
    
     Listasta valitaan haluttu tuotenumero, jonka jälkeen painetaan **Confirm**
    
    Asennus kestää noin 20 minuuttia.