Домофон на стероидах

10 September 2019

В квартире появился домофон. Улучшайтунг где-то внутри зачисался и придумалось сделать из него комбайн. Что бы записывал звонки, кидал их в телеграм, распозновал речь и открывался по кодовому слову. Поискал материал, а народ чаще использует режим "открыть сразу один раз", и даже SIP-телефон из него делают. Почему бы да. Но все по порядку. Ссылки:

Рубин 0.1

03 February 2013

Да, а до оживления портов ввода-вывода на ruby я, оказывается, вчера был крайне не далеко. На сайте разработчика библиотеки нашлась красивая табличка с портами и их нумерацией. Которая в свою очередь оправдала полный разброс оных по линейке контактов..

Получилось весьма лаконично.

#!/usr/bin/ruby
MY_PIN = 4
require 'wiringpi'
print "[init]\n"
io = WiringPi::GPIO.new
io.mode(MY_PIN, OUTPUT)
10.times do
  print "[+  on]\n"
  io.write(MY_PIN, HIGH)
  sleep(1)
  print "[- off]\n"
  io.write(MY_PIN, LOW)
  sleep(1)
end
print "[end]\n";

И чуток доколдовав с кодом, решил запилить мигалку посищений сайта. Что может быть проще. Зато приятно сидеть за компьютером и наблюдать дружественные помигивания, значит кто-то тут даже бывает :D


#!/usr/bin/ruby
require 'wiringpi'

MY_PIN = 4

def blink(io, long)
  io.write(MY_PIN, HIGH)
  if long
    sleep(0.5)
  else
    sleep(0.1)
  end
  io.write(MY_PIN, LOW)
  sleep(0.1)
end

def getViews()
  return `wc -l /var/log/nginx/access.log`.to_i
end

puts "[web blinker init]"
io = WiringPi::GPIO.new
io.mode(MY_PIN, OUTPUT)
io.write(MY_PIN, LOW)
lcwas = getViews()
while true
  lc = getViews()
  if lc > lcwas
    dif = lc - lcwas
    print dif
    dif.times do
      blink(io, dif < 10)
    end
  end
  lcwas = lc
  print '.'
  sleep(1)
end


© Oleksiy Tishyn 2018