Witam. Prośba o pomoc. Próbuję stworzyć w domoticzu skrypt pozwalający awaryjnie wyłączyć agregat pompy w sytuacji braku przepływu. Stworzyłem do tego przycisk "switch". Polega on na włączeniu guzika micro switch na jedną sekundę i "puszczenie" go. No i problem. Bo program wykonuje w kółko to zdarzenie, a ja chcę, żeby zrobił to tylko raz. Jak to zrobić ?
@geoterm proponuję dodać sobie w domoticz takiego pomocnika, który się nazywa zmienna użytkownika, ustawiasz sobie dowolną nazwę, typ liczba całkowita i ustawiasz ją na 0.
W bloczkach robisz IF V1 < 5 and Pel > 100 and zmienna = 0
SET zmienna = 1 po 20 sek
ELSEIF V1 < 5 and Pel > 100 and zmienna = 1
SET micro switch ON
ELSEIF V1 > 5 and Pel > 100
SET zmienna = 0
Dzięki temu uzyskasz 20 sekundowe opóźnienie wyłączenia, na wypadek krótkotrwałego braku przepływu
Zrobiłem - dzięki za konkretną odpowiedź.
Jednak coś nie hula jeszcze. Coś nie działa.
W logach :
Pierwszy odczyt przepływu ustawia zmienną licznik na 1 po 10 sek , drugi odczyt włącza on/off i ustawia zmienną na 2 , odczyt przepływu większy niż 5 ustawia zmienną na 0. Sprawdzone na zwykłym przełączniku ON/OFF z opóźnieniem wyłączenia 1 sek .
Nie wiem co to jest "pel" , ale to nie ma znaczenia, po jego dodaniu też powinno działać
"P el" to jest moc elektryczna w Watach rzeczywista chwilowa jaką pobiera pompa ciepła w danej chwili. Widzę, że jest bez przecinków " " może u mnie też ma być bez przecinków.
Taka myśl mi przyszła, żeby zmienić jedną z wartości na >= aby wartość 5 była też brana pod uwagę.
Taka myśl mi przyszła, żeby zmienić jedną z wartości na >=
Masz to w moim przykładzie przecież
Już wiem o co chodzi. ALe to jest głupie :).Brakowało mu w 3 linijce warunku z wyłącznikiem off. Jeśli daję mu warunek w 2 linijce z on to muszę dać warunek i na off. Działa :)!!
To skumałem już w końcu.
1 linijka : Czyli jeżeli temperatura spadnie poniżej lub = 20 * i zmienna =0 to zmień zmienną na 1.
2 linijka : jeżeli temperatura spadła poniżej 20 *C i zmienną zmieniłeś na 1 to włącz przekaźnik, który wyłączy agregat.
3 linijka jeżeli temperatura wróci do normy czyli >20*C i zmieniłeś zmienną na 1 to wyłącz przekaźnik, wyłączający pompę.
I do tego momentu jest spoko. Natomiast problem się pojawia taki:
Ustawiłem sobie włącznik z wyłączaniem czasowym 1s. Czyli druga linijka ciągle mi załącza przekaźnik i jest choinka, a ja chcę, żeby zrobił to tylko raz, a on jest uparty bo mu kazałem włączyć, no to włącza. Ta funkcja jest mi potrzebna bo to jest reset pompy ciepła. Czyli przycisk musi być wciśnięty nie ciągle, ale tylko na 1 sekundę i puszczony- jak dzwonek. W przypadku powrotu warunku normalnego też ma ten przycisk wcisnąć na 1 sekundę. Może muszę zastosować jakiś pośredni przekaźnik, który z jednej strony będzie zapięty na stałe a z drugiej po takmi zapięciu albo rozpięciu da jeden impuls (tylko, że dobrze by było, żeby ten impuls trwał z jedną sekundę). A może jakiś inny rodzaj włącznika muszę wybrać ?
Zrozumiałem, że ten system opcję off wykonuje raz, natomiast on jest uparty i do skutku, ciągle. Jesli bym odwrócił logikę, to włączy mi raz, ale będzie wyłączał ciągle.
@geoterm tak szczerze, to niewiele zrozumiałeś i nic nie jest głupie, tylko właściciel systemu ma problem ze skopiowaniem gotowego przykładu. Co się dzieje ze zmienną w drugiej linii kodu w moim przykładzie? Czy nie przyjmuje czasem wartości 2 tak żeby już nic się nie włączało w pętli ?
Po drugie, skoro chcesz przycisk to ustaw w samym esp PulseTime dla tego przekaźnika, albo w samym blockly taki układ
wtedy w obu przypadkach włączy tylko na sekundę.
Po trzecie przy warunku temp > 20 , też trzeba pomyśleć co zrobić z wartością zmiennej żeby nie klepało przy każdym odczycie temperatury, ale to już zostawię do skumania 🙂 Dodam tylko że rozwiązanie jest dość proste.
Zrobiłem tak i działa . Dziękuję za wskazówki . Zmodyfikuje jeszcze ten układ o ten puls time w esp .
Tak wygląda moja aktualna wersja skryptu FS już dla PC. Mam pytanie i mały problem. Problem się pojawia w 1 linijce gdy urządzenie zostało włączone powtórnie (ręcznie-bo takie jest założenie-domoticz odstawia agregat, a ja musze pójść zobaczyć co się dzieje i go od nowa włączyć). Zatem włączam i realizuje się 3 linijka czyli pojawia się przepływ >3l/min ^ Pel>100W ^ zmienna FS=2 => zmienia zmienną FS na "0" i lądujemy w 1 linijce. I tu jest problem bo nie przęłącza zmiennej z "0" na "1". I to jest dla mnie nielogiczne. Nie rozumiem go o co mu chodzi.
Kiedy zrobię następującą operację dopiero zmieni zmienna FS z 0 na 1 czyli : zamknę zawór za pompą obiegową PC raz, otworzę i drugi raz zamknę i wtedy odstawia agregat. Ale powinien zrobić to już za 1 -szym razem zamknięcia zaworu, a nie dopiero za 2. Innymi słowy. Odstawia agregat nie po 10 sekundach ale od razu. Jak zamknę zawór liczę 10 sekund i dopiero wtedy powinien odstawić agregat. Proszę o pomoc.
I tu jest problem bo nie przęłącza zmiennej z "0" na "1". I to jest dla mnie nielogiczne.
A dlaczego ma zmienić wartość zmiennej na 1 skoro przepływ jest > 3 , zmieni dopiero gdy przepływ będzie mniejszy lub równy 3 + moc będzie powyżej 100W + minie 10 sek
No ma zmienić zmienną z 0 na 1 bo zadałem mu to czyli:
zamknąłem zawór na dłużej niż 10 sekund (czyli V<3 l/min ^moc>100W^ t>10s) <=> zmień zmienną z 0 na 1.
żeby to działało musi być zrobione tak:
1. trzeba zamknąć zawór za pompą obiegową na dłużej niż 10 sekund - i to zmienia zmienną z 0 na 1,
i teraz mamy układ aktywny
teraz jeśli zamkniemy zawór na choćby jedną sekundę - odstawia agregat natychmiast, czyli źle.
On ma odstawiać agregat po każdorazowym zamknięciu zaworu na dłużej niż 10 sekund.
Chyba już powoli kapuje 🙂
@geoterm generalnie nie wiem po co ten trzeci elseif, skoro i tak musisz pójść sprawdzić i włączyć. Po wyłączeniu przez skrypt w drugim else dodaj zmianę zmiennej na 0 po 10 sek i już.
Teraz gdy system sam wyłączy zostawia zmienną na 2 , ty włączasz ręcznie i po spełnieniu V>3 itd , w pierwszej kolejności następuje zmiana zmiennej na 0 i dopiero przy następnym cyklu zmiana na 1.
działa, dziękuję.
Czy da się zrobić tak, żeby druga linijka była realizowana dopiero wtedy i tylko wtedy gdy V1<3 l/min ale gdy taki stan będzie trwał dłużej niż 10 sekund ?
Ta druga linijka jest realizowana po spełnieniu pierwszej, która jest identyczna a w tej pierwszej regulujesz czas zmiany FS.
10 minut, o których piszesz nijak się ma do tego skryptu, chyba że po zamknięciu zaworu nie wszystkie warunki zostają spełnione.
Ja jak miałem problemy z tak prostymi skryptami, to zaczynałem je rozkładać na czynniki i dopiero jak działała jedna część dokładałem kolejne. Ja bym zrobił sobie wirtualny włącznik nazwany test, wywalił sprawdzanie mocy i ustawił włączanie tego test gdy V1<3 a wyłączanie gdy V1>3. Jak to będzie działać dodajemy zmienną i czas , znów sprawdzamy i jak działa z opóźnieniem dodajemy moc.
Za pomocą tego przełącznika test wyeliminujesz błędy, które mogą wynikać np z nie wysłania polecenia do przycisku w esp itd.