Kazalo:

DragonBoard Com OBD: 12 korakov
DragonBoard Com OBD: 12 korakov

Video: DragonBoard Com OBD: 12 korakov

Video: DragonBoard Com OBD: 12 korakov
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
DragonBoard Com OBD
DragonBoard Com OBD

Através da leitura do protocolo OBD2 do carro, é possível receber informações do veículo. Uporabite DragonBoard 410c começamos in trabalhar neste projeto, e trazemos aqui o caminho podrobhado para você reproduzir isso.

Este projeto foi feito em parceria com a #Qualcomm #Embarcados #Linaro #Arrow #BaitaAceleradora que permitiram que tivéssemos acesso aos melhores hardwares, além do contato com os melhores profissionais para doprinosa com o desenvolvimento.

Participaram deste projeto:

Temos total interesse em ajudar você a compleir o seu projeto, então não deixe de entrar em contato conosco!

Če želite temu projektu slediti v angleščini, kliknite tukaj:

www.instructables.com/id/DragonBoard-and-OBD2/

A estrutura deste projeto includei os seguintes componentsntes, conforme apresentados na imagem acima:

  • Qualcomm DragonBoard 410c
  • ELM327 Bluetooth OBD2 vmesnik
  • Ključ USB 3G/4G
  • Carregador Veicular de Inversão de Tensão (110v)

Korak: Fazendo O Setup Inicial Da DragonBoard 410c

Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c
Fazendo O Setup Inicial Da DragonBoard 410c

Uporabite Qualcomm DragonBoard 410c, iniciamos ali projekto com namestite za distribucijo Linaro do Linux, končno nastavite popolno konfiguracijo do dispozitiva.

Če želite uporabiti sliko Linaro za DragonBoard, uporabite Ubuntu, VirtualBox ali več, FastBoot, ki je na voljo v Linuxu. É je potrebno namestiti v ambiente Linuxa za namestitev.

Za namestitev Fastboot, dostop do terminala Máquina Virtual Ubuntu in digitalno:

sudo apt-get android-tools-fastboot

  • Para instalar o Linaro, precisamos passar por 2 passos muito importantes:

    • Namestitev ali BOOTLOADER
    • Ime do arquivo: dragonboard410c_bootloader_emmc_linux-79.zip

      • https://builds.96boards.org/releases/dragonboard410c/linaro/rescue/latest/
      • Umiknite se z arquivos de dentro do ZIP
      • Vnos testenin:

        cd /NomeDaPasta (caminho da pasta descompactada)

      • Fazer o comando:

        sudo fastboot naprave

      • Odgovor na esperado:

        (šestnajstiški) hitri zagon

      • Então digite:

        sudo./flashall

      • Odgovor na esperado:

        Dokončano. skupni čas 1.000 s (sem napake)

        (sem napake)

    • Instalando o Sistema Operacional

      • https://builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/
      • Najboljša doksa arquivos:
      • boot-linaro-stretch-qcom-snapdragon-arm64-20170607-246.img.gz

        Este arquivo é a última versão (Junho/17) e o nome futuro pode ser alterado. Base do nome que você deve buscar é "boot-linaro-NomeDaVersão". Nesta versão o nome é “Stretch” e anterior foi “Jessie”

      • linaro-stretch-alip-qcom-snapdragon-arm64-20170607-246.img.gz

        Este arquivo é a última versão (Junho/17) e o nome futuro pode ser alterado. Naročite po “linaro-NomeDaVersão-alip”

      • Retirar os arquivos de dentro do. GZ
      • Vnesite testenine "raiz" em relação aos arquivos compactados

        exemplo: “/Downloads” que é o local onde os arquivos baixados estão

      • Entre com os comandos:

        sudo fastboot naprave

        sudo fastboot flash zagon boot-linaro-NomeDaVersão-qcom-snapdragon-arm64-DATA.img

      • Resposta esperada (lembrando que o tempo pode variar):

        Dokončano. skupni čas: 100,00s

  • Priključena miška, Teclado monitor in televizor s priključkom HDMI
  • Uporabite:

    • Običajno: linaro
    • Senha: linaro
  • Abra vmesnik Lxterminal e faça ali prenesete na seznam de atualizações disponíveis dos pacotes instalados:

    sudo apt-get posodobitev

  • Uresničite instalação dos pacotes disponíveis usando o código:

    sudo apt-get nadgradnja

