| 
					
				 | 
			
			
				@@ -246,7 +246,7 @@ try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             serLine = serLine.decode('ascii') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            serLine = "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            serLine = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(serLine): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if serLine.find('OK 9') != -1: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -268,204 +268,212 @@ try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 serLineParts = serLine.split(' ') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #addr = serLineParts[2] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #addr = "{0:x}".format(int(serLineParts[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #addr = hex((int(serLineParts[2]))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                addr = int(serLineParts[2]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                addrhex = "{0:x}".format(int(serLineParts[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                lastUpdate = sensors_lastUpdate.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                lastTemp = sensors_lastTemp.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                lastHum = sensors_lastHum.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                currentsensor_name = sensors_id_to_name.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                # extract sensor data received from JeeLink 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if int(serLineParts[3]) >= 128:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    batt_new = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    type = int(serLineParts[3]) - 128 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    batt_new = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    type = int(serLineParts[3]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                temp = (int(serLineParts[4])*256 + int(serLineParts[5]) - 1000)/10.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if int(serLineParts[6]) >= 128:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    batt_low = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    hum = int(serLineParts[6]) - 128 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    batt_low = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    hum = int(serLineParts[6]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if hum > 100:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        hum = 100 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if batt_new == 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_batteryState[addr] = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                elif batt_low == 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_batteryState[addr] = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_batteryState[addr] = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                lastValues_lastIndex = sensors_lastValues_lastIndex.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #print("Len: " + str(len(serLineParts))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if sensors_lastValues_temp.get(addr, None) == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastValues_temp[addr] = [None] * average_value_steps 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(len(serLineParts) == 7): # check correct size of incoming data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if sensors_lastValues_hum.get(addr, None) == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastValues_hum[addr] = [None] * average_value_steps 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                data_okay = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if sensors_lastReceivedValue_temp.get(addr, None) == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    # this is the first time we receive from that sensor in that session 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if verbosemode: print("first received from sensor",str(addr)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastReceivedValue_temp[addr] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastReceivedTime[addr] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    #lastValues_lastIndex = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    lastValue = sensors_lastReceivedValue_temp.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #addr = serLineParts[2] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #addr = "{0:x}".format(int(serLineParts[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #addr = hex((int(serLineParts[2]))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    addr = int(serLineParts[2]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    addrhex = "{0:x}".format(int(serLineParts[2])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    max_off_value = float(config['sensors'].get('max_off_value')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ignore_off_value_timeout = int(config['sensors'].get('ignore_off_value_timeout')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    lastUpdate = sensors_lastUpdate.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    lastTemp = sensors_lastTemp.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    lastHum = sensors_lastHum.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if lastValue != None and ((temp >= (lastValue - max_off_value) and temp <= (lastValue + max_off_value)) or ((int(time.time()) - sensors_lastReceivedTime.get(addr)) > ignore_off_value_timeout)):   # discard off values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        sensors_lastReceivedValue_temp[addr] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        sensors_lastReceivedTime[addr] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #print("Last Value=",lastValue,"currValue=",temp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        data_okay = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    currentsensor_name = sensors_id_to_name.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    # extract sensor data received from JeeLink 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if int(serLineParts[3]) >= 128:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        batt_new = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        type = int(serLineParts[3]) - 128 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if verbosemode: print("skipped sensor reading - Last Value=",lastValue,"currValue=",temp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if data_okay: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if lastValues_lastIndex == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        lastValues_lastIndex = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    elif lastValues_lastIndex == (average_value_steps - 1): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        lastValues_lastIndex = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        batt_new = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        type = int(serLineParts[3]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    temp = (int(serLineParts[4])*256 + int(serLineParts[5]) - 1000)/10.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if int(serLineParts[6]) >= 128:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        batt_low = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        hum = int(serLineParts[6]) - 128 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        lastValues_lastIndex += 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if verbosemode: print("lastValues_lastIndex =", lastValues_lastIndex) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        batt_low = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        hum = int(serLineParts[6]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if hum > 100:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            hum = 100 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastValues_lastIndex[addr] = lastValues_lastIndex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastValues_temp[addr][lastValues_lastIndex] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastValues_hum[addr][lastValues_lastIndex] = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if batt_new == 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_batteryState[addr] = 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    elif batt_low == 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_batteryState[addr] = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_batteryState[addr] = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sensors_lastUpdate[addr] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    lastValues_lastIndex = sensors_lastValues_lastIndex.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if verbosemode: print("sensors_lastValues_temp =", sensors_lastValues_temp[addr]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if sensors_lastValues_temp.get(addr, None) == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastValues_temp[addr] = [None] * average_value_steps 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if currentsensor_name is None:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if batt_new == 1 and not sensors_new_alreadyNotified.get('addr', False): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        notifystr = "NEW sensor with ID " + str(addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        mqttc.publish(mqtt_topic_prefix+"/" + mqtt_subtopic_notify, notifystr, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if sensors_lastValues_hum.get(addr, None) == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastValues_hum[addr] = [None] * average_value_steps 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    data_okay = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if sensors_lastReceivedValue_temp.get(addr, None) == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        # this is the first time we receive from that sensor in that session 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if verbosemode: print("first received from sensor",str(addr)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastReceivedValue_temp[addr] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastReceivedTime[addr] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        #lastValues_lastIndex = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        lastValue = sensors_lastReceivedValue_temp.get(addr, None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if not os.path.exists(log_path+'/new'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            os.makedirs(log_path+'/new') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        max_off_value = float(config['sensors'].get('max_off_value')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ignore_off_value_timeout = int(config['sensors'].get('ignore_off_value_timeout')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if lastValue != None and ((temp >= (lastValue - max_off_value) and temp <= (lastValue + max_off_value)) or ((int(time.time()) - sensors_lastReceivedTime.get(addr)) > ignore_off_value_timeout)):   # discard off values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            sensors_lastReceivedValue_temp[addr] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            sensors_lastReceivedTime[addr] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            #print("Last Value=",lastValue,"currValue=",temp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            data_okay = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if verbosemode: print("skipped sensor reading - Last Value=",lastValue,"currValue=",temp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        fname = log_path + '/new/' + str(addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if not os.path.exists(fname): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                touch(fname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if data_okay: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if lastValues_lastIndex == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            lastValues_lastIndex = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        elif lastValues_lastIndex == (average_value_steps - 1): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            lastValues_lastIndex = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            lastValues_lastIndex += 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if verbosemode: print("lastValues_lastIndex =", lastValues_lastIndex) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastValues_lastIndex[addr] = lastValues_lastIndex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastValues_temp[addr][lastValues_lastIndex] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastValues_hum[addr][lastValues_lastIndex] = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        sensors_lastUpdate[addr] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            f = open(log_path+'/'+logfile_new_sensors, 'a') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            f.write(str(datetime.now())+": "+notifystr+"\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            f.close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            # guat dann hoit ned... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if verbosemode: print("sensors_lastValues_temp =", sensors_lastValues_temp[addr]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if currentsensor_name is None:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if batt_new == 1 and not sensors_new_alreadyNotified.get('addr', False): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            notifystr = "NEW sensor with ID " + str(addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            mqttc.publish(mqtt_topic_prefix+"/" + mqtt_subtopic_notify, notifystr, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if not os.path.exists(log_path+'/new'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                os.makedirs(log_path+'/new') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            fname = log_path + '/new/' + str(addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if not os.path.exists(fname): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    touch(fname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        sensors_new_alreadyNotified[addr] = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if not os.path.exists(log_path+'/unknown'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            os.makedirs(log_path+'/unknown') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        fname = log_path + '/unknown/' + str(addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if not os.path.exists(fname): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                touch(fname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                f = open(log_path+'/'+logfile_new_sensors, 'a') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                f.write(str(datetime.now())+": "+notifystr+"\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                f.close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                # guat dann hoit ned... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            sensors_new_alreadyNotified[addr] = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if not os.path.exists(log_path+'/unknown'): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                os.makedirs(log_path+'/unknown') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            fname = log_path + '/unknown/' + str(addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if not os.path.exists(fname): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    touch(fname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            print("unknown sensor ID " + str(addr)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        print("unknown sensor ID " + str(addr)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    print("addr: " + str(addr) + " = 0x" + str(addrhex) + "   batt_new: " + str(batt_new) + "   type: " + str(type) + "   batt_low: " + str(batt_low) + "   temp: " + str(temp) + "   hum: " + str(hum) + "   Name: " + str(currentsensor_name)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    print() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #if senddata: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    sensors_lastUpdate[str(addr)] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    sensors_lastTemp[str(addr)] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    sensors_lastHum[str(addr)] = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    isAtemp = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    if int(currentsensor_idx) == atemp_sensor_idx: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        atemp1 = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        ahum1 = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        isAtemp = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    elif int(currentsensor_idx) == atemp_sensor_idx_2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        atemp2 = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        ahum2 = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        isAtemp = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    if isAtemp: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        if atemp1 <= atemp2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #            atemp = atemp1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #            ahum = ahum1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #            atemp = atemp2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #            ahum = ahum2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        if atemp < 61 and ahum < 101: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #            if atemp != atemp_last or ahum != ahum_last or ((time.time() - atemphum_lastUpdate) > aTempHumPublishInterval): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #                atemphum_lastUpdate = time.time() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #                atemp_last = atemp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #                ahum_last = ahum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #                mqttc.publish(mqtt_topic_atemp, str(atemp), qos=0, retain=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #                mqttc.publish(mqtt_topic_ahum, str(ahum), qos=0, retain=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #                mqttc.publish(mqtt_topic_atemphum_lastUpdate, strftime("%Y-%m-%d %H:%M:%S", localtime()), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    domoticz_json = "{\"idx\":" + str(currentsensor_idx) + ",\"nvalue\":0,\"svalue\":\"" + str(temp) + ";" + str(hum) + ";1\"}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    #if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    #    print(domoticz_json) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_domoticz_in, domoticz_json, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/temperature", str(temp), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/humidity", str(hum), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/battery", str(batterystate), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/lastUpdate", strftime("%Y-%m-%d %H:%M:%S", localtime()), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/availability", "available", qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    lacrosse_json = "{\"temperature\":" + str(temp) + ", \"humidity\":" + str(hum) + ", \"battery\":\"" + str(batterystate) + "\"}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/json", lacrosse_json, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    tmptext = str(temp) + "° " + str(hum) + "%" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/TempHumText", tmptext, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        print("MQTT published") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        touch("/tmp/jeelink2mqtt_running") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        # guat dann ned... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        if currentsensor_name is None:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #            print("MQTT published") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #            print("MQTT publishing surpressed (interval not expired)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                #    print("\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        print("addr: " + str(addr) + " = 0x" + str(addrhex) + "   batt_new: " + str(batt_new) + "   type: " + str(type) + "   batt_low: " + str(batt_low) + "   temp: " + str(temp) + "   hum: " + str(hum) + "   Name: " + str(currentsensor_name)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        print() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #if senddata: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    sensors_lastUpdate[str(addr)] = int(time.time()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    sensors_lastTemp[str(addr)] = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    sensors_lastHum[str(addr)] = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    isAtemp = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    if int(currentsensor_idx) == atemp_sensor_idx: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        atemp1 = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        ahum1 = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        isAtemp = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    elif int(currentsensor_idx) == atemp_sensor_idx_2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        atemp2 = temp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        ahum2 = hum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        isAtemp = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    if isAtemp: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        if atemp1 <= atemp2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #            atemp = atemp1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #            ahum = ahum1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #            atemp = atemp2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #            ahum = ahum2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        if atemp < 61 and ahum < 101: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #            if atemp != atemp_last or ahum != ahum_last or ((time.time() - atemphum_lastUpdate) > aTempHumPublishInterval): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #                atemphum_lastUpdate = time.time() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #                atemp_last = atemp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #                ahum_last = ahum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #                mqttc.publish(mqtt_topic_atemp, str(atemp), qos=0, retain=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #                mqttc.publish(mqtt_topic_ahum, str(ahum), qos=0, retain=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #                mqttc.publish(mqtt_topic_atemphum_lastUpdate, strftime("%Y-%m-%d %H:%M:%S", localtime()), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    domoticz_json = "{\"idx\":" + str(currentsensor_idx) + ",\"nvalue\":0,\"svalue\":\"" + str(temp) + ";" + str(hum) + ";1\"}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    #if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    #    print(domoticz_json) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_domoticz_in, domoticz_json, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/temperature", str(temp), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/humidity", str(hum), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/battery", str(batterystate), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/lastUpdate", strftime("%Y-%m-%d %H:%M:%S", localtime()), qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/availability", "available", qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    lacrosse_json = "{\"temperature\":" + str(temp) + ", \"humidity\":" + str(hum) + ", \"battery\":\"" + str(batterystate) + "\"}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/json", lacrosse_json, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    tmptext = str(temp) + "° " + str(hum) + "%" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    mqttc.publish(mqtt_topic_prefix+"/"+str(currentsensor_name)+"/TempHumText", tmptext, qos=0, retain=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        print("MQTT published") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        touch("/tmp/jeelink2mqtt_running") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    except: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        # guat dann ned... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        if currentsensor_name is None:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #            print("MQTT published") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #            print("MQTT publishing surpressed (interval not expired)") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #if verbosemode: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    #    print("\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if verbosemode: print("ignored invalid sized data") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # publish on MQTT on set interval 
			 |