Logisk programmering... HJÄLP!!!

Hjälp med plugins, tillägg (exempelvis webbtillägget) och exempelkod som inte ingår i Switch Kings officiella installationspaket
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
Brage
2 stars
2 stars
Posts: 33
Joined: Tue 06 Aug 2013, 15:10

Logisk programmering... HJÄLP!!!

Post by Brage » Sun 29 Mar 2015, 10:46

Hej på er!

Sitter och klurar på ett problem...

Söker en funktion där jag kan sammanställa flera olika datakällor i en logik, för att sedan ta summan av denna logik och sätta till en virtuell data källa.

Exv

Dk1 OCH Dk2
ELLER
Dk3 OCH Dk4
ska vara aktiva
resultatet ska sättas till min virtuella datakälla.

I ren logik motsvarar ju detta AND OR NOT NAND NOR osv

Har letat pluggar till EG utan resultat och misstänker att detta måste lösas genom ett rent Pythonscript.

Ser någon en enkel lösning på detta eller rent av kan hjälpa mig med ett script skulle jag vara mer än tacksam!!!

Isaksson
5 stars
5 stars
Posts: 637
Joined: Tue 09 Nov 2010, 21:51
Location: Västervik

Re: Logisk programmering... HJÄLP!!!

Post by Isaksson » Sun 29 Mar 2015, 14:18

Beyondmeasure.se med BM kan du enkelt grafiskt koppla trådar och skapa just den logiken du söker. Finns sedan möjlighet att från BM skicka data till SK.

Brage
2 stars
2 stars
Posts: 33
Joined: Tue 06 Aug 2013, 15:10

Re: Logisk programmering... HJÄLP!!!

Post by Brage » Sun 29 Mar 2015, 14:29

Lysande!!!

Tackar för hjälpen!

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

Re: Logisk programmering... HJÄLP!!!

Post by krambriw » Sun 29 Mar 2015, 17:54

Går säkert bra med BM

Här är ett python script exempel för EventGhost

Principen:
- vi antar att det finns fem datakällor, Dk1 - Dk4 samt Vk1, definierade i SK och att dom kan ha värdena 1 eller 0
- vi antar vidare att vi skall sätta datakällan Vk1 i SK till 1 eller 0 beroende på olika kombinationer av värdena på Dk1 - Dk4
Skärmklipp.PNG
I EG skapar vi nu ett python script som

a) håller de enskilda datakällornas (Dk1 - Dk4) värden i en vektor (eller lista som det heter i python)
b) fångar in händelser för när dessa datakällor ändrar värde
c) utvärderar de olika kombinationerna och sätter korrekt värde för datakälla Vk1

Konfigurationen i EG:
- det behövs ett makro enligt följande exempel för att fånga in händelserna och köra python scriptet för utvärderingen
Skärmklipp1.PNG
- jag skapade ytterligare ett makro för att kunna simulera/sätta värdena i datakällorna manuellt (detta ersätts förmodligen av någon annan mera intelligent metod)
Skärmklipp2.PNG
När de olika datakällorna ändrar värde körs scriptet och när/om (Dk1 och Dk2 båda är 1) eller (Dk3 och Dk4 båda är 1) sätts Vk1 till 1, annars till 0

mvh

PS i koden nedan måste naturligtvis namnen på datakällorna korrigeras om dessa inte stämmer

Code: Select all


try:
    dummy
    #print systemState
except NameError:
    dummy = 0
    systemState = [0, 0, 0, 0] #initierar status för datakällorna Dk1 -Dk4

#sätter status för datakällorna 
if eg.event.string.find('DataSource.Dk1')>0:
    if int(eg.event.payload[0]) > 0:
        systemState[0] = 1
    if int(eg.event.payload[0]) == 0:
        systemState[0] = 0
if eg.event.string.find('DataSource.Dk2')>0:
    if int(eg.event.payload[0]) > 0:
        systemState[1] = 1
    if int(eg.event.payload[0]) == 0:
        systemState[1] = 0
if eg.event.string.find('DataSource.Dk3')>0:
    if int(eg.event.payload[0]) > 0:
        systemState[2] = 1
    if int(eg.event.payload[0]) == 0:
        systemState[2] = 0
if eg.event.string.find('DataSource.Dk4')>0:
    if int(eg.event.payload[0]) > 0:
        systemState[3] = 1
    if int(eg.event.payload[0]) == 0:
        systemState[3] = 0

#utvärderar systemstatus och sätter virtuell datakälla i SK
print systemState
if (systemState[0] == 1 and systemState[1] == 1) or (systemState[2] == 1 and systemState[3] == 1):
    eg.plugins.SwitchkingTellStick.DSSet(u'Vk1: 1', u'Vk1', u'1', 4)
else:
    eg.plugins.SwitchkingTellStick.DSSet(u'Vk1: 1', u'Vk1', u'0', 4)
You do not have the required permissions to view the files attached to this post.

Brage
2 stars
2 stars
Posts: 33
Joined: Tue 06 Aug 2013, 15:10

Re: Logisk programmering... HJÄLP!!!

Post by Brage » Mon 30 Mar 2015, 20:35

1000 tack!

Blev lite väl avanserat med förgående progg.

Min enda fundering är bara hur koden ska se ut om jag använder mig av värden som motsvarar TurnOn samt TurnOff istället för 1 och 0?

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

Re: Logisk programmering... HJÄLP!!!

Post by krambriw » Tue 31 Mar 2015, 06:24

Jag behöver veta formatet på dina inkommande händelser för Dk1 - Dk4 som du vill använda i logiken, är det dom som är TurnOn respektive TurnOff? Vill du att också Vk1 skall få värdet TurnOn respektive TurnOff?

Om jag har fattat rätt så kan skriptet se ut som nedan

mvh

Code: Select all


try:
    dummy
    #print systemState
except NameError:
    dummy = 0
    systemState = [0, 0, 0, 0] #initierar status för datakällorna Dk1 -Dk4

#sätter status för datakällorna 
if eg.event.string.find('DataSource.Dk1')>0:
    if eg.event.payload == 'TurnOn':
        systemState[0] = 1
    if eg.event.payload == 'TurnOff':
        systemState[0] = 0
if eg.event.string.find('DataSource.Dk2')>0:
    if eg.event.payload == 'TurnOn':
        systemState[1] = 1
    if eg.event.payload == 'TurnOff':
        systemState[1] = 0
if eg.event.string.find('DataSource.Dk3')>0:
    if eg.event.payload == 'TurnOn':
        systemState[2] = 1
    if eg.event.payload == 'TurnOff':
        systemState[2] = 0
if eg.event.string.find('DataSource.Dk4')>0:
    if eg.event.payload == 'TurnOn':
        systemState[3] = 1
    if eg.event.payload == 'TurnOff':
        systemState[3] = 0

#utvärderar systemstatus och sätter virtuell datakälla i SK
#print systemState
if (systemState[0] == 1 and systemState[1] == 1) or (systemState[2] == 1 and systemState[3] == 1):
    eg.plugins.SwitchkingTellStick.DSSet(u'Vk1: 1', u'Vk1', u'TurnOn', 4)
else:
    eg.plugins.SwitchkingTellStick.DSSet(u'Vk1: 1', u'Vk1', u'TurnOff', 4)

Brage
2 stars
2 stars
Posts: 33
Joined: Tue 06 Aug 2013, 15:10

Re: Logisk programmering... HJÄLP!!!

Post by Brage » Tue 31 Mar 2015, 10:39

Japp, mina virtuella dk skall ha värdet TurnOn resp TurnOff

Såhär ser en datakälla ut:
TellStickDuo.RawEvent: class:command;protocol:arctech;model:selflearning;house:14394510;unit:1;group:0;method:turnon;Duo_ID:3

Ex på hur en av mina virtuella datakällor ser ut:
Switchking.DataSource.TEST.REST 'TurnOn'

Brage
2 stars
2 stars
Posts: 33
Joined: Tue 06 Aug 2013, 15:10

Re: Logisk programmering... HJÄLP!!!

Post by Brage » Tue 31 Mar 2015, 10:44

En prt sc
You do not have the required permissions to view the files attached to this post.

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

Re: Logisk programmering... HJÄLP!!!

Post by krambriw » Tue 31 Mar 2015, 11:39

Det blev lite rörigt det här....
Såhär ser en datakälla ut:
TellStickDuo.RawEvent: class:command;protocol:arctech;model:selflearning;house:14394510;unit:1;group:0;method:turnon;Duo_ID:3
Det här är ingen händelse från en ändring av datakälla i SK, det är ett event direkt ifrån TellStickDuo pluginnen i EG. Är det dom du vill använda i logiken för att sätta din datakälla 'TEST REST' i SK? I sådana fall måste naturligtvis python scriptet anpassas för detta.

Brage
2 stars
2 stars
Posts: 33
Joined: Tue 06 Aug 2013, 15:10

Re: Logisk programmering... HJÄLP!!!

Post by Brage » Wed 01 Apr 2015, 03:33

Hmmm.... Är som sagt rätt rudisk vad gäller detta... Ber om ursäkt för luddig info.
Är som du säger att jag vill använda mig av dessa event för att sedan sätta mitt värde på min datakälla.

Post Reply

Who is online

Users browsing this forum: No registered users and 8 guests