Dicas: O Linaro tem um boot extremamente rápido, e uma comunidade bastante angajada para solução de problemas.

Korak: Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo

Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo
Fazendo O GPS Da DragonBoard 410c Localizar Seu Dispositivo

Pridite, če namestite aplikacijo, ki bo služila strankam o GPS-u, pošiljanju o GNSS-GPSD, o GPSD ali o GPSD-KLIJENTIH. Faça isso usando o comando:

sudo apt-get install gnss-gpsd gpsd gpsd-clients

Com ele instalado, você precisará rodar alguns comandos para iniciar o aplicativo, são eles:

sudo systemctl start qdsp-start.servicesudo systemctl start gnss-gpsd.servicesudo systemctl start qmi-gps-proxy.service

Leve sua DragonBoard 410c para um local aberto, com visada para o céu, e digite no terminal:

gpsmon –n

Pelos testes realizados, o tempo médio até as informationções começarem aparecer na tela, é de cerca de 10 minutes. Isso varia muito da localização da DragonBoard, quantidade de prédios ao seu redor, além de outras barreiras naturais que possam atrapalhar and recepção do sinal do GPS.

Za podpisovanje essas informações e mandar para a núvem, uporabite o código abaixo, alterando ali endereço do seu spletno stran:

3. korak: Instalando O Dongle USB 3G/4G

Instalando O Dongle USB 3G/4G
Instalando O Dongle USB 3G/4G
Instalando O Dongle USB 3G/4G
Instalando O Dongle USB 3G/4G
Instalando O Dongle USB 3G/4G
Instalando O Dongle USB 3G/4G
Instalando O Dongle USB 3G/4G
Instalando O Dongle USB 3G/4G

Existem algumas formas de fazer a DragonBoard 410c accesscess a rede 3G/4G:

  • Instalando um Shield / BreakoutBoard com Modem GSM e reža za SimCard;
  • Uporabite Dongle USB 3G/4G;

Za opto optomos dongle USB 3G/4G za Huawei modelo E3272, ki je na voljo za shranjevanje.

Za konfiguracijo modema, uporabo podokna za uporabo terminala (com a applicação WVDial), zaželeno je, da se uporablja in uporablja vmesnik Gráfica do Usuário (GUI) do Linaro. Faça da seguinte forma:

  • Com o Dongle USB priključek, klic com botão direito no ícone de "redes" no canto inferior direito da tela.
  • »Uredi povezave«> »Dodaj«
  • Escolha in opção: "Mobilna širokopasovna povezava"
  • Kliknite »Ustvari«

Če želite namestiti operacijski sistem, prilagoditi slikovne datoteke, konfigurirati operacijsko postajo za telefon, združiti sim kartico. Para criação deste projeto, use sim Sim Card da Tim (e um modem inicialmente vendido pela Vivo).

Korak: Preoblikujte DragonBoard 410c Em Hotspot / Access Point WiFi

Preoblikujte DragonBoard 410c Em Hotspot / Access Point WiFi
Preoblikujte DragonBoard 410c Em Hotspot / Access Point WiFi
Preoblikujte DragonBoard 410c Em Hotspot / Access Point WiFi
Preoblikujte DragonBoard 410c Em Hotspot / Access Point WiFi
Preoblikujte DragonBoard 410c Em Hotspot / Access Point WiFi
Preoblikujte DragonBoard 410c Em Hotspot / Access Point WiFi

Če uporabljate DragonBoard 410c kot roteador wifi (potem ste konfigurirali povezavo in internet), lahko preprosto uporabite preprost vmesnik za sistem. Siga os passos abaixo:

  • Clique no botão direito no ícone de "redes" no canto inferior direito.
  • »Uredi povezave«> »Dodaj«
  • Uporabite »WiFi«
  • Kliknite »Ustvari«

Coloque o nome da rede que você quer criar no campo "SSID" e depois altere o "Mode" za "Hotspot".

Za garancijo ali funkcijo:

  • Poiščite »Nastavitve IPv4«
  • To je "Metoda", označena kot "V skupni rabi z drugimi računalniki"

5. korak: Acessando a DragonBoard 410c Por SSH Sem Fio, Utilizando O Hotspot

Pridobite DragonBoard 410c za SSH Sem Fio, uporabite dostopno točko
Pridobite DragonBoard 410c za SSH Sem Fio, uporabite dostopno točko

Criamos um jeito de acessar a placa remotamente, Independente da forma que ela esteja conectada, não dependendo de estar próximo a Dragonboard para conectar diretamente à ela, ou ao wifi em que ela esteja conectada. Este é o método de conexão dos servidores Linux in Amazon.

Pridobite namestitev o samodejnem SSH, uporabite ali uporabite abaixo.

sudo apt-get install gcc make

wget https://www.harding.motd.ca/autossh/autossh-1.4e.tgz tar -xf autossh-1.4e.tgz cd autossh-1.4e./configure make sudo make install

Agora vamos gerar uma chave criptografada com padrão de segurança RSA. Esta chave služijo para que a pessoa que a tenha, tenha autorização para acessar in instância do endpoint exclusivo no Linux, através do IP público do modem 3G, glavni cilj deste passo. V nadaljevanju, o código faz a copia da chave para ali repositório de chaves confiáveis za Linux, garantindo ainda mais confiança para conexão.

ssh -keygen -t rsa

scp ~/.ssh/id_rsa.pub uporabnik@oddaljeni strežnik:.ssh/pooblaščeni_ključi autossh -M 0 -q -f -N -i /home/pi/.ssh/id_rsa -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 2222: localhost: 22 uporabnik na oddaljenem strežniku

Če želite, spremenite način pretvorbe v oblak strežnikov DragonBoard 410c! / o/

Korak 6: Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 1/2

Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 1/2
Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 1/2
Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 1/2
Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 1/2

Komunikacijski vmesnik com os carros é feita através da porta OBD2. A informação que transita nesta porta precisa ser traduzida, e para isso precisamos de um interpretador que trate os dados. Dodatne informacije o strojni opremi: ELM327 ali STN1170.

Če želite to narediti, uporabite ali odstranite Bluetooth s čipom na osnovi ELM327.

Pomembno je, da poiščete disponibilizirano strojno opremo, ki ni nujno potrebna za različico ORIGINAL do ELM327. A maior parte disponível está na verão 1.5, que foi quando o chip original foi clonado e colocado a venda no mercado. Izvirni nabor čipov, različica 2.2. Evolução deste versionamento traz ao chip mais informações sobre os carros mais novos. É Importante sabre disco, pois dependendo dos testes realizados, poderá ou não conseguir obter determinadas informações de veículos mais novos.

Če imate na voljo OBD2 Bluetooth, lahko uporabite OBD2 za seu carro. Ela pode estar localizada logo abaixo do volante, no console central ou perto da caixa de fusíveis. O local varia bastante entre as montadoras e modelos. Uma opção para localizar é usar esta ferramenta:

Acesse a DragonBoard 410c com SSH, uporabite prenosni računalnik (lembrando que agora você está no carro, e não possui mais uma tela para conectar a placa).

Določite, ali je na voljo OBD2 Bluetooth za vstavitev brez povezovalnika za Carro, siga os passos abaixo za ter kontrolo za povezovanje bluetooth:

sudo bluetoothctl

možno pri agentu pri privzetem skeniranju posrednikaNeste momento é importante que você copie o naslovu MAC pois precisará para os próximos passos

Digita:

zaupajte MACADDRESS

par MACADDRESS

Naslednji trenutek je nameščen za uporabo digitalnega PIN -a ali kode PIN za Bluetooth OBD2.

