Różnica temperatur:...
 
Powiadomienia
Wyczyść wszystko

Różnica temperatur: teraz i 2 minuty temu - skrypt

7 Wpisów
3 Użytkownicy
0 Reactions
2,673 Wyświetleń
(@_aro_)
Wpisów: 20
Praktykant
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
 
[#769]

Witam !

Próbuję porównać dwie temperatury w OH 2.3, a właściwie chodzi mi o obliczenie ich różnicy w zadanym czasie.

Chodzi o zmianę temperatury w kominku w ciągu ostatnich dwóch minut - czy jest to tendencja wzrostowa, czy spadkowa i na tej podstawie OH miałby załączać pompę do podłogówki - mam kominek z płaszczem wodnym i wymiennikiem ciepła, dlatego taki układ jest możliwy.

Próbowałem napisać skrypt, ale jeszcze altualny poziom nie pozwala  😀  

rule "praca pompy do podłogówki"
    when
    Item Boiler_Room_Temperature_Fireplace changed // received update- lepiej ?
   var Delta_Temp_Fireplace = (Boiler_Room_Temperature_Fireplace.state as Number - Boiler_Room_Temperature_Fireplace.historicState(now.minusMinutes(1)).state as Number)
    then
    if  (Delta_Temp_Fireplace as Number > .2) {
        Boiler_Room_Floor_Heating_Pump.sendCommand(ON)
   }
else {
        Boiler_Room_Floor_Heating_Pump.sendCommand(OFF)
    }
end

 

Otrzymuję błędy:

[WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'pompa do podłogówki.rules' has errors, therefore ignoring it: [6,2]: missing 'then' at 'var'
[7,2]: no viable alternative at input 'then'
[8,40]: no viable alternative at input '.'
[8,42]: mismatched input ')' expecting 'end'

Może dlatego, że próbowałem to zrobić koszytając ze zmiennej w skrypcie jako var, ale może trzy zmienne byłoby lepiej ?

var Now_Temp_Fireplace = Boiler_Room_Temperature_Fireplace.state
var Old_Temp_Fireplace = Boiler_Room_Temperature_Fireplace.historicState(now.minusMinutes(1)).state
var Delta_Temp_Fireplace = Now_Temp_Fireplace - Old_Temp_Fireplace

Może jako odrębny .item tylko na taką okoliczność ? Ktoś, coś ...

 


 
Dodane : 17/02/2019 4:23 pm
(@g_adrian)
Wpisów: 34
Praktykant
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
 

Cześć może spróbuj w taki sposób.

Item Boiler_Room_Temperature_Fireplace  musi być uwzględniony w pliku presistance 

.rrd4j

Items {
Boiler_Room_Temperature_Fireplace  : strategy = everyChange, everyMinute, restoreOnStartup
}

 

.items

Number Boiler_Room_Temperature_Fireplace "Temperatura Boiler [%.1f °C]"
String Boiler_ternd

.sitemap

Text item=Boiler_Room_Temperature_Fireplace

Text item=Boiler_ternd label="previous temp [%s]"

 

.rules

rule "praca pompy do podłogówki"

when
Item Boiler_Room_Temperature_Fireplace received update
then
if (Boiler_Room_Temperature_Fireplace.state > Boiler_Room_Temperature_Fireplace.previousState.state) {
Boiler_ternd.postUpdate("rosnąca")
//tutaj dodaj to co ma zrobić gdy temp wzrasta np. "Boiler_Room_Floor_Heating_Pump.sendCommand(ON)"
}
else if (Boiler_Room_Temperature_Fireplace.state = Boiler_Room_Temperature_Fireplace.previousState.state) {
Boiler_ternd.postUpdate("stała")
//tutaj dodaj to co ma zrobić gdy temp jest stała
}
else if (Boiler_Room_Temperature_Fireplace.state < Boiler_Room_Temperature_Fireplace.previousState.state) {
Boiler_ternd.postUpdate("malejąca")
//tutaj dodaj to co ma zrobić gdy temp spada np. "Boiler_Room_Floor_Heating_Pump.sendCommand(OFF)"
}
end

Poprawiłem błędy (chyba 🙄 ) daj znać czy działa.


 
Dodane : 19/02/2019 2:17 pm
(@_aro_)
Wpisów: 20
Praktykant
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
 

Hejka !

To też jakieś rozwiązanie  😀 Myślałem, żeby móc określić tempo przyrostu lub spadku temperatury, ale może rzeczywiście sam fakt wzrostu lub spadku będzie już wystarczającą wskazówką jakie podjąć działania.

Dzięki - przetestuję po powrocie do domu.


 
Dodane : 19/02/2019 2:48 pm
(@g_adrian)
Wpisów: 34
Praktykant
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
 

Można użyć Time cron "0 0/2 * * * ?" zamiast  Item Boiler_Room_Temperature_Fireplace  received update. Masz odczyt co dwie minuty.

rule "praca pompy do podłogówki"
when
Time cron "0 0/2 * * * ?"
then
if (Boiler_Room_Temperature_Fireplace.state > Boiler_Room_Temperature_Fireplace.previousState.state) {
Boiler_ternd.postUpdate("rosnąca")
//tutaj dodaj to co ma zrobić gdy temp wzrasta np. "Boiler_Room_Floor_Heating_Pump.sendCommand(ON)"
}
else if (Boiler_Room_Temperature_Fireplace.state = Boiler_Room_Temperature_Fireplace.previousState.state) {
Boiler_ternd.postUpdate("stała")
//tutaj dodaj to co ma zrobić gdy temp jest stała
}
else if (Boiler_Room_Temperature_Fireplace.state < Boiler_Room_Temperature_Fireplace.previousState.state) {
Boiler_ternd.postUpdate("malejąca")
//tutaj dodaj to co ma zrobić gdy temp spada np. "Boiler_Room_Floor_Heating_Pump.sendCommand(OFF)"
}
end

 
Dodane : 19/02/2019 2:59 pm
(@g_adrian)
Wpisów: 34
Praktykant
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
 

Kolego przepraszam 😣 , sprawdziłem kod na "żywym organizmie" i nie działa jak powinien. Postaram się poszukać rozwiązania tymczasem, może ktoś z bardziej zaawansowanych tubylców pomoże.


 
Dodane : 20/02/2019 12:42 pm
(@g_adrian)
Wpisów: 34
Praktykant
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
 

Ok, poprzednie kody możemy uznać za niebyłe 😉 . W pliku items oczywiście dla Boiler_Room_Temperature_Fireplace -podajesz swój channel bądź mqtt.

.items

Number Boiler_Room_Temperature_Fireplace "Temperatura Boiler [%.1f °C]" {channel="mqtt:topic:46c38da5:Boiler_Room"}
String Boiler_ternd
Number Boiler_prevtemp

.sitemap

sitemap boiler label="boiler" {
Frame {
Text item=Boiler_Room_Temperature_Fireplace
Text item=Boiler_prevtemp label="previous temp [%s]"
Text item=Boiler_ternd label="trend [%s]"
}
}

.rules

rule "update Boiler_prevtemp"
when
Time cron "0 0/2 * * * ?"
then {
Boiler_prevtemp.postUpdate((Boiler_Room_Temperature_Fireplace.state as DecimalType))
if (Boiler_Room_Temperature_Fireplace.state > Boiler_prevtemp.state) {
Boiler_ternd.postUpdate("rosnąca")
//tutaj dodaj to co ma zrobić gdy temp wzrasta np. "Boiler_Room_Floor_Heating_Pump.sendCommand(ON)"
}
elseif (Boiler_Room_Temperature_Fireplace.state ==Boiler_prevtemp.state) {
Boiler_ternd.postUpdate("stała")
//tutaj dodaj to co ma zrobić gdy temp stała
}
elseif (Boiler_Room_Temperature_Fireplace.state <Boiler_prevtemp.state) {
Boiler_ternd.postUpdate("malejąca")
//tutaj dodaj to co ma zrobić gdy temp spada np. "Boiler_Room_Floor_Heating_Pump.sendCommand(OFF)"
}
}
end

 
Dodane : 20/02/2019 2:06 pm
(@alien)
Wpisów: 98
Pomocny
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
 
Próbowałem napisać skrypt, ale jeszcze altualny poziom nie pozwala  😀  

rule "praca pompy do podłogówki"
    when
    Item Boiler_Room_Temperature_Fireplace changed // received update- lepiej ?
   var Delta_Temp_Fireplace = (Boiler_Room_Temperature_Fireplace.state as Number - Boiler_Room_Temperature_Fireplace.historicState(now.minusMinutes(1)).state as Number)
    then
    if  (Delta_Temp_Fireplace as Number > .2) {
        Boiler_Room_Floor_Heating_Pump.sendCommand(ON)
   }
else {
        Boiler_Room_Floor_Heating_Pump.sendCommand(OFF)
    }
end

 

Otrzymuję błędy:

[WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'pompa do podłogówki.rules' has errors, therefore ignoring it: [6,2]: missing 'then' at 'var'
[7,2]: no viable alternative at input 'then'
[8,40]: no viable alternative at input '.'
[8,42]: mismatched input ')' expecting 'end'

Sorry odgrzeje trochę, zamiast var użyj val używam tego do wietrzenia łazienek gdy wilgotność w ciągu minuty wzrośnie wygląda to tak:

rule "Włączanie wietrzenia gdy wilgotność ^"
when
ItemMQTTThing_Humidity_num changed
then
val y1 =MQTTThing_Humidity_num.historicState(now.minusMinutes(1)).state as Number
val y2 = MQTTThing_Humidity_num.state as Number
val slope = y2 - y1
if(slope > 3) {
logInfo("SENSOR", "łazienka poddasze wilgotność")
vReku.sendCommand(4)
}
end

 

 


 
Dodane : 18/07/2019 7:33 pm
Udostępnij: