Få SK att skicka ett kommando på en dator

Supportfrågor för server och klient (Windows, iPhone, Android, Linux).
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
cazz
3 stars
3 stars
Posts: 94
Joined: Mon 05 May 2014, 15:34

Re: Få SK att skicka ett kommando på en dator

Post by cazz » Tue 18 Nov 2014, 07:13

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)

krambriw
4 stars
4 stars
Posts: 336
Joined: Thu 19 Jul 2012, 19:41

Re: Få SK att skicka ett kommando på en dator

Post by krambriw » Tue 18 Nov 2014, 08:51

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
Image1.jpg
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'
mosquitto.zip
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).
Image2.jpg
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.

cazz
3 stars
3 stars
Posts: 94
Joined: Mon 05 May 2014, 15:34

Re: Få SK att skicka ett kommando på en dator

Post by cazz » Tue 18 Nov 2014, 17:46

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.

cazz
3 stars
3 stars
Posts: 94
Joined: Mon 05 May 2014, 15:34

Re: Få SK att skicka ett kommando på en dator

Post by cazz » Tue 18 Nov 2014, 18:27

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

krambriw
4 stars
4 stars
Posts: 336
Joined: Thu 19 Jul 2012, 19:41

Re: Få SK att skicka ett kommando på en dator

Post by krambriw » Tue 18 Nov 2014, 19:48

Bra, kul att det börjar lira
Det enda jag undrar över är att om jag stänger ner putty, slutar python scriptet att köra då??
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.

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()


cazz
3 stars
3 stars
Posts: 94
Joined: Mon 05 May 2014, 15:34

Re: Få SK att skicka ett kommando på en dator

Post by cazz » Tue 18 Nov 2014, 19:57

ok tack så mycket.

krambriw
4 stars
4 stars
Posts: 336
Joined: Thu 19 Jul 2012, 19:41

Re: Få SK att skicka ett kommando på en dator

Post by krambriw » Wed 19 Nov 2014, 08:08

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:

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)

cazz
3 stars
3 stars
Posts: 94
Joined: Mon 05 May 2014, 15:34

Re: Få SK att skicka ett kommando på en dator

Post by cazz » Wed 19 Nov 2014, 09:50

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

krambriw
4 stars
4 stars
Posts: 336
Joined: Thu 19 Jul 2012, 19:41

Re: Få SK att skicka ett kommando på en dator

Post by krambriw » Wed 19 Nov 2014, 11:51

dvs den reagerar på allt vad knappen gör
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?

cazz
3 stars
3 stars
Posts: 94
Joined: Mon 05 May 2014, 15:34

Re: Få SK att skicka ett kommando på en dator

Post by cazz » Wed 19 Nov 2014, 16:54

Den säger i RPi
['Switchking.DataSource.KnappRingklocka']
två gånger, en för ON och en för OFF

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
Varken ON eller OFF syns fast jag har märkt

Code: Select all

Switchking.DataSource.KnappRingklocka 'ON'
och dragit över den till rätt macro

Post Reply

Who is online

Users browsing this forum: No registered users and 11 guests