Logiskt Plugin
-
- 3 stars
- Posts: 59
- Joined: Wed 28 Sep 2011, 15:35
- Location: Spånga
Logiskt Plugin
Hej,
Undrar om det finns något intresse för ett plugin som möjliggör beräknande av logiska funktioner utifrån enheters och datakällors status? Det kan även räkna decimala värden. (I framtiden har jag planer på att oxå kunna hantera datum och tid vilket skulle kunna ge möjlighet för olika typer av timer-funktionaliteter.) men...
Jag jobbar på ett första utkast, eller snarare en conceptlösning, av ett plugin som tänks klara:
- beräkna en enhets status utifrån logiska samband för andra enheter och datakällor, klarar AND,OR,XOR,NAND,NOR,XNOR,NOT
- använda variabler som består av egna logiska samband
- parallell-koppla, tex trappa eller korridor, och serie-koppla, tex huvudbrytare och sensor
- tända en enhet en viss tid, kan vara beräknad, från tillslag
- beräkna decimala värden utifrån en eller flera datakällor, klarar +,-,*,/
- göra tabelluppslagning för mer komplicerade decimala funktioner
- göra tabelluppslagning av sträng-värden, tex TurnOn->Öppen(magnetbrytare för dörr)
- spara värden till fil
- återmata beräknade enheters status till SK via REST-anrop
All konfiguration sker via xml-filer, tex:
<?xml version="1.0" encoding="utf-8"?>
<!-- <=< >=> &=& -->
<Plugin Version="0.0.0.1">
<Definitions>
<Target>
<Name>D19</Name>
<Type>Object</Type>
<Formula>S12&&Trappbrytare</Formula>
</Target>
<Variable>
<Name>Trappbrytare</Name>
<Type>Object</Type>
<Formula>S21||S36</Formula>
</Variable>
</Definitions>
</Plugin>
där
- D19 är Device IDnr:19 och S12, S21 och S36 är dataSource med respektive IDnr från SK
- Trappbrytare är en variabel
- (& = &), && = AND, || = OR
som blir funktionen "D19 = S12 AND (S21 OR S36)" vilket skulle kunna vara att:
"Lampan(D19) är tänd" om "huvudbrytaren(S12) är på" och att "sensor(S21) eller sensor(S36) är på"
eller
<?xml version="1.0" encoding="utf-8"?>
<!-- <:< >:> &:& -->
<Plugin Version="0.0.0.1">
<Definitions>
<Target>
<Name>S27</Name>
<Type>Decimal</Type>
<Formula>S25?L1+S26</Formula>
</Target>
<LookUpTable>
<Name>L1</Name>
<Type>Decimal</Type>
<File>C:\Program Files (x86)\Switch King\Switch King Server\Plugins\L1.xml</File>
</LookUpTable>
</Definitions>
</Plugin>
som blir "S27 = f(S25)'tabelluppslag från fil L1.xml' + S26"
Intresserad?
/Göran
Undrar om det finns något intresse för ett plugin som möjliggör beräknande av logiska funktioner utifrån enheters och datakällors status? Det kan även räkna decimala värden. (I framtiden har jag planer på att oxå kunna hantera datum och tid vilket skulle kunna ge möjlighet för olika typer av timer-funktionaliteter.) men...
Jag jobbar på ett första utkast, eller snarare en conceptlösning, av ett plugin som tänks klara:
- beräkna en enhets status utifrån logiska samband för andra enheter och datakällor, klarar AND,OR,XOR,NAND,NOR,XNOR,NOT
- använda variabler som består av egna logiska samband
- parallell-koppla, tex trappa eller korridor, och serie-koppla, tex huvudbrytare och sensor
- tända en enhet en viss tid, kan vara beräknad, från tillslag
- beräkna decimala värden utifrån en eller flera datakällor, klarar +,-,*,/
- göra tabelluppslagning för mer komplicerade decimala funktioner
- göra tabelluppslagning av sträng-värden, tex TurnOn->Öppen(magnetbrytare för dörr)
- spara värden till fil
- återmata beräknade enheters status till SK via REST-anrop
All konfiguration sker via xml-filer, tex:
<?xml version="1.0" encoding="utf-8"?>
<!-- <=< >=> &=& -->
<Plugin Version="0.0.0.1">
<Definitions>
<Target>
<Name>D19</Name>
<Type>Object</Type>
<Formula>S12&&Trappbrytare</Formula>
</Target>
<Variable>
<Name>Trappbrytare</Name>
<Type>Object</Type>
<Formula>S21||S36</Formula>
</Variable>
</Definitions>
</Plugin>
där
- D19 är Device IDnr:19 och S12, S21 och S36 är dataSource med respektive IDnr från SK
- Trappbrytare är en variabel
- (& = &), && = AND, || = OR
som blir funktionen "D19 = S12 AND (S21 OR S36)" vilket skulle kunna vara att:
"Lampan(D19) är tänd" om "huvudbrytaren(S12) är på" och att "sensor(S21) eller sensor(S36) är på"
eller
<?xml version="1.0" encoding="utf-8"?>
<!-- <:< >:> &:& -->
<Plugin Version="0.0.0.1">
<Definitions>
<Target>
<Name>S27</Name>
<Type>Decimal</Type>
<Formula>S25?L1+S26</Formula>
</Target>
<LookUpTable>
<Name>L1</Name>
<Type>Decimal</Type>
<File>C:\Program Files (x86)\Switch King\Switch King Server\Plugins\L1.xml</File>
</LookUpTable>
</Definitions>
</Plugin>
som blir "S27 = f(S25)'tabelluppslag från fil L1.xml' + S26"
Intresserad?
/Göran
-
- 5 stars
- Posts: 637
- Joined: Tue 09 Nov 2010, 21:51
- Location: Västervik
Re: Logiskt Plugin
Tycker jag låter intressant. 

