iprog_sms 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 90b96ab4208fd86918b9b66a42e2b3d18153f93774e771da7db5ea33076652ae
4
+ data.tar.gz: bb92a9bd4c9da6a8931f09f7a97bcb59eab08c4fbdd76f362de65543ba857c18
5
+ SHA512:
6
+ metadata.gz: '090c37cbbccef0b31f8f219bb8ce12d386e44a21ffbc9725e29b1be8e198bef6a437b8c692c84dc35f7d9346d9ca2333e7e724428b48abc92d2cbe5a240e2e3a'
7
+ data.tar.gz: d72af85bf9271c25a1dfb9548f3a9a086a3dfc678d4e4fc6402b161adcb577f656e839bfe697c05f9dd22ae20d2c7bf4971e986f73603df2c49f25e6d7d9c1e4
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ # lib/iprog_sms/api_client.rb
3
+
4
+ require 'net/http'
5
+ require 'json'
6
+
7
+ module IprogSms
8
+ class ApiClient
9
+ def initialize(api_url)
10
+ @api_url = api_url
11
+ end
12
+
13
+ def fetch_sms_details
14
+ uri = URI(@api_url)
15
+ response = Net::HTTP.get(uri)
16
+ data = JSON.parse(response)
17
+ { phone_number: data['phone_number'], message: data['message'] }
18
+ rescue StandardError => e
19
+ puts "Error fetching data from API: #{e.message}"
20
+ nil
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ # lib/iprog_sms/sender.rb
3
+
4
+ module IprogSms
5
+ class Sender
6
+ def initialize(api_url)
7
+ @api_url = api_url
8
+ @sms_sender = IprogSms::SMS.new
9
+ @api_client = IprogSms::ApiClient.new(api_url)
10
+ end
11
+
12
+ def send_sms_from_api
13
+ sms_details = @api_client.fetch_sms_details
14
+ if sms_details
15
+ @sms_sender.send_sms(sms_details[:phone_number], sms_details[:message])
16
+ else
17
+ puts "Failed to retrieve SMS details from API."
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+ # lib/iprog_sms/sms.rb
3
+
4
+ require 'rubyserial'
5
+
6
+ module IprogSms
7
+ class SMS
8
+ def initialize
9
+ @baud_rate = 9600
10
+ @port_str = detect_sim800c || "/dev/ttyUSB0" # Detect SIM800C port automatically
11
+ end
12
+
13
+ def send_sms(phone_number, message)
14
+ if connected?
15
+ begin
16
+ # Open the serial connection
17
+ serial = Serial.new(@port_str, @baud_rate)
18
+
19
+ # Set SMS to text mode
20
+ send_at_command(serial, "AT+CMGF=1")
21
+
22
+ # Specify the recipient phone number
23
+ send_at_command(serial, "AT+CMGS=\"#{phone_number}\"")
24
+
25
+ # Send the actual SMS message, followed by Ctrl+Z (ASCII 26)
26
+ send_at_command(serial, "#{message}\x1A", 5)
27
+
28
+ puts "SMS sent to #{phone_number}."
29
+ serial.close
30
+ rescue Exception => e
31
+ puts "Error: #{e.message}"
32
+ end
33
+ else
34
+ puts "SIM800C is not connected!"
35
+ end
36
+ end
37
+
38
+ def connected?
39
+ begin
40
+ serial = Serial.new(@port_str, @baud_rate)
41
+ response = send_at_command(serial, "AT")
42
+ serial.close
43
+ response.include?("OK") # Check if the response contains "OK"
44
+ rescue Exception => e
45
+ puts "Error checking connection: #{e.message}"
46
+ false
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def detect_sim800c
53
+ # List all potential serial ports (Linux/macOS). For Windows, replace with 'COM*'.
54
+ potential_ports = Dir['/dev/ttyUSB*'] + Dir['/dev/tty.usbserial*'] + Dir['/dev/tty.*']
55
+
56
+ potential_ports.each do |port|
57
+ puts "Checking port: #{port}"
58
+ begin
59
+ # Try opening the port
60
+ serial = Serial.new(port, @baud_rate)
61
+
62
+ # Send the AT command
63
+ serial.write("AT\r")
64
+ sleep(1) # Wait for a response
65
+ response = serial.read(100)
66
+
67
+ # If the response contains "OK", it's likely the SIM800C
68
+ if response.include?("OK")
69
+ puts "SIM800C detected on port: #{port}"
70
+ serial.close
71
+ return port # Return the correct port
72
+ else
73
+ puts "No response from #{port}, moving to next port..."
74
+ serial.close
75
+ end
76
+ rescue StandardError => e
77
+ puts "Error on #{port}: #{e.message}"
78
+ end
79
+ end
80
+
81
+ # If no SIM800C is detected
82
+ puts "No SIM800C module detected."
83
+ nil
84
+ end
85
+
86
+ def send_at_command(serial, command, wait_time = 1)
87
+ puts "Sending command: #{command}"
88
+ serial.write("#{command}\r")
89
+ sleep(wait_time)
90
+ response = serial.read(1000)
91
+ puts "Response: #{response}"
92
+ return response
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # lib/iprog_sms/version.rb
3
+
4
+ module IprogSms
5
+ VERSION = "0.1.0"
6
+ end
data/lib/iprog_sms.rb ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ # lib/iprog_sms.rb
3
+
4
+ require_relative "../lib/iprog_sms/version"
5
+ require_relative "../lib/iprog_sms/sms"
6
+ require_relative "../lib/iprog_sms/api_client"
7
+ require_relative "../lib/iprog_sms/sender"
8
+
9
+ module IprogSms
10
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: iprog_sms
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jayson Presto
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-10-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubyserial
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.0
27
+ description: This gem allows you to send SMS using the SIM800C module and supports
28
+ fetching SMS details from an API.
29
+ email:
30
+ - jaysonpresto.iprog21@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - lib/iprog_sms.rb
36
+ - lib/iprog_sms/api_client.rb
37
+ - lib/iprog_sms/sender.rb
38
+ - lib/iprog_sms/sms.rb
39
+ - lib/iprog_sms/version.rb
40
+ homepage: https://rubygems.org/gems/iprog_sms
41
+ licenses:
42
+ - MIT
43
+ metadata:
44
+ homepage_uri: https://rubygems.org/gems/iprog_sms
45
+ source_code_uri: https://github.com/iprog21/iprog_sms.git
46
+ changelog_uri: https://github.com/iprog21/iprog_sms/blob/master/CHANGELOG.md
47
+ code_of_conduct_uri: https://github.com/iprog21/iprog_sms/blob/main/CODE_OF_CONDUCT.md
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 2.5.0
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubygems_version: 3.5.22
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: A gem to send SMS using SIM800C and Ruby.
67
+ test_files: []