Få SK att skicka ett kommando på en dator
Forum rules
För att kunna hjälpa dig med supportfrågor behöver vi så mycket information som möjligt.
Innan du skapar en ny tråd, läs gärna:
viewtopic.php?f=10&t=20
För att kunna hjälpa dig med supportfrågor behöver vi så mycket information som möjligt.
Innan du skapar en ny tråd, läs gärna:
viewtopic.php?f=10&t=20
-
- 3 stars
- Posts: 94
- Joined: Mon 05 May 2014, 15:34
Re: Få SK att skicka ett kommando på en dator
Tanken är i detta fall är att när någon trycker på en knapp så kommer den att slå om till "ON/PÅ" i SK.
Eventghost kommer känna att den har ändrat till "ON/PÅ" och sedan öppnar en webbsida som sedan stängs ner.
Webbsidan är igentligen ett CGI script på en Raspberry Pi som gör en sak åt mig (I detta fall har jag tänkt en hälsningsfras som spelas upp)
Eventghost kommer känna att den har ändrat till "ON/PÅ" och sedan öppnar en webbsida som sedan stängs ner.
Webbsidan är igentligen ett CGI script på en Raspberry Pi som gör en sak åt mig (I detta fall har jag tänkt en hälsningsfras som spelas upp)
-
- 4 stars
- Posts: 336
- Joined: Thu 19 Jul 2012, 19:41
Re: Få SK att skicka ett kommando på en dator
Okej, bra att du använder en RPi, det underlättar eftersom jag själv har sådana.
Vad vi nu måste göra är att 'välja ut' knapp-händelsen 'ON/PÅ' från SK och skicka den vidare till RPi på något sätt. Jag tycker att det är smart att använda en message broker för detta och därför beskriver jag hur det nu går till med MQTT
1) Installera MQTT i din RPi
http://mosquitto.org/2013/01/mosquitto- ... epository/
3) Installera MQTT Client pluginnen till din EventGhost installation och definiera ett makro för att skicka ett meddelande till din RPi enligt exempel i bilden nedan
http://eventghost.net/forum/viewtopic.php?f=9&t=5728
Använd nu din knapp så att du skapar en SwitchKing.DataSource händelse i EG. Dra och släpp den i ovanstående makro.
4) För över bifogade filer (mosquitto.py och MQTT_SK.py) till din RPi med tex WinSCP. Lägg dom i din /home/pi folder. Öppna en PuTTy session (kolla att du är i /home/pi) och skriv 'python MQTT_SK.py'
Du bör få en kommando prompt som visar att skriptet ligger och väntar på händelser. Om du nu använder din knapp igen så bör dom trilla in (tryck på Break knappen på tangentbordet för att avbryta skriptet).
I detta enkla fall utförs bara en print. Detta kan nu bytas ut mot ditt CGI kommando så att din hemsida startar istället...men det är väl lämpligt att göra först när du fått ovanstående att funka
mvh
Vad vi nu måste göra är att 'välja ut' knapp-händelsen 'ON/PÅ' från SK och skicka den vidare till RPi på något sätt. Jag tycker att det är smart att använda en message broker för detta och därför beskriver jag hur det nu går till med MQTT
1) Installera MQTT i din RPi
http://mosquitto.org/2013/01/mosquitto- ... epository/
3) Installera MQTT Client pluginnen till din EventGhost installation och definiera ett makro för att skicka ett meddelande till din RPi enligt exempel i bilden nedan
http://eventghost.net/forum/viewtopic.php?f=9&t=5728
Använd nu din knapp så att du skapar en SwitchKing.DataSource händelse i EG. Dra och släpp den i ovanstående makro.
4) För över bifogade filer (mosquitto.py och MQTT_SK.py) till din RPi med tex WinSCP. Lägg dom i din /home/pi folder. Öppna en PuTTy session (kolla att du är i /home/pi) och skriv 'python MQTT_SK.py'
Du bör få en kommando prompt som visar att skriptet ligger och väntar på händelser. Om du nu använder din knapp igen så bör dom trilla in (tryck på Break knappen på tangentbordet för att avbryta skriptet).
I detta enkla fall utförs bara en print. Detta kan nu bytas ut mot ditt CGI kommando så att din hemsida startar istället...men det är väl lämpligt att göra först när du fått ovanstående att funka
mvh
You do not have the required permissions to view the files attached to this post.
-
- 3 stars
- Posts: 94
- Joined: Mon 05 May 2014, 15:34
Re: Få SK att skicka ett kommando på en dator
Ahh tack det fungerar 
Upptäckte varför jag hade så svårt att fatta varför jag inte kunde dra och släppa eventen och det hade med att det går inte dra informationsraderna i loggen (den med !) utan måste vara en blixt (Ahh så dum man känner sig)
Ska skissa lite mer innan jag säger detta är löst för man ska inte säja hej fören man är över ån.