-
- 3 stars
- Posts: 71
- Joined: Tue 09 Nov 2010, 21:51
Re: Logiskt Plugin
Låter helt klart intressant.
mvh
Martin

mvh
Martin
-
- 3 stars
- Posts: 117
- Joined: Sat 17 Dec 2011, 20:28
Re: Logiskt Plugin
Mycket mycket intressant
Jag svarade just i din andra tråd gällande att justera värden på mina termometrar som visar olika fel vid olika temp.
Men det här ser nästan lite bättre ut =)
Då kan jag justera med nåt liknande som nedan (obs, det är en "tasker" logik men basen är väl densamme. Att man har variabler,add,if osv):
Variable set "%rawtemp" to "avlästvärde" (Vi tar en in-temperatur som 70grader som exempel)
Variable set "%temprange" to "0" IF "%rawtemp" >0
Variable set "%temprange" to "1" IF "%rawtemp" >10
Variable set "%temprange" to "2" IF "%rawtemp" >20
Variable set "%temprange" to "3" IF "%rawtemp" >30
Variable set "%temprange" to "4" IF "%rawtemp" >40
Variable set "%temprange" to "5" IF "%rawtemp" >50
Variable set "%temprange" to "6" IF "%rawtemp" >60 (i exempelfallet 70grader skuller variabeln %temprange=6 (mer än 60 men
Variable set "%temprange" to "7" IF "%rawtemp" >70 inte mer än 70)
Variable set "%temprange" to "8" IF "%rawtemp" >80
Variable set "%temprange" to "9" IF "%rawtemp" >90
variable set "%modifiedtemp" to "%rawtemp+2" IF "%tempgrade" MATCHES 0
variable set "%modifiedtemp" to "%rawtemp+4" IF "%tempgrade" MATCHES 1
variable set "%modifiedtemp" to "%rawtemp+4" IF "%tempgrade" MATCHES 2
variable set "%modifiedtemp" to "%rawtemp+5" IF "%tempgrade" MATCHES 3
variable set "%modifiedtemp" to "%rawtemp+6" IF "%tempgrade" MATCHES 4
variable set "%modifiedtemp" to "%rawtemp+6" IF "%tempgrade" MATCHES 5
variable set "%modifiedtemp" to "%rawtemp+9" IF "%tempgrade" MATCHES 6 ------(i exempelfallet skulle tempraturen justeras med
variable set "%modifiedtemp" to "%rawtemp+10" IF "%tempgrade" MATCHES 7 --------------------9 grader)
variable set "%modifiedtemp" to "%rawtemp+14" IF "%tempgrade" MATCHES 8
variable set "%modifiedtemp" to "%rawtemp+14" IF "%tempgrade" MATCHES 9

Jag svarade just i din andra tråd gällande att justera värden på mina termometrar som visar olika fel vid olika temp.
Men det här ser nästan lite bättre ut =)
Då kan jag justera med nåt liknande som nedan (obs, det är en "tasker" logik men basen är väl densamme. Att man har variabler,add,if osv):
Variable set "%rawtemp" to "avlästvärde" (Vi tar en in-temperatur som 70grader som exempel)
Variable set "%temprange" to "0" IF "%rawtemp" >0
Variable set "%temprange" to "1" IF "%rawtemp" >10
Variable set "%temprange" to "2" IF "%rawtemp" >20
Variable set "%temprange" to "3" IF "%rawtemp" >30
Variable set "%temprange" to "4" IF "%rawtemp" >40
Variable set "%temprange" to "5" IF "%rawtemp" >50
Variable set "%temprange" to "6" IF "%rawtemp" >60 (i exempelfallet 70grader skuller variabeln %temprange=6 (mer än 60 men
Variable set "%temprange" to "7" IF "%rawtemp" >70 inte mer än 70)
Variable set "%temprange" to "8" IF "%rawtemp" >80
Variable set "%temprange" to "9" IF "%rawtemp" >90
variable set "%modifiedtemp" to "%rawtemp+2" IF "%tempgrade" MATCHES 0
variable set "%modifiedtemp" to "%rawtemp+4" IF "%tempgrade" MATCHES 1
variable set "%modifiedtemp" to "%rawtemp+4" IF "%tempgrade" MATCHES 2
variable set "%modifiedtemp" to "%rawtemp+5" IF "%tempgrade" MATCHES 3
variable set "%modifiedtemp" to "%rawtemp+6" IF "%tempgrade" MATCHES 4
variable set "%modifiedtemp" to "%rawtemp+6" IF "%tempgrade" MATCHES 5
variable set "%modifiedtemp" to "%rawtemp+9" IF "%tempgrade" MATCHES 6 ------(i exempelfallet skulle tempraturen justeras med
variable set "%modifiedtemp" to "%rawtemp+10" IF "%tempgrade" MATCHES 7 --------------------9 grader)
variable set "%modifiedtemp" to "%rawtemp+14" IF "%tempgrade" MATCHES 8
variable set "%modifiedtemp" to "%rawtemp+14" IF "%tempgrade" MATCHES 9
-
- 3 stars
- Posts: 59
- Joined: Wed 28 Sep 2011, 15:35
- Location: Spånga
Logiskt Plugin
Det ser fullt möjligt ut att kunna beräknas med detta Plugin. Mina testversioner kör jag på en gammal laptop från 2001, och den har inga problem med att orka med. Så en RPi borde oxå klara av detta såvida mono stödjer XML.
Det enda kruxet är att jag ska få till en första levererar version.
/Göran
Det enda kruxet är att jag ska få till en första levererar version.
/Göran
-
- 3 stars
- Posts: 117
- Joined: Sat 17 Dec 2011, 20:28
Sv: Re: Logiskt Plugin
Låter spännande!gorhak wrote:Det ser fullt möjligt ut att kunna beräknas med detta Plugin. Mina testversioner kör jag på en gammal laptop från 2001, och den har inga problem med att orka med. Så en RPi borde oxå klara av detta såvida mono stödjer XML.
Det enda kruxet är att jag ska få till en första levererar version.
/Göran
Största problemet med RPi nu verkar vara att mono bara fungerar för armel (soft float), och inte för armhf ( hard float).. Men det är lite off topic

Jag ser fram emot att testa ditt plugin på min win 7 server så länge!
Skickat från min GT-I9300 via Tapatalk 2
-
- 2 stars
- Posts: 43
- Joined: Mon 29 Nov 2010, 17:37
Re: Logiskt Plugin
När kommer en fungerande version? Verkar väldigt intressant detta! 

-
- 3 stars
- Posts: 117
- Joined: Sat 17 Dec 2011, 20:28
Re: Logiskt Plugin
+1 på detfredrik78 wrote:När kommer en fungerande version? Verkar väldigt intressant detta!



-
- 2 stars
- Posts: 20
- Joined: Fri 07 Jan 2011, 18:18
- Location: Katrineholm
- Contact:
Re: Logiskt Plugin
När kommer en fungerande version? Är väldigt intresserad av den...
Tellstick Duo | 16 Enheter | 6 Datakällor
Who is online
Users browsing this forum: No registered users and 2 guests