O PIN PIN je na voljo 1234 ali 0000

Após a tela de sucesso de conexão, digitando este comando, você sai do program controlador do Bluetooth digitando:

prenehati

Agora é preciso fazer um "BIND" do dispositivo com a porta serial:

sudo rfcomm bind 0 MACADDRESS 1

Para validar o sucesso da operação digite:

ls /dev

Porta “Rfcomm0” deve estar na listi.

Korak 7: Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 2/2

Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 2/2
Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 2/2
Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 2/2
Ligando a DragonBoard 410c Ao OBD Do Seu Carro prek Bluetooth - Passo 2/2

Objetivo deste passo é garantir o funcionamento da comunicação entre os dispositivos:

ELM327, DragonBoard 410c e Veículo

Najprej uporabite aplikacijo “Screen” za več informacij o porta Serial

sudo apt-get namestitveni zaslon

Serijska naprava Porta Serial je namenjena uporabi v Comandosu in vnese DragonBoard 410c ali ELM327.

Para saber mais sobre Comandos AT, acesse:

ATENÇO:

Tome muito cuidado nesta parte! Todas as informações enviadas para o dispositivo conectado ao carro, poderão ser interpretadas e enviadas ao carro de maneira errada e ocasionar o mal-funcionamento do seu carro! Estude bastante os comandos antes de tentar inovar nos comandos. Recomendamos que siga as instruções abaixo podrobhadamente.

Siga a sequência de comandos abaixo para dar início à comunicação:

  • Esta função fará abrir o terminal de comunicação serijski.

    screen /dev /rfcomm0

Assim que o terminal carregar, digite os comandos abaixo nesta sequência (e entenda o que cada um deles faz):

  • Reinicia o dispositivo. Kot vezes você precisará fazer isso.

    ATZ

  • Liga a funcionalidade de quebra de linha nos comandos, ki olajša vizualizacijo.

    ATL1

  • Liga os cabeçalhos dos comandos.

    ATH1

  • Liga o espaçamento entre palavras.

    ATS1

  • Opredelite protocolo de comunicação do carro para „Automático“.

    ATSP0

Finale teste de comunicação:

  • Digite no console:

    ATI

  • Ele deve retornar “ELM327 v1.5” ali različica ELM do seu dispositivo.
  • Isso prova que o ELM327 está comunicando com a placa sem problemas, e podemos prosseguir.

Dica

Za uporabo zaslona "Screen" in potreben apertar: Ctrl-A seguido de Ctrl-D

8. korak: Ligando a DragonBoard 410c Ao OBD Do Seu Carro Usando PyOBD

Ligando a DragonBoard 410c Ao OBD Do Seu Carro Usando PyOBD
Ligando a DragonBoard 410c Ao OBD Do Seu Carro Usando PyOBD

PyOBD é uma biblioteca de Python específica para comunicação com o padrão OBD2 dos veículos. Com ela, podemos extrair diversas informações da rede de comunicação do carro, vključno z dados como velocidade e até mesmo erros da parte elétrica.

Para estata, precisamos garantir que as seguintes bibliotecas estejam instaladas no Linaro da sua DragonBoard 410c:

  • PIP - Gerenciador de módulos do Python

    sudo apt-get install python-pip

  • SetupTools - gestor de arquivos de instalação

    sudo pip install -U pip setuptools

  • Kolo - formatador de arquivos para instalação

    sudo apt-get install python-wheel

  • OBD - biblioteca para interpretação de dados OBD

    sudo apt-get python-obd

  • GPS - biblioteca com dados do GPS

    sudo pip namestite gps

  • Zahteve - módulo de solicitações

    zahteve za namestitev sudo pip

Para sabre je biblioteca de Python está funcionando corretamente, precisamos rodar os comandos:

sudo python

Naslednji trenutek o kurzorju do terminala, ki ga uporabljate za ikono »>>>«, kaže na program, ki je namenjen Pythonu. Podemos começar a digitar os comandos para serem interpretados conforme abaixo.

  • Comece importando a biblioteca

    uvoz obd

  • Para fazer a conexão com a porta serijska uporaba o comando

    povezava = obd. OBD (“/dev/rfcomm0”)

  • Para descobrir se nanaša na Python, ki je skladen z dodatnimi informacijami za carro, passando pelo Bluetooth, ELM327 ali chegar no carro, digitalno:

    connection.protocol_name ()

9. korak: Dodatne informacije o Carro Usando Python

Dodatne informacije o Carro Usando Python
Dodatne informacije o Carro Usando Python

Vamos criar um arquivo chamado: OBD.py, conforme instruções abaixo e código na sequência.

Importamos a biblioteca OBD para dentro do Python para iniciar as conexões.

Por motivos desconhecidos, primeira conexão com nosso hardware, falha semper. Na segunda tentativa, funciona semper. Por isso, no código verá que há duas linhas de conexão (con).

Seguindo o funcionamento do código, com a conexão feita, iniciamos um loop infinito que busca os dados do OBD, formata de acordo com os parâmetros estabelecidos. Depois cria a URL, use Query String, para que possa enviar ao servidor using or método POST.

No exemplo abaixo pegamos as seguintes informações:

  • RPM
  • Velocidade
  • Odômetro *

As funções para captura dos dados utilizam dois parâmetros. Na primer, usando [1] [12] estamos buscando [módulo] [PID]. Esta lista pode ser encontrada em:

Na koncu, nasmejan URL, ki je naveden kot informacija o koncatenadah in adicionadas em um arquivo, chamado "obd_data.dat".

Código za OBD.py:

import obdimport timeodoInicial = -1 paramOdo = 0 #Conect OBDprint "Primeira conexao" con = obd. OBD ("/dev/rfcomm0") print "Segunda conexao" con = obd. OBD ("/dev/rfcomm0") medtem ko je True: respRPM = con.query (obd.commands [1] [12]) print respRPM respVelo = con.query (obd.commands [1] [13]) print respVelo respOdo = con.query (obd.commands [1] [49]) tiskanje respOdo paramRPM = int (float (str (respRPM).replace ("revolutions_per_minute", ""))) paramVelo = int (float (str (respVelo).replace ("kph", ""))) paramOdo = int (float (str (respOdo).replace ("kilometer", ""))) url = "https://www.website.com/OBD?vel="+str(paramVelo)+"&rpm="+str (paramRPM)+"& odo ="+str (paramOdo)+"\ n" time.sleep (0.2) datoteka url za tiskanje = open ("obd_data.dat", "a+") file.write (url) file.close () natisni url

Depois da conexão e captura dos dados, vamos criar o arquivo chamado: envia_OBD.py

Esta parte do código fica mais enostavnosti. Começamos importando bibliotecas relacionadas à solicitações/envio de dados, usando RESTFUL.

Criamos um while para enviar através de POST a URL da primeira linha do arquivo que populado anteriormente pelo OBD.py. Depois disco, para evitar que o dado seja enviado mais de uma vez, ela apaga esta linha do arquivo.

Código para o arquivo OBD.py:

uvozne zahteve

uvoz časa medtem ko je True: poskusite: time.sleep (0.2) url = '' z odprto ('obd_data.dat', 'r') kot fin: data = fin.read (). splitlines (True) url = data [0] requests.post (url) z odprto ('obd_data.dat', 'w') kot fout: fout.writelines (data [1:]) razen: print 'izjem'

Caso tenha algum problema copiando estes códigos, baixe os arquivos abaixo:

10. korak: Ponovi skripte E Armazenamento Dados Capturados Do Carro

Ponovi skripte E Armazenamento De Dados Capturados Do Carro
Ponovi skripte E Armazenamento De Dados Capturados Do Carro

Tuo o que foi feito até agora era orientado in garancija za DragonBoard fizedse comunicação com os različne komponente za rešitev, kot 3G, WiFi, Bluetooth, Dados do GPS, entre outros.