Upptäckte varför jag hade så svårt att fatta varför jag inte kunde dra och släppa eventen och det hade med att det går inte dra informationsraderna i loggen (den med !) utan måste vara en blixt (Ahh så dum man känner sig)
Ska skissa lite mer innan jag säger detta är löst för man ska inte säja hej fören man är över ån.
-
- 3 stars
- Posts: 94
- Joined: Mon 05 May 2014, 15:34
Re: Få SK att skicka ett kommando på en dator
Ja jäklar i min lilla låda så fungerar det 
Fast jag är usel på python (Har aldrig jobbat i det så det jag gjorde var en fuling just nu för jag vet inte riktig hur man ska göra men det fungerar.
Det jag gjorde var att ta bort "print event" och la till subprocess.call och det fungerar
Det enda jag undrar över är att om jag stänger ner putty, slutar python scriptet att köra då??
Vill ju alltid den ska vara på men endå inte störa mig när jag är inne i RPi och jobbar med den.
Kan erkänna att jag kommer göra en kul grej (nyttigt det vet jag inte) det är att jag ska ha en annan RPi vid dörren med en liten högtalare som kör radom på hundskall när "Borta" senariot är aktiverad

Fast jag är usel på python (Har aldrig jobbat i det så det jag gjorde var en fuling just nu för jag vet inte riktig hur man ska göra men det fungerar.
Det jag gjorde var att ta bort "print event" och la till subprocess.call och det fungerar

Det enda jag undrar över är att om jag stänger ner putty, slutar python scriptet att köra då??
Vill ju alltid den ska vara på men endå inte störa mig när jag är inne i RPi och jobbar med den.
Kan erkänna att jag kommer göra en kul grej (nyttigt det vet jag inte) det är att jag ska ha en annan RPi vid dörren med en liten högtalare som kör radom på hundskall när "Borta" senariot är aktiverad
-
- 4 stars
- Posts: 336
- Joined: Thu 19 Jul 2012, 19:41
Re: Få SK att skicka ett kommando på en dator
Bra, kul att det börjar lira
Men jag skulle också lägga in stöd så att du kan stoppa scriptet genom att sända ett stopp-kommando till den (ibland kanske man inte vill boota om hela RPi'en)
Här är det moddade scriptet (med print statement som du måste ändra till subprocess.call....). Du kan stoppa det här scriptet genom att skicka meddeladet 'shut_down, från EG
Jo det är klart. Du kan ju göra ett litet bash-script med python kommandot som du ser till att det körs vid uppstart. Det är väl bara att googla på hur man får ett bash-script att köras vid uppstart.Det enda jag undrar över är att om jag stänger ner putty, slutar python scriptet att köra då??
Men jag skulle också lägga in stöd så att du kan stoppa scriptet genom att sända ett stopp-kommando till den (ibland kanske man inte vill boota om hela RPi'en)
Här är det moddade scriptet (med print statement som du måste ändra till subprocess.call....). Du kan stoppa det här scriptet genom att skicka meddeladet 'shut_down, från EG
Code: Select all
#!/usr/bin/python
import time
import mosquitto
from threading import Thread, Event
def on_connect(mosq, obj, rc):
mosq.subscribe(topic_in, 0)
def on_subscribe(mosq, obj, mid, granted_qos):
print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_message(mosq, obj, msg):
global th_abort
global debug
if str(msg.topic).find('switchking') > 0:
if str(msg.payload).find('shut_down') != 0:
th_abort = True
print str(msg.payload)
else:
event = str(msg.payload).split(',')
print event
def incoming(inThreadEvent):
mqttc = mosquitto.Mosquitto()
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_subscribe = on_subscribe
resp = None
while th_abort == False:
lrsp = 0
resp = mqttc.connect(mqtt_host, port, 30, "")
print 'Waiting for events...'
while lrsp == 0 and th_abort == False:
lrsp = mqttc.loop(10.0, 1)
inThreadEvent.wait(0.01)
if lrsp <> 0:
resp = -1
mqttc.disconnect()
if th_abort:
mqttc.disconnect()
inThreadEvent.wait(1.0)
break
inThreadEvent.wait(10.0)
# Main starts here -----------------------------------------------------------
time.sleep(1)
th_abort = False
debug = False
#MQTT settings
mqtt_host = '127.0.0.1'
port = 1883
topic_in = '/switchking'
#Threads
inThreadEvent = Event()
inThread = Thread(
target=incoming,
args=(inThreadEvent,)
)
inThread.start()
-
- 3 stars
- Posts: 94
- Joined: Mon 05 May 2014, 15:34
Re: Få SK att skicka ett kommando på en dator
ok tack så mycket.
-
- 4 stars
- Posts: 336
- Joined: Thu 19 Jul 2012, 19:41
Re: Få SK att skicka ett kommando på en dator
Enklast är nog metod 1 enligt följande artikel
http://embeddedday.com/projects/raspber ... t-at-boot/
Sedan för att gå vidare med ditt python script så kanske man vill att det skall göra olika saker beroende på vilket meddelande man skickar från EG. Som det är nu så kommer det att göra 'subprocess.call' på samtliga meddelanden utom 'shut_down'.
Exempelvis kan man utforma den del av scriptet som utvärderar innehållet i meddelandet så här:
http://embeddedday.com/projects/raspber ... t-at-boot/
Sedan för att gå vidare med ditt python script så kanske man vill att det skall göra olika saker beroende på vilket meddelande man skickar från EG. Som det är nu så kommer det att göra 'subprocess.call' på samtliga meddelanden utom 'shut_down'.
Exempelvis kan man utforma den del av scriptet som utvärderar innehållet i meddelandet så här:
Code: Select all
def on_message(mosq, obj, msg):
global th_abort
global debug
if str(msg.topic).find('switchking') > 0:
event = str(msg.payload).split(',')
print event # for debugging
if str(msg.payload).find('do_this') != -1:
print 'pass'
#subprocess.call(do_this)
if str(msg.payload).find('do_that') != -1:
pass
#subprocess.call(do_that)
if str(msg.payload).find('shut_down') != -1:
th_abort = True
print str(msg.payload)
-
- 3 stars
- Posts: 94
- Joined: Mon 05 May 2014, 15:34
Re: Få SK att skicka ett kommando på en dator
Ahh tack så mycket, tänkte lite på hur man skulle göra det och så gav du mig en kod 
Det enda jag inte fattar nu är att jag drog över när den man tryckte på knappen ON men den reagerar öven när den går över till OFF??
dvs den reagerar på allt vad knappen gör, det gör inget just nu men kan vara problem i framtiden

Det enda jag inte fattar nu är att jag drog över när den man tryckte på knappen ON men den reagerar öven när den går över till OFF??
dvs den reagerar på allt vad knappen gör, det gör inget just nu men kan vara problem i framtiden
-
- 4 stars
- Posts: 336
- Joined: Thu 19 Jul 2012, 19:41
Re: Få SK att skicka ett kommando på en dator
Det är lätt att fixa genom att i python scriptet i RPi'n filtrera på just 'ON' händelsen. Hur ser dina events från knappen ut när dom landar i RPi'n?dvs den reagerar på allt vad knappen gör
-
- 3 stars
- Posts: 94
- Joined: Mon 05 May 2014, 15:34
Re: Få SK att skicka ett kommando på en dator
Den säger i RPi
Har försökt i EG att visa skillnaden men när jag drar över ON händelsen i loggen så blir det bara
Varken ON eller OFF syns fast jag har märkt och dragit över den till rätt macro
två gånger, en för ON och en för OFF['Switchking.DataSource.KnappRingklocka']
Har försökt i EG att visa skillnaden men när jag drar över ON händelsen i loggen så blir det bara
Code: Select all
Switchking.DataSource.KnappRingklocka
Code: Select all
Switchking.DataSource.KnappRingklocka 'ON'
Who is online
Users browsing this forum: No registered users and 11 guests