Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
IoT
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
dbe
IoT
Commits
2ac180ba
Commit
2ac180ba
authored
2 years ago
by
Christian Andreas Fiola
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
07beefbe
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
Code/Scroll Bot/ScrollBot.py
+262
-0
262 additions, 0 deletions
Code/Scroll Bot/ScrollBot.py
with
262 additions
and
0 deletions
Code/Scroll Bot/ScrollBot.py
0 → 100644
+
262
−
0
View file @
2ac180ba
'''
Created on 27.06.2022
@author: Christian
'''
"""
Code fuer den Scrollbot
"""
import
random
import
time
from
threading
import
Thread
import
scrollphathd
from
PIL
import
Image
scrollphathd
.
rotate
(
degrees
=
180
)
import
os
from
paho.mqtt
import
client
as
mqtt_client
dir_path
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
os
.
chdir
(
dir_path
)
broker
=
'
broker.emqx.io
'
port
=
1883
# generate client ID with pub prefix randomly
client_id
=
f
'
python-mqtt-
{
random
.
randint
(
0
,
1000
)
}
'
username
=
'
iot
'
password
=
'
1234
'
class
botVars
():
def
__init__
(
self
):
self
.
Scollbelegt
=
False
"""
def scroll_message(msg):
print(msg)
"""
def
scroll_message
(
message
):
scrollphathd
.
clear
()
# Clear the display and reset scrolling to (0, 0)
length
=
scrollphathd
.
write_string
(
message
)
# Write out your message
scrollphathd
.
show
()
# Show the result
time
.
sleep
(
0.5
)
# Initial delay before scrolling
length
-=
scrollphathd
.
width
# Now for the scrolling loop...
while
length
>
0
:
scrollphathd
.
scroll
(
1
)
# Scroll the buffer one place to the left
scrollphathd
.
show
()
# Show the result
length
-=
1
time
.
sleep
(
0.02
)
# Delay for each scrolling step
time
.
sleep
(
0.5
)
# Delay at the end of scrolling
def
get_pixel
(
x
,
y
,
img
):
p
=
img
.
getpixel
((
x
,
y
))
if
img
.
getpalette
()
is
not
None
:
r
,
g
,
b
=
img
.
getpalette
()[
p
:
p
+
3
]
p
=
max
(
r
,
g
,
b
)
return
p
/
255.0
def
showIMG
(
path
):
img
=
Image
.
open
(
path
)
scrollphathd
.
clear
()
scrollphathd
.
show
()
scrollphathd
.
rotate
(
degrees
=
0
)
try
:
for
x
in
range
(
0
,
scrollphathd
.
DISPLAY_WIDTH
):
for
y
in
range
(
0
,
scrollphathd
.
DISPLAY_HEIGHT
):
brightness
=
get_pixel
(
x
,
y
,
img
)
scrollphathd
.
pixel
(
x
,
6
-
y
,
brightness
*
1
)
scrollphathd
.
show
()
time
.
sleep
(
0.03
)
#scrollphathd.scroll(-1)
except
KeyboardInterrupt
:
scrollphathd
.
clear
()
scrollphathd
.
show
()
scrollphathd
.
rotate
(
degrees
=
180
)
def
subscribeDisp
(
client
:
mqtt_client
,
topic
,
infos
):
def
on_message
(
client
,
userdata
,
msg
):
#inmsg[count]=msg.payload.decode()
nachricht
=
msg
.
payload
.
decode
()
if
(
nachricht
!=
"
online
"
and
nachricht
!=
"
frei
"
and
nachricht
!=
"
belegt
"
):
#
print
(
f
"
Received `
{
msg
.
payload
.
decode
()
}
` from `
{
msg
.
topic
}
` topic
"
)
if
(
nachricht
==
"
blockIoTScroll
"
):
#die var Scollbelegt ist unten iummer nivh false warum????
infos
.
Scollbelegt
=
True
con
=
"
connected
"
thread
=
Thread
(
target
=
scroll_message
,
args
=
(
con
,))
thread
.
start
()
elif
(
nachricht
==
"
freeIoTScroll
"
):
discon
=
"
disconnected
"
thread
=
Thread
(
target
=
scroll_message
,
args
=
(
discon
,))
thread
.
start
()
infos
.
Scollbelegt
=
False
elif
(
nachricht
==
"
smile
"
):
showIMG
(
"
smile.bmp
"
)
elif
(
nachricht
==
"
sad
"
):
showIMG
(
"
sad.bmp
"
)
elif
(
nachricht
==
"
love
"
):
showIMG
(
"
love.bmp
"
)
elif
(
nachricht
==
"
frage
"
):
showIMG
(
"
fragezeichen.bmp
"
)
else
:
print
(
type
(
msg
.
payload
.
decode
()))
print
(
msg
.
payload
.
decode
())
thread
=
Thread
(
target
=
scroll_message
,
args
=
(
msg
.
payload
.
decode
(),))
thread
.
start
()
client
.
subscribe
(
topic
)
client
.
on_message
=
on_message
def
subscribe
(
client
:
mqtt_client
,
topic
,
inmsg
,
count
):
def
on_message
(
client
,
userdata
,
msg
):
if
(
msg
.
payload
.
decode
()
==
"
online
"
):
inmsg
[
count
]
=
"
online
"
#print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
client
.
subscribe
(
topic
)
client
.
on_message
=
on_message
def
connect_mqtt
():
def
on_connect
(
client
,
userdata
,
flags
,
rc
):
if
rc
==
0
:
#print("Connected to MQTT Broker!")
pass
else
:
print
(
"
Failed to connect, return code %d
\n
"
,
rc
)
client
=
mqtt_client
.
Client
(
client_id
)
client
.
username_pw_set
(
username
,
password
)
client
.
on_connect
=
on_connect
client
.
connect
(
broker
,
port
)
return
client
def
searchMqttHoocks
():
"""
Diese Funktion sucht alle MQTT Hoocks die gerade online senden
und gibt eine liste mit den bereits verwendeten Hooks zurueck
"""
print
(
"
start search
"
)
test_count
=
10
infoList
=
[]
start_time
=
time
.
time
()
end_time
=
start_time
topicstr
=
"
IoT/ScrollBot
"
for
i
in
range
(
test_count
):
infoList
.
append
(
"
offline
"
)
localTop
=
topicstr
+
str
(
i
)
#print("versuche : " + localTop)
client
=
connect_mqtt
()
subscribe
(
client
,
localTop
,
infoList
,
i
)
client
.
loop_start
()
start_time
=
time
.
time
()
while
end_time
-
start_time
<
1
:
end_time
=
time
.
time
()
client
.
loop_stop
()
print
(
"
start done
"
)
return
infoList
def
getmyHook
():
"""
generiert den eigenen Hoock namen um einen neuen Channel zu erstellen
"""
hooklist
=
searchMqttHoocks
()
print
(
hooklist
)
myID
=
0
for
i
in
range
(
len
(
hooklist
)):
print
(
hooklist
[
i
])
if
hooklist
[
i
]
==
"
offline
"
:
myID
=
i
break
return
"
IoT/ScrollBot
"
+
str
(
myID
)
def
publish
(
client
,
topic
,
infos
):
print
(
"
im online
"
)
while
True
:
time
.
sleep
(
0.5
)
msg
=
f
"
online
"
result
=
client
.
publish
(
topic
,
msg
)
status
=
result
[
0
]
if
status
==
0
:
pass
else
:
print
(
f
"
Failed to send message to topic
{
topic
}
"
)
print
(
infos
.
Scollbelegt
)
if
infos
.
Scollbelegt
:
msg
=
f
"
belegt
"
else
:
msg
=
f
"
frei
"
result
=
client
.
publish
(
topic
,
msg
)
status
=
result
[
0
]
if
status
==
0
:
pass
else
:
print
(
f
"
Failed to send message to topic
{
topic
}
"
)
def
build_my_MQTT_Listener
(
client
,
topic
,
infos
):
print
(
"
hoere zu
"
)
subscribeDisp
(
client
,
topic
,
infos
)
client
.
loop_forever
()
if
__name__
==
'
__main__
'
:
infos
=
botVars
()
iyTopic
=
getmyHook
()
print
(
"
my topic:
"
+
iyTopic
)
client
=
connect_mqtt
()
scroll_message
(
"
online
"
)
thread
=
Thread
(
target
=
build_my_MQTT_Listener
,
args
=
(
client
,
iyTopic
,
infos
))
thread
.
start
()
publish
(
client
,
iyTopic
,
infos
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment