nodo-domotica.nl

2 variabelen bij elkaar optellen

Met de Nodo commando's en dee Eventlist kun je vrijwel elke domotica wens realiseren. De Nodo beschikt hiervoor over een eigen script-taal waarmee u uw domotica wensen kunt realiseren. Plaats hier uw vragen en tips die hier op betrekking hebben.

2 variabelen bij elkaar optellen

Berichtdoor Anton » 04 feb 2015, 22:24

Voor mijn energie meter zou ik graag 2 variabelen bij elkaar willen optellen, zodat ik het dagverbruik op een lcd scherm kan zetten.

Omdat hiervoor geen commando is wil ik proberen hiervoor een plugin te maken.
Mijn idee is om het volgende commando te maken:
calc <var1>, <var2>
Hierbij wordt dan de inhoud van var 2 opgeteld bij var 1 , en in var 1 geplaatst
De uitleg bij plugin_255 begrijp ik niet helemaal, maar het is me wel gelukt om iets op te tellen.

case PLUGIN_COMMAND:
{
UserVar[event->Par1 -1] = 15 + 30 ;
success=true;
break;


calc 12,13 vult nu var12 met het getal 45.

Hoe kan ik nu de inhoud van 2 variabelen bij elkaar optellen?

UserVar[event->Par1 -1] = float(UserVar[event->Par1 -1] + UserVar[event->Par1];

Bovenstaand levert niet het juiste resultaat.

Wie kan mij een beetje op weg helpen?
En zijn er nog meer zaken waar ik op moet letten.

Alvast bedankt!
Anton
 
Berichten: 28
Geregistreerd: 01 jan 2014, 18:43

Re: 2 variabelen bij elkaar optellen

Berichtdoor rtenklooster » 01 maart 2015, 16:14

Anton schreef:UserVar[event->Par1 -1] = float(UserVar[event->Par1 -1] + UserVar[event->Par1];

Wil deze regel uberhaupt compileren? Je mist een ) namelijk.
Wat gaat er mis verder? Staat me iets bij dat de userVar waarden zijn vermenigvuldigd met 10, misschien gaat daar iets mis?

Overigens vraag ik me af of je hem weer als float moet toewijzen, werkt dit niet gewoon?
Code: Selecteer alles
UserVar[event->Par1 -1] = UserVar[event->Par1 -1] + UserVar[event->Par1];
Laatst bijgewerkt door rtenklooster op 01 maart 2015, 16:22, in totaal 1 keer bewerkt.
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: 2 variabelen bij elkaar optellen

Berichtdoor rtenklooster » 01 maart 2015, 16:19

Kwam net in het topic binary flag tegen dat dit ook zou lukken middels de volgende regel:
Paul schreef:Om het nog leuker te maken, je kunt ook eenvoudige berekeningen doen met #...#. Stel je wilt een variabele 10 vullen met het dubbele van de waarde van variabele 5, dan kan dit als volgt:
Code: Selecteer alles
VariableSet 10, #%Status VariableSet 5% *2#


Voor jou dus
Code: Selecteer alles
VariableSet 10, #%Status VariableSet 5% +%Status VariableSet 6%#


Dit kan niet in de eventlist, moet je eventjes een script voor aanmaken en deze kan je executen middels je eventlist.

Niet getest overigens, maar Paul zal't wel weten 8-)
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: 2 variabelen bij elkaar optellen

Berichtdoor Anton » 01 maart 2015, 21:39

rtenklooster schreef:
Anton schreef:UserVar[event->Par1 -1] = float(UserVar[event->Par1 -1] + UserVar[event->Par1];

Wil deze regel uberhaupt compileren? Je mist een ) namelijk.
Wat gaat er mis verder? Staat me iets bij dat de userVar waarden zijn vermenigvuldigd met 10, misschien gaat daar iets mis?

Overigens vraag ik me af of je hem weer als float moet toewijzen, werkt dit niet gewoon?
Code: Selecteer alles
UserVar[event->Par1 -1] = UserVar[event->Par1 -1] + UserVar[event->Par1];


Het ) was met knippen en plakken weggevallen. ;)
Ik heb hem inmiddels aan de praat gekregen door :

UserVar[event->Par1 -1] = float((UserVar[event->Par1 -1]) + (UserVar[event->Par2 -1]));

Calc 8,9 telt nu de inhoud van variable 9 bij 8 op, het resultaat staat in variable 8.
Ik heb je voorstel zonder float nog niet uitgetest, waarschijnlijk voldoet dit ook.
Anton
 
Berichten: 28
Geregistreerd: 01 jan 2014, 18:43

Re: 2 variabelen bij elkaar optellen

Berichtdoor Anton » 01 maart 2015, 21:56

rtenklooster schreef:Kwam net in het topic binary flag tegen dat dit ook zou lukken middels de volgende regel:
Paul schreef:Om het nog leuker te maken, je kunt ook eenvoudige berekeningen doen met #...#. Stel je wilt een variabele 10 vullen met het dubbele van de waarde van variabele 5, dan kan dit als volgt:
Code: Selecteer alles
VariableSet 10, #%Status VariableSet 5% *2#


Voor jou dus
Code: Selecteer alles
VariableSet 10, #%Status VariableSet 5% +%Status VariableSet 6%#


Dit kan niet in de eventlist, moet je eventjes een script voor aanmaken en deze kan je executen middels je eventlist.

Niet getest overigens, maar Paul zal't wel weten 8-)


Richard, bedankt voor je reacties!

Ik gebruik de optelling op een mini pro small en heb dus geen mogelijkheid voor een fileexecute.
Heb bovenstaande nog even getest maar dit werkt bij mij niet.
Er wordt niets opgeteld.

Als test heb ik nog het voorbeeld van Paul met freemem uitgevoerd.
Een scriptje free met VariableSet 10, %Status FreeMem% vult variable 10 niet met de juiste waarde.

>>>>status freemem
Input=Terminal(10.0.0.58); Unit=1; Event=Status FreeMem,0
FreeMem 2614
>>
>>free
VariableSet 10, %Status FreeMem%
Input=File; Unit=1; Event=VariableSet 10,0
Input=System; Unit=1; Event=Variable 10,0

Ik draai overigens wel versie R765 ivm de sendto toevoeging mbt de NRF plugin.
Kan dit nog de oorzaak zijn ?
Anton
 
Berichten: 28
Geregistreerd: 01 jan 2014, 18:43

Re: 2 variabelen bij elkaar optellen

Berichtdoor rtenklooster » 01 maart 2015, 22:36

Mooi dat het gelukt is. Waarom het #%%# gebeuren niet werkt weet ik niet. Ik wist niet van het bestaan af, tot ik het tegenkwam vanmiddag.
rtenklooster
 
Berichten: 377
Geregistreerd: 04 aug 2012, 12:10
Woonplaats: Aduard

Re: 2 variabelen bij elkaar optellen

Berichtdoor Paul » 05 maart 2015, 22:18

Zie voorbeeld waarbij variabele 1 en 2 worden gevuld met een waarde en die beide opgeteld worden toegekend aan variabele 3.

Code: Selecteer alles
!******************************************************************************!
Nodo Domotica controller (c) Copyright 2015 P.K.Tonkes.
Licensed under GNU General Public License.
Nodo-Mega V3.8, Product=SWACNC-MEGA-R782, Home=1, ThisUnit=10
Date=04-03-2015 (Wed); Time=15:13 -
!******************************************************************************!
Output=I2C; Unit=0; Event=Boot 10
Output=RF; Unit=0; Event=Boot 10
Input=System; Unit=10; Event=Boot 10

Ready. Nodo is waiting for serial input...

Variableset 1,123
Input=Serial; Unit=10; Event=VariableSet 1,123
Input=System; Unit=10; Event=Variable 1,123

>Variableset 2,345
Input=Serial; Unit=10; Event=VariableSet 2,345
Input=System; Unit=10; Event=Variable 2,345

>variableset 3,#[VariableSet 1] + [Variableset 2]#
Input=Serial; Unit=10; Event=VariableSet 3,468
Input=System; Unit=10; Event=Variable 3,468
>



Dit werkt vanaf de commandoregel en in scripts. Je kunt eenvoudige berekeningen doen met + - / * ( ).

Berekeningen staan tussen '#' tekens en waarden tussen de tekens '[' en ']'. In de 3.7 release de blokhaken '[' en ']' even vervangen door '%'. We passen dit in de komende release aan omdat het anders niet overeenkomt met de WebApp. Als waarden kun je gebruiken:
  • Par1
  • Par2
  • Command
    [*Unit
  • (bijna) alle zaken die je met het commando 'Status' kunt opvragen

We hebben deze funktionaliteit nooit gedocumenteerd omdat we het eigenlijk hebben gemaakt om testscripts te kunnen maken. Maar ik voel al aankomen dat er mensen zijn die dit ook wel handig vinden.
Groeten Paul
Paul
 
Berichten: 1152
Geregistreerd: 31 aug 2011, 20:33

Re: 2 variabelen bij elkaar optellen

Berichtdoor Anton » 05 maart 2015, 23:41

Paul, bedankt voor je reactie.
Dit is inderdaad wel een handige functionaliteit, er is denk ik wel behoefte om rekenkundige bewerkingen te kunnen uitvoeren.

Ik heb dit op de mega uitgevoerd, daar werkt het prima.
Op een small krijg ik het echter niet werkend:

Code: Selecteer alles
>>sendto 3; variableset 1,123
sendto 3; variableset 2,456
>>>>sendto 3; status variableset 1
VariableSet 1,123
>>sendto 3; status variableset 2
VariableSet 2,456
>>sendto 3; variableset 3,#%VariableSet 1% + %Variableset 2%#
>>sendto 3; status variableset 3
VariableSet 3,0

Heb je hier een verklaring voor?

Op de small ( mini pro ) heb ik een lcd scherm aangesloten. Op een variable wil ik graag een bewerking loslaten voordat ik hem op het lcd scherm presenteer.
Hoe kan ik dit voorelkaar krijgen?
Op de small heb ik geen SD-kaart zodat ik geen scripts kan uitvoeren.
Ik zou de bewerkingen op de mega kunnen uitvoeren, maar hoe krijg ik de variabelen heen en weer gestuurd?
Variableget werkt wel vanaf een mega, maar blijkt niet vanaf een small te werken.
Anton
 
Berichten: 28
Geregistreerd: 01 jan 2014, 18:43

Re: 2 variabelen bij elkaar optellen

Berichtdoor manjh » 06 maart 2015, 10:15

Volgens mij werken die instructies alleen in een script, en daarom dus alleen op een mega met sd card...
Hans
manjh
 
Berichten: 1173
Geregistreerd: 29 aug 2011, 14:39

Re: 2 variabelen bij elkaar optellen

Berichtdoor Anton » 06 maart 2015, 10:44

manjh schreef:Volgens mij werken die instructies alleen in een script, en daarom dus alleen op een mega met sd card...


Daar lijkt het inderdaad op, maar ik had verwacht dat het middels een sendto opdracht wel zou lukken. Misschien kan Paul hier een reactie op geven?

Vandaar ook mijn aanvullende vraag wat de mogelijkheden zijn om variabelen tussen een min pro en een Mega heen en weer te sturen.
Anton
 
Berichten: 28
Geregistreerd: 01 jan 2014, 18:43

Volgende

Keer terug naar Nodo scripts

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers. en 1 gast

cron