@jagheadgתודה על המדריך.
אחרי הרבה זמן גם אני מנסה כעת לשלוט על ה- Switcher דרך openHAB, אבל משום מה מתקשה לעבור את השלב הראשון.
לפי מה שקראתי על הסקריפט ב github צריך לחלץ מס' נתונים מה- Switcher וניתן לעשות זאת באמצעות הרצה עם הפקודה extract.
מנסה לעקוב אחר ההוראות אבל לא מצליח לקבל את הנתונים הנחוצים.
אני עובד עם אייפון כך שזאת הדרך היחידה להבנתי לקבל את הנתונים (לפני שאחפש מכשיר android חלופי עם root).
עד כה לא ניסיתי להריץ את הסקריפט ללא הנתונים, כן עדכנתי את ה IP של ה Switcher.
מישהו יכול לחלוק בנוגע לביצוע החלק הזה?
תודה מראש!
שליטה על Switcher Touch או V2 עם openHAB
- jagheadg (פותח השרשור)
-
- חבר ותיק
- הודעות: 1148
- הצטרף: דצמבר 2010
- מיקום: כפר הדרדסים
- נתן תודות: 52 פעמים
- קיבל תודות: 112 פעמים
Re: שליטה על Switcher Touch או V2 עם openHAB
לא צריך יותר מכשיר נייד כדי להוציא נתונים. רק להריץ את הפקודה ב SHELL ולקבל משם מה שצריך.
מספיק רק device_id ו - device_pass
אין צורך ב phone_id
הסקריפט מוצא לבד את מה שהוא צריך רק כדאי לתת לסוויטצ'ר כתובת קבועה מראש ברשת כשההגדרה בראוטר תהיה לפי כתובת ה MAC .
מספיק רק device_id ו - device_pass
אין צורך ב phone_id
הסקריפט מוצא לבד את מה שהוא צריך רק כדאי לתת לסוויטצ'ר כתובת קבועה מראש ברשת כשההגדרה בראוטר תהיה לפי כתובת ה MAC .
Re: שליטה על Switcher Touch או V2 עם openHAB
הי תודה רבה, הסתדר ועובד. מאוד מעריך את השיתוף של הקבצים שלך.
יש לי כמה שאלות לגבי המימוש שלך:
יש לי כמה שאלות לגבי המימוש שלך:
- 1. ראיתי שב- sitemap שלך מופיע item של BoilerTemperatureSensor- מניח שמדובר במה שכתוב- חיישן טמפרטורה לדוד המים. אפשר לשאול איזה חיישן זה? האם משהו ייעודי או אלתור של חיישן טמפרטורה רגיל?
2. בשורה 10 של קובץ ה- rules שלך לדעתי יש טעות קטנה. כתוב SwitcherAllCommandOutput במקום Switcher_Command_Output. לא יודע אם זה קריטי לך או לא אבל שתכיר. אלא אם אני טועה ולא הבנתי שם משהו נכון...
3. לא עבדתי הרבה עם Exec Binding ואני כנראה לא מבין נכון את עקרון הפעולה. למעשה הפקודה הראשונה שהגדרת SiwtcherAll היא שקולה להרצת הפקודה השניה SwitcherSet עם SwitcherArgs ששווה ל- 2. ובנוסף אני לא מבין מתי הפקודה SwitcherAll רצה- לא קישרתי את עורץ ה- running לשום דבר ולא הפעלתי אותו.יחד עם זאת אני רואה שאחרי כל ריצה של SwitcherSet, משתנה הערך של Switcher_Command_Output. מה אני מפספס בעקרון העבודה? איך ה- output של הפקודה מתקבל אם הפקודה עצמה לא רצה?
4. ועוד הערה קטנה לגבי החוק "Switcher execution"- מחוויות העבר חוקים שמופעלים ע"י received command לעיתים רצים לפני שה state של ה- item התעדכן. לא יודע עד כמה זה קריטי כאן (אין לי הרבה ניסיון עם Exec Binding כמו שאמרתי) אבל זה הרגיש לי שעשוי להיות מצב שהפקודה תרוץ עם ערך קודם של Args. שיניתי את הטריגר אצלי ל- changed ואבדוק אם יש נפילות.
Re: שליטה על Switcher Touch או V2 עם openHAB
@jagheadg
הי שוב תודה על המדריך. עשיתי כמה שינויים במימוש אצלי ואשמח לחלוק למקרה שיסייע.
קודם כל הוספתי הרצת הסקריפט הראשון (כלומר switcher.py 2) בכל סיום של הסקריפט עם פקודה כלשהיא. כך הוא מתעדכן לאחר כל ריצה. לא יודע אם זאת הדרך הכי טובה אבל היא זאת שעובדת לי.
בנוסף, ב- sitemap אני מציג את ה switch של ההפעלה בלבד (בלי ה- string של ה- status) אבל לאחר כל ריצה ועדכון מצב אני מעדכן אותו עם המצב הנוכחי (postUpdate) כך שהוא גם מעודכן וגם משמש כמתג הפעלה למשתמש.
כדי להפעיל טיימר הגדרתי item מסוג Number וב- sitemap אני שולט עליו ע"י slider בין 0 ל- 60.
לאחר מכן בלחיצה על הפעלת הטיימר החוק הרלוונטי מעדכן את ה- Args ב- "t" + המס'.
כך יש גמישות רבה יותר בהפעלת הטיימר.
להלן המימושים שלי, כאמור מאוד מבוססים על של @jagheadg , חלק מהשינויים שלי הם עניין של נוחות וסגנון אישי, חלק קשורים לתחושתי לעבודה נכונה עם openHAB (סוג של קטנוניות... סליחה מראש... ):
קובץ ה items (ללא כל מיני קישוטים של תגיות ואייקונים):
קובץ ה- sitemap:
קובץ החוקים:
שאלה פתוחה אצלי- איך לוודא שהסטטוס שמופיע ב- OH מעודכן כל הזמן. כי לא תמיד אני אפעיל את הדוד מ- OH- לפעמים מהאפליקציה (תזמונים וכו') ולפעמים ידנית.
ה- Switcher לא דוחף עדכונים כי אין Binding מסודר, מצד שני לתשאל כל 5 דקות נראה לי לא סביר ואין לי מושג איך הרכיב או כל המערכת תגיב לזה.
אם מישהו חשב על פיתרון או רעיון אשמח לשמוע את הגישות השונות.
שוב תודה על המדריך, נתן לי נקודת התחלה קרובה מאוד לתוצאה הסופית.
הי שוב תודה על המדריך. עשיתי כמה שינויים במימוש אצלי ואשמח לחלוק למקרה שיסייע.
קודם כל הוספתי הרצת הסקריפט הראשון (כלומר switcher.py 2) בכל סיום של הסקריפט עם פקודה כלשהיא. כך הוא מתעדכן לאחר כל ריצה. לא יודע אם זאת הדרך הכי טובה אבל היא זאת שעובדת לי.
בנוסף, ב- sitemap אני מציג את ה switch של ההפעלה בלבד (בלי ה- string של ה- status) אבל לאחר כל ריצה ועדכון מצב אני מעדכן אותו עם המצב הנוכחי (postUpdate) כך שהוא גם מעודכן וגם משמש כמתג הפעלה למשתמש.
כדי להפעיל טיימר הגדרתי item מסוג Number וב- sitemap אני שולט עליו ע"י slider בין 0 ל- 60.
לאחר מכן בלחיצה על הפעלת הטיימר החוק הרלוונטי מעדכן את ה- Args ב- "t" + המס'.
כך יש גמישות רבה יותר בהפעלת הטיימר.
להלן המימושים שלי, כאמור מאוד מבוססים על של @jagheadg , חלק מהשינויים שלי הם עניין של נוחות וסגנון אישי, חלק קשורים לתחושתי לעבודה נכונה עם openHAB (סוג של קטנוניות... סליחה מראש... ):
קובץ ה items (ללא כל מיני קישוטים של תגיות ואייקונים):
קוד: בחירת הכל
Switch BR_Dude_PowerSwitch "Dude Power Switch"
String BR_Dude_PowerStatus "Dude Power Status [%s]"
Number BR_Dude_TimerMin "Dude Set Timer"
Switch BR_Dude_StartTimer "Dude Start Timer"
String BR_Dude_TimeRemaining "Dude Time Remaining [%s]"
Number BR_Dude_Current "Dude Current Consumption [%.1f A]"
Number BR_Dude_PowerConsumption "Dude Power Consumption [%.0f W]"
Switch BR_Dude_GetStatusCommand "Dude Get Status Execution" {channel="exec:command:SwitcherGet:run"}
String BR_Dude_GetStatusOutput "Dude Get Status Command Output [%s]" {channel="exec:command:SwitcherGet:output"}
DateTime BR_Dude_LastStatusUpdate "Last Update [%1$td/%1$tm, %1$tH:%1$tM]" {channel="exec:command:SwitcherGet:lastexecution"}
Switch BR_Dude_SetCommand "Dude Setting Command Execution" {channel="exec:command:SwitcherSet:run", autoupdate="false"}
String BR_Dude_SetArgs "Dude Arguments For The Command Line" {channel="exec:command:SwitcherSet:input"}
String BR_Dude_SetCommandOutput "Dude Setting Command Output" {channel="exec:command:SwitcherSet:output"}
קוד: בחירת הכל
Text label="Dude" item=BR_Dude_PowerSwitch icon="boiler" {
Frame label="Control" {
Switch item=BR_Dude_PowerSwitch label="Power Switch" icon="switcher" mappings=[OFF="OFF", ON="ON"]
Slider item=BR_Dude_TimerMin label="Timer [%d]" icon="time" minValue=0 maxValue=60 step=5
Switch item=BR_Dude_StartTimer label="Start Timer" icon="send" mappings=[ON="START"]
}
Frame label="Status" {
Text item=BR_Dude_Current label="Current [%.1f A]" icon="plug"
Text item=BR_Dude_PowerConsumption label="Power [%.0f W]" icon="plug"
Text item=BR_Dude_TimeRemaining label="Time Remaining [%s]" icon="time"
}
Frame label="Statistics" {
Text label="To Do ..."
}
}
קוד: בחירת הכל
val String filename = "dude.rules"
var Timer timer = null
// Usage of switcher.py:
// =====================
// Off command: switcher.py 0
// On command: switcher.py 1
// On command duration in minutes: switcher.py t30
// Get State: switcher.py 2
// Set Auto shutdown setting (in hours): switcher.py m03:00
// Retrieve Schedule from device: switcher.py list
// Create a Schedule: switcher.py create
// Delete Schedule from device: switcher.py del
// Enable Schedule: switcher.py enable
// Disable Schedule: switcher.py disable
rule "Switcher On Off"
when
Item BR_Dude_PowerSwitch received command
then
if (receivedCommand == ON) {
BR_Dude_SetArgs.sendCommand("1")
logInfo(filename, "Dude Will Turn ON")
} else {
BR_Dude_SetArgs.sendCommand("0")
logInfo(filename, "Dude Will Turn OFF")
}
end
rule "Switcher Timer"
when
Item BR_Dude_StartTimer received command ON
then
BR_Dude_SetArgs.sendCommand("t" + BR_Dude_TimerMin.state.toString)
logInfo(filename, "Dude Will Turn With Timer: " + BR_Dude_TimerMin.state)
end
rule "Switcher Setting Srcipt Execution"
when
Item BR_Dude_SetArgs received command
then
if (BR_Dude_SetCommand.state != ON) {
logInfo(filename, "Dude Run Script with Args: " + receivedCommand)
BR_Dude_SetCommand.sendCommand(ON)
} else {
logInfo(filename, "Dude Script Already in Use, Skipping Execution")
}
end
rule "Switcher complete"
when
Item BR_Dude_SetCommand changed from ON to OFF
then
logInfo(filename, "Dude Script Has Completed. Refreshing Status...")
BR_Dude_GetStatusCommand.sendCommand(ON)
end
rule "Switcher Status Output"
when
Item BR_Dude_GetStatusOutput received update
then
// --- Sending Login Packet to Switcher...
// --- Received SessionID: 00000000
// --- Getting Switcher state...
// --- Device Name: Switcher
// --- Device is ON
// --- Electric Current is: 11.5(A)
// --- Power consumption is: 2535(W)
// --- Device is configured to auto shutdown in: 2:00 hour(s)
// --- Auto shutdown device in: 1:59:25
// --- Done!
logInfo(filename, "BR_Dude_GetStatusOutput changed")
if ( BR_Dude_GetStatusOutput.state.toString.length > 6 ) {
val switcherResponse = BR_Dude_GetStatusOutput.state.toString.split('--- ')
var switcherStatus = switcherResponse.get(5).trim
var switcherCurrent = switcherResponse.get(6).trim
var switcherPowerConsumption = switcherResponse.get(7).trim
var switcherTimeRemaining = switcherResponse.get(9).trim
switcherStatus = transform("REGEX", "Device is (.*)", switcherStatus.toString)
logInfo(filename, "Dude State is: " + switcherStatus)
BR_Dude_PowerStatus.postUpdate(switcherStatus)
if (switcherStatus == "ON") {
BR_Dude_PowerSwitch.postUpdate(ON)
} else if (switcherStatus == "OFF") {
BR_Dude_PowerSwitch.postUpdate(OFF)
}
switcherCurrent = transform("REGEX","Electric Current is: (.*)A", switcherCurrent.toString)
logInfo(filename, "Dude Current Consumtion is: " + switcherCurrent)
BR_Dude_Current.postUpdate(switcherCurrent)
switcherPowerConsumption = transform("REGEX", "Power consumption is: (.*)W", switcherPowerConsumption.toString)
logInfo(filename, "Dude Power Consumtion is: " + switcherPowerConsumption)
BR_Dude_PowerConsumption.postUpdate(switcherPowerConsumption)
switcherTimeRemaining = transform("REGEX", "Auto shutdown device in: (.*)", switcherTimeRemaining.toString)
logInfo(filename, "Dude Time Remaining is: " + switcherTimeRemaining)
BR_Dude_TimeRemaining.postUpdate(switcherTimeRemaining)
} else {
logInfo(filename, "--- Switcher ERROR Reading state ---")
return;
}
end
rule "Switcher Set Script Output"
when
Item BR_Dude_SetCommandOutput changed
then
// --- Received SessionID: 00000000
// --- Getting Switcher state...
// --- Device Name: Dude
// --- Turning Switcher ON for 15 minutes...
// --- Done!
logInfo(filename, "Raw result:" + BR_Dude_SetCommandOutput.state )
end
ה- Switcher לא דוחף עדכונים כי אין Binding מסודר, מצד שני לתשאל כל 5 דקות נראה לי לא סביר ואין לי מושג איך הרכיב או כל המערכת תגיב לזה.
אם מישהו חשב על פיתרון או רעיון אשמח לשמוע את הגישות השונות.
שוב תודה על המדריך, נתן לי נקודת התחלה קרובה מאוד לתוצאה הסופית.
- jagheadg (פותח השרשור)
-
- חבר ותיק
- הודעות: 1148
- הצטרף: דצמבר 2010
- מיקום: כפר הדרדסים
- נתן תודות: 52 פעמים
- קיבל תודות: 112 פעמים
Re: שליטה על Switcher Touch או V2 עם openHAB
@chentaמעולה שהצלחת להפעיל. הצעות ושיפורים מתקבלים בברכה. כולם מרוויחים מהשיתוף.
לגבי החיישן טמפרטורה, כן, זה חיישן שבניתי לבד ומדווח ב MQTT על הטמפרטורה של המים (בקירוב). הוא מבוסס על ESP8266 עם DS1820 שמוצמד לכניסת המים העליונה מהקולטי שמש. בגלל שהצינור מתכתי הוא מוליך יחסית טוב את חום המים בחלק העליון של הדוד.
בנושא הטיימר, לטעמי אין צורך ברזולוציה של דקות, קביעה מראש בקפיצות של 15 דקות מספקת. שוב זו דעתי.
לגבי עדכון ה ITEM על ה STATUS גם כשמפעילים מהכפתור של הדוד, העדכון האוטומטי כל 30 שניות בהרצת הסקריפט לא מזיקה.
עובד ככה כבר שנתיים.
לגבי החיישן טמפרטורה, כן, זה חיישן שבניתי לבד ומדווח ב MQTT על הטמפרטורה של המים (בקירוב). הוא מבוסס על ESP8266 עם DS1820 שמוצמד לכניסת המים העליונה מהקולטי שמש. בגלל שהצינור מתכתי הוא מוליך יחסית טוב את חום המים בחלק העליון של הדוד.
בנושא הטיימר, לטעמי אין צורך ברזולוציה של דקות, קביעה מראש בקפיצות של 15 דקות מספקת. שוב זו דעתי.
לגבי עדכון ה ITEM על ה STATUS גם כשמפעילים מהכפתור של הדוד, העדכון האוטומטי כל 30 שניות בהרצת הסקריפט לא מזיקה.
עובד ככה כבר שנתיים.
קוד: בחירת הכל
Thing exec:command:SwitcherAll [ command="/usr/bin/python /etc/openhab2/scripts/switcher.py 2" , interval=30 , timeout=5 , autorun=false]
Re: שליטה על Switcher Touch או V2 עם openHAB
אה... עכשיו נפל לי האסימון....
כמו שאמרתי לא היה לי ניסיון קודם עם Exec Binding ולא הייתי סגור על כל ההגדרות. אבל עכשיו הבנתי איך הסקריפט רץ מבלי להפעיל אותו ידנית.
תודה רבה!!
לגבי חיישן הטמפרטורה- רעיון מעניין. נשמע שימושי מאוד.
מרגיש לי כמו הפרויקט הבא שלי...
תודה על השיתוף!
- razserv2010
-
- חבר פעיל במיוחד
- הודעות: 806
- הצטרף: אוקטובר 2013
- נתן תודות: 114 פעמים
- קיבל תודות: 66 פעמים
Re:
יעבוד גם על OH3?20/10/2020 20:02jagheadg כתב: ↑ אז אחרי הרבה זמן הגעתי לממש שליטה בסיסית על switcher מתוך openHAB.
אפשר לקחת את הדוגמה הזו ולממש יותר שליטה.
בגלל מגבלות הפורום להלן קישור למסמך המפרט את ההוראות הבסיסיות למימוש השליטה.
מקווה שיהיה ברור.
https://app.box.com/s/u70jq9vv7k4q25i1ql62j24jpcb5oqls...
Re: שליטה על Switcher Touch או V2 עם openHAB
@razserv2010
כמו שאתה מכיר אני מריץ OH3 . הלכתי לפי המדריך של @jagheadg ועבד מצויין.
השינויים שעשיתי ופירסמתי היו עניינים שוליים בלבד...
כמו שאתה מכיר אני מריץ OH3 . הלכתי לפי המדריך של @jagheadg ועבד מצויין.
השינויים שעשיתי ופירסמתי היו עניינים שוליים בלבד...
- razserv2010
-
- חבר פעיל במיוחד
- הודעות: 806
- הצטרף: אוקטובר 2013
- נתן תודות: 114 פעמים
- קיבל תודות: 66 פעמים
Re: שליטה על Switcher Touch או V2 עם openHAB
@chentaהעתקתי את הקבצים מOH2 לOH3 ורק שיניתי את הPATH בEXEC.WITHELIST ובTHINGS
אבל item Switcher_Command_Output מקבל NULL
אבל item Switcher_Command_Output מקבל NULL
Re: שליטה על Switcher Touch או V2 עם openHAB
@razserv2010
יאללה.. דיבג...
אם ה item עם ערך null זה אומר שהוא לא קיבל ערך מאז שאותחל או נוצר...
בהנחה שהגדרת interval שונה מ 0 לסקריפט התשאול, זה אומר שהסקריפט לא רץ ולא החזיר תשובה.
האם יש שגיאות בלוג?
ה whitelist מוגדר כמו שצריך?
הפרמטרים בסקריפט מוגדרים כמו שצריך?
יאללה.. דיבג...
אם ה item עם ערך null זה אומר שהוא לא קיבל ערך מאז שאותחל או נוצר...
בהנחה שהגדרת interval שונה מ 0 לסקריפט התשאול, זה אומר שהסקריפט לא רץ ולא החזיר תשובה.
האם יש שגיאות בלוג?
ה whitelist מוגדר כמו שצריך?
הפרמטרים בסקריפט מוגדרים כמו שצריך?
- razserv2010
-
- חבר פעיל במיוחד
- הודעות: 806
- הצטרף: אוקטובר 2013
- נתן תודות: 114 פעמים
- קיבל תודות: 66 פעמים
Re: שליטה על Switcher Touch או V2 עם openHAB
@chentaמה נשמע צהריים טובים,
ערכתי ומעדכן שמצאתי מה הבעיה:
במלל things היה פעמיים רווח בין /usr/bin/python /etc/openhab/scripts/switcher.py לסיפרה 2
מחקתי רווח אחד וזה עובד
**הצליח למצוא את המכשיר ולקרוא אותו אבל הוא לא שולח פקודה לON
שוב מעדכן שגם את זה פתרתי:
item SwitcherRun היה תקוע על ON אז קבעתי לו postupdate OFF ואז זה השתחרר והסתדר
ערכתי ומעדכן שמצאתי מה הבעיה:
במלל things היה פעמיים רווח בין /usr/bin/python /etc/openhab/scripts/switcher.py לסיפרה 2
מחקתי רווח אחד וזה עובד
**הצליח למצוא את המכשיר ולקרוא אותו אבל הוא לא שולח פקודה לON
קוד: בחירת הכל
[INFO ] [b.core.model.script.SwitcherRun exec] - Script already in use, skipping execution.
item SwitcherRun היה תקוע על ON אז קבעתי לו postupdate OFF ואז זה השתחרר והסתדר