Page 1 of 2

Logisk programmering... HJÄLP!!!

Posted: Sun 29 Mar 2015, 10:46
by Brage
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!!!

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

Posted: Sun 29 Mar 2015, 14:18
by Isaksson
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.

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

Posted: Sun 29 Mar 2015, 14:29
by Brage
Lysande!!!

Tackar för hjälpen!

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

Posted: Sun 29 Mar 2015, 17:54
by krambriw
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)

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

Posted: Mon 30 Mar 2015, 20:35
by Brage
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?

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

Posted: Tue 31 Mar 2015, 06:24
by krambriw
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)

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

Posted: Tue 31 Mar 2015, 10:39
by Brage
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'

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

Posted: Tue 31 Mar 2015, 10:44
by Brage
En prt sc

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

Posted: Tue 31 Mar 2015, 11:39
by krambriw
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.

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

Posted: Wed 01 Apr 2015, 03:33
by Brage
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.