Arduinoã¯ã¢ããã¥ã¢ããå°æ¬ãããŠããã·ã³ãã«ãªé»åãã¶ã€ããŒã§ããã圌ãã¯ã²ã©ãå®éšã§ã²ããã«ããã䜿çšããŠããŸãããå°é家ã¯ãããå«ã£ãŠãããšèšããŸãã ãã®äººæ°ã®ç§å¯ã¯äœã§ããããããã©ã®ããã«äœ¿çšããŠåé¡ã解決ããŸããïŒ
Arduinoã¯å®¶ã®ããŒã«ã«ç£èŠãšå¶åŸ¡ã«é©ããŠããŸããããã«ã¯ãããã¯ãŒã¯äžã«å€ãã®ãããžã§ã¯ãããããŸã-ã°ããŒãã«ã«èããå¿ èŠããããããåªããŠããŸããååã§ã¯ãããŸããïŒ ãããã¯ãŒã¯æ¥ç¶ãšã¢ãã€ã«ã€ã³ã¿ãŒãã§ã€ã¹ãå¿ èŠã§ãïŒ
ããŠã ãã®èšäºã®ãããã§ãOpenHABã«ç²ŸéããŠããŸããOpenHABã¯ãããŸããŸãªãããã³ã«ãæã€å€æ°ã®ããã€ã¹ãåäžã®ãããã¯ãŒã¯ã«çµåãããªãŒãã³ãœãŒã¹ãã©ãããã©ãŒã ã§ãã OpenHABã¯Javaã§å®è£ ãããŠãããããããŸããŸãªOSã§åäœããã·ã³ã°ã«ããŒãã³ã³ãã¥ãŒã¿ãŒäžã§ãã«ãŒã¿ãŒäžã§ãå®è¡ã§ããã¢ãã€ã«ã€ã³ã¿ãŒãã§ãŒã¹ãšWebã€ã³ã¿ãŒãã§ãŒã¹ãåããŠããŸãã ãã§ã«çæãéå±ããŠãããç§ãã¡ã®ãã®ã«å¯Ÿããåªæã®è¯ãã»ããã®ããã«èãããŸããïŒ
ãŸãã OpenHABãã€ã³ã¹ããŒã«ã ãããŠã³ããŒãããŒãžãéããã©ã³ã¿ã€ã ã³ã¢ãšãã¢ã®ã»ããã¢ãããããŠã³ããŒãããCïŒ\ openhabã§å±éããŸãã ãã¢ã®ã»ããã¢ããã解åãããšããREADME.txtãã¡ã€ã«ã®çœ®ãæããèš±å¯ããŸãã Javaãã³ã³ãã¥ãŒã¿ãŒã§äœ¿çšã§ããªãå ŽåïŒjava âversionã³ãã³ãã§ç¢ºèªïŒã æ瀺ã«åŸã£ãŠã€ã³ã¹ããŒã«ããŸã ã
CïŒ\ openhab \ start.batãå®è¡ããŠOpenHABãå®è¡ããå°ãåŸ ã£ãŠWebã€ã³ã¿ãŒãã§ãŒã¹ãéããŸã -localhostïŒ8080 / openhab.appïŒSitemap = demo
ïŒOpenHABãåæ¢ããå¿ èŠãããå Žå-Ctl + CãæŒãããããã°ã©ã ã³ã³ãœãŒã«ãéããŸãïŒ
åäœããŸãïŒ ç¶ããŸãããã ç§ãã¡ã®ç®æšã¯ç°¡åãªè§£æ±ºçãèŠã€ããããšã§ãã®ã§ãå®éšããå§ããŸãããã ãã®èšäºã«é¢ããã³ã¡ã³ãã®1ã€ã¯ãSerial-Bindingã䜿çšããŠã·ãªã¢ã«ããŒãçµç±ã§ã³ã³ãããŒã©ãŒãOpenHubã«æ¥ç¶ããããšãææ¡ããŸããã éåžžã«èå³æ·±ã解決çããããå®è£ ããŠã¿ãŠãã ããã
ã¢ããªã³ãã€ã³ã¹ããŒã«ããã«ã¯ãããŠã³ããŒãããŒãžãéããã¢ããªã³ãããŠã³ããŒãããorg.openhab.binding.serial-1.6.1.jarïŒãã©ã°ã€ã³ã®ããŒãžã§ã³ã¯ç°ãªãå ŽåããããŸãïŒãCïŒ\ openhab \ addonsãã©ã«ããŒã«è§£åããŸãã å¿ èŠã«å¿ããŠã ããã¥ã¡ã³ãããèªã¿ãã ããã
éåžžãå®éã®ããã€ã¹ãšã®å¯Ÿè©±ã®ãããã°ã«ã¯å€ãã®åé¡ããããããæåã«ç«¯æ«ããã³ãã³ããéä¿¡ãããã«ã¢ãã ã±ãŒãã«ãšãã¥ã¬ãŒã¿ãŒãä»ããŠOpenHABã«æ¥ç¶ããŠã¿ãŸãããã
com0comãšãã¥ã¬ãŒã¿ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ãããŠãŒãã£ãªãã£ãå®è¡ããŸã
端æ«ãšããŠHercules SETUPãŠãŒãã£ãªãã£ã䜿çšããŸãããããã¯ãå€æ°ã®ããŒããéžæããé©åãªãã¿ã³ãæŒããŠéä¿¡ããè€æ°ã®ã³ãã³ããå ¥åã§ããç¡æã®ããã°ã©ã ã§ãã ããŠã³ããŒãããŠãhercules_3-2-8.exeãå®è¡ãããã·ãªã¢ã«ãã¿ãã«ç§»åããŠãä»®æ³ãã¢ã®2çªç®ã®ããŒãïŒCOM36ããããŸãïŒãéžæããé床9600ã8ãããã1ã¹ãããããããããªãã£ãªããå ¥åããŸãã ããŒããéããŸãã
次ã«ãopenHABãæ§æããå¿ èŠããããŸãããã®ããã«ããã¶ã€ããŒã䜿çšããŸãã ããŠã³ããŒãããŒãžãéãã openHAB DesignerãããŠã³ããŒãããŠCïŒ\ openhab \ designerãã©ã«ããŒã«è§£åããCïŒ\ openhab \ designer \ openHAB-Designer.exeãå®è¡ããŠãæ§æãé 眮ãããŠãããã©ã«ããŒïŒCïŒ\ openhab \ configurationsïŒãéžæããŸãã
ãŸããèŠçŽ ïŒã¢ã€ãã ïŒãäœæããä»®æ³ãã¢ã®æåã®ã·ãªã¢ã«ããŒãã«é¢é£ä»ããŸãïŒCOM35ããããŸãïŒã ãããè¡ãã«ã¯ãdemo.itemsãã¡ã€ã«ã®æåŸã«æ¬¡ã®ã³ãŒããè¿œå ãããšãã£ã¿ãŒãŠã£ã³ããŠã§å³ã¯ãªãã¯ããŠã³ãã³ããä¿åãã䜿çšããŸãã代ããã«ãåã«ctl + SãæŒããŸãã
String Serial_string " [%s]" { serial="COM35" }
ãã¹ãã®ããã«ãäœæãããèŠçŽ ã«æ¯åã³ãã³ããéä¿¡ããã«ãŒã«ãäœæããŸãã ãããè¡ãã«ã¯ãdemo.rulesãã¡ã€ã«ã®æåŸã«æ¬¡ã®ã³ãŒããè¿œå ããŠä¿åããŸãã
rule "Test serial string" when System started or Time cron "0 * * * * ?" then Serial_string.sendCommand("Test") end
OpenHABãå®è¡ãããŠããå Žåãã¿ãŒããã«ããã°ã©ã ã§ã³ãã³ãããã¹ãã®åãå ¥ããã»ãŒããã«éå§ããã³ã³ãœãŒã«ã«ãã®ééã«é¢ããã¬ããŒãã衚瀺ãããŸãã
次ã«ãOpenHABã«ã³ãã³ããéä¿¡ããŠã¿ãŸãããã ã¿ãŒããã«ã§ã¯ããéä¿¡ãããã«ã®æåã®ãã£ãŒã«ãã«ããã¹ããON_1ããå ¥åãã2çªç®ã®ãã£ãŒã«ãã«ãOFF_1ããå ¥åããŸãã æåã®ãéä¿¡ããã¿ã³ãæŒããŠããã2çªç®ãæŒããŸãã ãã®çµæãã³ã³ãœãŒã«ã«æ¬¡ã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
äœæ¥ãç¡é§ã«ãªããªãããã«ãã³ãã³ããåŠçããã«ãŒã«ãäœæããŸãããããè¡ãã«ã¯ãdemo.rulesãã¡ã€ã«ã®æåŸã«æ¬¡ã®ã³ãŒããè¿œå ããŠä¿åããŸãã
rule "Serial control" when Item Serial_string received update then if(Serial_string.state=="ON_1") sendCommand(Light_FF_Corridor_Ceiling, ON) if(Serial_string.state=="OFF_1") sendCommand(Light_FF_Corridor_Ceiling, OFF) if(Serial_string.state=="ON_2") sendCommand(Light_GF_Kitchen_Ceiling, ON) if(Serial_string.state=="OFF_2") sendCommand(Light_GF_Kitchen_Ceiling, OFF) end
WEBã€ã³ã¿ãŒãã§ãŒã¹ãéããã¢ã€ãã ãFirst Floorããã¯ãªãã¯ããŠããã¢ã€ãã ãCorridorããã¯ãªãã¯ãããããªã³ã¯ããã©ãŠã¶ãŒã«ã³ããŒããŸãïŒ localhost ïŒ8080 / openhab.appïŒSitemap = demoïŒ_FF_Corridorãããã¹ããON_1ãã次ã«OFF_1ã端æ«ããéä¿¡ããŸãã WEBã¢ããªã±ãŒã·ã§ã³ã§ã¹ã€ãããå¶åŸ¡ãããã®ç¶æ ãå€æŽããå¿ èŠããããŸãã
ãããŒã ããã¯ãªãã¯ãããã°ã©ãŠã³ãããã¢ããéžæããŠããããããã³ããéžæãããããã©ãŠã¶ãŒã§ãªã³ã¯ãã³ããŒããŸãïŒ localhost ïŒ8080 / openhab.appïŒSitemap = demoïŒ_GF_Kitchenãããã¹ããON_2ãã次ã«ãOFF_2ãã端æ«ããéä¿¡ããŸãã WEBã¢ããªã±ãŒã·ã§ã³ã§ã¹ã€ãããå¶åŸ¡ãããã®ç¶æ ãå€æŽããå¿ èŠããããŸãã
å®éšã®çµæã¯ãã¢ããªã±ãŒã·ã§ã³ã³ã³ãœãŒã«ã§ç¢ºèªã§ããŸããã¢ããªã±ãŒã·ã§ã³ã³ã³ãœãŒã«ã«ã¯ã次ã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
ãã¹ãŠãã³ã³ãã¥ãŒã¿ãŒã§åäœããŸããçŸå®ã®äžçã«æ¥ç¶ããæã§ãïŒ
ã»ãšãã©ã®ArduinoããŒãã«ã¯ãCOMããŒãããUSBãžã®ã¢ããã¿ãŒãæ¢ã«æèŒãããŠãããããã³ã³ãã¥ãŒã¿ãŒãã©ããããããžã®æ¥ç¶ã«åé¡ã¯ãããŸããã æå ã®ããŒã«ããã¬ã€ã¢ãŠããçµã¿ç«ãŠãŸãããã®ããã«ã¯ãArduinoã³ã³ãããŒã©ãŒããã¬ããããŒããã¯ã€ã€ãŒããã¿ã³ãLEDã10kããã³1kãªãŒã ã®æµæåšãå¿ èŠã§ãã
ãããã¯ãŒã¯ã«ã¯ååãªèª¬æãšäŸããããŸãã®ã§ãArduinoã®éçºç°å¢ã§ã€ã³ã¹ããŒã«ããã»ã¹ãšäœæ¥ã詳现ã«èª¬æããå¿ èŠã¯ãããŸããã ãã¿ã³ã®ã¯ãªãã¯ãåŠçããã·ãªã¢ã«ããŒãçµç±ã§ããã¹ãã³ãã³ããéä¿¡ããç°¡åãªã¹ã±ããã®äœæã«ããã«é²ã¿ãŸãã ã³ãã³ãã®èª€ã£ãéä¿¡ãé¿ããããã«ãã¹ã±ãããžã®æ¥è§ŠããŠã³ã¹ã«å¯ŸããåçŽãªä¿è·ãè¿œå ããŸãã
ãšãã£ã¿ãŒãéãã次ã®ã³ãŒãããšãã£ã¿ãŒã«è¿œå ããŠãbtn.inoãã¡ã€ã«ã«ã¹ã±ãããä¿åããŸãã
// const int buttonPin = 2; // , const int ledPin = 13; // // int buttonState = 3; // int buttonCnt = 0; // void setup() { // , , pinMode(ledPin, OUTPUT); // , , pinMode(buttonPin, INPUT); // Serial.begin(9600); } void loop(){ // delay(1); if (buttonState != digitalRead(buttonPin)) buttonCnt++; else buttonCnt = 0; if (buttonCnt > 100) { // buttonState = digitalRead(buttonPin); buttonCnt = 0; // // , buttonState LOW: if (buttonState == LOW) { // digitalWrite(ledPin, HIGH); // Serial.print("ON_1"); } else { // digitalWrite(ledPin, LOW); // Serial.print("OFF_1"); } } }
ã¹ã±ãããã³ã³ãã€ã«ããŠArduinoã«ããŒãããããŒãã¢ãã¿ãŒãéãã9600ã®é床ãéžæããŠãããŒãäžã®ãã¿ã³ãæŒããŠã¿ãŸãã ãã®çµæãã³ãã³ãã®åä¿¡ã確èªã§ããŸãã
ããŒãã¢ãã¿ãŒãéããŠãã³ã³ãããŒã©ãŒãšã®OpenHABæ¥ç¶ãæ§æããŸãããã®ãããèŠçŽ ã®èšå®ãç·šéããŸãïŒãã®å ŽåãArduino USBã¢ããã¿ãŒããã®ããŒãã«ã€ã³ã¹ããŒã«ãããŠãããããå€ãCOM18ã«å€æŽããå¿ èŠããããŸãïŒã
String Serial_string " [%s]" { serial="COM18" }
æåŸã«ãã³ã³ãœãŒã«ãšWEBã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠã³ãã³ãã®ééãå¶åŸ¡ããŸãã
ç§ãã¡ã®ä»äºã®çµæãšããŠåŸããã®ïŒ
1ã€ã³ã¹ããŒã«ãOpenHABã®æ§æãã¢ã€ãã ïŒã¢ã€ãã ïŒã®è¿œå æ¹æ³ãããã³ã«ãŒã«ïŒã«ãŒã«ïŒã䜿çšããåŠçã®èªååæ¹æ³ãåŠç¿ããŸããã
2人ã¯ããœãããŠã§ã¢ããŒã«ã䜿çšããŠäº€æããã¹ãããããšãåŠã³ãŸããã ãããã®ããŒã«ã¯ãå°æ¥ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãç¬èªã®å®éšã®èšå®ã«åœ¹ç«ã¡ãŸãã
3ã¯Arduinoã®æãç°¡åãªã¹ã±ãããäœæããOpenHABã«æ¥ç¶ããããã¹ãã³ãã³ããåŠçããã«ãŒã«ãäœæããã·ãªã¢ã«ããŒããä»ããŠå¶åŸ¡ããæ©èœããã¹ãããŸããã
çµè«ïŒ
ããã¹ã圢åŒã§ã³ãã³ããéä¿¡ããããšã¯Arduinoã®æ £ç¿ã§ã¯äžè¬çã§ãããã®ãããªã³ãã³ãã®åŠçã¯OpenHABã§å®è£ ã§ããããããã®å¯Ÿè©±æ¹æ³ã¯æ³šæãšè°è«ã«å€ããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã®æ¬ ç¹ã¯ãã³ãã³ããäžæåæ¢ä»¥å€ã®ãã®ã§åºåãããŠããªãããšã§ããããã«ãããã³ãã³ãããåºçãããä¿¡é Œæ§ã®äœãåŠçã«ã€ãªããå¯èœæ§ããããŸãã ãã®åé¡ã解決ããã«ã¯ãã³ãã³ããåŠçããããã®ã¹ã±ãããšã«ãŒã«ãå€æŽããããã·ãªã¢ã«ãã€ã³ãã£ã³ã°ã¢ãžã¥ãŒã«ãå€æŽããå¿ èŠããããŸãã
å€ãã®äººããã®OpenHABã¢ããã¥ã¢ãšã®å¯Ÿè©±ãªãã·ã§ã³ãåŒã³åºããããäœæ¥ãç¶è¡ããåã«ãOpenHABãšArduinoãModbusãããã³ã«ãä»ããŠæ¥ç¶ããããšããŸãã
ããã«ã€ããŠã¯ã次ã®è³æã§èª¬æããŠããŸãã
ArduinoãšModbus habrahabr.ru/post/249043
Arduinoããã³OpenHAB habrahabr.ru/post/252555
Arduino vk.com/myremoterã«åºã¥ããªãŒãã³ã¹ããŒãããŒã ã³ã³ãããŒã©ãŒ