def webform_load(self): # create html page for settings webserver.addFormNote( "1st GPIO=CLK, 2nd GPIO=DT, BOTH of them needs to be INPUT-PULLUP") choice1 = int(float(self.taskdevicepluginconfig[0])) options = ["1", "2", "3", "4"] optionvalues = [1, 2, 3, 4] webserver.addFormSelector("Step", "p059_step", len(options), options, optionvalues, None, choice1) try: minv = int(self.taskdevicepluginconfig[1]) except: minv = 0 webserver.addFormNumericBox("Limit min.", "p059_min", minv, -65535, 65535) try: maxv = int(self.taskdevicepluginconfig[2]) except: maxv = 100 if minv >= maxv: maxv = minv + 1 webserver.addFormNumericBox("Limit max.", "p059_max", maxv, -65535, 65535) try: bt = int(self.taskdevicepluginconfig[3]) except: bt = 10 webserver.addFormNumericBox("GPIO bounce time", "p059_bounce", bt, 0, 1000) webserver.addUnit("ms") return True
def webform_load(self): # create html page for settings choice1 = self.taskdevicepluginconfig[0] options = ["0x68","0x69"] optionvalues = [0x68,0x69] webserver.addFormSelector("I2C address","p045_address",len(optionvalues),options,optionvalues,None,int(choice1)) webserver.addFormNote("Enable <a href='pinout'>I2C bus</a> first, than <a href='i2cscanner'>search for the used address</a>!") webserver.addFormPinSelect("Interrupt pin","p045_int_pin",self.taskdevicepin[0]) webserver.addFormNote("Set an Input-PULLUP pin to INT pin and connect it for fastest results. (optional)") choice2 = int(self.taskdevicepluginconfig[1]) options = ["Movement detection","Acceleration X","Acceleration Y","Acceleration Z","G-force X","G-force Y","G-force Z"] optionvalues = [0,4,5,6,7,8,9] webserver.addFormSelector("Type","p045_function",len(optionvalues),options,optionvalues,None,choice2) if choice2==0: webserver.addHtml("<TR><TD><TD>The thresholdvalues (-65535 to 65535, except 0) can be used to set a threshold for one or more<br>") webserver.addHtml("axis. The axis will trigger when the range for that axis exceeds the threshold<br>") webserver.addHtml("value. A value of 0 disables movement detection for that axis.") webserver.addFormNumericBox("Detection threshold X", "p045_threshold_x", self.taskdevicepluginconfig[2], -65535, 65535) webserver.addFormNumericBox("Detection threshold Y", "p045_threshold_y", self.taskdevicepluginconfig[3], -65535, 65535) webserver.addFormNumericBox("Detection threshold Z", "p045_threshold_z", self.taskdevicepluginconfig[4], -65535, 65535) webserver.addFormNumericBox("Min movement time", "p045_threshold_window", self.taskdevicepluginconfig[6], 0, 120) webserver.addUnit("s") else: # pos choice5 = int(self.taskdevicepluginconfig[7]) options = ["Nothing","Acceleration X","Acceleration Y","Acceleration Z","G-force X","G-force Y","G-force Z"] optionvalues = [0,4,5,6,7,8,9] webserver.addFormSelector("Type","p045_function2",len(optionvalues),options,optionvalues,None,choice5) choice6 = int(self.taskdevicepluginconfig[8]) webserver.addFormSelector("Type","p045_function3",len(optionvalues),options,optionvalues,None,choice6) if self.enabled and self.initialized: try: webserver.addFormNote("Accel x:"+str(self.mpu.ax)+", y:"+str(self.mpu.ay)+", z:"+str(self.mpu.az)) webserver.addFormNote("Gyro x:"+str(self.mpu.gx)+", y:"+str(self.mpu.gy)+", z:"+str(self.mpu.gz)) except: pass return True
def webform_load(self): # create html page for settings bledevs = BLEHelper.find_hci_devices() options = [] optionvalues = [] if bledevs: for bd in bledevs: options.append(bd) try: optionvalues.append(int(bd[3:])) except: optionvalues.append(bd[3:]) webserver.addFormSelector("Local Device", "plugin_520_dev", len(options), options, optionvalues, None, int(self.taskdevicepluginconfig[2])) webserver.addFormTextBox("Remote Device Address", "plugin_520_addr", str(self.taskdevicepluginconfig[0]), 20) webserver.addFormCheckBox("Add RSSI value for non-Domoticz system", "plugin_520_rssi", self.taskdevicepluginconfig[1]) webserver.addFormNote( "For Domoticz it's integrated with online value!") webserver.addFormFloatNumberBox("Timeout", "plugin_520_tout", float(self.taskdevicepluginconfig[3]), 0, 60) webserver.addUnit("s") options = ["State", "State or RSSI"] optionvalues = ["0", "1"] webserver.addFormSelector("Report on change of", "plugin_520_rep", len(options), options, optionvalues, None, int(self.taskdevicepluginconfig[4])) return True
def webform_load(self): # create html page for settings webserver.addFormTextBox("Controller Publish", "inchannel", self.inchannel, 255) webserver.addFormTextBox("Controller Subscribe", "outchannel", self.outchannel, 255) try: kp = self.keepalive except: kp = 60 webserver.addFormNumericBox("Keepalive time", "keepalive", kp, 2, 600) webserver.addUnit("s") try: am = self.authmode fname = self.certfile except: am = 0 fname = "" options = ["MQTT", "MQTTS/with cert", "MQTTS/insecure"] optionvalues = [0, 1, 2] webserver.addFormSelector("Mode", "c002_mode", len(optionvalues), options, optionvalues, None, int(am)) webserver.addFormTextBox("Server certificate file", "c002_cert", str(fname), 120) webserver.addBrowseButton("Browse", "c002_cert", startdir=str(fname)) webserver.addFormNote( "Upload certificate first at <a href='filelist'>filelist</a> then select here!" ) return True
def webform_load(self): webserver.addFormTextBox("Remote station address", "plugin_126_addr", str(self.taskdevicepluginconfig[0]), 128) webserver.addFormFloatNumberBox("Timeout", "plugin_126_timeout", float(self.taskdevicepluginconfig[1]), 0, 20) webserver.addUnit("s") webserver.addFormNote("Ping3 icmp will only work with ROOT rights!") return True
def webform_load(self): # create html page for settings webserver.addFormTextBox("Device Address", "plugin_510_itagaddr", str(self.taskdevicepluginconfig[0]), 20) webserver.addFormNote( "Enable blueetooth then <a href='blescanner'>scan iTag address</a> first." ) webserver.addFormNumericBox("Reconnect time", "plugin_510_reconnect", self.taskdevicepluginconfig[1], 5, 240) webserver.addUnit("s") return True
def webform_load(self): webserver.addFormNote("Select an input pin.") tol = self.taskdevicepluginconfig[0] try: tol = int(tol) except: tol = 0 if tol == 0: tol = 60 webserver.addFormNumericBox("Signal decoding tolerance", "p111_tolerance", tol, 1, 200) webserver.addUnit("%") return True
def webform_load(self): # create html page for settings global analogpins,realanalog,rpiok if realanalog: self.taskdevicepluginconfig[0] = 0 webserver.addHtml("<tr><td>Analog input pin:<td>") webserver.addSelector_Head("p002_ain",False) for d in range(len(analogpins)): webserver.addSelector_Item(analogpins[d][1],analogpins[d][0],(self.taskdevicepluginconfig[1]==analogpins[d][0]),False) webserver.addSelector_Foot() elif rpiok: webserver.addFormNote("Pin1 is A, Pin2 is B, for wiring, see <a href='https://github.com/simonmonk/pi_analog'>https://github.com/simonmonk/pi_analog</a>") choice0 = self.taskdevicepluginconfig[0] options = ["Analog","Resistance","Thermistor"] optionvalues = [0,1,2] webserver.addFormSelector("Result Type","p002_type",len(options),options,optionvalues,None,choice0) webserver.addFormFloatNumberBox("C1 capacitor", "p002_c1", self.taskdevicepluginconfig[1], 0, 1000000.0) webserver.addUnit("uF") webserver.addFormNumericBox("R1 resistor","p002_r1",self.taskdevicepluginconfig[2]) webserver.addUnit("Ohm") webserver.addFormFloatNumberBox("Vt voltage (digital HIGH level)", "p002_vt", self.taskdevicepluginconfig[3], 0, 3.3) webserver.addUnit("V") webserver.addFormNote("Settings below are only valid for thermistor type!") webserver.addFormNumericBox("Thermistor resistance","p002_tr",self.taskdevicepluginconfig[4]) webserver.addUnit("Ohm") webserver.addFormNumericBox("Thermistor Beta","p002_tb",self.taskdevicepluginconfig[5]) return True
def webform_load(self): # create html page for settings webserver.addFormNote( "1st GPIO is <b>Trigger</b> pin which has to be an output, and 2nd GPIO is the <b>Echo</b> pin which has to be an input!<br>Make sure to set it up at <a href='pinout'>Pinout settings</a> first! <br>And do not forget about 5V->3.3V level shifting when connecting them!" ) webserver.addFormNumericBox("Samples", "p013_samples", self.taskdevicepluginconfig[0], 1, 30) webserver.addFormNote("Number of readings at once, that are averaged.") webserver.addFormNumericBox("Cooldown time between samples", "p013_ctime", self.taskdevicepluginconfig[1], 10, 1000) webserver.addUnit("ms") webserver.addFormNote( "Waiting before starting the next sample reading. (100ms recommended)" ) return True
def webform_load(self): # create html page for settings webserver.addFormTextBox("Device Address", "plugin_513_addr", str(self.taskdevicepluginconfig[0]), 20) webserver.addFormNote( "Enable blueetooth then <a href='blescanner'>scan LYWSD02 address</a> first." ) webserver.addFormNote( "This plugin may not work well with ble scanner plugin.") webserver.addFormCheckBox("Add Battery value for non-Domoticz system", "plugin_513_bat", self.taskdevicepluginconfig[1]) webserver.addFormCheckBox("Set LYWSD time at startup", "plugin_513_t", self.taskdevicepluginconfig[2]) webserver.addFormNumericBox( "Force to release BLE queue if blocked for x seconds", "plugin_513_free", self.taskdevicepluginconfig[3], 5, 240) webserver.addUnit('s') return True
def webform_load(self): # create html page for settings choice1 = int(float( self.taskdevicepluginconfig[0])) # store i2c address optionvalues = [] for i in range(0x40, 0x78): optionvalues.append(i) options = [] for i in range(len(optionvalues)): options.append(str(hex(optionvalues[i]))) webserver.addFormSelector("Address", "p022_adr", len(options), options, optionvalues, None, choice1) webserver.addFormNote( "Enable <a href='pinout'>I2C bus</a> first, than <a href='i2cscanner'>search for the used address</a>!" ) webserver.addFormNumericBox("Frequency", "p022_freq", self.taskdevicepluginconfig[2], self.MIN_FREQUENCY, self.MAX_FREQUENCY) webserver.addUnit("Hz") return True
def webform_load(self): # create html page for settings bledevs = BLEHelper.find_hci_devices() options = [] optionvalues = [] if bledevs: for bd in bledevs: options.append(bd) try: optionvalues.append(int(bd[3:])) except: optionvalues.append(bd[3:]) webserver.addFormSelector("Local Device","plugin_510_dev",len(options),options,optionvalues,None,int(self.taskdevicepluginconfig[3])) webserver.addFormTextBox("Device Address","plugin_510_itagaddr",str(self.taskdevicepluginconfig[0]),20) webserver.addFormNote("Enable blueetooth then <a href='blescanner'>scan iTag address</a> first.") webserver.addFormNote("This plugin needs continous connection so WILL NOT WORK WITH scanner plugin on the same dongle!") webserver.addFormNumericBox("Reconnect time","plugin_510_reconnect",self.taskdevicepluginconfig[1],5,240) webserver.addUnit("s") options = ["Button+Connection","Button","Connection"] optionvalues = [0,1,2] webserver.addFormSelector("Return state of","plugin_510_ret",len(options),options,optionvalues,None,self.taskdevicepluginconfig[2]) return True
def webform_load(self): # create html page for settings webserver.addFormTextBox("Report topic", "inchannel", self.inchannel, 255) webserver.addFormTextBox("Command topic", "outchannel", self.outchannel, 255) try: kp = self.keepalive except: kp = 60 webserver.addFormNumericBox("Keepalive time", "keepalive", kp, 2, 600) webserver.addUnit("s") try: am = self.authmode fname = self.certfile except: am = 0 fname = "" options = ["MQTT", "MQTTS/with cert", "MQTTS/insecure"] optionvalues = [0, 1, 2] webserver.addFormSelector("Mode", "c014_mode", len(optionvalues), options, optionvalues, None, int(am)) webserver.addFormTextBox("Server certificate file", "c014_cert", str(fname), 120) webserver.addBrowseButton("Browse", "c014_cert", startdir=str(fname)) webserver.addFormNote( "Upload certificate first at <a href='filelist'>filelist</a> then select here!" ) try: lwt = self.lwt_topic lwt1 = self.lwtconnmsg lwt2 = self.lwtdisconnmsg except: lwt = "%sysname%/LWT" lwt1 = "Online" lwt2 = "Offline" webserver.addFormTextBox("Controller lwl topic", "c014_lwt", lwt, 255) webserver.addFormTextBox("LWT Connect Message", "c014_cmsg", lwt1, 255) webserver.addFormTextBox("LWT Disconnect Message", "c014_dcmsg", lwt2, 255) return True
def webform_load(self): choice1 = self.taskdevicepluginconfig[0] options = rpiSerial.serial_portlist() if len(options)>0: webserver.addHtml("<tr><td>Serial Device:<td>") webserver.addSelector_Head("p201_addr",False) for o in range(len(options)): webserver.addSelector_Item(options[o],options[o],(str(options[o])==str(choice1)),False) webserver.addSelector_Foot() webserver.addFormNote("For RPI use 'raspi-config' tool: 5- Interfacing Options-P6 Serial- (Kernel logging disabled + serial port hardware enabled) before enable this plugin") webserver.addFormNumericBox("Baudrate","p201_spd",self.taskdevicepluginconfig[1],50,4000000) webserver.addFormNote("Generic values: 9600, 19200, 38400, 57600, 115200") choice2 = self.taskdevicepluginconfig[2] options = ["5","6","7","8"] optionvalues = [rpiSerial.FIVEBITS,rpiSerial.SIXBITS,rpiSerial.SEVENBITS,rpiSerial.EIGHTBITS] webserver.addFormSelector("Bytesize","p201_bsize",len(optionvalues),options,optionvalues,None,int(choice2)) webserver.addFormNote("Most common setting is 8") choice3 = self.taskdevicepluginconfig[3] options = ["None","Even","Odd","Mark","Space"] optionvalues = [rpiSerial.PARITY_NONE,rpiSerial.PARITY_EVEN,rpiSerial.PARITY_ODD,rpiSerial.PARITY_MARK,rpiSerial.PARITY_SPACE] webserver.addHtml("<tr><td>Parity:<td>") webserver.addSelector_Head("p201_par",False) for o in range(len(options)): webserver.addSelector_Item(options[o],optionvalues[o],(str(optionvalues[o])==str(choice3)),False) webserver.addSelector_Foot() webserver.addFormNote("Most common setting is None") choice4 = self.taskdevicepluginconfig[4] options = ["1","2"] optionvalues = [rpiSerial.STOPBITS_ONE,rpiSerial.STOPBITS_TWO] webserver.addFormSelector("Stopbits","p201_sbit",len(optionvalues),options,optionvalues,None,float(choice4)) webserver.addFormNote("Most common setting is 1") webserver.addFormNumericBox("Expected max packet size","p201_pkt",self.taskdevicepluginconfig[5],1,4096) # Linux serial buffer is fixed max 4096 bytes webserver.addUnit("byte") choice6 = self.taskdevicepluginconfig[6] options = ["Hex values","String"] optionvalues = [0,1] webserver.addFormSelector("Data format","p201_fmt",len(optionvalues),options,optionvalues,None,int(choice6)) else: webserver.addFormNote("No serial ports found") return True
def webform_load(self): # create html page for settings choice1 = self.taskdevicepluginconfig[0] options = ["0x40", "0x41", "0x44", "0x45"] optionvalues = [0x40, 0x41, 0x44, 0x45] webserver.addFormSelector("I2C address", "plugin_027_addr", len(options), options, optionvalues, None, int(choice1)) webserver.addFormNote( "Enable <a href='pinout'>I2C bus</a> first, than <a href='i2cscanner'>search for the used address</a>!" ) choice2 = self.taskdevicepluginconfig[1] options = ["AUTO", "200", "400", "800", "1000", "1600", "2000", "3200"] optionvalues = [0, 200, 400, 800, 1000, 1600, 2000, 3200] webserver.addFormSelector("Maximum current", "plugin_027_amp", len(options), options, optionvalues, None, int(choice2)) webserver.addUnit("mA") choice3 = self.taskdevicepluginconfig[2] options = ["32", "16"] optionvalues = [1, 0] webserver.addFormSelector("Max voltage", "plugin_027_volt", len(options), options, optionvalues, None, int(choice3)) webserver.addUnit("V") choice4 = self.taskdevicepluginconfig[3] options = ["None", "Voltage", "Current", "Power"] optionvalues = [0, 1, 2, 3] webserver.addFormSelector("Param1", "plugin_027_p1", len(options), options, optionvalues, None, int(choice4)) choice5 = self.taskdevicepluginconfig[4] webserver.addFormSelector("Param2", "plugin_027_p2", len(options), options, optionvalues, None, int(choice5)) choice6 = self.taskdevicepluginconfig[5] webserver.addFormSelector("Param3", "plugin_027_p3", len(options), options, optionvalues, None, int(choice6)) return True
def webform_load(self): # create html page for settings choice1 = self.taskdevicepluginconfig[0] options = ["0x29", "0x39", "0x49"] optionvalues = [0x29, 0x39, 0x49] webserver.addFormSelector("I2C address", "plugin_015_addr", len(options), options, optionvalues, None, int(choice1)) choice2 = self.taskdevicepluginconfig[1] options = ["13.7", "101", "402"] optionvalues = [0, 1, 2] webserver.addFormSelector("Exposure speed", "plugin_015_spd", len(options), options, optionvalues, None, int(choice2)) webserver.addUnit("ms") choice3 = self.taskdevicepluginconfig[2] options = ["1", "16"] optionvalues = [0, 0x10] webserver.addFormSelector("Gain", "plugin_015_gain", len(options), options, optionvalues, None, int(choice3)) webserver.addUnit("x") webserver.addFormNote( "Enable <a href='pinout'>I2C bus</a> first, than <a href='i2cscanner'>search for the used address</a>!" ) return True
def webform_load(self): # create html page for settings webserver.addFormNote("Pin1 is A, Pin2 is B, for wiring, see <a href='https://github.com/simonmonk/pi_analog'>https://github.com/simonmonk/pi_analog</a>") choice0 = self.taskdevicepluginconfig[0] options = ["Analog","Resistance","Thermistor"] optionvalues = [0,1,2] webserver.addFormSelector("Result Type","p002_type",len(options),options,optionvalues,None,choice0) webserver.addFormFloatNumberBox("C1 capacitor", "p002_c1", self.taskdevicepluginconfig[1], 0, 1000000.0) webserver.addUnit("uF") webserver.addFormNumericBox("R1 resistor","p002_r1",self.taskdevicepluginconfig[2]) webserver.addUnit("Ohm") webserver.addFormFloatNumberBox("Vt voltage (digital HIGH level)", "p002_vt", self.taskdevicepluginconfig[3], 0, 3.3) webserver.addUnit("V") webserver.addFormNote("Settings below are only valid for thermistor type!") webserver.addFormNumericBox("Thermistor resistance","p002_tr",self.taskdevicepluginconfig[4]) webserver.addUnit("Ohm") webserver.addFormNumericBox("Thermistor Beta","p002_tb",self.taskdevicepluginconfig[5]) return True
def webform_load(self): # create html page for settings bledevs = BLEHelper.find_hci_devices() options = [] optionvalues = [] if bledevs: for bd in bledevs: options.append(bd) try: optionvalues.append(int(bd[3:])) except: optionvalues.append(bd[3:]) webserver.addFormSelector("Local Device","plugin_527_dev",len(options),options,optionvalues,None,int(self.taskdevicepluginconfig[4])) webserver.addFormTextBox("Remote Device Address","plugin_527_addr",str(self.address),20) webserver.addFormNote("Supported device types: LYWSD02, CGQ, CGG1, MiFlora") webserver.addFormNote("If you are using Sniffer, its not the best idea to use another BLE plugin at the same time. Although multiple sniffer tasks can be used.") choice1 = self.taskdevicepluginconfig[0] choice2 = self.taskdevicepluginconfig[1] choice3 = self.taskdevicepluginconfig[2] choice4 = self.taskdevicepluginconfig[3] options = ["None","Temperature","Humidity","Light","Moisture","Fertility","Battery","RSSI"] optionvalues = [-1,4,6,7,8,9,10,200] webserver.addFormSelector("Indicator1","plugin_527_ind0",len(optionvalues),options,optionvalues,None,choice1) webserver.addFormSelector("Indicator2","plugin_527_ind1",len(optionvalues),options,optionvalues,None,choice2) webserver.addFormSelector("Indicator3","plugin_527_ind2",len(optionvalues),options,optionvalues,None,choice3) webserver.addFormSelector("Indicator4","plugin_527_ind3",len(optionvalues),options,optionvalues,None,choice4) try: if self.taskdevicepluginconfig[5]<1: self.taskdevicepluginconfig[5] = self.blescanner.scantime except: pass try: if self.taskdevicepluginconfig[6]<1: self.taskdevicepluginconfig[6] = self.blescanner.minsleep except: pass try: if self.taskdevicepluginconfig[7]<1: self.taskdevicepluginconfig[7] = self.blescanner.maxsleep except: pass if self.taskdevicepluginconfig[5]<1: self.taskdevicepluginconfig[5]=5 if self.taskdevicepluginconfig[6]<1: self.taskdevicepluginconfig[6]=10 if self.taskdevicepluginconfig[7]<1: self.taskdevicepluginconfig[7]=30 webserver.addFormNumericBox("Scan time","plugin_527_scantime",self.taskdevicepluginconfig[5],5,60) webserver.addUnit('s') webserver.addFormNumericBox("Minimal pause after scan","plugin_527_minsleep",self.taskdevicepluginconfig[6],5,60) webserver.addUnit('s') webserver.addFormNumericBox("Maximal pause after scan","plugin_527_maxsleep",self.taskdevicepluginconfig[7],10,120) webserver.addUnit('s') return True
def webform_load(self): webserver.addFormNote("IP and Port parameter is not used!") webserver.addFormNote("SX127x hardware supported by pyLoRa library") webserver.addHtml("<p>Example sender sketches could be find <a href='https://github.com/enesbcs/EasyLora'>here</a>.") # if self.lora is not None: # webserver.addFormNote("LoRa version: "+str(self.lora.get_version())) try: webserver.addTableSeparator("Hardware settings",2,3) if BOARD.SPI_BUS==0: webserver.addHtml("<tr><td>SPI0 selected<td><i>(MOSI=GPIO10, MISO=GPIO9, SCK=GPIO11, NSS=GPIO8)</i>") spiok = False if gpios.HWPorts.is_spi_usable(BOARD.SPI_BUS): if gpios.HWPorts.is_spi_enabled(BOARD.SPI_BUS): webserver.addHtml(" - <b>SPI0 enabled</b>") spiok = True if spiok==False: webserver.addHtml("<tr><td><td>Enable SPI0 first at hardware <a href='pinout'>pinout page</a>!") else: webserver.addHtml("<tr><td><td>You have modified BOARD constants, so you are an expert!") webserver.addHtml("<tr><td>DIO0 (IRQ)<td>GPIO"+str(BOARD.DIO0)) webserver.addHtml("<tr><td>DIO1<td>GPIO"+str(BOARD.DIO1)) webserver.addHtml("<tr><td>DIO2<td>GPIO"+str(BOARD.DIO2)) webserver.addHtml("<tr><td>DIO3<td>GPIO"+str(BOARD.DIO3)) webserver.addHtml("<tr><td>RST<td>GPIO"+str(BOARD.RST)) webserver.addTableSeparator("LoRa settings",2,3) webserver.addFormFloatNumberBox("Frequency","freq",self.freq,433,928) webserver.addUnit("Mhz") if self.lora is not None: try: afreq = self.lora.get_freq() except: afreq = "UNINITIALIZED" webserver.addFormNote("Current frequency: "+str(afreq)+" Mhz") webserver.addFormNote("Please check local regulations for your selected frequency!") options = ["10%","1%","0.1%"] optionvalues = [10,100,1000] webserver.addFormSelector("Duty cycle","duty",len(optionvalues),options,optionvalues,None,self.duty) webserver.addFormNote("Please check your local Duty cycle regulations for your selected frequency!") webserver.addFormNumericBox("Spreading factor","spreading",self.sf,6,12) options = ["7.8","10.4","15.6","20.8","31.25","41.7","62.5","125","250","500"] optionvalues = [BW.BW7_8, BW.BW10_4, BW.BW15_6, BW.BW20_8, BW.BW31_25, BW.BW41_7, BW.BW62_5, BW.BW125, BW.BW250, BW.BW500] webserver.addFormSelector("Bandwidth","bw",len(optionvalues),options,optionvalues,None,self.bw) webserver.addUnit("khz") options = ["CR4/5","CR4/6","CR4/7","CR4/8"] optionvalues = [CODING_RATE.CR4_5,CODING_RATE.CR4_6,CODING_RATE.CR4_7,CODING_RATE.CR4_8] webserver.addFormSelector("Coding rate","coding",len(optionvalues),options,optionvalues,None,self.coding) webserver.addFormNumericBox("Sync Word","sync",self.sync,0,255) webserver.addHtml("( 0x"+format(self.sync, '02x')+" )") webserver.addFormNote("Default 0x12, LoRaWAN is 0x34. Nodes can only communicate each other if uses same sync word!") webserver.addFormCheckBox("Enable Sending","sender",self.enablesend) webserver.addFormNumericBox("Default destination node index","defaultnode",self.defaultunit,0,255) webserver.addFormNote("Default node index for data sending") except Exception as e: misc.addLog(rpieGlobals.LOG_LEVEL_ERROR,str(e)) return True
def handle_espnow(self): try: webserver.TXBuffer="" if self.type == "GET": responsearr = self.get else: responsearr = self.post try: managenode = webserver.arg('nodenum',responsearr) except: managenode = "" try: tasknum = int(webserver.arg('tasknum',responsearr)) except: tasknum = 0 taskmode = False i2cmode = False for i in range(1,48): try: if webserver.arg('del'+str(i),responsearr) != '': if str(managenode)=="local": commands.doExecuteCommand("serialcommand,taskclear,"+str(i),False) taskmode = True break elif str(managenode)!="": commands.doExecuteCommand("espnowcommand,"+str(managenode)+",taskclear,"+str(i),False) taskmode = True time.sleep(1) break except: pass if int(tasknum)>0: taskc = ["Conf",tasknum,0,0,0,0,0,0,0,0,0,0] taska = ["Task",tasknum,0,-1,-1,-1,0,0,0] wv = -1 try: wv = int(webserver.arg('pluginid',responsearr)) except: wv = -999 if wv > -999: taska[2] = wv for i in range(1,4): try: wv = int(webserver.arg('pin'+str(i),responsearr)) except: wv = -999 if wv>-999: taska[2+i]=wv try: wv = int(webserver.arg('interval',responsearr)) except: wv = -999 if wv>-999: taska[7] = wv try: wv = int(webserver.arg('idx',responsearr)) except: wv = -999 if wv>-999: taska[8] = wv try: wv = int(webserver.arg('port',responsearr)) except: wv = -999 if wv>-999: taska[6] = wv try: wv = webserver.arg('pullup',responsearr) if str(wv)=="on": wv = 1 else: wv = 0 except: wv = 0 if wv>-1: taskc[2] = wv try: wv = 0 wv = webserver.arg('inverse',responsearr) if str(wv)=="on" or str(wv)=="1": wv = 1 else: wv = 0 except: wv = 0 if wv>-1: taskc[3] = wv for i in range(0,8): try: wv = webserver.arg('c'+str(i),responsearr) wv = int(wv) except: wv = -1 if str(wv)=="on" or str(wv)=="1": wv = 1 else: wv = 0 if wv>-1: taskc[4+i]=wv if str(managenode)=="local": tcmd = "serialcommand," else: tcmd = "espnowcommand,"+str(managenode)+"," tcmdc = tcmd + "espnow,taskconf" tcmda = tcmd + "espnow,taskadd" for i in range(1,len(taskc)): tcmdc += ","+str(taskc[i]) for i in range(1,len(taska)): tcmda += ","+str(taska[i]) commands.doExecuteCommand(tcmdc,False) time.sleep(1) commands.doExecuteCommand(tcmda,False) # print(tcmdc) # print(tcmda) taskmode = True elif taskmode==False: for i in range(1,48): try: if webserver.arg('add'+str(i),responsearr) != '': tasknum = i taskmode = True taskc = ["Conf",i,0,0,0,0,0,0,0,0,0,0] taska = ["Task",i,0,-1,-1,-1,0,0,0] break except: pass if taskmode: pass elif ( (webserver.arg('savelocal',responsearr) != '') or (webserver.arg('savenode',responsearr) != '') ): try: workmode = int(webserver.arg('workmode',responsearr)) except: workmode = 0 try: nodenum = int(webserver.arg('nnodenum',responsearr)) except: nodenum = 0 try: dnodenum = int(webserver.arg('dnodenum',responsearr)) except: dnodenum = 0 try: name = str(webserver.arg('name',responsearr)) except: name = "" try: wchannel = int(webserver.arg('wchannel',responsearr)) except: wchannel = 1 try: deepsleep = int(webserver.arg('deepsleep',responsearr)) except: deepsleep = 1 if str(managenode)=="local": tcmd = "serialcommand," dt = 0.5 elif str(managenode)!="": tcmd = "espnowcommand,"+str(managenode)+"," dt = 2 commands.doExecuteCommand(tcmd+"espnow,mode,"+str(workmode),False) time.sleep(dt) commands.doExecuteCommand(tcmd+"espnow,name,"+str(name),False) time.sleep(dt) commands.doExecuteCommand(tcmd+"espnow,deepsleep,"+str(deepsleep),False) time.sleep(dt) commands.doExecuteCommand(tcmd+"espnow,chan,"+str(wchannel),False) time.sleep(dt) commands.doExecuteCommand(tcmd+"espnow,dest,"+str(dnodenum),False) time.sleep(dt) commands.doExecuteCommand(tcmd+"unit,"+str(nodenum),False) time.sleep(dt) if str(managenode)=="local": pass elif str(managenode)!="": commands.doExecuteCommand(tcmd+"reboot",False) # just for sure reboot old node commands.doExecuteCommand("espnowcommand,"+str(nodenum)+",reboot",False) # reboot new node number time.sleep(dt*3) managenode = "" # return to main page instead of re-request all settings elif webserver.arg('submit',responsearr) != '': pass elif webserver.arg('search',responsearr) != '': commands.doExecuteCommand("espnowcommand,0,espnow,sendinfo",False) # broadcast command to every node managenode = "" elif webserver.arg('reboot',responsearr) != '': if str(managenode)!="local" and str(managenode)!="": commands.doExecuteCommand("espnowcommand,"+str(managenode)+",reboot",False) # reboot selected node else: commands.doExecuteCommand("serialcommand,reboot",False) # reboot selected node managenode = "" elif webserver.arg('i2c',responsearr) != '': i2cmode = True elif webserver.arg('tasks',responsearr) != '': taskmode = True elif webserver.arg('time',responsearr) != '': if str(managenode)=="local": commands.doExecuteCommand("serialcommand,espnow,setdate,"+datetime.now().strftime('%Y,%m,%d,%H,%M,%S'),False) elif str(managenode)!="": commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,setdate,"+datetime.now().strftime('%Y,%m,%d,%H,%M,%S'),False) managenode = "" webserver.sendHeadandTail("TmplStd",webserver._HEAD) if i2cmode: webserver.TXBuffer += "<form name='frmadd' method='post'><table class='normal'>" webserver.addFormHeader("I2C scan on Node "+str(managenode)) if str(managenode)=="local": commands.doExecuteCommand("serialcommand,i2cscanner",False) time.sleep(1) elif str(managenode)!="": commands.doExecuteCommand("espnowcommand,"+str(managenode)+",i2cscanner",False) time.sleep(3) scmdarr = [] for i in reversed(range(len(misc.ShadowLog))): if len(scmdarr)>=30: break if "i2cscanner" in misc.ShadowLog[i]["l"]: break if misc.ShadowLog[i]["lvl"]== rpieGlobals.LOG_LEVEL_DEBUG: if "I2C :" in misc.ShadowLog[i]["l"]: scmdarr.append(misc.ShadowLog[i]["l"].replace("ESPNOW:","").replace("SERIAL:","").strip()) webserver.TXBuffer += "<TR><TD colspan='2'><textarea readonly rows='10' wrap='on'>" for i in range(len(scmdarr)): webserver.TXBuffer += scmdarr[i]+" " webserver.TXBuffer += "</textarea><br>" webserver.addButton("espnow","Back") webserver.TXBuffer += "</table></form>" webserver.sendHeadandTail("TmplStd",webserver._TAIL) return webserver.TXBuffer elif taskmode and int(tasknum)>0: # display plugin selection webserver.TXBuffer += "<form name='frmadd' method='post'><table class='normal'>" try: if ("," in taska): ts = str(taska).split(",") tasknum2 = int(ts[1]) else: tasknum2 = int(taska[1]) except: tasknum2 = int(tasknum) webserver.addFormHeader("ESPNow add new task "+str(tasknum2)+" on Node "+str(managenode)) displaytask(taska,taskc) webserver.addHtml("<tr><td><input type='hidden' name='nodenum' value='"+str(managenode)+"'><input type='hidden' name='tasknum' value='"+str(tasknum2)+"'>") webserver.addSubmitButton("Save task", "savetask") webserver.addButton("espnow","Back") webserver.TXBuffer += "</table></form>" webserver.sendHeadandTail("TmplStd",webserver._TAIL) return webserver.TXBuffer elif taskmode and str(managenode)!="": # display tasklist webserver.TXBuffer += "<form name='frmtask' method='post'><table class='normal'>" webserver.addFormHeader("ESPNow tasklist") tasks = [] confs = [] if str(managenode)=="local": #serial node webserver.addFormHeader("Serial node") commands.doExecuteCommand("serialcommand,espnow,tasklist",False) time.sleep(3) scmdarr = getlastseriallogs(30) else: # espnow node webserver.addFormHeader("Node: "+str(managenode)) commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,tasklist",False) time.sleep(3) scmdarr = [] for i in reversed(range(len(misc.ShadowLog))): if len(scmdarr)>=30: break if "espnow,tasklist" in misc.ShadowLog[i]["l"]: break if misc.ShadowLog[i]["lvl"]== rpieGlobals.LOG_LEVEL_DEBUG: if "ESPNOW:" in misc.ShadowLog[i]["l"]: scmdarr.append(misc.ShadowLog[i]["l"].replace("ESPNOW:","").strip()) if len(scmdarr)>0: for i in range(len(scmdarr)): if ",tasklist" in scmdarr[i]: break if "Task," in scmdarr[i]: tasks.append(scmdarr[i]) elif "Conf," in scmdarr[i]: confs.append(scmdarr[i]) tasknum = 0 tasknum2 = tasknum if len(tasks)>0: for i in reversed(range(len(tasks))): tasknum = len(tasks)-i try: if ("," in tasks[i]): ts = str(tasks[i]).split(",") tasknum2 = int(ts[1]) else: tasknum2 = int(tasks[i][1]) except: tasknum2 = int(tasknum) webserver.addFormSubHeader("Task "+str(tasknum2)) webserver.addSubmitButton("Delete task "+str(tasknum2), "del"+str(tasknum2)) displaytask(tasks[i],confs[i]) webserver.addFormSeparator(2) webserver.addHtml("<tr><td><input type='hidden' name='nodenum' value='"+str(managenode)+"'>") webserver.addSubmitButton("Add new task "+str(tasknum2+1), "add"+str(tasknum2+1)) webserver.addButton("espnow","Back") webserver.TXBuffer += "</table></form>" webserver.sendHeadandTail("TmplStd",webserver._TAIL) return webserver.TXBuffer elif str(managenode)=="": # display node list webserver.addFormHeader("ESPNow node list") webserver.TXBuffer += "<form name='frmespnow' method='post'><table class='multirow'><TR><TH>Select<TH>P2P node number<TH>Name<TH>Build<TH>Type<TH>MAC<TH>Last seen<TH>Capabilities" webserver.TXBuffer += "<TR>" webserver.TXBuffer += "<td><input type='radio' name='nodenum' value='local'>" webserver.TXBuffer +="<TD>serial<TD>local node<TD></TR>" if len(Settings.p2plist)>0: for n in Settings.p2plist: if str(n["protocol"]) == "ESPNOW": webserver.TXBuffer += "<TR>" webserver.TXBuffer += "<td><input type='radio' name='nodenum' value='"+ str(n["unitno"])+"'>" webserver.TXBuffer +="<TD>Unit "+str(n["unitno"])+"<TD>"+str(n["name"])+"<TD>"+str(n["build"])+"<TD>" ntype = "Unknown" if int(n["type"])==rpieGlobals.NODE_TYPE_ID_ESP_EASY_STD: ntype = "ESP Easy" elif int(n["type"])==rpieGlobals.NODE_TYPE_ID_ESP_EASYM_STD: ntype = "ESP Easy Mega" elif int(n["type"])==rpieGlobals.NODE_TYPE_ID_ESP_EASY32_STD: ntype = "ESP Easy32" elif int(n["type"])==rpieGlobals.NODE_TYPE_ID_ARDUINO_EASY_STD: ntype = "Arduino Easy" elif int(n["type"])==rpieGlobals.NODE_TYPE_ID_NANO_EASY_STD: ntype = "Nano Easy" elif int(n["type"])==rpieGlobals.NODE_TYPE_ID_RPI_EASY_STD: ntype = "RPI Easy" elif int(n["type"])==rpieGlobals.NODE_TYPE_ID_ATMEGA_EASY_LORA: ntype = "LoRa32u4" webserver.TXBuffer += ntype webserver.TXBuffer += "<TD>"+str(n["mac"]) ldt = n["lastseen"] lstr = "" try: lstr = ldt.strftime('%Y-%m-%d %H:%M:%S') except: lstr = str(ldt) webserver.TXBuffer += "<TD>"+lstr wm = int(n["cap"]) wms = "" if (wm & 1)==1: wms = "SEND " if (wm & 2)==2: wms += "RECEIVE " webserver.TXBuffer += "<TD>"+wms webserver.TXBuffer += "</table><br>" webserver.addSubmitButton("Manage selected node", "submit") webserver.addSubmitButton("Tasks on selected node", "tasks") webserver.addSubmitButton("I2C scan selected node", "i2c") webserver.addSubmitButton("Reboot selected node", "reboot") webserver.addSubmitButton("Set date and time on selected node", "time") webserver.TXBuffer += "<P>" webserver.addSubmitButton("Request all nodes to advertise itself", "search") webserver.TXBuffer += "<P>" webserver.addButton("espnow","Refresh") webserver.TXBuffer += "</form>" elif str(managenode)=="local": # display local settings page webserver.addFormHeader("Serial node management") webserver.TXBuffer += "<form name='manespnow' method='post'><table class='multirow'>" modenum = -1 for i in range(3): commands.doExecuteCommand("serialcommand,espnow,mode",False) time.sleep(0.5) scmdarr = getlastseriallogs(3) if len(scmdarr)>2: if ",mode" in scmdarr[2]: try: modenum = int(scmdarr[1]) break except: modenum = -1 if modenum!=-1: # valid number, process options = ["Gateway","Send only (remote config wont work!)","Receive only","Send&Receive"] optionvalues = [0,1,2,3] webserver.addFormSelector("Working mode","workmode",len(options),options,optionvalues,None,modenum) nodenum = -1 commands.doExecuteCommand("serialcommand,unit",False) time.sleep(1) scmdarr = getlastseriallogs(3) if len(scmdarr)>2: if "unit" in scmdarr[2]: nodenum = scmdarr[1].replace("SERIAL: ","").strip() try: nodenum = int(nodenum) except: nodenum = -1 if nodenum!=-1: webserver.addFormNumericBox("Unit number","nnodenum",nodenum,1,254) dnodenum = -1 commands.doExecuteCommand("serialcommand,espnow,dest",False) time.sleep(1) scmdarr = getlastseriallogs(3) if len(scmdarr)>2: if ",dest" in scmdarr[2]: dnodenum = scmdarr[1].replace("SERIAL: ","").strip() try: dnodenum = int(dnodenum) except: dnodenum = -1 webserver.addFormNumericBox("Destination node number","dnodenum",dnodenum,0,254) sdat = "" commands.doExecuteCommand("serialcommand,espnow,name",False) time.sleep(1) scmdarr = getlastseriallogs(3) if len(scmdarr)>2: if ",name" in scmdarr[2]: sdat = scmdarr[1].replace("SERIAL: ","").strip() webserver.addFormTextBox("Unit name","name",sdat,25) wchan = -1 commands.doExecuteCommand("serialcommand,espnow,chan",False) time.sleep(1) scmdarr = getlastseriallogs(3) if len(scmdarr)>2: if ",chan" in scmdarr[2]: wchan = scmdarr[1].replace("SERIAL: ","").strip() try: wchan = int(wchan) except: wchan = -1 if wchan!=-1: options = [] optionvalues = [] for i in range(1,14): options.append(str(i)) optionvalues.append(i) webserver.addFormSelector("Wifi channel","wchannel",len(options),options,optionvalues,None,wchan) ds = -1 commands.doExecuteCommand("serialcommand,espnow,deepsleep",False) time.sleep(1) scmdarr = getlastseriallogs(3) if len(scmdarr)>2: if ",deep" in scmdarr[2]: ds = scmdarr[1].replace("SERIAL: ","").strip() try: ds = int(ds) except: ds = -1 if ds != -1: webserver.addFormNumericBox("DeepSleep timeout","deepsleep",ds,0,4294) webserver.addUnit("s") webserver.addFormNote("0 means disabled state,1-4294 means deep sleep timout in sec") webserver.addHtml("<input type='hidden' name='nodenum' value='"+str(managenode)+"'>") webserver.addSubmitButton("Save settings", "savelocal") webserver.addButton("espnow","Back") webserver.TXBuffer += "</form>" # print(scmdarr,modenum) elif str(managenode)!="": # display remote settings page webserver.addFormHeader("Node management") # commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,name",False) webserver.TXBuffer += "<form name='manespnow' method='post'><table class='multirow'>" modenum = -1 for i in range(3): commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,mode",False) time.sleep(1) scmdarr = getlastespnowlogs(1) if len(scmdarr)>0: try: modenum = int(scmdarr[0]) break except: modenum = -1 if modenum!=-1: # valid number, process options = ["Gateway","Send only (remote config wont work!)","Receive only","Send&Receive"] optionvalues = [0,1,2,3] webserver.addFormSelector("Working mode","workmode",len(options),options,optionvalues,None,modenum) nodenum = -1 commands.doExecuteCommand("espnowcommand,"+str(managenode)+",unit",False) time.sleep(2) scmdarr = getlastespnowlogs(1) if len(scmdarr)>0: try: nodenum = int(scmdarr[0]) except: nodenum = -1 webserver.addFormNumericBox("Unit number","nnodenum",nodenum,1,254) dnodenum = -1 commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,dest",False) time.sleep(2) scmdarr = getlastespnowlogs(1) if len(scmdarr)>0: try: dnodenum = int(scmdarr[0]) except: dnodenum = -1 webserver.addFormNumericBox("Destination node number","dnodenum",dnodenum,0,254) webserver.addFormNote("If destination is not the same as your UNIT number ("+str(Settings.Settings["Unit"])+") you will NOT get any data from this remote!!!") sdat = "" commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,name",False) time.sleep(3) scmdarr = getlastespnowlogs(1) if len(scmdarr)>0: sdat = scmdarr[0] webserver.addFormTextBox("Unit name","name",sdat,25) wchan = -1 commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,chan",False) time.sleep(2) scmdarr = getlastespnowlogs(1) if len(scmdarr)>0: try: wchan = int(scmdarr[0]) except: wchan = -1 options = [] optionvalues = [] for i in range(1,14): options.append(str(i)) optionvalues.append(i) webserver.addFormSelector("Wifi channel","wchannel",len(options),options,optionvalues,None,wchan) ds = 0 commands.doExecuteCommand("espnowcommand,"+str(managenode)+",espnow,deepsleep",False) time.sleep(2) scmdarr = getlastespnowlogs(1) if len(scmdarr)>0: try: ds = int(scmdarr[0]) except: ds = 0 webserver.addFormNumericBox("DeepSleep timeout","deepsleep",ds,0,4294) webserver.addUnit("s") webserver.addFormNote("0 means disabled state,1-4294 means deep sleep timout in sec") webserver.addHtml("<input type='hidden' name='nodenum' value='"+str(managenode)+"'>") webserver.addSubmitButton("Save settings", "savenode") webserver.addButton("espnow","Back") webserver.TXBuffer += "</form>" # print(str(managenode)) webserver.sendHeadandTail("TmplStd",webserver._TAIL) return webserver.TXBuffer except Exception as e: print(e) return ""