Vamos usar o código abaixo para editar o arquivo 'rc.local', que já tem algumas funções e comandos pré-definidos, e fica no diretório '/etc'. Para fazer a edição, uporabite o comando:

sudo nano /etc/rc.local

Agora precisamos configurar a inicialização de todos os processos, services and funções, criando rotinas para que funcionem automaticamente ao iniciar a Dragonboard. Uporabljajte o BASH para fazer isso. O BASH (Bourne-Again-SHell) je aplikacija za interpretação de comandos Unix.

No próximo código, que tem comandos BASH, você precisará inserir o MacAddress do seu dispositivo OBD/Bluetooth, e também precisa ter bastante cuidado para garantir que o código seja colocado semper antes do comando "exit 0" que éo system.

če [! -f/etc/ssh/ssh_host_rsa_key]

nato systemctl stop ssh.socket || true dpkg-ponovno konfigurirajte openssh-server fi sudo systemctl start qdsp-start.service rfcomm bind 0 MACADDRESS 1 sudo python /home/linaro/Documents/FadaDoCarro/conectaGPS.py & sudo python/home/linaro /Documents/FadaDoCarro/OBD.py & sudo python /home/linaro/Documents/FadaDoCarro/envia_OBD.py & exit 0

Partir de agora, semper que a placa for iniciada, ela já vai se conectar através do 3G e enviar os dados de GPS e OBD para or servidor escolhido.

11. korak: Dificuldades Encontradas

Dificuldades Encontradas
Dificuldades Encontradas

Seznam abaixo algumas barreira que encontramos ao longo do desenvolvimento do projeto, que resolutionmos antes de criar este Instructable, mas que é importante alertá-lo, caso esteja tendo dificuldades também.

  • PyOBD

    É preciso ter muito cuidado na hora de transmitir os dados e comunicar com o carro. Nas primeira tentativas, quando a comunicação ainda não era estável com o dispositivo, enviamos alguns comandos para o carro, e acabamos causando algum problem na ECU. Neste momento o câmbio automático não aceitava mais mudanças, ficou travado. Além disco, as luzes do painel começaram a piscar aleatoriamente. Rešitev za pomemben dogodek, ki se bo zgodil za desligamento dos cabos da bateria, mantendo assim za 15 minut. Desta forma, forçamos ali reset completeto das ECUs do carro, retornando ele ao estágio original de fábrica, portanto Cancelando qualquer comando que tenhamos enviado erroneamente pela porta OBD

  • Linaro

    Tivemos um problem de boot no Linaro, quando aleatoriamente ali reiniciava OS. Este težave pri reševanju ao longo do desenvolvimento do projeto, pela equipe do Linaro, que soltou uma atualização, e já construímos este tutorial use a informação mais atualizada

  • GPS in DragonBoard

    Qualcomm Dragonboard 410c nima vmesnika za GPS, ki je nameščen na sinhronem sprejemniku in je nameščen na priključku ali zunanji zunanji priključek. Za več informacij o postopku, prosimo, da predlagate Qualcomm:

12. korak: Napotki

Reference
Reference

Nalagalnik

builds.96boards.org/releases/dragonboard410c/linaro/rescue/latest/

Linaro

builds.96boards.org/releases/dragonboard410c/linaro/debian/latest/

Namestite Linaro na DragonBoard 410c

www.embarcados.com.br/linux-linaro-alip-na-qualcomm-dragonboard-410c/

Dokumentacija o GPS za DragonBoard

discuss.96boards.org/t/gps-software/170/16

Predstavitev GPS

gist.github.com/wolfg1969/4653340

Python OBD

github.com/brendan-w/python-OBD

Conectando RaspberryPi kot OBD Bluetooth

gersic.com/connecting-your-raspberry-pi-to-a-bluetooth-obd-ii-adapter/

Navodila za uporabo SSH

gist.github.com/kr0no/63e34c77b02843b46a8d89d8f7b5e4b6

Namestitev SSH brez Linuxa

ask.xmodulo.com/install-autossh-linux.html

Priporočena: