Asystent AI
Powiadomienia
Wyczyść wszystko

Harmonogram - konwersja czasu na liczbę

2 Wpisów
1 Użytkownicy
1 Reactions
2,542 Wyświetleń
(@maras)
Wpisów: 197
Weteran Donator 2K22 Donator 2K19
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#1960]

Wymyśliłem sobie harmonogram do ogrzewania
Mam item

Setpoint item=Testclock label="Clock [MAP(time.map):%s]" minValue=0 maxValue=1425 step=15 

w mapie mam:

0 00:00
15 00:15
30 00:30
45 00:45
60 01:00
75 01:15
90 01:30
105 01:45
120 02:00

 

I teraz jak stworzyć regułę?

Nie mogę bezpośrednio porównać CurrentTime bo nie jest liczbą. A chcę zrobić coś w stylu jeśli CurrentTIme = Testclock to zmniejsz temp o X stopni.

 


 
Dodane : 15/10/2020 6:09 pm
(@maras)
Wpisów: 197
Weteran Donator 2K22 Donator 2K19
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Temat rozwiązany. Opanowałem samemu więc wrzucam rozwiązanie. Może dla kogoś początkującego będzie przydatne.
Sposoby na harmonogramy są różne. Dużo ludzi poleca połączenie z kalendarzem google. Ja sobie wymyśliłem ustawianie w aplikacji tak jak na załączonym screenie.

[IMG] [/IMG]

 

Teraz tak tu moje items:

Switch Harmonogram 
Number Godzinadzien 
Number Tempdzien 
Number Godzinanoc 
Number Tempnoc 
Switch Trybwieczorowy "Tryb wieczorowy"   

Tak to wygląda w sitemap:

Frame label="Harmonogram"
                        {
                        Switch item=Harmonogram
                        Setpoint item=Godzinadzien label="Godzina dzień [JS(numberToClock.js):%s]" minValue=0 maxValue=1425 step=15
                        Setpoint item=Tempdzien label="Temp. w dzień[%.1f °C]" minValue=15 maxValue=30 step=0.5
                        Setpoint item=Godzinanoc label="Godzina noc [JS(numberToClock.js):%s]" minValue=0 maxValue=1425 step=15
                        Setpoint item=Tempnoc label="Temp. w nocy[%.1f °C]" minValue=15 maxValue=30 step=0.5
                        Switch item=Trybwieczorowy        
                        }

Zeby setpoint fajnie nam się wyświetlał jako godzina np. 6:15 musimy zastosować transform (można użyć MAP) ja użyłem JS z przykładu z innego forum.

Plik JS:

(function(i) {
    var hours = Math.floor(i / 60);
    var minutes = i % 60;
    hours = (hours < 10) ? "0" + hours : hours;
    minutes = (minutes < 10) ? "0" + minutes : minutes;
    return hours + ":" + minutes;
})(input)

 

No i teraz największy problem jak pobrać godzinę i porównać to z moim Itemem?? Jedno to DataTime drugie to cyfra lub string.
Trochę się naszukałem różnych sposobów konwersji.
Na początku dodawałem godzinę+minutę ale jest jeden kłopot funkcja now.getMinuteofHour zwraca cyfrę, która w przypadku minut 1-9 nie wyświetla się w postaci 01, 02. Przez co mamy np. godzinę 10:6.

Ostatecznie skorzystałem NTP Binding i ustawiłem sobie:

DateTime Current_Time "Aktualny Czas [%1$tH:%1$tM]" {channel="ntp:ntp:local:dateTime"}

Tak to wygląda ostatecznie:

rule "Harmonogram ogrzewanie"
when  Item Current_Time changed  
then
//val String godzina = now.getHourOfDay.toString
//val String minuta = now.getMinuteOfHour.toString
val String aktualnyczas = Current_Time.state.format("%1$tH:%1$tM")
val dzientime = transform("JS""numberToClock.js"Godzinadzien.state.toString )
val noctime = transform("JS""numberToClock.js"Godzinanoc.state.toString )
if (Harmonogram.state == ON)
{
    if(aktualnyczas == dzientime)
    {
    logInfo("TEST","Brawo!"aktualnyczas + dzientime +"temperatura ustawiona na:"Tempdzien.state)
    }
    else if (aktualnyczas == noctime)
    {
    logInfo("TEST","Brawo!"aktualnyczas + noctime +"temperatura ustawiona na:"Tempnoc.state)   
    }
}
end
rule "Tryb wieczorowy"
when  Item Night_State changed to ON 
then
val tempplus = Bitronvideotempsetpoint.state as DecimalType + 1
if (Trybwieczorowy.state == ON)
{
 logInfo("TEST1","Temperatura zmieniona na:"tempplus)   
}
end

 

Zastanawia mnie tylko wyzwolenie reguły czy sprawdzać co minutę (czyli gdy zmienia się czas) czy może lepiej co 15min

czyli when Time cron "0 */15 * ? * *" // Every 15 minutes

 

Screenshot 2020 10 17 14 32 21 187 org.openhab.habdroid

 
Dodane : 17/10/2020 2:34 pm
isom zareagował
Udostępnij: