חשבתי שנפתח דיון כזה שיהיה בעברית...
כאן אפשר לשאול שאלות ולהתייעץ על השימוש/ייעול/יישום בPLEG
שרשור PLEG - בעברית (Program Logic Event Generator)
- R-יק (פותח השרשור)
-
- חבר פעיל במיוחד
- הודעות: 518
- הצטרף: נובמבר 2009
- נתן תודות: 50 פעמים
- קיבל תודות: 45 פעמים
Re: שרשור PLEG - בעברית (Program Logic Event Generator)
ואני אתחיל
איך אני משתמש ב"שעה" בתנאים?
לדוגמא:
אני רוצה ליצור תנאי כזה (NOW > 23:00) AND (LR_BigDoor EQ 0)
תנאי השעה לא עובד לי...
איך אני מגדיר שהשעה אחרי 23:00?
איך אני משתמש ב"שעה" בתנאים?
לדוגמא:
אני רוצה ליצור תנאי כזה (NOW > 23:00) AND (LR_BigDoor EQ 0)
תנאי השעה לא עובד לי...
איך אני מגדיר שהשעה אחרי 23:00?
Re: שרשור PLEG - בעברית (Program Logic Event Generator)
בשביל לבדוק שרצף תנאים קרו אחד אחרי השני, מפרידים עם נקודה-פסיק:R-יק כתב:ואני אתחיל
איך אני משתמש ב"שעה" בתנאים?
לדוגמא:
אני רוצה ליצור תנאי כזה (NOW > 23:00) AND (LR_BigDoor EQ 0)
תנאי השעה לא עובד לי...
איך אני מגדיר שהשעה אחרי 23:00?...
קוד: בחירת הכל
(23:00:00;NOW) AND (LR_BigDoor EQ 0)
הערה: התנאי הנ"ל יתקיים רק בין 23:00:00 ל23:59:59. זה באמת מה שאתה רוצה שיקרה?
עם סימן "גדול" (או "קטן") משתמשים כאשר רוצים לבדוק את משך הזמן שלקח לרצף פעולות לקרות.
לדוגמה:
קוד: בחירת הכל
(Action1;Action2>23:00)
דרך אגב, שים לב שהפורמט לזמן הוא HH:MM:SS.
אם אתה כותב רק "שני חלקים" (למשל 23:00) המשמעות היא 23 דקות, ולא 23 שעות.
נערך לאחרונה על ידי cafri ב 18/11/2015 11:39, נערך פעם 1 בסך הכל.
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה
דרך אגב, בהנחה שאתה רוצה שהתנאי יתקיים רק כאשר LR_BigDoor הופך לאפס אחרי השעה 23:00:00, הדרך הנכונה לעשות זאת היא:
ההבדל:
במקרה ש LR_BigDoor הופך לאפס בשעה 22:30 ונשאר כך עד 23:30, התנאי הזה לא יתקיים, משום ש LR_BigDoor שינה מצב לפני 23:00:00.
לעומת זאת, כאשר תגיע השעה 23:00:00, התנאי מההודעה הקודמת כן יתקיים:
משום שNOW קרה אחרי 23:00:00.
קוד: בחירת הכל
(23:00:00;LR_BigDoor) AND (LR_BigDoor EQ 0)
במקרה ש LR_BigDoor הופך לאפס בשעה 22:30 ונשאר כך עד 23:30, התנאי הזה לא יתקיים, משום ש LR_BigDoor שינה מצב לפני 23:00:00.
לעומת זאת, כאשר תגיע השעה 23:00:00, התנאי מההודעה הקודמת כן יתקיים:
קוד: בחירת הכל
(23:00:00;NOW) AND (LR_BigDoor EQ 0)
נערך לאחרונה על ידי cafri ב 18/11/2015 11:39, נערך פעם 1 בסך הכל.
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה
נערך לאחרונה על ידי cafri ב 18/11/2015 11:38, נערך פעם 1 בסך הכל.
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה
לוגיקות לדוד
נתבקשתי על-ידי @R-יק לשתף כיצד הגדרתי בPLEG את הלוגיקות הנוגעות לדוד.
הלוגיקה שהגדרתי אצלי (קצת שונה מהתכנון המקורי, כמו שמופיע בלינק):
* הדוד נדלק אוטומטית כל יום בשעה 06:00 (להתארגנויות בוקר) למשך 20 דקות
* הדוד נדלק אוטומטית כל יום בשעה 18:00 (למקלחות ילדים): בקיץ למשך 30 דקות, בחורף למשך שעה.
* הדוד נדלק אוטומטית כל יום בשעה 20:00 (למקלחות הורים): בקיץ למשך 20 דקות, בחורף למשך 40 דקות.
* כאשר מדליקים את הדוד ידנית, הוא נכבה כעבור 20 דקות.
כאמור, המתג השני משמש לביצוע "הארכות". באופן כזה, אם יש צורך להדליק את הדוד בקיץ ל70 דקות (משום שכל בני המשפחה יתקלחו בסמיכות), ניתן יהיה להדליק את הדוד (ל20 דקות) בעזרת הכפתור הראשון, וללחוץ 5 פעמים על הכפתור השני.
(50+20 = 70)
הנה המימוש בפועל:
[left]
Inputs - Triggers/b]
BoilerOn = Boiler (switch 1) is on
BoilerExtensionButtonPressed = Boiler Virtual Extension (switch 2) is turned on
Inputs - Schedules/b]
BoilerTimeAt0600 = Everyday at 05:45, Off type - Interval, Off time - 02:00
BoilerTimeAt1800 = Everyday at 18:00, Off type - Interval, Off time - 02:00
BoilerTimeAt2000 = Everyday at 20:00, Off type - Interval, Off time - 02:00
BoilerTimer = SelfReTrigger, Off type - Interval, Off time - 30:00 (Note: this is default value only)
Inputs - Device Properties/b]
BoilerExtensionsCounter = Multistring plugin, Variable 1
Conditions/b]
IncreaseBoilerExtensionCounter = (BoilerExtensionButtonPressed)
BoilerTimeMorning = (BoilerTimeAt0600) AND (Not(BoilerOn)) AND (!BoilerOn;BoilerTimeAt0600) AND (OnVacationStatus EQ "0")
BoilerTimeKids = (BoilerTimeAt1800) AND (Not(BoilerOn)) AND (!BoilerOn;BoilerTimeAt1800) AND (OnVacationStatus EQ "0")
BoilerTimeParents = (BoilerTimeAt2000) AND (Not(BoilerOn)) AND (!BoilerOn;BoilerTimeAt2000) AND (OnVacationStatus EQ "0")
BoilerTurnedOnWinter = (SummerTimeBoiler EQ "0") AND (BoilerOn) AND (SummerTimeBoiler;BoilerOn)
BoilerTurnedOnSummer = (SummerTimeBoiler EQ "1") AND (BoilerOn) AND (SummerTimeBoiler;BoilerOn)
ExtendBoilerTimer = (BoilerOn) AND (Not(BoilerTimer)) AND (BoilerOn;!BoilerTimer) AND (BoilerExtensionsCounter NE "0")
TurnBoilerOff = (BoilerOn) AND (Not(BoilerTimer)) AND (BoilerOn;!BoilerTimer) AND (BoilerExtensionsCounter EQ "0")
BoilerTurnedOff = (Not(BoilerOn))
Actions/b]
IncreaseBoilerExtensionCounter:
Multistring, SetVariable1 = {(BoilerExtensionsCounter+1)}
Boiler Virtual Extension Switch, SetTarget = 0
BoilerTimeMorning:
Boiler, SetTarget = 1
BoilerTimeKids:
Boiler, SetTarget = 1
BoilerTimeParents:
Boiler, SetTarget = 1
BoilerTurnedOnWinter:
PLEG, StartTimer, timerName = BoilerTimer, intervalTime={(BoilerTimeAt1800 ? "60:00" : (BoilerTimeAt2000 ? "40:00" : "20:00"))}
BoilerTurnedOnSummer:
PLEG, StartTimer, timerName = BoilerTimer, intervalTime={(BoilerTimeAt1800 ? "30:00" : "20:00")}
ExtendBoilerTimer:
Immediate: PLEG, StartTimer, timerName = BoilerTimer, intervalTime=10:00
Delay 10 seconds: MultiString, SetVariable1 = {(BoilerExtensionsCounter-1)}
TurnBoilerOff :
Boiler, SetTarget = 0
BoilerTurnedOff:
MultiString, SetVariable2 = 0
MultiString, SetVariable2 = (Note: set to be empty)
MultiString, SetVariable3 = (Note: set to be empty)
[/left]
מספר הערות לגבי אלמנטים נוספים מעבר לPLEG:
1. אני משתמש במתגים וירטואליים (MultiSwitch Plugin) לניהול מצב שבו אנחנו בחופשה (ואז הדוד לא אמור לפעול בכלל). דוגמה לבדיקה כזו:
2. אני משתמש בMultistring לניהול מספר ה"הארכות" שיש לבצע (משתנה 1) והשעה המיועדת לכיבוי הדוד (גם בתצורת HH:MM:SS הקריאה לבני-אדם (משתנה 2), וגם בתצורת epoch, הנוחה לביצוע חישובים (משתנה 3)).
יש צורך לבצע "איפוס ראשוני" של פרמטר 1, על-ידי כניסה לMultiString plugin, כתיבת 0 (אפס) עבור V1 Value ולחיצה על Set:
[imgbig]http://i68.tinypic.com/15plgg9.png[/imgbig]
כמו-כן, בלשונית Advanced, בפרמטר Options יש לרשום CT2.
3. מכיוון שהלוגיקה כמו שכתבתי למעלה די מורכבת, ולא בטוח שקל להבין אותה "בפעם ראשונה", מחקתי ממנה דברים נוספים שיש אצלי, במטרה להקל על ההבנה:
א. אפשרות להדליק את הדוד על-ידי הגדרה בGoogle Calendar
ב. לפני הדלקת הדוד בשעה 18:00, בדיקה שהדוד לא הודלק ידנית מוקדם יותר, ובמידה והוא כן הודלק ידנית (סימן שהילדים כבר התקלחו) - הדוד לא ידלק בשעה 18:00.
אני מקווה שלא עשיתי טעויות במחיקה של הלוגיקות האלה.
אם מישהו ירצה להוסיפן ויצטרך עזרה - אוכל לשתף גם את זה.
עריכה: הוספתי להערה 2 מספר הגדרות שיש לבצע לMultiString plugin.
הלוגיקה שהגדרתי אצלי (קצת שונה מהתכנון המקורי, כמו שמופיע בלינק):
כל הדלקה של הדוד תכובה אוטומטית על-ידי הVera לאחר זמן מוגדר מראש:cafri כתב:מכיוון שהמחיר של שני המודולים זהה, אני הזמנתי מודול 2x1.5K.
מכיוון שאין לי מתג תאורה או מכשיר סמוך אחר שאני אוכל להעביר חיווט מהמפסק שלו למפסק של הדוד, אני מתכנן לעשות שימוש ביכולת ה"כפולה" של המודול באופן הבא:
הראשון ישמש למיתוג המגען, שיפעיל ויכבה את הדוד.
השני ישמש לבצע "הארכה" של זמן ההדלקה, ב"כפולות" של 10 דקות....
* הדוד נדלק אוטומטית כל יום בשעה 06:00 (להתארגנויות בוקר) למשך 20 דקות
* הדוד נדלק אוטומטית כל יום בשעה 18:00 (למקלחות ילדים): בקיץ למשך 30 דקות, בחורף למשך שעה.
* הדוד נדלק אוטומטית כל יום בשעה 20:00 (למקלחות הורים): בקיץ למשך 20 דקות, בחורף למשך 40 דקות.
* כאשר מדליקים את הדוד ידנית, הוא נכבה כעבור 20 דקות.
כאמור, המתג השני משמש לביצוע "הארכות". באופן כזה, אם יש צורך להדליק את הדוד בקיץ ל70 דקות (משום שכל בני המשפחה יתקלחו בסמיכות), ניתן יהיה להדליק את הדוד (ל20 דקות) בעזרת הכפתור הראשון, וללחוץ 5 פעמים על הכפתור השני.
(50+20 = 70)
הנה המימוש בפועל:
[left]
Inputs - Triggers/b]
BoilerOn = Boiler (switch 1) is on
BoilerExtensionButtonPressed = Boiler Virtual Extension (switch 2) is turned on
Inputs - Schedules/b]
BoilerTimeAt0600 = Everyday at 05:45, Off type - Interval, Off time - 02:00
BoilerTimeAt1800 = Everyday at 18:00, Off type - Interval, Off time - 02:00
BoilerTimeAt2000 = Everyday at 20:00, Off type - Interval, Off time - 02:00
BoilerTimer = SelfReTrigger, Off type - Interval, Off time - 30:00 (Note: this is default value only)
Inputs - Device Properties/b]
BoilerExtensionsCounter = Multistring plugin, Variable 1
Conditions/b]
IncreaseBoilerExtensionCounter = (BoilerExtensionButtonPressed)
BoilerTimeMorning = (BoilerTimeAt0600) AND (Not(BoilerOn)) AND (!BoilerOn;BoilerTimeAt0600) AND (OnVacationStatus EQ "0")
BoilerTimeKids = (BoilerTimeAt1800) AND (Not(BoilerOn)) AND (!BoilerOn;BoilerTimeAt1800) AND (OnVacationStatus EQ "0")
BoilerTimeParents = (BoilerTimeAt2000) AND (Not(BoilerOn)) AND (!BoilerOn;BoilerTimeAt2000) AND (OnVacationStatus EQ "0")
BoilerTurnedOnWinter = (SummerTimeBoiler EQ "0") AND (BoilerOn) AND (SummerTimeBoiler;BoilerOn)
BoilerTurnedOnSummer = (SummerTimeBoiler EQ "1") AND (BoilerOn) AND (SummerTimeBoiler;BoilerOn)
ExtendBoilerTimer = (BoilerOn) AND (Not(BoilerTimer)) AND (BoilerOn;!BoilerTimer) AND (BoilerExtensionsCounter NE "0")
TurnBoilerOff = (BoilerOn) AND (Not(BoilerTimer)) AND (BoilerOn;!BoilerTimer) AND (BoilerExtensionsCounter EQ "0")
BoilerTurnedOff = (Not(BoilerOn))
Actions/b]
IncreaseBoilerExtensionCounter:
Multistring, SetVariable1 = {(BoilerExtensionsCounter+1)}
Boiler Virtual Extension Switch, SetTarget = 0
קוד: בחירת הכל
local MultiStringDeviceID = 56
local t = luup.variable_get("urn:upnp-org:serviceId:VContainer1","Variable3", MultiStringDeviceID)
t = t + 600 -- add 10 minutes
luup.call_action("urn:upnp-org:serviceId:VContainer1", "SetVariable2", {newVariable2=tostring(t)}, MultiStringDeviceID)
luup.variable_set("urn:upnp-org:serviceId:VContainer1", "Variable3", tostring(t), MultiStringDeviceID)
Boiler, SetTarget = 1
BoilerTimeKids:
Boiler, SetTarget = 1
BoilerTimeParents:
Boiler, SetTarget = 1
BoilerTurnedOnWinter:
PLEG, StartTimer, timerName = BoilerTimer, intervalTime={(BoilerTimeAt1800 ? "60:00" : (BoilerTimeAt2000 ? "40:00" : "20:00"))}
קוד: בחירת הכל
local MultiStringDeviceID = 56
local tt = os.time()
local ExtensionsCounter = luup.variable_get("urn:upnp-org:serviceId:VContainer1", "Variable1", MultiStringDeviceID)
if (BOILERTIMEAT1800.state) then
tt = tt+3600 -- add 60 minutes
elseif (BOILERTIMEAT2000.state) then
tt = tt+2400 -- add 40 minutes
else
tt = tt+1200 -- add 20 minutes
end
tt = tt + (600 * ExtensionsCounter) -- add 10 minutes per Extension
luup.call_action("urn:upnp-org:serviceId:VContainer1", "SetVariable2", {newVariable2=tostring(tt)}, MultiStringDeviceID)
luup.variable_set("urn:upnp-org:serviceId:VContainer1", "Variable3", tostring(tt), MultiStringDeviceID)
PLEG, StartTimer, timerName = BoilerTimer, intervalTime={(BoilerTimeAt1800 ? "30:00" : "20:00")}
קוד: בחירת הכל
local MultiStringDeviceID = 56
local tt = os.time()
local ExtensionsCounter = luup.variable_get("urn:upnp-org:serviceId:VContainer1", "Variable1", MultiStringDeviceID)
if (BOILERTIMEAT1800.state) then
tt = tt+1800 -- add 30 minutes
else
tt = tt+1200 -- add 20 minutes
end
tt = tt + (600 * ExtensionsCounter) -- add 10 minutes per Extension
luup.call_action("urn:upnp-org:serviceId:VContainer1", "SetVariable2", {newVariable2=tostring(tt)}, MultiStringDeviceID)
luup.variable_set("urn:upnp-org:serviceId:VContainer1", "Variable3", tostring(tt), MultiStringDeviceID)
Immediate: PLEG, StartTimer, timerName = BoilerTimer, intervalTime=10:00
Delay 10 seconds: MultiString, SetVariable1 = {(BoilerExtensionsCounter-1)}
TurnBoilerOff :
Boiler, SetTarget = 0
BoilerTurnedOff:
MultiString, SetVariable2 = 0
MultiString, SetVariable2 = (Note: set to be empty)
MultiString, SetVariable3 = (Note: set to be empty)
[/left]
מספר הערות לגבי אלמנטים נוספים מעבר לPLEG:
1. אני משתמש במתגים וירטואליים (MultiSwitch Plugin) לניהול מצב שבו אנחנו בחופשה (ואז הדוד לא אמור לפעול בכלל). דוגמה לבדיקה כזו:
קוד: בחירת הכל
OnVacationStatus EQ "0"
יש צורך לבצע "איפוס ראשוני" של פרמטר 1, על-ידי כניסה לMultiString plugin, כתיבת 0 (אפס) עבור V1 Value ולחיצה על Set:
[imgbig]http://i68.tinypic.com/15plgg9.png[/imgbig]
כמו-כן, בלשונית Advanced, בפרמטר Options יש לרשום CT2.
3. מכיוון שהלוגיקה כמו שכתבתי למעלה די מורכבת, ולא בטוח שקל להבין אותה "בפעם ראשונה", מחקתי ממנה דברים נוספים שיש אצלי, במטרה להקל על ההבנה:
א. אפשרות להדליק את הדוד על-ידי הגדרה בGoogle Calendar
ב. לפני הדלקת הדוד בשעה 18:00, בדיקה שהדוד לא הודלק ידנית מוקדם יותר, ובמידה והוא כן הודלק ידנית (סימן שהילדים כבר התקלחו) - הדוד לא ידלק בשעה 18:00.
אני מקווה שלא עשיתי טעויות במחיקה של הלוגיקות האלה.
אם מישהו ירצה להוסיפן ויצטרך עזרה - אוכל לשתף גם את זה.
עריכה: הוספתי להערה 2 מספר הגדרות שיש לבצע לMultiString plugin.
נערך לאחרונה על ידי cafri ב 12/01/2016 9:23, נערך פעם 1 בסך הכל.
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה
בדיקת תנאי בשעה מסויימת ביום
@cafri
בגלל שאתה מקבל אחוזים ב-PLEG , אני רוצה להתחיל להיכנס יותר לעומק.
כרגע יש אצלי רק לוגיקות בסיסיות ב-PLEG של and ו-or שיותר קל לכתוב שם.
אני מעוניין לבצע לוגיקה לתזמון זמן הדלקת הדוד בהתאם לעונות השנה ומצב העננות (בדומה למה שהציע @bobhas בשרשור הזה).
הלוגיקה שאני מתכנן מורכבת משני משתנים שאותם אדגום פעם ביום בשעה 13:00:
- virtual switch למצב חורף או קיץ שמשנה את מצבו בהתאם לטמפ' מינימלית + תאריך.
- מצב העננות שמורכב מ-3 אפשרויות - בהיר, מעונן או מעונן חלקית
על פי השילוב בין שני המשתנים הללו יקבע משך הדלקת הדוד (6 אופציות).
אני מבין איך לבצע את כל השלבים ב-PLEG אבל לא הצלחתי להבין איך אני מבצע דגימה של המשתנים רק בשעה מסויימת.
מה דעתך?
בגלל שאתה מקבל אחוזים ב-PLEG , אני רוצה להתחיל להיכנס יותר לעומק.
כרגע יש אצלי רק לוגיקות בסיסיות ב-PLEG של and ו-or שיותר קל לכתוב שם.
אני מעוניין לבצע לוגיקה לתזמון זמן הדלקת הדוד בהתאם לעונות השנה ומצב העננות (בדומה למה שהציע @bobhas בשרשור הזה).
הלוגיקה שאני מתכנן מורכבת משני משתנים שאותם אדגום פעם ביום בשעה 13:00:
- virtual switch למצב חורף או קיץ שמשנה את מצבו בהתאם לטמפ' מינימלית + תאריך.
- מצב העננות שמורכב מ-3 אפשרויות - בהיר, מעונן או מעונן חלקית
על פי השילוב בין שני המשתנים הללו יקבע משך הדלקת הדוד (6 אופציות).
אני מבין איך לבצע את כל השלבים ב-PLEG אבל לא הצלחתי להבין איך אני מבצע דגימה של המשתנים רק בשעה מסויימת.
מה דעתך?
Re: בדיקת תנאי בשעה מסויימת ביום
@morgi23
תחת Inputs אתה מגדיר Schedule באופן הבא:
[left]
Start Type = Day Of Week
Days = All days (or whatever you want)
Time = At a certain time of day
Hours = 13
Minutes = 00
Seconds = 00
Random on Delay = (empty)
Stop Type = Interval
After = 00:02:00 (2 minutes, or something similar)
Random off Delay = (empty)
[/left]
לאחר הגדרת הנ"ל אתה יוצר Condition, שאחד התנאים בו הוא שהSchedule הנ"ל מתקיים (פשוט מוסיף AND ואת שם הSchedule).
אני מניח שמה שאתה מתכוון לעשות הוא שתוצאת ה"דגימה" בשעה 13:00 "תאוחסן" איפה שהוא, ותשפיע על משך הדלקת הדוד מאוחר יותר במהלך היום.
שים לב שהמקרה היחיד שבו גם הPLEG לא מתגבר על אתחולים / הפסקות חשמל הוא כאשר מוגדר תזמון "מדוייק".
זאת הסיבה שלגבי "סיום Schedule" מומלץ להשתמש בInterval ולא ב"At a certain time of dat".
הדרך לנסות להתגבר על זה (או לפחות להקטין את הסיכון), אם יש לך Schedule שהוא מאוד חשוב לך, הוא לייצר שני Schedules בהפרש מסויים, שאתה מניח שלא יהיה אתחול / הפסקה חשמל בשניהם (נניח אחד בשעה 13:00 ושני בשעה 14:00).
בCondition אתה יכול פשוט להוסיף את שניהם עם OR:
אולם השיטה הנ"ל תגרום לשתי "דגימות" (בשעה 13:00 ובשעה 14:00), במידה ואין אתחולים / הפסקות חשמל.
אם אתה רוצה למנוע מצב כזה (אני לא "הלכתי לשם"), אתה יכול להוסיף בדיקה שעבר פרק זמן מספיק ארוך בין הSchedules. לדוגמה:
באופן כזה:
* אם לא יהיו בעיות בכלל
- בשעה 13:00 Schedule1 היה חיובי וגרם לCondition להתקיים.
- בשעה 14:00 Schedule2 היה חיובי, אבל ההפרש בין 14:00 ל13:00 קטן משעה ו-5 דקות, ולכן הConditoin לא יתקיים.
* אם בשעה 13:00 הבקר לא פעל (אתחול / הפסקה חשמל):
- בשעה 13:00 Schedule1 לא היה חיובי (וגם לא מאוחר יותר, כאשר הבקר חזר לפעילות תקינה).
- בשעה 14:00 Schedule2 היה חיובי, וההפרש בין 14:00 היום ל13:00 אתמול (הפעם האחרונה שSchedule1 היה חיובי) גדול משעה ו-5 דקות, ולכם הCondition כן יתקיים.
* אם בשעה 13:00 הבקר פעל ובשעה 14:00 לא פעל:
- בשעה 13:00 Schedule1 היה חיובי וגרם לCondition להתקיים.
- בשעה 14:00 Schedule2 לא היה חיובי (וגם לא מאוחר יותר, כאשר הבקר חזר לפעילות תקינה), כלומר הCondition לא יהיה חיובי שוב.
* אם הבקר לא יפעיל גם בשעה 13:00 וגם בשעה 14:00 הCondition לא יתקיים באותו יום.
תחת Inputs אתה מגדיר Schedule באופן הבא:
[left]
Start Type = Day Of Week
Days = All days (or whatever you want)
Time = At a certain time of day
Hours = 13
Minutes = 00
Seconds = 00
Random on Delay = (empty)
Stop Type = Interval
After = 00:02:00 (2 minutes, or something similar)
Random off Delay = (empty)
[/left]
לאחר הגדרת הנ"ל אתה יוצר Condition, שאחד התנאים בו הוא שהSchedule הנ"ל מתקיים (פשוט מוסיף AND ואת שם הSchedule).
אני מניח שמה שאתה מתכוון לעשות הוא שתוצאת ה"דגימה" בשעה 13:00 "תאוחסן" איפה שהוא, ותשפיע על משך הדלקת הדוד מאוחר יותר במהלך היום.
שים לב שהמקרה היחיד שבו גם הPLEG לא מתגבר על אתחולים / הפסקות חשמל הוא כאשר מוגדר תזמון "מדוייק".
זאת הסיבה שלגבי "סיום Schedule" מומלץ להשתמש בInterval ולא ב"At a certain time of dat".
הדרך לנסות להתגבר על זה (או לפחות להקטין את הסיכון), אם יש לך Schedule שהוא מאוד חשוב לך, הוא לייצר שני Schedules בהפרש מסויים, שאתה מניח שלא יהיה אתחול / הפסקה חשמל בשניהם (נניח אחד בשעה 13:00 ושני בשעה 14:00).
בCondition אתה יכול פשוט להוסיף את שניהם עם OR:
קוד: בחירת הכל
ConditionName = ((Schedule1) OR (Schedule2)) AND (Whatever additional parameters)
אם אתה רוצה למנוע מצב כזה (אני לא "הלכתי לשם"), אתה יכול להוסיף בדיקה שעבר פרק זמן מספיק ארוך בין הSchedules. לדוגמה:
קוד: בחירת הכל
ConditionName = ((Schedule1) OR ((Schedule2) AND (Schedule1;Schedule2>01:05:00)) AND (Whatever additional parameters)
* אם לא יהיו בעיות בכלל
- בשעה 13:00 Schedule1 היה חיובי וגרם לCondition להתקיים.
- בשעה 14:00 Schedule2 היה חיובי, אבל ההפרש בין 14:00 ל13:00 קטן משעה ו-5 דקות, ולכן הConditoin לא יתקיים.
* אם בשעה 13:00 הבקר לא פעל (אתחול / הפסקה חשמל):
- בשעה 13:00 Schedule1 לא היה חיובי (וגם לא מאוחר יותר, כאשר הבקר חזר לפעילות תקינה).
- בשעה 14:00 Schedule2 היה חיובי, וההפרש בין 14:00 היום ל13:00 אתמול (הפעם האחרונה שSchedule1 היה חיובי) גדול משעה ו-5 דקות, ולכם הCondition כן יתקיים.
* אם בשעה 13:00 הבקר פעל ובשעה 14:00 לא פעל:
- בשעה 13:00 Schedule1 היה חיובי וגרם לCondition להתקיים.
- בשעה 14:00 Schedule2 לא היה חיובי (וגם לא מאוחר יותר, כאשר הבקר חזר לפעילות תקינה), כלומר הCondition לא יהיה חיובי שוב.
* אם הבקר לא יפעיל גם בשעה 13:00 וגם בשעה 14:00 הCondition לא יתקיים באותו יום.
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה
Re: בדיקת תנאי בשעה מסויימת ביום
תודה על התשובה המפורטת.cafri כתב:@morgi23
תחת Inputs אתה מגדיר Schedule באופן הבא:
[left]
Start Type = Day Of Week
Days = All days (or whatever you want)
Time = At a certain time of day
Hours = 13
Minutes = 00
Seconds = 00
Random on Delay = (empty)
Stop Type = Interval
After = 00:02:00 (2 minutes, or something similar)
Random off Delay = (empty)
[/left]
לאחר הגדרת הנ"ל אתה יוצר Condition, שאחד התנאים בו הוא שהSchedule הנ"ל מתקיים (פשוט מוסיף AND ואת שם הSchedule).
אני מניח שמה שאתה מתכוון לעשות הוא שתוצאת ה"דגימה" בשעה 13:00 "תאוחסן" איפה שהוא, ותשפיע על משך הדלקת הדוד מאוחר יותר במהלך היום.
שים לב שהמקרה היחיד שבו גם הPLEG לא מתגבר על אתחולים / הפסקות חשמל הוא כאשר מוגדר תזמון "מדוייק".
זאת הסיבה שלגבי "סיום Schedule" מומלץ להשתמש בInterval ולא ב"At a certain time of dat".
הדרך לנסות להתגבר על זה (או לפחות להקטין את הסיכון), אם יש לך Schedule שהוא מאוד חשוב לך, הוא לייצר שני Schedules בהפרש מסויים, שאתה מניח שלא יהיה אתחול / הפסקה חשמל בשניהם (נניח אחד בשעה 13:00 ושני בשעה 14:00).
בCondition אתה יכול פשוט להוסיף את שניהם עם OR:
ConditionName = ((Schedule1) OR (Schedule2)) AND (Whatever additional parameters)
אולם השיטה הנ"ל תגרום לשתי "דגימות" (בשעה 13:00 ובשעה 14:00), במידה ואין אתחולים / הפסקות חשמל.
אם אתה רוצה למנוע מצב כזה (אני לא "הלכתי לשם"), אתה יכול להוסיף בדיקה שעבר פרק זמן מספיק ארוך בין הSchedules. לדוגמה:
ConditionName = ((Schedule1) OR ((Schedule2) AND (Schedule1;Schedule2>01:05:00)) AND (Whatever additional parameters)
באופן כזה:
* אם לא יהיו בעיות בכלל
- בשעה 13:00 Schedule1 היה חיובי וגרם לCondition להתקיים.
- בשעה 14:00 Schedule2 היה חיובי, אבל ההפרש בין 14:00 ל13:00 קטן משעה ו-5 דקות, ולכן הConditoin לא יתקיים.
* אם בשעה 13:00 הבקר לא פעל (אתחול / הפסקה חשמל):
- בשעה 13:00 Schedule1 לא היה חיובי (וגם לא מאוחר יותר, כאשר הבקר חזר לפעילות תקינה).
- בשעה 14:00 Schedule2 היה חיובי, וההפרש בין 14:00 היום ל13:00 אתמול (הפעם האחרונה שSchedule1 היה חיובי) גדול משעה ו-5 דקות, ולכם הCondition כן יתקיים.
* אם בשעה 13:00 הבקר פעל ובשעה 14:00 לא פעל:
- בשעה 13:00 Schedule1 היה חיובי וגרם לCondition להתקיים.
- בשעה 14:00 Schedule2 לא היה חיובי (וגם לא מאוחר יותר, כאשר הבקר חזר לפעילות תקינה), כלומר הCondition לא יהיה חיובי שוב.
* אם הבקר לא יפעיל גם בשעה 13:00 וגם בשעה 14:00 הCondition לא יתקיים באותו יום....
באופן כללי לא קריטי לי שהפעולה תידגם גם לאחר הפסקת חשמל או איתחול. מקסימום הדוד יפעל לפי הטיימר של היום הקודם.
בכל מקרה תודה על ההסבר, אני בטח אשתמש בזה בפעולות חשובות יותר בהמשך.
אתה יודע אולי מה קורה אם אני לא מגדיר זמן סיום ל-schedule?
Re: בדיקת תנאי בשעה מסויימת ביום
זה יגרום לSchedule להיות חיובי מהפעם הראשונה שהוא קורה - לעולם.morgi23 כתב:אתה יודע אולי מה קורה אם אני לא מגדיר זמן סיום ל-schedule?...
אם יש Condition שמשתמש בSchedule, זה יגרום לCondition לקרות רק פעם אחת, אלא אם כן תסמן Repeat בCondition.
מתוך מסמך הPLEG Basics:
[left]
[/left]If a Schedule does not have a Stop Type, it will not have an off event. Such a Schedule will only cause
the evaluation of a Condition in which it is used when it turns on and its state will, at that point,
always be true. If At0730 is a daily Schedule for 07:30 without a Stop Type, the Condition:
Morning At0730
will become true at 07:30 on the first day and stay that way forever. Any associated Action will only
fire on the first day. There are two ways around this: Check the Repeats option for the Condition so
that it will fire its Action each time At0730 becomes true; Add a Stop Type to At0730 – say an
Interval of one minute – so that it will re-evaluate the Condition when it turns off and set it to false.
There is an advantage in setting a Schedule’s Stop Type to Interval rather than an absolute time. If
PLEG happens to restart just before an absolute time, the stop event may not occur until the
following day. With an Interval, PLEG is able to recover from the restart and set the state of the
Schedule correctly....
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה
Re: בדיקת תנאי בשעה מסויימת ביום
אני פועל בדיוק באותה דרך (לגבי ההחלטה לכמה זמן הדוד יפעל).morgi23 כתב:באופן כללי לא קריטי לי שהפעולה תידגם גם לאחר הפסקת חשמל או איתחול. מקסימום הדוד יפעל לפי הטיימר של היום הקודם....
המקרה היחיד (שאני זוכר) שהגדרתי "גיבוי" של Schedule נוסף היה עבור הSchedules שמגדירים לי מעבר בין "מצב יום" ל"מצב לילה".
כשאני חושב על זה עכשיו, אולי כדאי להגדיר גיבוי עבור מועדי הדלקת הדוד בפועל (אחרת לא יהיו מים חמים.....).
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה
Re: בדיקת תנאי בשעה מסויימת ביום
הבנתי. זה מסביר הרבה בעיות שהיו לי עד עכשיו..cafri כתב:זה יגרום לSchedule להיות חיובי מהפעם הראשונה שהוא קורה - לעולם.
אם יש Condition שמשתמש בSchedule, זה יגרום לCondition לקרות רק פעם אחת, אלא אם כן תסמן Repeat בCondition.......
מכיוון שיש כאן דיון על PLEG - אני אנצל את זה לשאלה .
הגדרתי בבית סצינה שמופעלת בכל יום בשעה 18:00 ומדליקה כל מני אורות בבית בזמנים מסויימים על מנת שבמידה ואני לא בבית
עדיין זה ייראה כאילו יש מישהו בבית.
הבעייה היא שלא משנה מה קורה הסצינה פועלת גם אם יש מישהו בבית ואז כל חצי שעה - אני צריך לכבות אורות מסויימים.
אני מעוניין להשתמש ב-PLEG ובעזרת חיישן תנועה (פיבארו) שימוקם בסלון - יבטל או יפעיל את הסצינה הנ"ל.
שם הסצינה הוא NIGHT.
יש לי VERA LITE עם UI5.
התנאים:
1. השעות שבהם הסצינה צריכה לפעול הינם : 18:00 עד לשעה 01:25.
2. הסצינה תפעל רק אם אין תזוזה כלשהי בית (בסלון במקרה הנ"ל) ב-45 הדקות האחרונות.
3. אם התגלתה תזוזה כלשהי , הסצינה מבוטלת ושוב נספרים 45 דקות.
מקרים שיכולים לקרות:
1. אם הגעתי הביתה מאוחר - נגיד בשעה 20:00 אז הסצינה אמורה לפעול וכשאני נכנס לסלון והחיישן מזהה תנועה - הוא מפסיק את הסצינה.
2. אם הגעתי הביתה - והסצינה הפסיקה ולאחר XXX זמן אני יוצא שוב מהבית - הסצינה תפעל שוב (כי לא תורגש תנועה אחרי שאני אצא).
התכנון הוא לשים 2-3 חיישנים של פיבארו ולהגדיר את הנ"ל .
אשמח לעזרת המומחים - עם הסבר מפורט .
הגדרתי בבית סצינה שמופעלת בכל יום בשעה 18:00 ומדליקה כל מני אורות בבית בזמנים מסויימים על מנת שבמידה ואני לא בבית
עדיין זה ייראה כאילו יש מישהו בבית.
הבעייה היא שלא משנה מה קורה הסצינה פועלת גם אם יש מישהו בבית ואז כל חצי שעה - אני צריך לכבות אורות מסויימים.
אני מעוניין להשתמש ב-PLEG ובעזרת חיישן תנועה (פיבארו) שימוקם בסלון - יבטל או יפעיל את הסצינה הנ"ל.
שם הסצינה הוא NIGHT.
יש לי VERA LITE עם UI5.
התנאים:
1. השעות שבהם הסצינה צריכה לפעול הינם : 18:00 עד לשעה 01:25.
2. הסצינה תפעל רק אם אין תזוזה כלשהי בית (בסלון במקרה הנ"ל) ב-45 הדקות האחרונות.
3. אם התגלתה תזוזה כלשהי , הסצינה מבוטלת ושוב נספרים 45 דקות.
מקרים שיכולים לקרות:
1. אם הגעתי הביתה מאוחר - נגיד בשעה 20:00 אז הסצינה אמורה לפעול וכשאני נכנס לסלון והחיישן מזהה תנועה - הוא מפסיק את הסצינה.
2. אם הגעתי הביתה - והסצינה הפסיקה ולאחר XXX זמן אני יוצא שוב מהבית - הסצינה תפעל שוב (כי לא תורגש תנועה אחרי שאני אצא).
התכנון הוא לשים 2-3 חיישנים של פיבארו ולהגדיר את הנ"ל .
אשמח לעזרת המומחים - עם הסבר מפורט .
תוכל להסביר בדיוק מה הסצינה עושה?
למה הכוונה ב״מדליקה כל מיני אורות בבית בזמנים מסויימים״?
למה הכוונה ב״מדליקה כל מיני אורות בבית בזמנים מסויימים״?
נסו למצוא תשובות לשאלות הקשורות לZ-Wave בשרשור הדביק שבראש הפורום
שתפו את הרעיונות שלכם בשרשור זה
שתפו את הרעיונות שלכם בשרשור זה