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.


Question

Posted

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.

 

 

 

 

7 answers to this question

Recommended Posts

  • 0
Guest damian
Posted

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.

  • 0
  • Inquirer
  • Posted

    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

    • 0
    Posted

    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.

    • 0
  • Inquirer
  • Posted

    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 !

    • 0
    Guest sztywniak
    Posted

    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=";-)" />

    • 0
    Guest sztywniak
    Posted

    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)

    • 0
    Posted

    Sprawdź jeszcze tutaj:

    Please login or register to see this link.

    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...