שליטה על Switcher Touch או V2 עם openHAB

SIRI, CORTANA, ALEXA, ECHO, GOOGLE HOME, HOME PAD, שלטים חכמים, KEY PADS, אפליקציות
chenta
חבר פעיל מאוד
חבר פעיל מאוד
הודעות: 183
הצטרף: ינואר 2011
נתן תודות: 22 פעמים
קיבל תודות: 29 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #16 

@jagheadgתודה על המדריך.
אחרי הרבה זמן גם אני מנסה כעת לשלוט על ה- Switcher דרך openHAB, אבל משום מה מתקשה לעבור את השלב הראשון.
לפי מה שקראתי על הסקריפט ב github צריך לחלץ מס' נתונים מה- Switcher וניתן לעשות זאת באמצעות הרצה עם הפקודה extract.
מנסה לעקוב אחר ההוראות אבל לא מצליח לקבל את הנתונים הנחוצים.

אני עובד עם אייפון כך שזאת הדרך היחידה להבנתי לקבל את הנתונים (לפני שאחפש מכשיר android חלופי עם root).
עד כה לא ניסיתי להריץ את הסקריפט ללא הנתונים, כן עדכנתי את ה IP של ה Switcher.

מישהו יכול לחלוק בנוגע לביצוע החלק הזה?

תודה מראש!

jagheadg (פותח השרשור)
חבר ותיק
חבר ותיק
הודעות: 1148
הצטרף: דצמבר 2010
מיקום: כפר הדרדסים
נתן תודות: 52 פעמים
קיבל תודות: 112 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #17 

לא צריך יותר מכשיר נייד כדי להוציא נתונים. רק להריץ את הפקודה ב SHELL ולקבל משם מה שצריך.
מספיק רק device_id ו - device_pass
אין צורך ב phone_id
הסקריפט מוצא לבד את מה שהוא צריך רק כדאי לתת לסוויטצ'ר כתובת קבועה מראש ברשת כשההגדרה בראוטר תהיה לפי כתובת ה MAC .

chenta
חבר פעיל מאוד
חבר פעיל מאוד
הודעות: 183
הצטרף: ינואר 2011
נתן תודות: 22 פעמים
קיבל תודות: 29 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #18 

הי תודה רבה, הסתדר ועובד. מאוד מעריך את השיתוף של הקבצים שלך.

יש לי כמה שאלות לגבי המימוש שלך:
  • 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 ואבדוק אם יש נפילות.
שוב המון תודה ואשמח אם תוכל לסייע עוד קצת בהבנת המנגנון.

chenta
חבר פעיל מאוד
חבר פעיל מאוד
הודעות: 183
הצטרף: ינואר 2011
נתן תודות: 22 פעמים
קיבל תודות: 29 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #19 

@jagheadg
הי שוב תודה על המדריך. עשיתי כמה שינויים במימוש אצלי ואשמח לחלוק למקרה שיסייע.

קודם כל הוספתי הרצת הסקריפט הראשון (כלומר switcher.py 2) בכל סיום של הסקריפט עם פקודה כלשהיא. כך הוא מתעדכן לאחר כל ריצה. לא יודע אם זאת הדרך הכי טובה אבל היא זאת שעובדת לי.

בנוסף, ב- sitemap אני מציג את ה switch של ההפעלה בלבד (בלי ה- string של ה- status) אבל לאחר כל ריצה ועדכון מצב אני מעדכן אותו עם המצב הנוכחי (postUpdate) כך שהוא גם מעודכן וגם משמש כמתג הפעלה למשתמש.

כדי להפעיל טיימר הגדרתי item מסוג Number וב- sitemap אני שולט עליו ע"י slider בין 0 ל- 60.
לאחר מכן בלחיצה על הפעלת הטיימר החוק הרלוונטי מעדכן את ה- Args ב- "t" + המס'.
כך יש גמישות רבה יותר בהפעלת הטיימר.

להלן המימושים שלי, כאמור מאוד מבוססים על של @jagheadg , חלק מהשינויים שלי הם עניין של נוחות וסגנון אישי, חלק קשורים לתחושתי לעבודה נכונה עם openHAB (סוג של קטנוניות... סליחה מראש... :lol: ):
קובץ ה 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"}

קובץ ה- sitemap:

קוד: בחירת הכל

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

