Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


  • 0

20+0,1=20,00000001 dziwne działanie sceny.


miras

Question

a dokładnie urządzenia wirtualnego. Rzecz na tyle dziwna że nawet nie wiem jak to prosto opisać ale się postaram maksymalnie klarownie:

problem pojawił się gdy kilka miesięcy temu zrobiłem upgrade softu z ver 3X na na 4X

 

- mam prosty skrypt (urządzenie wirtualne) do czasowej zmiany temperatury w pomiesczeniu.

Przycikami TEM+ 0,1 i TEMP- 0,1 zminiem ustawienia temperatury z rozdzielczością 0,1 C. Dokładnie sprowadza się to do zmiany warości zmiennej zmiennej. Oto fragment odpowiadający za tą zmianę "temp - 0,1":

======================================

--[[
%% properties
%% globals
--]]

local wart_temp = fibaro:getGlobalValue("utr_kuchnia")

-- ustaw nowa wartosc
local wart_temp = (wart_temp - 0.1)

--wstaw local jako wart. globalnej i wyswietl w etyk.
fibaro:setGlobal("utr_kuchnia", wart_temp)
fibaro:call(73, "setProperty", "ui.Label13.value", fibaro:getGlobalValue("utr_kuchnia"));

=======================================

 

Podgądając samą zminną jej watrość zminia się poprawnie natomiast w polu "Label13" wyświetlane są tylko liczby całkowite (brak miejsc po przecinku. Dla testu stworzyłem i dodałem kolejną etykietę:

 

======================================

...
--wstaw local jako wart. globalnej i wyswietl w etyk.
fibaro:setGlobal("utr_kuchnia", wart_temp)
fibaro:call(73, "setProperty", "ui.Label11.value", fibaro:getGlobalValue("utr_kuchnia"));
fibaro:call(73, "setProperty", "ui.Label13.value", fibaro:getGlobalValue("utr_kuchnia"));
=====================================

 

I tu ciekawostka. kolejne wcisnięcia przycisku "-0.1" dają takie oto kolejne wyniki wyświetlane w "Label11":

17.300000000000001

17.199999999999999

17.100000000000001

17

Czary ?

 

Dodam jeszcze że identyczne skrypty (dodatkowe przyciski w tym samym urządzeniu wir.) mam dla innych pomieszczeń i tam wartości wyświetlane są porawnie.

 

 

 

 

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0
Guest damian

Być może jest to błąd operacji elementarnych na zmiennoprzecinkowej reprezentacji liczb rzeczywistych. Sprobuj zaokrąglić wynik na końcu do jednego miejsca po przecinku, jeśli bardzo przeszkadza.

Link to comment
Share on other sites

  • 0
  • Inquirer
  • tylko że wyświetlanie tej samej poprawnej wartości na dwóch etykietach daje inny efekt

     

    Przykład gdy zminiejszam wartość o 0.1 (wyższa wartość początkowa) (przcisk "TEMP -0.1")

    fibaro:call(73, "setProperty", "ui.Label11.value", fibaro:getGlobalValue("utr_kuchnia"));   wyświetla 16.699999999999999

    fibaro:call(73, "setProperty", "ui.Label13.value", fibaro:getGlobalValue("utr_kuchnia"));    wyświetla 17

     

    Przykład gdy zwiększam wartość o 0.1 (niższa wartość początkowa) (przcisk "TEMP +0.1")

    fibaro:call(73, "setProperty", "ui.Label11.value", fibaro:getGlobalValue("utr_kuchnia"));   wyświetla 16.600000000000001

    fibaro:call(73, "setProperty", "ui.Label13.value", fibaro:getGlobalValue("utr_kuchnia"));    wyświetla 16

     

    Identyczny kod dla inego pomieszczenia (kolejna sekcja tego samego urządzenia wirt.) działa poprawnie

    Link to comment
    Share on other sites

    • 0

    Też to mam od czasu, gdy błędnie wpisałem formułę zaokrąglania do jednej cyfry po przecinku w wyniku czego otrzymałem liczbę z wieloma miejscami po przecinku.  

    O tego czasu zmienna wyświetlana w call jest jak u Ciebie, choć w debug wyświetlana jest poprawnie.

    Skasowałem też wirtualkę i zaimportowałem od nowa - nie pomogło.

    Link to comment
    Share on other sites

    • 0
  • Inquirer
  • Skasowałem też wirtualkę i zaimportowałem od nowa - nie pomogło.

     

    Dla testu również skasowałem i zaimportowałem. Rewelacja! Teraz nic już nie pokazuje w etykietach nawet w tych które działały ok! Widzę że losowość działania objawia się nawet w najprostrzych skryptach! Coraz wiekszą mam ochotę na napisanie długiego artykułu "rok życia z Fibaro" to może być bestseller w sieci !

    Link to comment
    Share on other sites

    • 0
    Guest sztywniak

    Nie wyświetla Ci bo w kodzie masz ID starej wirtualki

    Please login or register to see this image.

    /emoticons/default_icon_wink.gif" alt=";-)" />

    Link to comment
    Share on other sites

    • 0
    Guest sztywniak

    i jeszcze jedno. Operujesz na dwóch typach zmiennych. Zmienne globalne są typu string i dodajesz/odejmujesz 0.1 (numeric)

    Skonwertuj stringa do numeric

    Tonumber (wart_temp)

    Link to comment
    Share on other sites

    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest
    Answer this question...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

    ×
    ×
    • Create New...