שאלה פתוחה אצלי- איך לוודא שהסטטוס שמופיע ב- OH מעודכן כל הזמן. כי לא תמיד אני אפעיל את הדוד מ- OH- לפעמים מהאפליקציה (תזמונים וכו') ולפעמים ידנית.
ה- Switcher לא דוחף עדכונים כי אין Binding מסודר, מצד שני לתשאל כל 5 דקות נראה לי לא סביר ואין לי מושג איך הרכיב או כל המערכת תגיב לזה.
אם מישהו חשב על פיתרון או רעיון אשמח לשמוע את הגישות השונות.

שוב תודה על המדריך, נתן לי נקודת התחלה קרובה מאוד לתוצאה הסופית.

jagheadg (פותח השרשור)
חבר ותיק
חבר ותיק
הודעות: 1148
הצטרף: דצמבר 2010
מיקום: כפר הדרדסים
נתן תודות: 52 פעמים
קיבל תודות: 112 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #20 

@chentaמעולה שהצלחת להפעיל. הצעות ושיפורים מתקבלים בברכה. כולם מרוויחים מהשיתוף.

לגבי החיישן טמפרטורה, כן, זה חיישן שבניתי לבד ומדווח ב 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]

chenta
חבר פעיל מאוד
חבר פעיל מאוד
הודעות: 183
הצטרף: ינואר 2011
נתן תודות: 22 פעמים
קיבל תודות: 29 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #21 

13/04/2021 21:21  
jagheadg כתב:
העדכון האוטומטי כל 30 שניות בהרצת הסקריפט לא מזיקה
...
אה... עכשיו נפל לי האסימון. :idea:
כמו שאמרתי לא היה לי ניסיון קודם עם Exec Binding ולא הייתי סגור על כל ההגדרות. אבל עכשיו הבנתי איך הסקריפט רץ מבלי להפעיל אותו ידנית.
תודה רבה!! :)

לגבי חיישן הטמפרטורה- רעיון מעניין. נשמע שימושי מאוד.
מרגיש לי כמו הפרויקט הבא שלי... :wink:

תודה על השיתוף!

razserv2010
חבר פעיל במיוחד
חבר פעיל במיוחד
הודעות: 806
הצטרף: אוקטובר 2013
נתן תודות: 114 פעמים
קיבל תודות: 66 פעמים

Re:

נושא שלא נקרא #22 

20/10/2020 20:02  
jagheadg כתב:
אז אחרי הרבה זמן הגעתי לממש שליטה בסיסית על switcher מתוך openHAB.
אפשר לקחת את הדוגמה הזו ולממש יותר שליטה.
בגלל מגבלות הפורום להלן קישור למסמך המפרט את ההוראות הבסיסיות למימוש השליטה.
מקווה שיהיה ברור.

https://app.box.com/s/u70jq9vv7k4q25i1ql62j24jpcb5oqls
...
יעבוד גם על OH3?

chenta
חבר פעיל מאוד
חבר פעיל מאוד
הודעות: 183
הצטרף: ינואר 2011
נתן תודות: 22 פעמים
קיבל תודות: 29 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #23 

@razserv2010
כמו שאתה מכיר אני מריץ OH3 :) . הלכתי לפי המדריך של @jagheadg ועבד מצויין.
השינויים שעשיתי ופירסמתי היו עניינים שוליים בלבד...

razserv2010
חבר פעיל במיוחד
חבר פעיל במיוחד
הודעות: 806
הצטרף: אוקטובר 2013
נתן תודות: 114 פעמים
קיבל תודות: 66 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #24 

@chentaהעתקתי את הקבצים מOH2 לOH3 ורק שיניתי את הPATH בEXEC.WITHELIST ובTHINGS
אבל item Switcher_Command_Output מקבל NULL

chenta
חבר פעיל מאוד
חבר פעיל מאוד
הודעות: 183
הצטרף: ינואר 2011
נתן תודות: 22 פעמים
קיבל תודות: 29 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #25 

@razserv2010
יאללה.. דיבג... :D

אם ה item עם ערך null זה אומר שהוא לא קיבל ערך מאז שאותחל או נוצר...
בהנחה שהגדרת interval שונה מ 0 לסקריפט התשאול, זה אומר שהסקריפט לא רץ ולא החזיר תשובה.
האם יש שגיאות בלוג?
ה whitelist מוגדר כמו שצריך?
הפרמטרים בסקריפט מוגדרים כמו שצריך?

razserv2010
חבר פעיל במיוחד
חבר פעיל במיוחד
הודעות: 806
הצטרף: אוקטובר 2013
נתן תודות: 114 פעמים
קיבל תודות: 66 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #26 

@chentaמה נשמע צהריים טובים,
ערכתי ומעדכן שמצאתי מה הבעיה:
במלל 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 ואז זה השתחרר והסתדר

chenta
חבר פעיל מאוד
חבר פעיל מאוד
הודעות: 183
הצטרף: ינואר 2011
נתן תודות: 22 פעמים
קיבל תודות: 29 פעמים

Re: שליטה על Switcher Touch או V2 עם openHAB

נושא שלא נקרא #27 

@razserv2010
אחר צהריים טובים. :)
שמח שהצליח...

שלח תגובה

חזור אל “עוזרות קוליות, שליטה ובקרה”